diff --git a/YACReaderLibrary/yacreader_comics_selection_helper.cpp b/YACReaderLibrary/yacreader_comics_selection_helper.cpp new file mode 100644 index 00000000..14798c0c --- /dev/null +++ b/YACReaderLibrary/yacreader_comics_selection_helper.cpp @@ -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 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; +} diff --git a/YACReaderLibrary/yacreader_comics_selection_helper.h b/YACReaderLibrary/yacreader_comics_selection_helper.h new file mode 100644 index 00000000..b33c63ee --- /dev/null +++ b/YACReaderLibrary/yacreader_comics_selection_helper.h @@ -0,0 +1,41 @@ +#ifndef YACREADERCOMICSSELECTIONHELPER_H +#define YACREADERCOMICSSELECTIONHELPER_H + +#include +#include + +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