diff --git a/YACReaderLibrary/grid_comics_view.cpp b/YACReaderLibrary/grid_comics_view.cpp index b1358d43..cc6b30cf 100644 --- a/YACReaderLibrary/grid_comics_view.cpp +++ b/YACReaderLibrary/grid_comics_view.cpp @@ -102,6 +102,7 @@ void GridComicsView::setModel(ComicModel *model) void GridComicsView::setCurrentIndex(const QModelIndex &index) { QLOG_INFO() << "setCurrentIndex"; + _selectionModel->clear(); _selectionModel->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); view->rootContext()->setContextProperty("dummyValue", true); } @@ -206,7 +207,24 @@ void GridComicsView::selectIndex(int index) { QLOG_INFO() << "selectIndex" << index; if(_selectionModel != NULL && model!=NULL) + { _selectionModel->select(model->index(index,0),QItemSelectionModel::Select | QItemSelectionModel::Rows); + view->rootContext()->setContextProperty("dummyValue", true); + } +} + +void GridComicsView::setCurrentIndex(int index) +{ + setCurrentIndex(model->index(index,0)); +} + +void GridComicsView::deselectIndex(int index) +{ + if(_selectionModel != NULL && model!=NULL) + { + _selectionModel->select(model->index(index,0),QItemSelectionModel::Deselect | QItemSelectionModel::Rows); + view->rootContext()->setContextProperty("dummyValue", true); + } } bool GridComicsView::isSelectedIndex(int index) @@ -237,6 +255,27 @@ void GridComicsView::selectedItem(int index) emit doubleClicked(model->index(index,0)); } +int GridComicsView::numItemsSelected() +{ + if(_selectionModel != NULL) + { + return _selectionModel->selectedRows().length(); + } + + return 0; +} + +int GridComicsView::lastSelectedIndex() +{ + if(_selectionModel != NULL) + { + QLOG_INFO() << "last selected index " << _selectionModel->selectedRows().last().row(); + return _selectionModel->selectedRows().last().row(); + } + + return -1; +} + void GridComicsView::setShowMarks(bool show) { QLOG_INFO() << "setShowMarks"; diff --git a/YACReaderLibrary/grid_comics_view.h b/YACReaderLibrary/grid_comics_view.h index 9e9de460..2153deab 100644 --- a/YACReaderLibrary/grid_comics_view.h +++ b/YACReaderLibrary/grid_comics_view.h @@ -38,10 +38,14 @@ signals: public slots: //selection helper void selectIndex(int index); + void setCurrentIndex(int index); + void deselectIndex(int index); bool isSelectedIndex(int index); void clear(); //double clicked item void selectedItem(int index); + int numItemsSelected(); + int lastSelectedIndex(); //ComicsView void setShowMarks(bool show); diff --git a/YACReaderLibrary/qml/GridComicsView.qml b/YACReaderLibrary/qml/GridComicsView.qml index 7e451d6a..74e9176d 100644 --- a/YACReaderLibrary/qml/GridComicsView.qml +++ b/YACReaderLibrary/qml/GridComicsView.qml @@ -12,7 +12,7 @@ Rectangle { function selectAll(from,to) { - for(var i = from;i ci) + { selectAll(ci,index); + grid.currentIndex = index; + } mouse.accepted = true; @@ -104,8 +104,7 @@ Rectangle { if(!comicsSelectionHelper.isSelectedIndex(index)) { - comicsSelectionHelper.clear(); - comicsSelectionHelper.selectIndex(index) + comicsSelectionHelper.setCurrentIndex(index) grid.currentIndex = index; } @@ -114,8 +113,23 @@ Rectangle { } else { - comicsSelectionHelper.selectIndex(index) - grid.currentIndex = index; + if(mouse.modifiers & Qt.ControlModifier) + { + if(comicsSelectionHelper.isSelectedIndex(index)) + { + if(comicsSelectionHelper.numItemsSelected()>1) + { + comicsSelectionHelper.deselectIndex(index); + if(grid.currentIndex === index) + grid.currentIndex = comicsSelectionHelper.lastSelectedIndex(); + } + } + else + { + comicsSelectionHelper.selectIndex(index); + grid.currentIndex = index; + } + } } } @@ -123,7 +137,7 @@ Rectangle { onReleased: { if(mouse.button != Qt.RightButton && !(mouse.modifiers & Qt.ControlModifier || mouse.modifiers & Qt.ShiftModifier)) { - comicsSelectionHelper.clear(); + comicsSelectionHelper.setCurrentIndex(index) grid.currentIndex = index; } } @@ -299,7 +313,7 @@ Rectangle { //var ci = grid.currentIndex; grid.currentIndex = -1 comicsSelectionHelper.clear(); - comicsSelectionHelper.selectIndex(ci); + comicsSelectionHelper.setCurrentIndex(ci); grid.currentIndex = ci; } //}