# HG changeset patch # User Torsten # Date 1445452577 -7200 # Node ID 3e449f43e7080a2fa513380f9fcca30eadd4b60b # Parent 2b0886f2c186952250f8344c6d894bd0dc134577 revised code for header context menu in file browser * files-dock-widget.cc (files_dock_widget): initialize signal mapper as well as string lists with menu entries and related keys in the settings file, removed code that is executed in notice_settings; (~files_dock_widget): delete signal mapper; (toggle_header): new slot for all header context menu entries instead of single slots toggle_headercontextitem_filesize, toggle_headercontextitem_filetype, toggle_headercontextitem_datemodified, toggle_headercontextitem_showhidden; (headercontextmenu_requested): menu entries by loop over string lists and trigger signal mapped according to loop count; (notice_settings): set column visibility by loop over string list * files-dock-widget.h: only one slot for header context menu actions, new string lists for menu entries and related setting keys, signal mapper diff -r 2b0886f2c186 -r 3e449f43e708 libgui/src/files-dock-widget.cc --- a/libgui/src/files-dock-widget.cc Wed Oct 21 19:45:02 2015 +0200 +++ b/libgui/src/files-dock-widget.cc Wed Oct 21 20:36:17 2015 +0200 @@ -69,6 +69,22 @@ set_title (tr ("File Browser")); setToolTip (tr ("Browse your files.")); + _sig_mapper = 0; + + _columns_shown = QStringList (); + _columns_shown.append (tr ("File size")); + _columns_shown.append (tr ("File type")); + _columns_shown.append (tr ("Date modified")); + _columns_shown.append (tr ("Show hidden")); + _columns_shown.append (tr ("Alternating row colors")); + + _columns_shown_keys = QStringList (); + _columns_shown_keys.append (tr ("filesdockwidget/showFileSize")); + _columns_shown_keys.append (tr ("filesdockwidget/showFileType")); + _columns_shown_keys.append (tr ("filesdockwidget/showLastModified")); + _columns_shown_keys.append (tr ("filesdockwidget/showHiddenFiles")); + _columns_shown_keys.append (tr ("filesdockwidget/useAlternatingRowColors")); + QWidget *container = new QWidget (this); setWidget (container); @@ -180,15 +196,6 @@ } _file_system_model = new QFileSystemModel (this); - if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()) - { - _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries - | QDir::Hidden); - } - else - { - _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries); - } QModelIndex rootPathIndex = _file_system_model->setRootPath ( startup_dir.absolutePath ()); @@ -283,6 +290,9 @@ settings->setValue ("filesdockwidget/mru_dir_list", dirs); settings->sync (); + + if (_sig_mapper) + delete _sig_mapper; } void @@ -390,44 +400,29 @@ QDesktopServices::openUrl (QUrl::fromLocalFile (file)); } -void files_dock_widget::toggle_headercontextitem_filesize () -{ - QSettings *settings = resource_manager::get_settings (); - settings->setValue - ("filesdockwidget/showFileSize", - ! settings->value ("filesdockwidget/showFileSize",false).toBool ()); - settings->sync (); - this->notice_settings (settings); -} - -void files_dock_widget::toggle_headercontextitem_filetype () +void files_dock_widget::toggle_header (int col) { QSettings *settings = resource_manager::get_settings (); - settings->setValue - ("filesdockwidget/showFileType", - ! settings->value ("filesdockwidget/showFileType",false).toBool ()); + + QString key = _columns_shown_keys.at (col); + bool shown = settings->value (key,false).toBool (); + settings->setValue (key, ! shown); settings->sync (); - this->notice_settings (settings); -} -void files_dock_widget::toggle_headercontextitem_datemodified () -{ - QSettings *settings = resource_manager::get_settings (); - settings->setValue - ("filesdockwidget/showLastModified", - ! settings->value ("filesdockwidget/showLastModified",false).toBool ()); - settings->sync (); - this->notice_settings (settings); -} - -void files_dock_widget::toggle_headercontextitem_showhidden () -{ - QSettings *settings = resource_manager::get_settings (); - settings->setValue - ("filesdockwidget/showHiddenFiles", - ! settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()); - settings->sync (); - this->notice_settings (settings); + switch (col) + { + case 0: + case 1: + case 2: + // toggle column visibility + _file_tree_view->setColumnHidden (col + 1, shown); + break; + case 3: + case 4: + // other actions depending on new settings + notice_settings (settings); + break; + } } void @@ -435,39 +430,23 @@ { QMenu menu (this); + if (_sig_mapper) + delete _sig_mapper; + _sig_mapper = new QSignalMapper (this); + QSettings *settings = resource_manager::get_settings (); - QAction fileSizeAction (tr ("File size"), &menu); - fileSizeAction.setCheckable (true); - fileSizeAction.setChecked ( - settings->value ("filesdockwidget/showFileSize",false).toBool ()); - connect (&fileSizeAction, SIGNAL(triggered ()), - this, SLOT (toggle_headercontextitem_filesize ())); - menu.addAction (&fileSizeAction); - - QAction fileTypeAction (tr ("File type"), &menu); - fileTypeAction.setCheckable (true); - fileTypeAction.setChecked ( - settings->value ("filesdockwidget/showFileType",false).toBool ()); - connect (&fileTypeAction, SIGNAL(triggered ()), - this, SLOT (toggle_headercontextitem_filetype ())); - menu.addAction (&fileTypeAction); + for (int i = 0; i < _columns_shown.size (); i++) + { + QAction *action = menu.addAction (_columns_shown.at (i), + _sig_mapper, SLOT (map ())); + _sig_mapper->setMapping(action, i); + action->setCheckable (true); + action->setChecked ( + settings->value (_columns_shown_keys.at (i),true).toBool ()); + } - QAction dateModifiedAction (tr ("Date modified"), &menu); - dateModifiedAction.setCheckable (true); - dateModifiedAction.setChecked( - settings->value ("filesdockwidget/showLastModified",false).toBool ()); - connect (&dateModifiedAction, SIGNAL(triggered ()), - this, SLOT (toggle_headercontextitem_datemodified ())); - menu.addAction (&dateModifiedAction); - - QAction showHiddenAction (tr ("Show hidden"), &menu); - showHiddenAction.setCheckable (true); - showHiddenAction.setChecked ( - settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()); - connect (&showHiddenAction, SIGNAL (triggered ()), - this, SLOT (toggle_headercontextitem_showhidden ())); - menu.addAction (&showHiddenAction); + connect (_sig_mapper, SIGNAL (mapped (int)), this, SLOT (toggle_header (int))); menu.exec (_file_tree_view->mapToGlobal (mpos)); } @@ -788,24 +767,18 @@ _navigation_tool_bar->setIconSize (QSize (icon_size,icon_size)); // file names are always shown, other columns can be hidden by settings - _file_tree_view->setColumnHidden (0, false); - _file_tree_view->setColumnHidden (1, - ! settings->value ("filesdockwidget/showFileSize",false).toBool ()); - _file_tree_view->setColumnHidden (2, - ! settings->value ("filesdockwidget/showFileType",false).toBool ()); - _file_tree_view->setColumnHidden (3, - ! settings->value ("filesdockwidget/showLastModified",false).toBool ()); - _file_tree_view->setAlternatingRowColors ( - settings->value ("filesdockwidget/useAlternatingRowColors",true).toBool ()); - if (settings->value ("filesdockwidget/showHiddenFiles",false).toBool ()) - { + for (int i = 0; i < 3; i++) + _file_tree_view->setColumnHidden (i + 1, ! settings->value ( + _columns_shown_keys.at (i),false).toBool ()); + + if (settings->value (_columns_shown_keys.at (3),false).toBool ()) _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries | QDir::Hidden); - } else - { _file_system_model->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries); - } + + _file_tree_view->setAlternatingRowColors ( + settings->value (_columns_shown_keys.at (4),true).toBool ()); _file_tree_view->setModel (_file_system_model); // enable the buttons to sync octave/browser dir diff -r 2b0886f2c186 -r 3e449f43e708 libgui/src/files-dock-widget.h --- a/libgui/src/files-dock-widget.h Wed Oct 21 19:45:02 2015 +0200 +++ b/libgui/src/files-dock-widget.h Wed Oct 21 20:36:17 2015 +0200 @@ -35,6 +35,7 @@ #include #include #include +#include #include #include "octave-dock-widget.h" @@ -80,16 +81,12 @@ void notice_settings (const QSettings *settings); private slots: + + void headercontextmenu_requested (const QPoint& pos); + void toggle_header (int col); + /** context menu wanted */ void contextmenu_requested (const QPoint& pos); - - void toggle_headercontextitem_filesize (); - void toggle_headercontextitem_filetype (); - void toggle_headercontextitem_datemodified (); - void toggle_headercontextitem_showhidden (); - - void headercontextmenu_requested (const QPoint& pos); - /* context menu actions */ void contextmenu_open (bool); void contextmenu_open_in_app (bool); @@ -160,6 +157,10 @@ QString _octave_dir; // the actual octave dir enum { MaxMRUDirs = 10 }; + + QStringList _columns_shown; + QStringList _columns_shown_keys; + QSignalMapper *_sig_mapper; }; #endif // FILESDOCKWIDGET_H