diff libgui/graphics/Figure.cc @ 26869:992f55ef87f5

Use an uitoolbar and ui*tools to build the default figure toolbar (bug #55795) * Figure.[cc,h] (mouse_mode_to_string, mouse_mode_from_string): Remove functions. (createFigureToolBarAndMenuBar, updateFigureToolBarAndMenuBar): Remove methods. (Figure::Figure): Instantiate the menubar here. Simplify size handling now that the toolbar is created in addCustomToolBar. (Figure::addCustomToolBar): Add optional argument to signal if the toolbar is the default one. (Figure::autoAxes, Figrue::toggleGrid, Figure::toggleAxes): Remove methods. * GLCanvas.[cc,h] (GLCanvas::autoAxes, GLCanvas::toggleGrid, GLCanvas::toggleAxes): Ditto. * Canvas.[cc,h] (Canvas::canvasAutoAxes, Canvas::canvasToggleGrid, Canvas::canvasToggleAxes): Ditto. (Canvas::setCursor): Use resourse_manager to retrieve icons. * MouseModeActionGroup.[cc, h]: Remove unnecessary class file. * __add_default_menu__.m: Add default toobar and associated buttons. * libgui/graphics/qthandles.qrc: Remove file * libgui/graphics/images: Remove directory. * libgui/graphics/module.mk: Update to eliminate the Crystal icons resources. * libgui/src/resources.qrc: Include new figure-* png icons * libgui/src/module.mk: Include new figure-* png icons * libgui/src/icons/icons_license: Document the origin of figure-* icons
author Pantxo Diribarne <pantxo.diribarne@gmail.com>
date Thu, 07 Mar 2019 22:53:33 +0100
parents f9b10a8a7c93
children e201cf0c7360
line wrap: on
line diff
--- a/libgui/graphics/Figure.cc	Thu Mar 07 15:11:17 2019 -0800
+++ b/libgui/graphics/Figure.cc	Thu Mar 07 22:53:33 2019 +0100
@@ -26,7 +26,6 @@
 
 #include <QAction>
 #include <QActionEvent>
-#include <QActionGroup>
 #include <QApplication>
 #include <QClipboard>
 #include <QEvent>
@@ -50,7 +49,6 @@
 #include "Container.h"
 #include "Figure.h"
 #include "FigureWindow.h"
-#include "MouseModeActionGroup.h"
 #include "QtHandlesUtils.h"
 
 #include "file-ops.h"
@@ -92,7 +90,7 @@
   Figure::Figure (const graphics_object& go, FigureWindow *win)
     : Object (go, win), m_blockUpdates (false), m_figureToolBar (nullptr),
       m_menuBar (nullptr), m_innerRect (), m_outerRect (),
-      m_mouseModeGroup (nullptr), m_previousHeight (0), m_resizable (true)
+      m_previousHeight (0), m_resizable (true)
   {
     m_container = new Container (win);
     win->setCentralWidget (m_container);
@@ -104,30 +102,23 @@
     connect (win, SIGNAL (figureWindowShown ()),
              this, SLOT (figureWindowShown ()));
 
+    // Menubar
+    m_menuBar = new MenuBar (win);
+    win->setMenuBar (m_menuBar);
+    m_menuBar->addReceiver (this);
+
     // Status bar
     m_statusBar = win->statusBar ();
     int boffset = 0;
 
-    // Toolbar and menubar
-    createFigureToolBarAndMenuBar ();
-    int toffset = 0;
-
     if (fp.toolbar_is ("figure")
         || (fp.toolbar_is ("auto") && fp.menubar_is ("figure")))
-      {
-        toffset += m_figureToolBar->sizeHint ().height ();
-        boffset += m_statusBar->sizeHint ().height ();
-      }
-    else
-      {
-        m_figureToolBar->hide ();
-        m_statusBar->hide ();
-      }
+      boffset += m_statusBar->sizeHint ().height ();
 
     m_innerRect = boundingBoxToRect (fp.get_boundingbox (true));
     m_outerRect = boundingBoxToRect (fp.get_boundingbox (false));
 
-    set_geometry (m_innerRect.adjusted (0, -toffset, 0, boffset));
+    set_geometry (m_innerRect.adjusted (0, 0, 0, boffset));
 
     // Enable mouse tracking unconditionally
     enableMouseTracking ();
@@ -162,55 +153,6 @@
   Figure::~Figure (void)
   { }
 
-  static std::string
-  mouse_mode_to_string (MouseMode mode)
-  {
-    switch (mode)
-      {
-      case NoMode:
-        return "none";
-
-      case RotateMode:
-        return "rotate";
-
-      case ZoomInMode:
-        return "zoom in";
-
-      case ZoomOutMode:
-        return "zoom out";
-
-      case PanMode:
-        return "pan";
-
-      case TextMode:
-        return "text";
-
-      default:
-        break;
-      }
-
-    return "none";
-  }
-
-  static MouseMode
-  mouse_mode_from_string (const std::string& mode)
-  {
-    if (mode == "none")
-      return NoMode;
-    else if (mode == "rotate")
-      return RotateMode;
-    else if (mode == "zoom in")
-      return ZoomInMode;
-    else if (mode == "zoom out")
-      return ZoomOutMode;
-    else if (mode == "pan")
-      return PanMode;
-    else if (mode == "text")
-      return TextMode;
-    else
-      return NoMode;
-  }
-
   QString
   Figure::fileName (void)
   {
@@ -251,49 +193,18 @@
         mode += ' ' + direction;
       }
 
-    return mouse_mode_from_string (mode);
-  }
-
-  void
-  Figure::createFigureToolBarAndMenuBar (void)
-  {
-    QMainWindow *win = qWidget<QMainWindow> ();
-
-    m_figureToolBar = win->addToolBar (tr ("Figure ToolBar"));
-    m_figureToolBar->setMovable (false);
-    m_figureToolBar->setFloatable (false);
-
-    m_mouseModeGroup = new MouseModeActionGroup (win);
-    connect (m_mouseModeGroup, SIGNAL (modeChanged (MouseMode)),
-             SLOT (setMouseMode (MouseMode)));
-    m_figureToolBar->addActions (m_mouseModeGroup->actions ());
-
-    QAction *toggle_axes = m_figureToolBar->addAction (tr ("Axes"));
-    connect (toggle_axes, SIGNAL (triggered (void)),
-             this, SLOT (toggleAxes (void)));
+    if (mode == "rotate")
+      return RotateMode;
+    else if (mode == "zoom in")
+      return ZoomInMode;
+    else if (mode == "zoom out")
+      return ZoomOutMode;
+    else if (mode == "pan")
+      return PanMode;
+    else if (mode == "text")
+      return TextMode;
 
-    QAction *toggle_grid = m_figureToolBar->addAction (tr ("Grid"));
-    connect (toggle_grid, SIGNAL (triggered (void)),
-             this, SLOT (toggleGrid (void)));
-
-    QAction *auto_axes = m_figureToolBar->addAction (tr ("Autoscale"));
-    connect (auto_axes, SIGNAL (triggered (void)),
-             this, SLOT (autoAxes (void)));
-
-    m_menuBar = new MenuBar (win);
-    win->setMenuBar (m_menuBar);
-    m_menuBar->addReceiver (this);
-  }
-
-  void
-  Figure::updateFigureToolBarAndMenuBar (void)
-  {
-    if (m_mouseModeGroup)
-      {
-        m_blockUpdates = true;
-        m_mouseModeGroup->setMode (mouseMode ());
-        m_blockUpdates = false;
-      }
+    return NoMode;
   }
 
   void
@@ -349,8 +260,6 @@
               obj->slotRedraw ();
           }
       }
