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