diff options
-rw-r--r-- | filesystemwidget.cpp | 21 | ||||
-rw-r--r-- | filesystemwidget.h | 2 | ||||
-rw-r--r-- | fileview.cpp | 12 | ||||
-rw-r--r-- | fileview.h | 1 |
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")); @@ -29,6 +29,7 @@ class FileView : public SmTreeView { FileView(QWidget *parent = 0); ~FileView() {} virtual void setModel(QAbstractItemModel *model); + QStringList selectedItems(); signals: void upDir(); |