summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-03-22 04:14:56 +0100
committerArno <am@disconnect.de>2013-03-22 04:14:56 +0100
commitdb95f01cdb220842e031030df86ee56724e72f27 (patch)
treec5b4b959865fa3e99567e7f369d1e3769978187b
parentf72ed32feae2f3397dc8d0828e6b33584c99fb3f (diff)
downloadSheMov-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.cpp10
-rw-r--r--fileview.cpp26
-rw-r--r--fileview.h8
-rw-r--r--smdirmodel.h2
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();
diff --git a/fileview.h b/fileview.h
index 548a240..9f82260 100644
--- a/fileview.h
+++ b/fileview.h
@@ -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);