Mercurial > octave
changeset 20641:2b0886f2c186
add possibility to hide columns of workspace view
* workspace-view.cc (workspace_view): add a context menu top the header,
initialize string lists with entries and settings keys and signal mapper;
(~workspace_view): delete signal mapper;
(header_contextmenu_requested): new header context menu;
(toggle_header): common slot for all context menu entries;
(notice_settings): get visibility of columns from settings file;
* workspace-view.h: new header context menu, new slot for its entries,
new string lists for entries and settings file keys, new signal mapper
author | Torsten <ttl@justmail.de> |
---|---|
date | Wed, 21 Oct 2015 19:45:02 +0200 |
parents | 31219c56874f |
children | 3e449f43e708 |
files | libgui/src/workspace-view.cc libgui/src/workspace-view.h |
diffstat | 2 files changed, 79 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/workspace-view.cc Tue Oct 20 11:16:33 2015 -0400 +++ b/libgui/src/workspace-view.cc Wed Oct 21 19:45:02 2015 +0200 @@ -37,6 +37,7 @@ #include <QMenu> #include <QLabel> #include <QCompleter> +#include <QSignalMapper> #include "workspace-view.h" #include "resource-manager.h" @@ -116,6 +117,11 @@ ); view->horizontalHeader ()->setSortIndicatorShown (true); + view->horizontalHeader ()->setContextMenuPolicy (Qt::CustomContextMenu); + connect (view->horizontalHeader (), + SIGNAL (customContextMenuRequested (const QPoint &)), + this, SLOT (header_contextmenu_requested (const QPoint &))); + // Init state of the filter _filter->addItems (settings->value ("workspaceview/mru_list").toStringList ()); @@ -162,6 +168,9 @@ settings->setValue ("workspaceview/mru_list", mru); settings->sync (); + + if (_sig_mapper) + delete _sig_mapper; } void workspace_view::setModel (workspace_model *model) @@ -232,6 +241,46 @@ } void +workspace_view::header_contextmenu_requested (const QPoint& mpos) +{ + QMenu menu (this); + + if (_sig_mapper) + delete _sig_mapper; + _sig_mapper = new QSignalMapper (this); + + QSettings *settings = resource_manager::get_settings (); + + 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 ()); + } + + connect (_sig_mapper, SIGNAL (mapped (int)), this, SLOT (toggle_header (int))); + + menu.exec (view->mapToGlobal (mpos)); +} + +void +workspace_view::toggle_header (int col) +{ + QSettings *settings = resource_manager::get_settings (); + + QString key = _columns_shown_keys.at (col); + bool shown = settings->value (key,true).toBool (); + + view->setColumnHidden (col + 1, shown); + + settings->setValue (key, ! shown); + settings->sync (); +} + +void workspace_view::contextmenu_requested (const QPoint& qpos) { QMenu menu (this); @@ -401,15 +450,23 @@ void workspace_view::notice_settings (const QSettings *settings) { + int i; + _model->notice_settings (settings); // update colors of model first + for (i = 0; i < _columns_shown_keys.size (); i++) + { + view->setColumnHidden ( i + 1, + ! settings->value (_columns_shown_keys.at (i),true).toBool ()); + } + QString tool_tip; if (!settings->value ("workspaceview/hide_tool_tips",false).toBool ()) { tool_tip = QString (tr ("View the variables in the active workspace.<br>")); tool_tip += QString (tr ("Colors for variable attributes:")); - for (int i = 0; i < resource_manager::storage_class_chars ().length (); i++) + for (i = 0; i < resource_manager::storage_class_chars ().length (); i++) { tool_tip += QString ("<div style=\"background-color:%1;color:#000000\">%2</div>") @@ -420,6 +477,19 @@ setToolTip (tool_tip); + _columns_shown = QStringList (); + _columns_shown.append (tr ("Class")); + _columns_shown.append (tr ("Dimension")); + _columns_shown.append (tr ("Value")); + _columns_shown.append (tr ("Attribute")); + + _columns_shown_keys = QStringList (); + _columns_shown_keys.append ("workspaceview/show_class"); + _columns_shown_keys.append ("workspaceview/show_dimension"); + _columns_shown_keys.append ("workspaceview/show_value"); + _columns_shown_keys.append ("workspaceview/show_attribute"); + + _sig_mapper = 0; } void
--- a/libgui/src/workspace-view.h Tue Oct 20 11:16:33 2015 -0400 +++ b/libgui/src/workspace-view.h Wed Oct 21 19:45:02 2015 +0200 @@ -30,6 +30,7 @@ #include <QComboBox> #include <QSortFilterProxyModel> #include <QCheckBox> +#include <QSignalMapper> #include "octave-dock-widget.h" #include "workspace-model.h" @@ -72,6 +73,9 @@ void handle_contextmenu_stem (void); void handle_contextmenu_filter (void); + void header_contextmenu_requested (const QPoint& mpos); + void toggle_header (int column); + void handle_model_changed (void); void copyClipboard (); @@ -97,6 +101,10 @@ bool _filter_shown; enum { MaxFilterHistory = 10 }; + + QStringList _columns_shown; + QStringList _columns_shown_keys; + QSignalMapper *_sig_mapper; }; #endif