mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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:
parent
51959d0feb
commit
c6bd2a7ffb
3 changed files with 63 additions and 3 deletions
|
@ -6,9 +6,7 @@
|
||||||
#include "core/qthelper.h"
|
#include "core/qthelper.h"
|
||||||
#include "core/divelist.h"
|
#include "core/divelist.h"
|
||||||
#include "core/settings/qPrefUnit.h"
|
#include "core/settings/qPrefUnit.h"
|
||||||
#include "core/filterpreset.h"
|
#include "qt-models/filterpresetmodel.h"
|
||||||
|
|
||||||
#include <QDoubleSpinBox>
|
|
||||||
|
|
||||||
FilterWidget2::FilterWidget2(QWidget* parent) :
|
FilterWidget2::FilterWidget2(QWidget* parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
|
@ -27,6 +25,8 @@ FilterWidget2::FilterWidget2(QWidget* parent) :
|
||||||
ui.addConstraintButton->setPopupMode(QToolButton::InstantPopup);
|
ui.addConstraintButton->setPopupMode(QToolButton::InstantPopup);
|
||||||
ui.constraintTable->setColumnStretch(4, 1); // The fifth column is were the actual constraint resides - stretch that.
|
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.clear, &QToolButton::clicked, this, &FilterWidget2::clearFilter);
|
||||||
connect(ui.close, &QToolButton::clicked, this, &FilterWidget2::closeFilter);
|
connect(ui.close, &QToolButton::clicked, this, &FilterWidget2::closeFilter);
|
||||||
connect(ui.fullText, &QLineEdit::textChanged, this, &FilterWidget2::updateFilter);
|
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::dataChanged, this, &FilterWidget2::constraintChanged);
|
||||||
connect(&constraintModel, &FilterConstraintModel::modelReset, this, &FilterWidget2::constraintsReset);
|
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();
|
clearFilter();
|
||||||
|
updatePresetMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterWidget2::~FilterWidget2()
|
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)
|
void FilterWidget2::constraintAdded(const QModelIndex &parent, int first, int last)
|
||||||
{
|
{
|
||||||
if (parent.isValid() || last < first)
|
if (parent.isValid() || last < first)
|
||||||
|
@ -111,6 +146,13 @@ FilterData FilterWidget2::createFilterData() const
|
||||||
return filterData;
|
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()
|
void FilterWidget2::updateFilter()
|
||||||
{
|
{
|
||||||
if (ignoreSignal)
|
if (ignoreSignal)
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "qt-models/filterconstraintmodel.h"
|
#include "qt-models/filterconstraintmodel.h"
|
||||||
|
|
||||||
class FilterConstraintWidget;
|
class FilterConstraintWidget;
|
||||||
|
class QMenu;
|
||||||
|
|
||||||
class FilterWidget2 : public QWidget {
|
class FilterWidget2 : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -33,6 +34,7 @@ private slots:
|
||||||
void constraintRemoved(const QModelIndex &parent, int first, int last);
|
void constraintRemoved(const QModelIndex &parent, int first, int last);
|
||||||
void constraintChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles);
|
void constraintChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles);
|
||||||
void constraintsReset();
|
void constraintsReset();
|
||||||
|
void updatePresetMenu();
|
||||||
void on_addSetButton_clicked();
|
void on_addSetButton_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -43,6 +45,9 @@ private:
|
||||||
void addConstraint(filter_constraint_type type);
|
void addConstraint(filter_constraint_type type);
|
||||||
std::vector<std::unique_ptr<FilterConstraintWidget>> constraintWidgets;
|
std::vector<std::unique_ptr<FilterConstraintWidget>> constraintWidgets;
|
||||||
FilterData createFilterData() const;
|
FilterData createFilterData() const;
|
||||||
|
void setFilterData(const FilterData &filterData);
|
||||||
|
void loadPreset(int index);
|
||||||
|
std::unique_ptr<QMenu> loadFilterPresetMenu;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -90,6 +90,19 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</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>
|
<item>
|
||||||
<spacer name="titleLineSpacer2">
|
<spacer name="titleLineSpacer2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
|
Loading…
Add table
Reference in a new issue