summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2015-11-27 17:36:49 +0100
committerArno <arno@disconnect.de>2015-11-27 17:36:49 +0100
commit3cbba03cf065c4f7adcf6619931180ff22c9eb60 (patch)
tree6dc40fdc88e82598b226837c5acb1b6479915bcc
parente1fd385d598e17c77a8b8175b8674b219b45cd8d (diff)
downloadSheMov-3cbba03cf065c4f7adcf6619931180ff22c9eb60.tar.gz
SheMov-3cbba03cf065c4f7adcf6619931180ff22c9eb60.tar.bz2
SheMov-3cbba03cf065c4f7adcf6619931180ff22c9eb60.zip
Remember selections between dir changes
Select all items previously selected when going back()
-rw-r--r--filesystemwidget.cpp21
-rw-r--r--filesystemwidget.h2
-rw-r--r--fileview.cpp12
-rw-r--r--fileview.h1
4 files changed, 30 insertions, 6 deletions
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index 0e6e591..07e058d 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -162,13 +162,17 @@ void FilesystemWidget::directoryChanged(const QModelIndex &selected, const QMode
}
QModelIndex realPrev = mDirProxy->mapToSource(deselected);
if(realPrev.isValid()){
- mLastDir = realPrev.data(QFileSystemModel::FilePathRole).toString();
+ mLastFiles[Previous] = mLastFiles[Current];
+ mLastFiles[Current] = mFileView->selectedItems();
+ mLastDir = realPrev.data(QFileSystemModel::FilePathRole).toString();
}
mModel->setRootPath(mModel->filePath(real));
mDirEdit->setText(mModel->filePath(real));
setWindowTitle();
- mFileView->selectionModel()->clear();
+
+ mFileView->selectionModel()->clear();
mFileModel->setDir(mModel->filePath(real));
+
resizeFileView();
}
@@ -253,10 +257,15 @@ void FilesystemWidget::goBack(){
if(mLastDir.isEmpty()){
return;
}
- QModelIndex lastIdx = mModel->index(mLastDir);
- if(lastIdx.isValid()){
- mDirView->selectionModel()->setCurrentIndex(mDirProxy->mapFromSource(lastIdx), QItemSelectionModel::ClearAndSelect);
- }
+ QModelIndex lastIdx = mModel->index(mLastDir);
+ mDirView->selectionModel()->setCurrentIndex(mDirProxy->mapFromSource(lastIdx), QItemSelectionModel::ClearAndSelect);
+ if(lastIdx.isValid()){
+ if(!mLastFiles[Previous].isEmpty()){
+ foreach(QString lf, mLastFiles[Previous]){
+ mFileView->selectItem(lf);
+ }
+ }
+ }
}
void FilesystemWidget::deleteFiles(){
diff --git a/filesystemwidget.h b/filesystemwidget.h
index 1229962..8ecffca 100644
--- a/filesystemwidget.h
+++ b/filesystemwidget.h
@@ -33,6 +33,7 @@ class FilesystemWidget : public QWidget {
Q_OBJECT
public:
enum ClipboardMode { Copy, Cut, None };
+ enum SelectedFiles { Current, Previous };
FilesystemWidget(QWidget *parent = 0);
FileView *fileView() { return mFileView; }
FilesystemFileProxy *fileProxy() { return mFileProxy; }
@@ -108,6 +109,7 @@ class FilesystemWidget : public QWidget {
PictureViewer2 *mPicViewer;
SheMovIconProvider *mIconProvider;
QString mLastDir;
+ QHash<int,QStringList> mLastFiles;
int mClipboardMode;
QSplitter *mIconDirSplitter;
UnpackDialog *mUnpackDlg;
diff --git a/fileview.cpp b/fileview.cpp
index 35beec6..067cc6b 100644
--- a/fileview.cpp
+++ b/fileview.cpp
@@ -50,6 +50,18 @@ void FileView::setModel(QAbstractItemModel *model){
SmTreeView::setModel(model);
}
+QStringList FileView::selectedItems(){
+ QModelIndexList items = selectionModel()->selectedRows(SmDirModel::Name);
+ if(!items.isEmpty()){
+ QStringList retval;
+ foreach(QModelIndex idx, items){
+ retval << idx.data().toString();
+ }
+ return retval;
+ }
+ return QStringList();
+}
+
void FileView::markFiles(){
bool ok;
QString title = QString(tr("%1 - %2")).arg(qApp->applicationName()).arg(tr("Mark files"));
diff --git a/fileview.h b/fileview.h
index d437201..6d001aa 100644
--- a/fileview.h
+++ b/fileview.h
@@ -29,6 +29,7 @@ class FileView : public SmTreeView {
FileView(QWidget *parent = 0);
~FileView() {}
virtual void setModel(QAbstractItemModel *model);
+ QStringList selectedItems();
signals:
void upDir();