filter: connect load filter preset functionality to ui

Add a button to the filter preset widget that allows the
user to load a previously saved filter preset.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2020-05-28 07:31:51 +02:00 committed by Dirk Hohndel
parent 51959d0feb
commit c6bd2a7ffb
3 changed files with 63 additions and 3 deletions

View file

@ -6,9 +6,7 @@
#include "core/qthelper.h"
#include "core/divelist.h"
#include "core/settings/qPrefUnit.h"
#include "core/filterpreset.h"
#include <QDoubleSpinBox>
#include "qt-models/filterpresetmodel.h"
FilterWidget2::FilterWidget2(QWidget* parent) :
QWidget(parent),
@ -27,6 +25,8 @@ FilterWidget2::FilterWidget2(QWidget* parent) :
ui.addConstraintButton->setPopupMode(QToolButton::InstantPopup);
ui.constraintTable->setColumnStretch(4, 1); // The fifth column is were the actual constraint resides - stretch that.
ui.loadSetButton->setPopupMode(QToolButton::InstantPopup);
connect(ui.clear, &QToolButton::clicked, this, &FilterWidget2::clearFilter);
connect(ui.close, &QToolButton::clicked, this, &FilterWidget2::closeFilter);
connect(ui.fullText, &QLineEdit::textChanged, this, &FilterWidget2::updateFilter);
@ -37,13 +37,48 @@ FilterWidget2::FilterWidget2(QWidget* parent) :
connect(&constraintModel, &FilterConstraintModel::dataChanged, this, &FilterWidget2::constraintChanged);
connect(&constraintModel, &FilterConstraintModel::modelReset, this, &FilterWidget2::constraintsReset);
// QDataWidgetMapper might be the more civilized way to keep the menus up to data.
// For now, let's be blunt and fully reload the context menu if the presets list changes.
// This gives us more flexibility in populating the menus.
QAbstractItemModel *presetModel = FilterPresetModel::instance();
connect(presetModel, &QAbstractItemModel::rowsInserted, this, &FilterWidget2::updatePresetMenu);
connect(presetModel, &QAbstractItemModel::rowsRemoved, this, &FilterWidget2::updatePresetMenu);
connect(presetModel, &QAbstractItemModel::dataChanged, this, &FilterWidget2::updatePresetMenu);
connect(presetModel, &QAbstractItemModel::modelReset, this, &FilterWidget2::updatePresetMenu);
clearFilter();
updatePresetMenu();
}
FilterWidget2::~FilterWidget2()
{
}
void FilterWidget2::updatePresetMenu()
{
loadFilterPresetMenu.reset(new QMenu);
QAbstractItemModel *model = FilterPresetModel::instance();
int count = model->rowCount(QModelIndex());
if (count == 0) {
ui.loadSetButton->setEnabled(false);
return;
}
ui.loadSetButton->setEnabled(true);
for (int i = 0; i < count; ++i) {
QModelIndex idx = model->index(i, 0);
QString name = model->data(idx, Qt::DisplayRole).value<QString>();
loadFilterPresetMenu->addAction(name, [this,i]() { loadPreset(i); });
}
ui.loadSetButton->setMenu(loadFilterPresetMenu.get());
}
void FilterWidget2::loadPreset(int index)
{
FilterData filter = filter_preset_get(index);
setFilterData(filter);
updateFilter();
}
void FilterWidget2::constraintAdded(const QModelIndex &parent, int first, int last)
{
if (parent.isValid() || last < first)
@ -111,6 +146,13 @@ FilterData FilterWidget2::createFilterData() const
return filterData;
}
void FilterWidget2::setFilterData(const FilterData &filterData)
{
ui.fulltextStringMode->setCurrentIndex((int)filterData.fulltextStringMode);
ui.fullText->setText(filterData.fullText.originalQuery);
constraintModel.reload(filterData.constraints);
}
void FilterWidget2::updateFilter()
{
if (ignoreSignal)

View file

@ -12,6 +12,7 @@
#include "qt-models/filterconstraintmodel.h"
class FilterConstraintWidget;
class QMenu;
class FilterWidget2 : public QWidget {
Q_OBJECT
@ -33,6 +34,7 @@ private slots:
void constraintRemoved(const QModelIndex &parent, int first, int last);
void constraintChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles);
void constraintsReset();
void updatePresetMenu();
void on_addSetButton_clicked();
private:
@ -43,6 +45,9 @@ private:
void addConstraint(filter_constraint_type type);
std::vector<std::unique_ptr<FilterConstraintWidget>> constraintWidgets;
FilterData createFilterData() const;
void setFilterData(const FilterData &filterData);
void loadPreset(int index);
std::unique_ptr<QMenu> loadFilterPresetMenu;
};
#endif

View file

@ -90,6 +90,19 @@
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="loadSetButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Load set</string>
</property>
</widget>
</item>
<item>
<spacer name="titleLineSpacer2">
<property name="orientation">