-
-    updateFigureToolBarAndMenuBar ();
   }
 
   void
@@ -395,7 +304,6 @@
     if (canvas)
       canvas->blockRedraw (true);
 
-    m_menuBar->removeReceiver (this);
     m_container->removeReceiver (this);
     qWidget<FigureWindow> ()->removeReceiver (this);
   }
@@ -522,6 +430,7 @@
         break;
 
       case figure::properties::ID___MOUSE_MODE__:
+      case figure::properties::ID___ZOOM_MODE__:
         m_container->canvas (m_handle)->setCursor (mouseMode ());
         break;
 
@@ -535,7 +444,8 @@
   void
   Figure::showFigureToolBar (bool visible)
   {
-    if ((! m_figureToolBar->isHidden ()) != visible)
+    if (m_figureToolBar
+        && (! m_figureToolBar->isHidden ()) != visible)
       {
         int dy1 = m_figureToolBar->sizeHint ().height ();
         int dy2 = m_statusBar->sizeHint ().height ();
@@ -786,28 +696,13 @@
   }
 
   void
-  Figure::setMouseMode (MouseMode mode)
-  {
-    if (m_blockUpdates)
-      return;
-
-    gh_manager::auto_lock lock;
-
-    figure::properties& fp = properties<figure> ();
-
-    fp.set___mouse_mode__ (mouse_mode_to_string (mode));
-
-    Canvas *canvas = m_container->canvas (m_handle);
-
-    if (canvas)
-      canvas->setCursor (mode);
-  }
-
-  void
-  Figure::addCustomToolBar (QToolBar *bar, bool visible)
+  Figure::addCustomToolBar (QToolBar *bar, bool visible, bool isdefault)
   {
     QMainWindow *win = qWidget<QMainWindow> ();
 
+    if (isdefault)
+      m_figureToolBar = bar;
+
     if (! visible)
       win->addToolBar (bar);
     else
@@ -860,33 +755,6 @@
   }
 
   void
-  Figure::toggleAxes (void)
-  {
-    Canvas *canvas = m_container->canvas (m_handle);
-
-    if (canvas)
-      canvas->toggleAxes (m_handle);
-  }
-
-  void
-  Figure::toggleGrid (void)
-  {
-    Canvas *canvas = m_container->canvas (m_handle);
-
-    if (canvas)
-      canvas->toggleGrid (m_handle);
-  }
-
-  void
-  Figure::autoAxes (void)
-  {
-    Canvas *canvas = m_container->canvas (m_handle);
-
-    if (canvas)
-      canvas->autoAxes (m_handle);
-  }
-
-  void
   Figure::figureWindowShown ()
   {
 #if defined (HAVE_QSCREEN_DEVICEPIXELRATIO)