diff --git a/YACReaderLibrary/info_comics_view.cpp b/YACReaderLibrary/info_comics_view.cpp index 8b35047f..5bb81772 100644 --- a/YACReaderLibrary/info_comics_view.cpp +++ b/YACReaderLibrary/info_comics_view.cpp @@ -8,7 +8,7 @@ #include "QsLog.h" InfoComicsView::InfoComicsView(QWidget *parent) - :ComicsView(parent) + :ComicsView(parent),_selectionModel(nullptr) { qmlRegisterType("com.yacreader.ComicModel",1,0,"ComicModel"); qmlRegisterType("com.yacreader.ComicDB",1,0,"ComicDB"); @@ -27,6 +27,7 @@ InfoComicsView::InfoComicsView(QWidget *parent) list = rootObject->findChild("list"); connect(flow, SIGNAL(currentCoverChanged(int)), this, SLOT(updateInfoForIndex(int))); + connect(flow, SIGNAL(currentCoverChanged(int)), this, SLOT(setCurrentIndex(int))); QVBoxLayout * l = new QVBoxLayout; l->addWidget(container); @@ -57,6 +58,11 @@ void InfoComicsView::setModel(ComicModel *model) if(model == NULL) return; + if(_selectionModel != nullptr) + delete _selectionModel; + + _selectionModel = new QItemSelectionModel(model); + ComicsView::setModel(model); QQmlContext *ctxt = view->rootContext(); @@ -72,8 +78,8 @@ void InfoComicsView::setModel(ComicModel *model) else ctxt->setContextProperty("backgroundImage", QUrl()); - /*ctxt->setContextProperty("comicsSelection", _selectionModel); - ctxt->setContextProperty("contextMenuHelper",this); + ctxt->setContextProperty("comicsSelection", _selectionModel); + /*ctxt->setContextProperty("contextMenuHelper",this); ctxt->setContextProperty("comicsSelectionHelper", this); ctxt->setContextProperty("comicRatingHelper", this); ctxt->setContextProperty("dummyValue", true); @@ -92,20 +98,41 @@ void InfoComicsView::setModel(ComicModel *model) void InfoComicsView::setCurrentIndex(const QModelIndex &index) { QQmlProperty(list, "currentIndex").write(index.row()); + + _selectionModel->clear(); + _selectionModel->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); +} + +void InfoComicsView::setCurrentIndex(int index) +{ + _selectionModel->clear(); + _selectionModel->select(model->index(index,0), QItemSelectionModel::Select | QItemSelectionModel::Rows); } QModelIndex InfoComicsView::currentIndex() { - int FIXME; + if(!_selectionModel) + return QModelIndex(); - 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(); } QItemSelectionModel *InfoComicsView::selectionModel() { - int FIXME; + QModelIndexList indexes = _selectionModel->selectedRows(); + if(indexes.length()==0) + this->selectIndex(0); - return 0; + return _selectionModel; } void InfoComicsView::scrollTo(const QModelIndex &mi, QAbstractItemView::ScrollHint hint) @@ -136,7 +163,10 @@ void InfoComicsView::enableFilterMode(bool enabled) void InfoComicsView::selectIndex(int index) { - int FIXME; + if(_selectionModel != nullptr && model!=NULL) + { + _selectionModel->select(model->index(index,0),QItemSelectionModel::Select | QItemSelectionModel::Rows); + } } void InfoComicsView::setShowMarks(bool show) @@ -147,5 +177,8 @@ void InfoComicsView::setShowMarks(bool show) void InfoComicsView::selectAll() { - int FIXME; + 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); } diff --git a/YACReaderLibrary/info_comics_view.h b/YACReaderLibrary/info_comics_view.h index 99ee9301..b2a0c2fa 100644 --- a/YACReaderLibrary/info_comics_view.h +++ b/YACReaderLibrary/info_comics_view.h @@ -31,10 +31,15 @@ public slots: void setShowMarks(bool show); void selectAll(); +protected slots: + void setCurrentIndex(int index); + protected: QToolBar * toolbar; QObject *flow; QObject *list; + + QItemSelectionModel * _selectionModel; }; #endif // INFOCOMICSVIEW_H