From 0f4f0d5860e4a261f37ae6f294c154c3009c4562 Mon Sep 17 00:00:00 2001 From: Arno Date: Fri, 5 Apr 2013 17:01:57 +0200 Subject: Make FilesystemWidget headers configurable Save headerView on exit, create a Menu for selecting headers and read headerConfig on startup. --- filesystemwidget.cpp | 3 ++- fileview.cpp | 39 ++++++++++++++++++++++++++++++++++++++- fileview.h | 7 +++++++ shemov.cpp | 8 ++++++++ shemov.h | 1 + 5 files changed, 56 insertions(+), 2 deletions(-) diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 28822fd..64dfd1c 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -75,7 +75,6 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboar mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); mFileView->setAlternatingRowColors(true); - mFileView->setColumnHidden(static_cast(SmDirModel::FullPath), true); mFileProxy->setDynamicSortFilter(true); connect(mFileView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), mFileView, SLOT(selectedFilesChanged())); connect(mFileModel, SIGNAL(modelAboutToBeReset()), mFileView, SLOT(saveSelection())); @@ -340,6 +339,7 @@ void FilesystemWidget::readSettings(){ } QPoint picViewerPos = s.value("windows/picviewer").toPoint(); mPicViewer->move(picViewerPos); + mFileView->readConfig(); } void FilesystemWidget::writeSettings(){ @@ -352,6 +352,7 @@ void FilesystemWidget::writeSettings(){ s.setValue("paths/selecteddir", dir); } s.setValue("windows/picviewer", mPicViewer->pos()); + mFileView->writeConfig(); } void FilesystemWidget::configChanged(){ diff --git a/fileview.cpp b/fileview.cpp index 7797d73..489338b 100644 --- a/fileview.cpp +++ b/fileview.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include "fileview.h" #include "hoverwindow.h" @@ -41,7 +42,6 @@ FileView::FileView(QWidget *parent) : QTreeView(parent), mDeleteA(0) { mHoverWin = new HoverWindow(this); QSize curSize = SmGlobals::instance()->cursorSize(); mHoverWin->setHoverOffset(QPoint(curSize.width() + 30, 0)); - readConfig(); SmGlobals::instance()->treeWidgets().append(this); } @@ -109,6 +109,11 @@ void FileView::readConfig(){ mWhen = s.value("ui/grabframe", "00:00:00").toString(); mHoverWin->setWindowOpacity(s.value("ui/hoveropacity", 10).toFloat() / 10.0); mCursorOffset = s.value("ui/cursoroffset").toInt(); + readHeaderConfig(); +} + +void FileView::writeConfig(){ + writeHeaderConfig(); } void FileView::resizeColumns(int columns) { @@ -259,6 +264,38 @@ void FileView::restoreSelection(){ } } +void FileView::readHeaderConfig(){ + QSettings s; + QByteArray headerPos = s.value("ui/fsheaderpos").toByteArray(); + if(!headerPos.isEmpty()){ + header()->restoreState(headerPos); + } + QHeaderView *hv = header(); + QHash headerActions; + foreach(QAction *a, mHeaderGroup->actions()){ + headerActions.insert(a->data().toInt(), a); + } + for(int i = 0; i < hv->count(); ++i){ + if(!hv->isSectionHidden(i)){ + headerActions.value(i)->setChecked(true); + } + } +} + +void FileView::writeHeaderConfig(){ + QSettings s; + s.setValue("ui/fsheaderpos", header()->saveState()); +} + + +void FileView::toggleHeader(QObject *action){ + QAction *a = qobject_cast(action); + Q_ASSERT(a); + int logicalIndex = a->data().toInt(); + QHeaderView *hv = header(); + hv->setSectionHidden(logicalIndex, !a->isChecked()); +} + bool FileView::exitHover(bool exitVal){ mHoverWin->setVisible(false); mCurHover = QModelIndex(); diff --git a/fileview.h b/fileview.h index fac6f21..9bec73f 100644 --- a/fileview.h +++ b/fileview.h @@ -22,6 +22,7 @@ class QEvent; class QFileInfo; class FilesystemFileProxy; class SmDirModel; +class QActionGroup; class FileView : public QTreeView { Q_OBJECT @@ -30,6 +31,7 @@ class FileView : public QTreeView { ~FileView() {} virtual void setModel(QAbstractItemModel *model); const QVariant duration() const; + void setHeaderGroup(QActionGroup *ag) { mHeaderGroup = ag; } signals: void upDir(); @@ -46,9 +48,13 @@ class FileView : public QTreeView { void unmarkFiles(); void createFolder(); void readConfig(); + void writeConfig(); void resizeColumns(int columns); void saveSelection(); void restoreSelection(); + void readHeaderConfig(); + void writeHeaderConfig(); + void toggleHeader(QObject *action); protected slots: virtual void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint); @@ -78,6 +84,7 @@ class FileView : public QTreeView { FilesystemFileProxy *mProxy; SmDirModel *mModel; Helper::Duration mDuration; + QActionGroup *mHeaderGroup; }; #endif diff --git a/shemov.cpp b/shemov.cpp index d65c1d1..9d44fc3 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -534,6 +534,10 @@ void SheMov::createActions(){ mFilesTreeHeadersGroup = new QActionGroup(this); QSignalMapper *fileTreeHeaderMapper = createHeaderMapper(filesModel, mFilesTreeHeadersGroup); connect(fileTreeHeaderMapper, SIGNAL(mapped(QObject*)), mATree->filesWidget()->filesTree(), SLOT(toggleHeader(QObject*))); + mFileSysHeaderGroup = new QActionGroup(this); + QSignalMapper *fileSysHeaderMapper = createHeaderMapper(qobject_cast(mFSWidget->fileModel()), mFileSysHeaderGroup); + connect(fileSysHeaderMapper, SIGNAL(mapped(QObject*)), mFSWidget->fileView(), SLOT(toggleHeader(QObject*))); + mFSWidget->fileView()->setHeaderGroup(mFileSysHeaderGroup); mPicsTreeHeaderGroup = new QActionGroup(this); SmTreeModel *picFilesModel = static_cast(SmGlobals::instance()->model("PicFiles")); QSignalMapper *picsTreeHeaderMapper = createHeaderMapper(picFilesModel, mPicsTreeHeaderGroup); @@ -843,6 +847,10 @@ void SheMov::createMenus(){ mFSHoverMenu->addActions(mFSHoverGroup->actions()); mFSViewMenu->addMenu(mFSHoverMenu); mFSViewMenu->addSeparator(); + QMenu *fsHeaderMenu = new QMenu(tr("Show headers"), this); + fsHeaderMenu->addActions(mFileSysHeaderGroup->actions()); + mFSViewMenu->addMenu(fsHeaderMenu); + mFSViewMenu->addSeparator(); mFSViewMenu->addAction(mRefreshA); mViewFSMenuA = menuBar()->addMenu(mFSViewMenu); diff --git a/shemov.h b/shemov.h index 3963e07..106d81f 100644 --- a/shemov.h +++ b/shemov.h @@ -167,6 +167,7 @@ class SheMov : public QMainWindow { QActionGroup *mOpenWithGroupFS; QActionGroup *mOpenWithGroupAV; QActionGroup *mFilesTreeHeadersGroup; + QActionGroup *mFileSysHeaderGroup; QActionGroup *mPicsTreeHeaderGroup; QActionGroup *mEditGroup; -- cgit v1.2.3-70-g09d2