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/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) | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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"> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue