mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	filter: add (very primitive) filterpresetmodel
Implement a trivial model to provide the filter preset names to the UI. Sadly, for now this features the QWidget/QML column / name dichotomy. However, in this simple case that shouldn't be too much of an issue. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
		
							parent
							
								
									937fdb500b
								
							
						
					
					
						commit
						536fc05dd6
					
				
					 4 changed files with 93 additions and 0 deletions
				
			
		|  | @ -146,6 +146,7 @@ SOURCES += ../../subsurface-mobile-main.cpp \ | ||||||
| 	../../qt-models/models.cpp \ | 	../../qt-models/models.cpp \ | ||||||
| 	../../qt-models/weightsysteminfomodel.cpp \ | 	../../qt-models/weightsysteminfomodel.cpp \ | ||||||
| 	../../qt-models/filterconstraintmodel.cpp \ | 	../../qt-models/filterconstraintmodel.cpp \ | ||||||
|  | 	../../qt-models/filterpresetmodel.cpp \ | ||||||
| 	../../profile-widget/qmlprofile.cpp \ | 	../../profile-widget/qmlprofile.cpp \ | ||||||
| 	../../profile-widget/divecartesianaxis.cpp \ | 	../../profile-widget/divecartesianaxis.cpp \ | ||||||
| 	../../profile-widget/diveeventitem.cpp \ | 	../../profile-widget/diveeventitem.cpp \ | ||||||
|  | @ -297,6 +298,7 @@ HEADERS += \ | ||||||
| 	../../qt-models/models.h \ | 	../../qt-models/models.h \ | ||||||
| 	../../qt-models/weightsysteminfomodel.h \ | 	../../qt-models/weightsysteminfomodel.h \ | ||||||
| 	../../qt-models/filterconstraintmodel.h \ | 	../../qt-models/filterconstraintmodel.h \ | ||||||
|  | 	../../qt-models/filterpresetmodel.h \ | ||||||
| 	../../profile-widget/qmlprofile.h \ | 	../../profile-widget/qmlprofile.h \ | ||||||
| 	../../profile-widget/diveprofileitem.h \ | 	../../profile-widget/diveprofileitem.h \ | ||||||
| 	../../profile-widget/profilewidget2.h \ | 	../../profile-widget/profilewidget2.h \ | ||||||
|  |  | ||||||
|  | @ -21,6 +21,8 @@ set(SUBSURFACE_GENERIC_MODELS_LIB_SRCS | ||||||
| 	divetripmodel.h | 	divetripmodel.h | ||||||
| 	filterconstraintmodel.cpp | 	filterconstraintmodel.cpp | ||||||
| 	filterconstraintmodel.h | 	filterconstraintmodel.h | ||||||
|  | 	filterpresetmodel.cpp | ||||||
|  | 	filterpresetmodel.h | ||||||
| 	maplocationmodel.cpp | 	maplocationmodel.cpp | ||||||
| 	maplocationmodel.h | 	maplocationmodel.h | ||||||
| 	models.cpp | 	models.cpp | ||||||
|  |  | ||||||
							
								
								
									
										59
									
								
								qt-models/filterpresetmodel.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								qt-models/filterpresetmodel.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0
 | ||||||
|  | #include "filterpresetmodel.h" | ||||||
|  | #include "core/filterconstraint.h" | ||||||
|  | #include "core/filterpreset.h" | ||||||
|  | #include "core/qthelper.h" | ||||||
|  | #include "core/subsurface-qt/divelistnotifier.h" | ||||||
|  | 
 | ||||||
|  | FilterPresetModel::FilterPresetModel() | ||||||
|  | { | ||||||
|  | 	setHeaderDataStrings(QStringList{ "", tr("Name") }); | ||||||
|  | 	connect(&diveListNotifier, &DiveListNotifier::dataReset, this, &FilterPresetModel::reset); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | FilterPresetModel::~FilterPresetModel() | ||||||
|  | { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | FilterPresetModel *FilterPresetModel::instance() | ||||||
|  | { | ||||||
|  | 	static FilterPresetModel self; | ||||||
|  | 	return &self; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | QVariant FilterPresetModel::data(const QModelIndex &index, int role) const | ||||||
|  | { | ||||||
|  | 	if (!index.isValid() || index.row() >= filter_presets_count()) | ||||||
|  | 		return QVariant(); | ||||||
|  | 
 | ||||||
|  | 	switch (role) { | ||||||
|  | 	case Qt::DisplayRole: | ||||||
|  | 		if (index.column() == NAME) | ||||||
|  | 			return filter_preset_name_qstring(index.row()); | ||||||
|  | 		break; | ||||||
|  | 	case Qt::DecorationRole: | ||||||
|  | 		if (index.column() == REMOVE) | ||||||
|  | 			return trashIcon(); | ||||||
|  | 		break; | ||||||
|  | 	case Qt::SizeHintRole: | ||||||
|  | 		if (index.column() == REMOVE) | ||||||
|  | 			return trashIcon().size(); | ||||||
|  | 		break; | ||||||
|  | 	case Qt::ToolTipRole: | ||||||
|  | 		if (index.column() == REMOVE) | ||||||
|  | 			return tr("Clicking here will remove this filter set."); | ||||||
|  | 		break; | ||||||
|  | 	} | ||||||
|  | 	return QVariant(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int FilterPresetModel::rowCount(const QModelIndex &parent) const | ||||||
|  | { | ||||||
|  | 	return filter_presets_count(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void FilterPresetModel::reset() | ||||||
|  | { | ||||||
|  | 	beginResetModel(); | ||||||
|  | 	endResetModel(); | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								qt-models/filterpresetmodel.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								qt-models/filterpresetmodel.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | ||||||
|  | // SPDX-License-Identifier: GPL-2.0
 | ||||||
|  | #ifndef FILTERPRESETMODEL_H | ||||||
|  | #define FILTERPRESETMODEL_H | ||||||
|  | 
 | ||||||
|  | #include "cleanertablemodel.h" | ||||||
|  | #include "core/filterpreset.h" | ||||||
|  | 
 | ||||||
|  | class FilterPresetModel : public CleanerTableModel { | ||||||
|  | 	Q_OBJECT | ||||||
|  | public: | ||||||
|  | 	// For QML we will have to define roles
 | ||||||
|  | 	enum Column { | ||||||
|  | 		REMOVE, | ||||||
|  | 		NAME | ||||||
|  | 	}; | ||||||
|  | private | ||||||
|  | slots: | ||||||
|  | 	void reset(); | ||||||
|  | public: | ||||||
|  | 	// there is one global filter preset list, therefore this model is a singleton
 | ||||||
|  | 	static FilterPresetModel *instance(); | ||||||
|  | private: | ||||||
|  | 	FilterPresetModel(); | ||||||
|  | 	~FilterPresetModel(); | ||||||
|  | 	QVariant data(const QModelIndex &index, int role) const override; | ||||||
|  | 	int rowCount(const QModelIndex &parent) const override; | ||||||
|  | 	std::vector<filter_constraint> constraints; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue