From 032f5b0577d48a4c1b632409f1dda6febdd24e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Fri, 3 Jun 2022 10:51:51 +0200 Subject: [PATCH] Improve file selection in file system widget --- filesystemwidget.cpp | 7 +++--- filesystemwidget.h | 2 +- imageringlist.cpp | 53 ++++++++++++++++++++++++++------------------ mainwindow.cpp | 2 ++ 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 5f39673..d042e95 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -17,7 +17,7 @@ FilesystemWidget::FilesystemWidget(QAbstractItemModel *model, QWidget *parent) : setLayout(layout); - connect(m_listView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(fileClicked(QModelIndex))); + connect(m_listView->selectionModel(), &QItemSelectionModel::currentChanged, this, &FilesystemWidget::fileClicked); } void FilesystemWidget::setDir(const QString &dir) @@ -34,9 +34,10 @@ void FilesystemWidget::selectFile(int row) m_listView->scrollTo(index); } -void FilesystemWidget::fileClicked(const QModelIndex &index) +void FilesystemWidget::fileClicked(const QModelIndex &index, const QModelIndex &) { - emit fileSelected(index.row()); + if(index.isValid()) + emit fileSelected(index.row()); } Filetree::Filetree(QWidget *parent) : QTreeView(parent) diff --git a/filesystemwidget.h b/filesystemwidget.h index 5053265..69aeb92 100644 --- a/filesystemwidget.h +++ b/filesystemwidget.h @@ -16,7 +16,7 @@ public: void setDir(const QString &dir); private slots: void selectFile(int row); - void fileClicked(const QModelIndex &index); + void fileClicked(const QModelIndex &index, const QModelIndex &); signals: void fileSelected(int row); }; diff --git a/imageringlist.cpp b/imageringlist.cpp index e0e8372..f13f143 100644 --- a/imageringlist.cpp +++ b/imageringlist.cpp @@ -210,30 +210,38 @@ void ImageRingList::loadFile(int row) { if(row < m_images.size()) { - m_firstImage = m_currImage = m_lastImage = m_images.begin()+row; - if(m_images.empty()) - return; - - (*m_currImage)->load(); - - m_width = DEFAULT_WIDTHload(); - m_lastImage = increment(m_lastImage); - (*m_lastImage)->load(); - } - if(m_lastImage != m_firstImage) - { - QList::iterator iter = increment(m_lastImage); - while(m_firstImage != iter) + m_firstImage = m_currImage = m_lastImage = m_images.begin()+row; + if(m_images.empty()) + return; + + (*m_currImage)->load(); + + m_width = DEFAULT_WIDTHrelease(); - iter = increment(iter); + m_firstImage = decrement(m_firstImage); + (*m_firstImage)->load(); + m_lastImage = increment(m_lastImage); + (*m_lastImage)->load(); + } + if(m_lastImage != m_firstImage) + { + QList::iterator iter = increment(m_lastImage); + while(m_firstImage != iter) + { + (*iter)->release(); + iter = increment(iter); + } } } } @@ -333,6 +341,7 @@ void ImageRingList::setFiles(const QStringList files, const QString ¤tFile index = 0; endResetModel(); + m_currImage = m_images.end(); loadFile(index); } diff --git a/mainwindow.cpp b/mainwindow.cpp index 2600b9a..9bb744c 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -216,9 +216,11 @@ void MainWindow::keyPressEvent(QKeyEvent *event) switch (event->key()) { case Qt::Key_Left: + case Qt::Key_Up: m_ringList->decrement(); break; case Qt::Key_Right: + case Qt::Key_Down: m_ringList->increment(); break; default: