diff options
author | Arno <am@disconnect.de> | 2013-03-22 04:14:56 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2013-03-22 04:14:56 +0100 |
commit | db95f01cdb220842e031030df86ee56724e72f27 (patch) | |
tree | c5b4b959865fa3e99567e7f369d1e3769978187b | |
parent | f72ed32feae2f3397dc8d0828e6b33584c99fb3f (diff) | |
download | SheMov-db95f01cdb220842e031030df86ee56724e72f27.tar.gz SheMov-db95f01cdb220842e031030df86ee56724e72f27.tar.bz2 SheMov-db95f01cdb220842e031030df86ee56724e72f27.zip |
Remember selections on FileModel reset
Since can reset the FileView through a time, remember the selections on
reset and restore them after. The Timer is stopped when an item is being
edited.
-rw-r--r-- | filesystemwidget.cpp | 10 | ||||
-rw-r--r-- | fileview.cpp | 26 | ||||
-rw-r--r-- | fileview.h | 8 | ||||
-rw-r--r-- | smdirmodel.h | 2 |
4 files changed, 43 insertions, 3 deletions
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 5f462e8..28822fd 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -23,6 +23,7 @@ #include <QClipboard> #include <QMimeData> #include <QUrl> +#include <QTimer> #include "filesystemwidget.h" #include "filesystemdirproxy.h" @@ -65,16 +66,20 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboar mFileProxy = new FilesystemFileProxy; mFileProxy->setSourceModel(mFileModel); + mFileView->setModel(mFileProxy); mFileView->setSortingEnabled(true); mFileView->sortByColumn(0, Qt::AscendingOrder); mFileView->setItemsExpandable(false); - mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); - mFileView->setEditTriggers(QAbstractItemView::NoEditTriggers); + mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); + mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); + mFileView->setAlternatingRowColors(true); mFileView->setColumnHidden(static_cast<int>(SmDirModel::FullPath), true); mFileProxy->setDynamicSortFilter(true); connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), mFileView, SLOT(selectedFilesChanged())); + connect(mFileModel, SIGNAL(modelAboutToBeReset()), mFileView, SLOT(saveSelection())); + connect(mFileModel, SIGNAL(modelReset()), mFileView, SLOT(restoreSelection())); mPicViewer = SmGlobals::instance()->pictureViewer(); @@ -281,6 +286,7 @@ void FilesystemWidget::fromClipboard(){ } void FilesystemWidget::renameFile(){ + mFileModel->refresTimer()->stop(); QModelIndex curIdx = mFileView->currentIndex(); if(curIdx.data().toString() == ".."){ return; diff --git a/fileview.cpp b/fileview.cpp index 0f0fa28..b5766ca 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -25,6 +25,7 @@ #include <QSortFilterProxyModel> #include <QtWidgets/QInputDialog> #include <QPalette> +#include <QTimer> #include "fileview.h" #include "hoverwindow.h" @@ -43,6 +44,12 @@ FileView::FileView(QWidget *parent) : QTreeView(parent), mDeleteA(0) { SmGlobals::instance()->treeWidgets().append(this); } +void FileView::setModel(QAbstractItemModel *model){ + mProxy = qobject_cast<FilesystemFileProxy*>(model); + mModel = qobject_cast<SmDirModel*>(mProxy->sourceModel()); + QTreeView::setModel(model); +} + void FileView::markFiles(){ bool ok; QString title = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(tr("Mark files")); @@ -108,6 +115,7 @@ void FileView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint h QSortFilterProxyModel *proxy = qobject_cast<QSortFilterProxyModel*>(model()); QModelIndex sourceIdx = proxy->mapToSource(currentIndex()); emit editorClosed(sourceIdx); + mModel->refresTimer()->start(); } void FileView::contextMenuEvent(QContextMenuEvent *e){ @@ -219,6 +227,24 @@ void FileView::selectedFilesChanged(){ emit selectedSize(selSize); } +void FileView::saveSelection(){ + mMd5Sums.clear(); + QModelIndexList selected = selectionModel()->selectedRows(SmDirModel::Md5sum); + foreach(QModelIndex i, selected){ + mMd5Sums << i.data().toString(); + } +} + +void FileView::restoreSelection(){ + foreach(QString s, mMd5Sums){ + QModelIndex i = mModel->find(s, SmDirModel::Md5sum); + if(i.isValid()){ + QModelIndex r = mProxy->mapFromSource(i); + selectionModel()->select(r, QItemSelectionModel::Rows | QItemSelectionModel::Select); + } + } +} + bool FileView::exitHover(bool exitVal){ mHoverWin->setVisible(false); mCurHover = QModelIndex(); @@ -18,12 +18,15 @@ class QAction; class HoverWindow; class QEvent; class QFileInfo; +class FilesystemFileProxy; +class SmDirModel; class FileView : public QTreeView { Q_OBJECT public: FileView(QWidget *parent = 0); ~FileView() {} + virtual void setModel(QAbstractItemModel *model); signals: void upDir(); @@ -40,6 +43,8 @@ class FileView : public QTreeView { void createFolder(); void readConfig(); void resizeColumns(int columns); + void saveSelection(); + void restoreSelection(); protected slots: virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); @@ -65,6 +70,9 @@ class FileView : public QTreeView { bool mHoverPics; QString mWhen; qint16 mCursorOffset; + QList<QString> mMd5Sums; + FilesystemFileProxy *mProxy; + SmDirModel *mModel; }; #endif diff --git a/smdirmodel.h b/smdirmodel.h index 9c311e0..e33392f 100644 --- a/smdirmodel.h +++ b/smdirmodel.h @@ -33,7 +33,7 @@ class SmDirModel : public SmTreeModel { bool isDir(const QModelIndex &idx) const; QDir dir() const; QFileInfo fileInfo(const QModelIndex &idx) const; - + QTimer *refresTimer() { return mRefreshTimer; } public slots: void setDir(const QString &dir); |