mirror of
				https://github.com/YACReader/yacreader
				synced 2025-10-31 16:25:15 -04:00 
			
		
		
		
	Added a new class for dealing with comics selection in comics views.
This commit is contained in:
		
							
								
								
									
										127
									
								
								YACReaderLibrary/yacreader_comics_selection_helper.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										127
									
								
								YACReaderLibrary/yacreader_comics_selection_helper.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,127 @@ | ||||
| #include "yacreader_comics_selection_helper.h" | ||||
|  | ||||
| #include "comic_model.h" | ||||
|  | ||||
| YACReaderComicsSelectionHelper::YACReaderComicsSelectionHelper(QObject *parent) : QObject(parent), _selectionModel(nullptr) | ||||
| { | ||||
|  | ||||
| } | ||||
|  | ||||
| void YACReaderComicsSelectionHelper::setModel(ComicModel *model) | ||||
| { | ||||
|     if(model == NULL) | ||||
|         return; | ||||
|  | ||||
|     this->model = model; | ||||
|  | ||||
|     if(_selectionModel != nullptr) | ||||
|         delete _selectionModel; | ||||
|  | ||||
|     _selectionModel = new QItemSelectionModel(model); | ||||
| } | ||||
|  | ||||
| void YACReaderComicsSelectionHelper::selectIndex(int index) | ||||
| { | ||||
|     if(_selectionModel != nullptr && model!=NULL) | ||||
|     { | ||||
|         _selectionModel->select(model->index(index,0),QItemSelectionModel::Select | QItemSelectionModel::Rows); | ||||
|  | ||||
|         emit selectionChanged(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| void YACReaderComicsSelectionHelper::deselectIndex(int index) | ||||
| { | ||||
|     if(_selectionModel != nullptr && model!=NULL) | ||||
|     { | ||||
|         _selectionModel->select(model->index(index,0),QItemSelectionModel::Deselect | QItemSelectionModel::Rows); | ||||
|  | ||||
|         emit selectionChanged(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| bool YACReaderComicsSelectionHelper::isSelectedIndex(int index) const | ||||
| { | ||||
|     if(_selectionModel != nullptr && model!=NULL) | ||||
|     { | ||||
|         QModelIndex mi = model->index(index,0); | ||||
|         return _selectionModel->isSelected(mi); | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
|  | ||||
| void YACReaderComicsSelectionHelper::clear() | ||||
| { | ||||
|     if(_selectionModel != nullptr) | ||||
|     { | ||||
|         _selectionModel->clear(); | ||||
|  | ||||
|         emit selectionChanged(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| QModelIndex YACReaderComicsSelectionHelper::currentIndex() | ||||
| { | ||||
|     if(!_selectionModel) | ||||
|         return QModelIndex(); | ||||
|  | ||||
|     QModelIndexList indexes = _selectionModel->selectedRows(); | ||||
|     if(indexes.length()>0) | ||||
|         return indexes[0]; | ||||
|  | ||||
|     this->selectIndex(0); | ||||
|     indexes = _selectionModel->selectedRows(); | ||||
|     if(indexes.length()>0) | ||||
|         return indexes[0]; | ||||
|     else | ||||
|         return QModelIndex(); | ||||
| } | ||||
|  | ||||
| void YACReaderComicsSelectionHelper::selectAll() | ||||
| { | ||||
|     QModelIndex top = model->index(0, 0); | ||||
|     QModelIndex bottom = model->index(model->rowCount()-1, 0); | ||||
|     QItemSelection selection(top, bottom); | ||||
|     _selectionModel->select(selection, QItemSelectionModel::Select | QItemSelectionModel::Rows); | ||||
|  | ||||
|     emit selectionChanged(); | ||||
| } | ||||
|  | ||||
| QModelIndexList YACReaderComicsSelectionHelper::selectedRows(int column) const | ||||
| { | ||||
|     return _selectionModel->selectedRows(column); | ||||
| } | ||||
|  | ||||
| QList<QModelIndex> YACReaderComicsSelectionHelper::selectedIndexes() const | ||||
| { | ||||
|     return _selectionModel->selectedIndexes(); | ||||
| } | ||||
|  | ||||
| int YACReaderComicsSelectionHelper::numItemsSelected() const | ||||
| { | ||||
|     if(_selectionModel != nullptr) | ||||
|     { | ||||
|         return _selectionModel->selectedRows().length(); | ||||
|     } | ||||
|  | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| int YACReaderComicsSelectionHelper::lastSelectedIndex() const | ||||
| { | ||||
|     if(_selectionModel != nullptr) | ||||
|     { | ||||
|         return _selectionModel->selectedRows().last().row(); | ||||
|     } | ||||
|  | ||||
|     return -1; | ||||
| } | ||||
|  | ||||
| QItemSelectionModel *YACReaderComicsSelectionHelper::selectionModel() | ||||
| { | ||||
|     QModelIndexList indexes = _selectionModel->selectedRows(); | ||||
|     if(indexes.length()==0) | ||||
|         this->selectIndex(0); | ||||
|  | ||||
|     return _selectionModel; | ||||
| } | ||||
							
								
								
									
										41
									
								
								YACReaderLibrary/yacreader_comics_selection_helper.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								YACReaderLibrary/yacreader_comics_selection_helper.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| #ifndef YACREADERCOMICSSELECTIONHELPER_H | ||||
| #define YACREADERCOMICSSELECTIONHELPER_H | ||||
|  | ||||
| #include <QObject> | ||||
| #include <QtWidgets> | ||||
|  | ||||
| class ComicModel; | ||||
|  | ||||
| class YACReaderComicsSelectionHelper : public QObject | ||||
| { | ||||
|     Q_OBJECT | ||||
| public: | ||||
|     explicit YACReaderComicsSelectionHelper(QObject *parent = 0); | ||||
|  | ||||
|     void setModel(ComicModel *model); | ||||
|  | ||||
|     Q_INVOKABLE void selectIndex(int index); | ||||
|     Q_INVOKABLE void deselectIndex(int index); | ||||
|     Q_INVOKABLE bool isSelectedIndex(int index) const; | ||||
|     Q_INVOKABLE void clear(); | ||||
|     Q_INVOKABLE int numItemsSelected() const; | ||||
|     Q_INVOKABLE int lastSelectedIndex() const; | ||||
|     Q_INVOKABLE QModelIndex currentIndex(); | ||||
|     Q_INVOKABLE void selectAll(); | ||||
|     Q_INVOKABLE QModelIndexList selectedIndexes() const; | ||||
|     Q_INVOKABLE QModelIndexList selectedRows(int column = 0) const; | ||||
|  | ||||
|     QItemSelectionModel * selectionModel(); | ||||
|  | ||||
| signals: | ||||
|     void selectionChanged(); | ||||
|  | ||||
| public slots: | ||||
|  | ||||
| protected: | ||||
|     QItemSelectionModel * _selectionModel; | ||||
|  | ||||
|     ComicModel * model; | ||||
| }; | ||||
|  | ||||
| #endif // YACREADERCOMICSSELECTIONHELPER_H | ||||
		Reference in New Issue
	
	Block a user