Improve file selection in file system widget

This commit is contained in:
2022-06-03 10:51:51 +02:00
parent eb417010c3
commit 032f5b0577
4 changed files with 38 additions and 26 deletions
+4 -3
View File
@@ -17,7 +17,7 @@ FilesystemWidget::FilesystemWidget(QAbstractItemModel *model, QWidget *parent) :
setLayout(layout); 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) void FilesystemWidget::setDir(const QString &dir)
@@ -34,9 +34,10 @@ void FilesystemWidget::selectFile(int row)
m_listView->scrollTo(index); 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) Filetree::Filetree(QWidget *parent) : QTreeView(parent)
+1 -1
View File
@@ -16,7 +16,7 @@ public:
void setDir(const QString &dir); void setDir(const QString &dir);
private slots: private slots:
void selectFile(int row); void selectFile(int row);
void fileClicked(const QModelIndex &index); void fileClicked(const QModelIndex &index, const QModelIndex &);
signals: signals:
void fileSelected(int row); void fileSelected(int row);
}; };
+31 -22
View File
@@ -210,30 +210,38 @@ void ImageRingList::loadFile(int row)
{ {
if(row < m_images.size()) if(row < m_images.size())
{ {
m_firstImage = m_currImage = m_lastImage = m_images.begin()+row; int diff = m_currImage != m_images.end() ? row - (m_currImage - m_images.begin()) : -100;
if(m_images.empty()) if(diff == 1)
return; increment();
else if(diff == -1)
(*m_currImage)->load(); decrement();
else
m_width = DEFAULT_WIDTH<m_images.size()/2 ? DEFAULT_WIDTH : m_images.size()/2;
if(m_liveMode)
m_width = 0;
for(int i=0; i<m_width; i++)
{ {
m_firstImage = decrement(m_firstImage); m_firstImage = m_currImage = m_lastImage = m_images.begin()+row;
(*m_firstImage)->load(); if(m_images.empty())
m_lastImage = increment(m_lastImage); return;
(*m_lastImage)->load();
} (*m_currImage)->load();
if(m_lastImage != m_firstImage)
{ m_width = DEFAULT_WIDTH<m_images.size()/2 ? DEFAULT_WIDTH : m_images.size()/2;
QList<ImagePtr>::iterator iter = increment(m_lastImage); if(m_liveMode)
while(m_firstImage != iter) m_width = 0;
for(int i=0; i<m_width; i++)
{ {
(*iter)->release(); m_firstImage = decrement(m_firstImage);
iter = increment(iter); (*m_firstImage)->load();
m_lastImage = increment(m_lastImage);
(*m_lastImage)->load();
}
if(m_lastImage != m_firstImage)
{
QList<ImagePtr>::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 &currentFile
index = 0; index = 0;
endResetModel(); endResetModel();
m_currImage = m_images.end();
loadFile(index); loadFile(index);
} }
+2
View File
@@ -216,9 +216,11 @@ void MainWindow::keyPressEvent(QKeyEvent *event)
switch (event->key()) switch (event->key())
{ {
case Qt::Key_Left: case Qt::Key_Left:
case Qt::Key_Up:
m_ringList->decrement(); m_ringList->decrement();
break; break;
case Qt::Key_Right: case Qt::Key_Right:
case Qt::Key_Down:
m_ringList->increment(); m_ringList->increment();
break; break;
default: default: