Mercurial > octave
diff libgui/graphics/Figure.cc @ 22411:c69805d1fa64
maint: Style check C++ code in libgui/
* Backend.cc, Backend.h, BaseControl.cc, BaseControl.h, ButtonControl.cc,
ButtonControl.h, ButtonGroup.cc, ButtonGroup.h, Canvas.cc, Canvas.h,
CheckBoxControl.cc, CheckBoxControl.h, Container.cc, Container.h,
ContextMenu.cc, ContextMenu.h, EditControl.cc, EditControl.h, Figure.cc,
Figure.h, FigureWindow.cc, FigureWindow.h, GLCanvas.cc, GLCanvas.h,
GenericEventNotify.h, KeyMap.cc, KeyMap.h, ListBoxControl.cc, ListBoxControl.h,
Logger.cc, Logger.h, Menu.cc, Menu.h, MenuContainer.h, MouseModeActionGroup.cc,
MouseModeActionGroup.h, Object.cc, Object.h, ObjectFactory.cc, ObjectFactory.h,
ObjectProxy.cc, ObjectProxy.h, Panel.cc, Panel.h, PopupMenuControl.cc,
PopupMenuControl.h, PushButtonControl.cc, PushButtonControl.h, PushTool.cc,
PushTool.h, QtHandlesUtils.cc, QtHandlesUtils.h, RadioButtonControl.cc,
RadioButtonControl.h, SliderControl.cc, SliderControl.h, TextControl.cc,
TextControl.h, TextEdit.cc, TextEdit.h, ToggleButtonControl.cc,
ToggleButtonControl.h, ToggleTool.cc, ToggleTool.h, ToolBar.cc, ToolBar.h,
ToolBarButton.cc, ToolBarButton.h, __init_qt__.cc, __init_qt__.h,
annotation-dialog.cc, annotation-dialog.h, gl-select.cc, gl-select.h,
color-picker.cc, color-picker.h, dialog.h, documentation-dock-widget.cc,
documentation-dock-widget.h, files-dock-widget.cc, files-dock-widget.h,
find-files-dialog.h, find-files-model.cc, find-files-model.h,
history-dock-widget.cc, history-dock-widget.h, liboctgui-build-info.h,
liboctgui-build-info.in.cc, file-editor-interface.h, file-editor-tab.cc,
file-editor-tab.h, file-editor.cc, file-editor.h, find-dialog.cc,
find-dialog.h, marker.cc, marker.h, octave-qscintilla.cc, octave-qscintilla.h,
octave-txt-lexer.cc, octave-txt-lexer.h, main-window.cc, main-window.h,
octave-cmd.cc, octave-cmd.h, octave-dock-widget.cc, octave-dock-widget.h,
octave-gui.cc, octave-gui.h, octave-interpreter.cc, octave-interpreter.h,
octave-qt-link.cc, octave-qt-link.h, parser.cc, parser.h, webinfo.cc,
webinfo.h, resource-manager.cc, resource-manager.h, settings-dialog.cc,
settings-dialog.h, shortcut-manager.cc, shortcut-manager.h,
terminal-dock-widget.h, thread-manager.cc, thread-manager.h, welcome-wizard.cc,
welcome-wizard.h, workspace-model.cc, workspace-model.h, workspace-view.cc,
workspace-view.h:
Style check C++ code in libgui/
author | Rik <rik@octave.org> |
---|---|
date | Wed, 31 Aug 2016 12:20:46 -0700 |
parents | 0a2961d5893c |
children | 8758addcf265 |
line wrap: on
line diff
--- a/libgui/graphics/Figure.cc Wed Aug 31 14:37:33 2016 -0400 +++ b/libgui/graphics/Figure.cc Wed Aug 31 12:20:46 2016 -0700 @@ -61,373 +61,375 @@ namespace QtHandles { -DECLARE_GENERICEVENTNOTIFY_SENDER(MenuBar, QMenuBar); + DECLARE_GENERICEVENTNOTIFY_SENDER(MenuBar, QMenuBar); + + static bool + hasUiControlChildren (const figure::properties& fp) + { + gh_manager::auto_lock lock; + + Matrix kids = fp.get_all_children (); -static bool -hasUiControlChildren (const figure::properties& fp) -{ - gh_manager::auto_lock lock; + for (int i = 0; i < kids.numel (); i++) + { + graphics_object go (gh_manager::get_object (kids(i))); - Matrix kids = fp.get_all_children (); + if (go && (go.isa ("uicontrol") || go.isa ("uipanel") + || go.isa ("uibuttongroup"))) + return true; + } - for (int i = 0; i < kids.numel (); i++) - { - graphics_object go (gh_manager::get_object (kids(i))); + return false; + } + + static bool + hasUiMenuChildren (const figure::properties& fp) + { + gh_manager::auto_lock lock; + + Matrix kids = fp.get_all_children (); - if (go && (go.isa ("uicontrol") || go.isa ("uipanel") - || go.isa ("uibuttongroup"))) - return true; - } + for (int i = 0; i < kids.numel (); i++) + { + graphics_object go (gh_manager::get_object (kids(i))); + + if (go && go.isa ("uimenu")) + return true; + } + + return false; + } - return false; -} + static QRect + boundingBoxToRect (const Matrix& bb) + { + QRect r; -static bool -hasUiMenuChildren (const figure::properties& fp) -{ - gh_manager::auto_lock lock; + if (bb.numel () == 4) + { + r = QRect (octave::math::round (bb(0)), octave::math::round (bb(1)), + octave::math::round (bb(2)), octave::math::round (bb(3))); + if (! r.isValid ()) + r = QRect (); + } - Matrix kids = fp.get_all_children (); + return r; + } - for (int i = 0; i < kids.numel (); i++) - { - graphics_object go (gh_manager::get_object (kids(i))); + Figure* + Figure::create (const graphics_object& go) + { + return new Figure (go, new FigureWindow ()); + } - if (go && go.isa ("uimenu")) - return true; - } + Figure::Figure (const graphics_object& go, FigureWindow* win) + : Object (go, win), m_blockUpdates (false), m_figureToolBar (0), + m_menuBar (0), m_innerRect (), m_outerRect (), m_mouseModeGroup (0) + { + m_container = new Container (win); + win->setCentralWidget (m_container); - return false; -} + figure::properties& fp = properties<figure> (); + + // Status bar + m_statusBar = win->statusBar (); + int boffset = 0; + + // Toolbar and menubar + createFigureToolBarAndMenuBar (); + int toffset = 0; -static QRect -boundingBoxToRect (const Matrix& bb) -{ - QRect r; + if (fp.toolbar_is ("figure") || + (fp.toolbar_is ("auto") && fp.menubar_is ("figure") && + ! hasUiControlChildren (fp))) + { + toffset += m_figureToolBar->sizeHint ().height (); + boffset += m_statusBar->sizeHint ().height (); + } + else + { + m_figureToolBar->hide (); + m_statusBar->hide (); + } + + if (fp.menubar_is ("figure") || hasUiMenuChildren (fp)) + toffset += m_menuBar->sizeHint ().height (); + else + m_menuBar->hide (); - if (bb.numel () == 4) - { - r = QRect (octave::math::round (bb(0)), octave::math::round (bb(1)), - octave::math::round (bb(2)), octave::math::round (bb(3))); - if (! r.isValid ()) - r = QRect (); - } + m_innerRect = boundingBoxToRect (fp.get_boundingbox (true)); + m_outerRect = boundingBoxToRect (fp.get_boundingbox (false)); + + win->setGeometry (m_innerRect.adjusted (0, -toffset, 0, boffset)); + + // Enable mouse tracking unconditionally + enableMouseTracking (); + + // When this constructor gets called all properties are already + // set, even non default. We force "update" here to get things right. - return r; -} + // Figure title + update (figure::properties::ID_NUMBERTITLE); + + // Decide what keyboard events we listen to + m_container->canvas (m_handle)->setEventMask (0); + update (figure::properties::ID_KEYPRESSFCN); + update (figure::properties::ID_KEYRELEASEFCN); + + // modal style + update (figure::properties::ID_WINDOWSTYLE); -Figure* -Figure::create (const graphics_object& go) -{ - return new Figure (go, new FigureWindow ()); -} + // Visibility + update (figure::properties::ID_VISIBLE); + + connect (this, SIGNAL (asyncUpdate (void)), + this, SLOT (updateContainer (void))); + + win->addReceiver (this); + m_container->addReceiver (this); + } + + Figure::~Figure (void) + { + } -Figure::Figure (const graphics_object& go, FigureWindow* win) - : Object (go, win), m_blockUpdates (false), m_figureToolBar (0), - m_menuBar (0), m_innerRect (), m_outerRect (), m_mouseModeGroup (0) -{ - m_container = new Container (win); - win->setCentralWidget (m_container); + static std::string + mouse_mode_to_string (MouseMode mode) + { + switch (mode) + { + case NoMode: + return "none"; + + case RotateMode: + return "rotate"; - figure::properties& fp = properties<figure> (); + case ZoomInMode: + return "zoom in"; + + case ZoomOutMode: + return "zoom out"; - // Status bar - m_statusBar = win->statusBar (); - int boffset = 0; + case PanMode: + return "pan"; - // Toolbar and menubar - createFigureToolBarAndMenuBar (); - int toffset = 0; + case TextMode: + return "text"; + + case SelectMode: + return "select"; - if (fp.toolbar_is ("figure") || - (fp.toolbar_is ("auto") && fp.menubar_is ("figure") && - ! hasUiControlChildren (fp))) - { - toffset += m_figureToolBar->sizeHint ().height (); - boffset += m_statusBar->sizeHint ().height (); - } - else - { - m_figureToolBar->hide (); - m_statusBar->hide (); - } + default: + break; + } + + return "none"; + } - if (fp.menubar_is ("figure") || hasUiMenuChildren (fp)) - toffset += m_menuBar->sizeHint ().height (); - else - m_menuBar->hide (); + 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 if (mode == "select") + return SelectMode; + else + return NoMode; + } + + QString + Figure::fileName (void) + { + gh_manager::auto_lock lock; + + const figure::properties& fp = properties<figure> (); + + std::string name = fp.get_filename (); + + return QString::fromStdString (name); + } - m_innerRect = boundingBoxToRect (fp.get_boundingbox (true)); - m_outerRect = boundingBoxToRect (fp.get_boundingbox (false)); + void + Figure::setFileName (const QString& name) + { + gh_manager::auto_lock lock; - win->setGeometry (m_innerRect.adjusted (0, -toffset, 0, boffset)); + figure::properties& fp = properties<figure> (); - // Enable mouse tracking unconditionally - enableMouseTracking (); + fp.set_filename (name.toStdString ()); + } - // When this constructor gets called all properties are already - // set, even non default. We force "update" here to get things right. + MouseMode + Figure::mouseMode (void) + { + gh_manager::auto_lock lock; + + const figure::properties& fp = properties<figure> (); + + std::string mode = fp.get___mouse_mode__ (); - // Figure title - update (figure::properties::ID_NUMBERTITLE); + if (mode == "zoom") + { + octave_scalar_map zm = fp.get___zoom_mode__ ().scalar_map_value (); + + std::string direction = zm.getfield ("Direction").string_value (); + + mode += " " + direction; + } - // Decide what keyboard events we listen to - m_container->canvas (m_handle)->setEventMask (0); - update (figure::properties::ID_KEYPRESSFCN); - update (figure::properties::ID_KEYRELEASEFCN); + return mouse_mode_from_string (mode); + } - // modal style - update (figure::properties::ID_WINDOWSTYLE); + void + Figure::createFigureToolBarAndMenuBar (void) + { + QMainWindow* win = qWidget<QMainWindow> (); + + m_figureToolBar = win->addToolBar (tr ("Figure ToolBar")); + m_figureToolBar->setMovable (false); + m_figureToolBar->setFloatable (false); - // Visibility - update (figure::properties::ID_VISIBLE); + 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))); + + 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))); - connect (this, SIGNAL (asyncUpdate (void)), - this, SLOT (updateContainer (void))); + m_menuBar = new MenuBar (win); + win->setMenuBar (m_menuBar); + + QMenu* fileMenu = m_menuBar->addMenu (tr ("&File")); + fileMenu->menuAction ()->setObjectName ("builtinMenu"); + fileMenu->addAction (tr ("&Save"), this, SLOT (fileSaveFigure (bool))); + fileMenu->addAction (tr ("Save &As"), this, SLOT (fileSaveFigureAs (void))); + fileMenu->addSeparator (); + fileMenu->addAction (tr ("&Close Figure"), this, + SLOT (fileCloseFigure (void)), Qt::CTRL | Qt::Key_W); + + QMenu* editMenu = m_menuBar->addMenu (tr ("&Edit")); + editMenu->menuAction ()->setObjectName ("builtinMenu"); + editMenu->addAction (tr ("Cop&y"), this, SLOT (editCopy (bool)), + Qt::CTRL | Qt::Key_C); + editMenu->addSeparator (); + editMenu->addActions (m_mouseModeGroup->actions ()); - win->addReceiver (this); - m_container->addReceiver (this); -} + QMenu* helpMenu = m_menuBar->addMenu (tr ("&Help")); + helpMenu->menuAction ()->setObjectName ("builtinMenu"); + helpMenu->addAction (tr ("About Octave"), this, + SLOT (helpAboutOctave (void))); + + m_menuBar->addReceiver (this); + } + + void + Figure::updateFigureToolBarAndMenuBar (void) + { + if (m_mouseModeGroup) + { + m_blockUpdates = true; + m_mouseModeGroup->setMode (mouseMode ()); + m_blockUpdates = false; + } + } -Figure::~Figure (void) -{ -} + Container* + Figure::innerContainer (void) + { + return m_container; + } -static std::string -mouse_mode_to_string (MouseMode mode) -{ - switch (mode) + void + Figure::redraw (void) + { + Canvas* canvas = m_container->canvas (m_handle); + + if (canvas) + { + canvas->redraw (); + //canvas->setMouseMode (RotateMode); + } + + foreach (QFrame* frame, + qWidget<QWidget> ()->findChildren<QFrame*> ()) { - case NoMode: - return "none"; - - case RotateMode: - return "rotate"; - - case ZoomInMode: - return "zoom in"; - - case ZoomOutMode: - return "zoom out"; + if (frame->objectName () == "UIPanel" + || frame->objectName () == "UIButtonGroup") + { + Object* obj = Object::fromQObject (frame); - case PanMode: - return "pan"; - - case TextMode: - return "text"; - - case SelectMode: - return "select"; - - default: - break; + if (obj) + obj->slotRedraw (); + } } - return "none"; -} + updateFigureToolBarAndMenuBar (); + } -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 if (mode == "select") - return SelectMode; - else - return NoMode; -} - -QString -Figure::fileName (void) -{ - gh_manager::auto_lock lock; - - const figure::properties& fp = properties<figure> (); - - std::string name = fp.get_filename (); - - return QString::fromStdString (name); -} - -void -Figure::setFileName (const QString& name) -{ - gh_manager::auto_lock lock; - - figure::properties& fp = properties<figure> (); - - fp.set_filename (name.toStdString ()); -} + void + Figure::print (const QString& file_cmd, const QString& term) + { + Canvas* canvas = m_container->canvas (m_handle); -MouseMode -Figure::mouseMode (void) -{ - gh_manager::auto_lock lock; - - const figure::properties& fp = properties<figure> (); - - std::string mode = fp.get___mouse_mode__ (); - - if (mode == "zoom") - { - octave_scalar_map zm = fp.get___zoom_mode__ ().scalar_map_value (); - - std::string direction = zm.getfield ("Direction").string_value (); - - mode += " " + direction; - } - - return mouse_mode_from_string (mode); -} + if (canvas) + canvas->print (file_cmd, term); + } -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 ()); + void + Figure::beingDeleted (void) + { + Canvas* canvas = m_container->canvas (m_handle.value (), false); - QAction *toggle_axes = m_figureToolBar->addAction (tr ("Axes")); - connect (toggle_axes, SIGNAL (triggered (void)), - this, SLOT (toggleAxes (void))); - - 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); + if (canvas) + canvas->blockRedraw (true); - QMenu* fileMenu = m_menuBar->addMenu (tr ("&File")); - fileMenu->menuAction ()->setObjectName ("builtinMenu"); - fileMenu->addAction (tr ("&Save"), this, SLOT (fileSaveFigure (bool))); - fileMenu->addAction (tr ("Save &As"), this, SLOT (fileSaveFigureAs (void))); - fileMenu->addSeparator (); - fileMenu->addAction (tr ("&Close Figure"), this, - SLOT (fileCloseFigure (void)), Qt::CTRL | Qt::Key_W); - - QMenu* editMenu = m_menuBar->addMenu (tr ("&Edit")); - editMenu->menuAction ()->setObjectName ("builtinMenu"); - editMenu->addAction (tr ("Cop&y"), this, SLOT (editCopy (bool)), - Qt::CTRL | Qt::Key_C); - editMenu->addSeparator (); - editMenu->addActions (m_mouseModeGroup->actions ()); - - QMenu* helpMenu = m_menuBar->addMenu (tr ("&Help")); - helpMenu->menuAction ()->setObjectName ("builtinMenu"); - helpMenu->addAction (tr ("About Octave"), this, - SLOT (helpAboutOctave (void))); - - m_menuBar->addReceiver (this); -} - -void -Figure::updateFigureToolBarAndMenuBar (void) -{ - if (m_mouseModeGroup) - { - m_blockUpdates = true; - m_mouseModeGroup->setMode (mouseMode ()); - m_blockUpdates = false; - } -} - -Container* -Figure::innerContainer (void) -{ - return m_container; -} - -void -Figure::redraw (void) -{ - Canvas* canvas = m_container->canvas (m_handle); - - if (canvas) - { - canvas->redraw (); - //canvas->setMouseMode (RotateMode); - } + m_menuBar->removeReceiver (this); + m_container->removeReceiver (this); + qWidget<FigureWindow> ()->removeReceiver (this); + } - foreach (QFrame* frame, - qWidget<QWidget> ()->findChildren<QFrame*> ()) - { - if (frame->objectName () == "UIPanel" || frame->objectName () == "UIButtonGroup") { - Object* obj = Object::fromQObject (frame); - - if (obj) - obj->slotRedraw (); - } - } - - updateFigureToolBarAndMenuBar (); -} - -void -Figure::print (const QString& file_cmd, const QString& term) -{ - Canvas* canvas = m_container->canvas (m_handle); - - if (canvas) - canvas->print (file_cmd, term); -} + void + Figure::update (int pId) + { + if (m_blockUpdates) + return; -void -Figure::beingDeleted (void) -{ - Canvas* canvas = m_container->canvas (m_handle.value (), false); - - if (canvas) - canvas->blockRedraw (true); - - m_menuBar->removeReceiver (this); - m_container->removeReceiver (this); - qWidget<FigureWindow> ()->removeReceiver (this); -} + figure::properties& fp = properties<figure> (); + QMainWindow* win = qWidget<QMainWindow> (); -void -Figure::update (int pId) -{ - if (m_blockUpdates) - return; + m_blockUpdates = true; - figure::properties& fp = properties<figure> (); - QMainWindow* win = qWidget<QMainWindow> (); - - m_blockUpdates = true; - - switch (pId) - { - case figure::properties::ID_POSITION: + switch (pId) + { + case figure::properties::ID_POSITION: { m_innerRect = boundingBoxToRect (fp.get_boundingbox (true)); int toffset = 0; int boffset = 0; foreach (QToolBar* tb, win->findChildren<QToolBar*> ()) - if (! tb->isHidden ()) - toffset += tb->sizeHint ().height (); + if (! tb->isHidden ()) + toffset += tb->sizeHint ().height (); if (! m_menuBar->isHidden ()) toffset += m_menuBar->sizeHint ().height (); @@ -437,329 +439,258 @@ win->setGeometry (m_innerRect.adjusted (0, -toffset, 0, boffset)); } - break; + break; - case figure::properties::ID_NAME: - case figure::properties::ID_NUMBERTITLE: - win->setWindowTitle (Utils::fromStdString (fp.get_title ())); - break; + case figure::properties::ID_NAME: + case figure::properties::ID_NUMBERTITLE: + win->setWindowTitle (Utils::fromStdString (fp.get_title ())); + break; - case figure::properties::ID_VISIBLE: - if (fp.is_visible ()) - QTimer::singleShot (0, win, SLOT (show ())); - else - win->hide (); - break; + case figure::properties::ID_VISIBLE: + if (fp.is_visible ()) + QTimer::singleShot (0, win, SLOT (show ())); + else + win->hide (); + break; - case figure::properties::ID_TOOLBAR: - if (fp.toolbar_is ("none")) - showFigureToolBar (false); - else if (fp.toolbar_is ("figure")) - showFigureToolBar (true); - else // "auto" - showFigureToolBar (! hasUiControlChildren (fp) && - fp.menubar_is ("figure")); - break; + case figure::properties::ID_TOOLBAR: + if (fp.toolbar_is ("none")) + showFigureToolBar (false); + else if (fp.toolbar_is ("figure")) + showFigureToolBar (true); + else // "auto" + showFigureToolBar (! hasUiControlChildren (fp) && + fp.menubar_is ("figure")); + break; - case figure::properties::ID_MENUBAR: - showMenuBar (fp.menubar_is ("figure")); - if (fp.toolbar_is ("auto")) - showFigureToolBar (fp.menubar_is ("figure")); - break; + case figure::properties::ID_MENUBAR: + showMenuBar (fp.menubar_is ("figure")); + if (fp.toolbar_is ("auto")) + showFigureToolBar (fp.menubar_is ("figure")); + break; - case figure::properties::ID_KEYPRESSFCN: - if (fp.get_keypressfcn ().is_empty ()) - m_container->canvas (m_handle)->clearEventMask (Canvas::KeyPress); - else - m_container->canvas (m_handle)->addEventMask (Canvas::KeyPress); - break; + case figure::properties::ID_KEYPRESSFCN: + if (fp.get_keypressfcn ().is_empty ()) + m_container->canvas (m_handle)->clearEventMask (Canvas::KeyPress); + else + m_container->canvas (m_handle)->addEventMask (Canvas::KeyPress); + break; - case figure::properties::ID_KEYRELEASEFCN: - if (fp.get_keyreleasefcn ().is_empty ()) - m_container->canvas (m_handle)->clearEventMask (Canvas::KeyRelease); - else - m_container->canvas (m_handle)->addEventMask (Canvas::KeyRelease); - break; + case figure::properties::ID_KEYRELEASEFCN: + if (fp.get_keyreleasefcn ().is_empty ()) + m_container->canvas (m_handle)->clearEventMask (Canvas::KeyRelease); + else + m_container->canvas (m_handle)->addEventMask (Canvas::KeyRelease); + break; - case figure::properties::ID_WINDOWSTYLE: - if (fp.windowstyle_is ("modal")) - { - bool is_visible = win->isVisible (); + case figure::properties::ID_WINDOWSTYLE: + if (fp.windowstyle_is ("modal")) + { + bool is_visible = win->isVisible (); - // if window is already visible, need to hide and reshow it in order to - // make it use the modal settings - if (is_visible) - win->setVisible (false); + // if window is already visible, need to hide and reshow it in order to + // make it use the modal settings + if (is_visible) + win->setVisible (false); - win->setWindowModality (Qt::ApplicationModal); - win->setVisible (is_visible); - } - else - win->setWindowModality (Qt::NonModal); + win->setWindowModality (Qt::ApplicationModal); + win->setVisible (is_visible); + } + else + win->setWindowModality (Qt::NonModal); - break; + break; - default: - break; - } + default: + break; + } - m_blockUpdates = false; -} + m_blockUpdates = false; + } -void -Figure::showFigureToolBar (bool visible) -{ - if ((! m_figureToolBar->isHidden ()) != visible) - { - int dy1 = m_figureToolBar->sizeHint ().height (); - int dy2 = m_statusBar->sizeHint ().height (); - QRect r = qWidget<QWidget> ()->geometry (); + void + Figure::showFigureToolBar (bool visible) + { + if ((! m_figureToolBar->isHidden ()) != visible) + { + int dy1 = m_figureToolBar->sizeHint ().height (); + int dy2 = m_statusBar->sizeHint ().height (); + QRect r = qWidget<QWidget> ()->geometry (); - if (! visible) - r.adjust (0, dy1, 0, -dy2); - else - r.adjust (0, -dy1, 0, dy2); + if (! visible) + r.adjust (0, dy1, 0, -dy2); + else + r.adjust (0, -dy1, 0, dy2); - m_blockUpdates = true; - qWidget<QWidget> ()->setGeometry (r); - m_figureToolBar->setVisible (visible); - m_statusBar->setVisible (visible); - m_blockUpdates = false; + m_blockUpdates = true; + qWidget<QWidget> ()->setGeometry (r); + m_figureToolBar->setVisible (visible); + m_statusBar->setVisible (visible); + m_blockUpdates = false; - updateBoundingBox (false); - } -} + updateBoundingBox (false); + } + } -void -Figure::showMenuBar (bool visible) -{ - int h1 = m_menuBar->sizeHint ().height (); + void + Figure::showMenuBar (bool visible) + { + int h1 = m_menuBar->sizeHint ().height (); - foreach (QAction* a, m_menuBar->actions ()) + foreach (QAction* a, m_menuBar->actions ()) if (a->objectName () == "builtinMenu") a->setVisible (visible); - int h2 = m_menuBar->sizeHint ().height (); - - if (! visible) - visible = hasUiMenuChildren (properties<figure> ()); + int h2 = m_menuBar->sizeHint ().height (); - if (! m_menuBar->isHidden ()) - { - int dy = qMax (h1, h2); - QRect r = qWidget<QWidget> ()->geometry (); + if (! visible) + visible = hasUiMenuChildren (properties<figure> ()); - //qDebug () << "Figure::showMenuBar:" << r; - if (! visible) - r.adjust (0, dy, 0, 0); - else - r.adjust (0, -dy, 0, 0); - //qDebug () << "Figure::showMenuBar(adjusted):" << r; + if (! m_menuBar->isHidden ()) + { + int dy = qMax (h1, h2); + QRect r = qWidget<QWidget> ()->geometry (); - m_blockUpdates = true; - qWidget<QWidget> ()->setGeometry (r); - m_menuBar->setVisible (visible); - m_blockUpdates = false; + //qDebug () << "Figure::showMenuBar:" << r; + if (! visible) + r.adjust (0, dy, 0, 0); + else + r.adjust (0, -dy, 0, 0); + //qDebug () << "Figure::showMenuBar(adjusted):" << r; - updateBoundingBox (false); - } -} + m_blockUpdates = true; + qWidget<QWidget> ()->setGeometry (r); + m_menuBar->setVisible (visible); + m_blockUpdates = false; -void -Figure::updateMenuBar (void) -{ - gh_manager::auto_lock lock; - graphics_object go = object (); - - if (go.valid_object ()) - showMenuBar (Utils::properties<figure> (go).menubar_is ("figure")); -} + updateBoundingBox (false); + } + } -void -Figure::updateStatusBar (ColumnVector pt) -{ - if (! m_statusBar->isHidden ()) - m_statusBar->showMessage (QString ("(%1, %2)") - .arg (pt(0), 0, 'g', 5) - .arg (pt(1), 0, 'g', 5)); -} + void + Figure::updateMenuBar (void) + { + gh_manager::auto_lock lock; + graphics_object go = object (); -QWidget* -Figure::menu (void) -{ - return qWidget<QMainWindow> ()->menuBar (); -} + if (go.valid_object ()) + showMenuBar (Utils::properties<figure> (go).menubar_is ("figure")); + } -struct UpdateBoundingBoxData -{ - Matrix m_bbox; - bool m_internal; - graphics_handle m_handle; - Figure* m_figure; -}; - -void -Figure::updateBoundingBoxHelper (void* data) -{ - gh_manager::auto_lock lock; + void + Figure::updateStatusBar (ColumnVector pt) + { + if (! m_statusBar->isHidden ()) + m_statusBar->showMessage (QString ("(%1, %2)") + .arg (pt(0), 0, 'g', 5) + .arg (pt(1), 0, 'g', 5)); + } - UpdateBoundingBoxData* d = reinterpret_cast<UpdateBoundingBoxData*> (data); - graphics_object go = gh_manager::get_object (d->m_handle); - - if (go.valid_object ()) - { - figure::properties& fp = Utils::properties<figure> (go); - - fp.set_boundingbox (d->m_bbox, d->m_internal, false); - } - - delete d; -} + QWidget* + Figure::menu (void) + { + return qWidget<QMainWindow> ()->menuBar (); + } -void -Figure::updateBoundingBox (bool internal, int flags) -{ - QWidget* win = qWidget<QWidget> (); - Matrix bb (1, 4); - - if (internal) - { - QRect r = m_innerRect; - - if (flags & UpdateBoundingBoxPosition) - r.moveTopLeft (win->mapToGlobal (m_container->pos ())); - if (flags & UpdateBoundingBoxSize) - r.setSize (m_container->size ()); + struct UpdateBoundingBoxData + { + Matrix m_bbox; + bool m_internal; + graphics_handle m_handle; + Figure* m_figure; + }; - if (r.isValid () && r != m_innerRect) - { - m_innerRect = r; + void + Figure::updateBoundingBoxHelper (void* data) + { + gh_manager::auto_lock lock; - bb(0) = r.x (); - bb(1) = r.y (); - bb(2) = r.width (); - bb(3) = r.height (); - } - else - return; - } - else - { - QRect r = m_outerRect; + UpdateBoundingBoxData* d = reinterpret_cast<UpdateBoundingBoxData*> (data); + graphics_object go = gh_manager::get_object (d->m_handle); + + if (go.valid_object ()) + { + figure::properties& fp = Utils::properties<figure> (go); + + fp.set_boundingbox (d->m_bbox, d->m_internal, false); + } - if (flags & UpdateBoundingBoxPosition) - r.moveTopLeft (win->pos ()); - if (flags & UpdateBoundingBoxSize) - r.setSize (win->frameGeometry ().size ()); - - if (r.isValid () && r != m_outerRect) - { - m_outerRect = r; + delete d; + } - bb(0) = r.x (); - bb(1) = r.y (); - bb(2) = r.width (); - bb(3) = r.height (); - } - else - return; - } + void + Figure::updateBoundingBox (bool internal, int flags) + { + QWidget* win = qWidget<QWidget> (); + Matrix bb (1, 4); - UpdateBoundingBoxData* d = new UpdateBoundingBoxData (); - - d->m_bbox = bb; - d->m_internal = internal; - d->m_handle = m_handle; - d->m_figure = this; + if (internal) + { + QRect r = m_innerRect; - gh_manager::post_function (Figure::updateBoundingBoxHelper, d); -} + if (flags & UpdateBoundingBoxPosition) + r.moveTopLeft (win->mapToGlobal (m_container->pos ())); + if (flags & UpdateBoundingBoxSize) + r.setSize (m_container->size ()); + + if (r.isValid () && r != m_innerRect) + { + m_innerRect = r; -bool -Figure::eventNotifyBefore (QObject* obj, QEvent* xevent) -{ - if (! m_blockUpdates) - { - if (obj == m_container) - { - // Do nothing... - } - else if (obj == m_menuBar) - { - switch (xevent->type ()) - { - case QEvent::ActionRemoved: - { - QAction* a = dynamic_cast<QActionEvent*> (xevent)->action (); - - if (! a->isSeparator () - && a->objectName () != "builtinMenu") - updateMenuBar (); - } - break; + bb(0) = r.x (); + bb(1) = r.y (); + bb(2) = r.width (); + bb(3) = r.height (); + } + else + return; + } + else + { + QRect r = m_outerRect; - default: - break; - } - } - else - { - switch (xevent->type ()) - { - case QEvent::Close: - xevent->ignore (); - gh_manager::post_callback (m_handle, "closerequestfcn"); - return true; + if (flags & UpdateBoundingBoxPosition) + r.moveTopLeft (win->pos ()); + if (flags & UpdateBoundingBoxSize) + r.setSize (win->frameGeometry ().size ()); + + if (r.isValid () && r != m_outerRect) + { + m_outerRect = r; - default: - break; - } - } - } + bb(0) = r.x (); + bb(1) = r.y (); + bb(2) = r.width (); + bb(3) = r.height (); + } + else + return; + } - return false; -} + UpdateBoundingBoxData* d = new UpdateBoundingBoxData (); -void -Figure::eventNotifyAfter (QObject* watched, QEvent* xevent) -{ - if (! m_blockUpdates) - { - if (watched == m_container) - { - switch (xevent->type ()) - { - case QEvent::Resize: - updateBoundingBox (true, UpdateBoundingBoxSize); - break; + d->m_bbox = bb; + d->m_internal = internal; + d->m_handle = m_handle; + d->m_figure = this; - case QEvent::ChildAdded: - if (dynamic_cast<QChildEvent*> (xevent)->child - ()->isWidgetType()) - { - gh_manager::auto_lock lock; - update (figure::properties::ID_TOOLBAR); + gh_manager::post_function (Figure::updateBoundingBoxHelper, d); + } - enableMouseTracking (); - } - - case QEvent::ChildRemoved: - if (dynamic_cast<QChildEvent*> (xevent)->child - ()->isWidgetType()) - { - gh_manager::auto_lock lock; - update (figure::properties::ID_TOOLBAR); - } - - default: - break; - } - } - else if (watched == m_menuBar) - { - switch (xevent->type ()) - { - case QEvent::ActionAdded: + bool + Figure::eventNotifyBefore (QObject* obj, QEvent* xevent) + { + if (! m_blockUpdates) + { + if (obj == m_container) + { + // Do nothing... + } + else if (obj == m_menuBar) + { + switch (xevent->type ()) + { + case QEvent::ActionRemoved: { QAction* a = dynamic_cast<QActionEvent*> (xevent)->action (); @@ -767,247 +698,319 @@ && a->objectName () != "builtinMenu") updateMenuBar (); } - break; + break; + + default: + break; + } + } + else + { + switch (xevent->type ()) + { + case QEvent::Close: + xevent->ignore (); + gh_manager::post_callback (m_handle, "closerequestfcn"); + return true; + + default: + break; + } + } + } - default: - break; - } - } - else - { - switch (xevent->type ()) - { - case QEvent::Move: - updateBoundingBox (false, UpdateBoundingBoxPosition); - updateBoundingBox (true, UpdateBoundingBoxPosition); - break; + return false; + } - case QEvent::Resize: - updateBoundingBox (false, UpdateBoundingBoxSize); - break; + void + Figure::eventNotifyAfter (QObject* watched, QEvent* xevent) + { + if (! m_blockUpdates) + { + if (watched == m_container) + { + switch (xevent->type ()) + { + case QEvent::Resize: + updateBoundingBox (true, UpdateBoundingBoxSize); + break; - default: - break; - } - } - } -} + case QEvent::ChildAdded: + if (dynamic_cast<QChildEvent*> (xevent)->child + ()->isWidgetType()) + { + gh_manager::auto_lock lock; + update (figure::properties::ID_TOOLBAR); + + enableMouseTracking (); + } -void -Figure::helpAboutOctave (void) -{ - std::string message - = octave_name_version_copyright_copying_warranty_and_bugs (true); + case QEvent::ChildRemoved: + if (dynamic_cast<QChildEvent*> (xevent)->child + ()->isWidgetType()) + { + gh_manager::auto_lock lock; + update (figure::properties::ID_TOOLBAR); + } - QMessageBox::about (qWidget<QMainWindow> (), tr ("About Octave"), - QString::fromStdString (message)); -} - -void -Figure::setMouseMode (MouseMode mode) -{ - if (m_blockUpdates) - return; - - gh_manager::auto_lock lock; + default: + break; + } + } + else if (watched == m_menuBar) + { + switch (xevent->type ()) + { + case QEvent::ActionAdded: + { + QAction* a = dynamic_cast<QActionEvent*> (xevent)->action (); - figure::properties& fp = properties<figure> (); - - fp.set___mouse_mode__ (mouse_mode_to_string (mode)); - - Canvas* canvas = m_container->canvas (m_handle); + if (! a->isSeparator () + && a->objectName () != "builtinMenu") + updateMenuBar (); + } + break; - if (canvas) - canvas->setCursor (mode); -} + default: + break; + } + } + else + { + switch (xevent->type ()) + { + case QEvent::Move: + updateBoundingBox (false, UpdateBoundingBoxPosition); + updateBoundingBox (true, UpdateBoundingBoxPosition); + break; -void -Figure::fileSaveFigure (bool prompt) -{ - QString file = fileName (); + case QEvent::Resize: + updateBoundingBox (false, UpdateBoundingBoxSize); + break; - if (file.isEmpty ()) - { - prompt = true; + default: + break; + } + } + } + } - file = "untitled.pdf"; - } + void + Figure::helpAboutOctave (void) + { + std::string message + = octave_name_version_copyright_copying_warranty_and_bugs (true); + + QMessageBox::about (qWidget<QMainWindow> (), tr ("About Octave"), + QString::fromStdString (message)); + } - if (prompt || file.isEmpty ()) - { - QFileInfo finfo (file); + void + Figure::setMouseMode (MouseMode mode) + { + if (m_blockUpdates) + return; - file = QFileDialog::getSaveFileName (qWidget<FigureWindow> (), - tr ("Save Figure As"), - finfo.absoluteFilePath (), 0, 0, - QFileDialog::DontUseNativeDialog); - } + 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 (! file.isEmpty ()) - { - QFileInfo finfo (file); + if (canvas) + canvas->setCursor (mode); + } - setFileName (finfo.absoluteFilePath ()); + void + Figure::fileSaveFigure (bool prompt) + { + QString file = fileName (); + + if (file.isEmpty ()) + { + prompt = true; - octave_link::post_event (this, &Figure::save_figure_callback, - file.toStdString ()); - } -} + file = "untitled.pdf"; + } -void -Figure::save_figure_callback (const std::string& file) -{ - figure::properties& fp = properties<figure> (); - octave_value fnum = fp.get___myhandle__ ().as_octave_value (); + if (prompt || file.isEmpty ()) + { + QFileInfo finfo (file); - Ffeval (ovl ("print", fnum, file)); -} + file = QFileDialog::getSaveFileName (qWidget<FigureWindow> (), + tr ("Save Figure As"), + finfo.absoluteFilePath (), 0, 0, + QFileDialog::DontUseNativeDialog); + } -void -Figure::copy_figure_callback (const std::string& format) -{ - std::string msg; + if (! file.isEmpty ()) + { + QFileInfo finfo (file); - std::string file = octave::sys::tempnam ("", "oct-", msg) + "." + format; + setFileName (finfo.absoluteFilePath ()); + + octave_link::post_event (this, &Figure::save_figure_callback, + file.toStdString ()); + } + } - if (file.empty ()) - { - // Report error? - return; - } + void + Figure::save_figure_callback (const std::string& file) + { + figure::properties& fp = properties<figure> (); + octave_value fnum = fp.get___myhandle__ ().as_octave_value (); - save_figure_callback (file); + Ffeval (ovl ("print", fnum, file)); + } + + void + Figure::copy_figure_callback (const std::string& format) + { + std::string msg; + + std::string file = octave::sys::tempnam ("", "oct-", msg) + "." + format; - octave_link::copy_image_to_clipboard (file); -} + if (file.empty ()) + { + // Report error? + return; + } -void -Figure::fileSaveFigureAs (void) -{ - fileSaveFigure (true); -} + save_figure_callback (file); + + octave_link::copy_image_to_clipboard (file); + } -void -Figure::fileCloseFigure (void) -{ - qWidget<QMainWindow> ()->close (); -} + void + Figure::fileSaveFigureAs (void) + { + fileSaveFigure (true); + } -void -Figure::editCopy (bool /* choose_format */) -{ - QString format = "png"; + void + Figure::fileCloseFigure (void) + { + qWidget<QMainWindow> ()->close (); + } + + void + Figure::editCopy (bool /* choose_format */) + { + QString format = "png"; #if 0 - // FIXME: allow choice of image formats. + // FIXME: allow choice of image formats. - if (choose_format) - { - QFileInfo finfo (file); + if (choose_format) + { + QFileInfo finfo (file); - format = QFileDialog::getSaveFileName (qWidget<FigureWindow> (), - tr ("Save Figure As"), - finfo.absoluteFilePath (), 0, 0, - QFileDialog::DontUseNativeDialog); - } + format = QFileDialog::getSaveFileName (qWidget<FigureWindow> (), + tr ("Save Figure As"), + finfo.absoluteFilePath (), 0, 0, + QFileDialog::DontUseNativeDialog); + } #endif - octave_link::post_event (this, &Figure::copy_figure_callback, - format.toStdString ()); -} + octave_link::post_event (this, &Figure::copy_figure_callback, + format.toStdString ()); + } -void -Figure::addCustomToolBar (QToolBar* bar, bool visible) -{ - QMainWindow* win = qWidget<QMainWindow> (); + void + Figure::addCustomToolBar (QToolBar* bar, bool visible) + { + QMainWindow* win = qWidget<QMainWindow> (); - if (! visible) - win->addToolBar (bar); - else - { - QSize sz = bar->sizeHint (); - QRect r = win->geometry (); - //qDebug () << "Figure::addCustomToolBar:" << r; + if (! visible) + win->addToolBar (bar); + else + { + QSize sz = bar->sizeHint (); + QRect r = win->geometry (); + //qDebug () << "Figure::addCustomToolBar:" << r; - r.adjust (0, -sz.height (), 0, 0); + r.adjust (0, -sz.height (), 0, 0); - m_blockUpdates = true; - win->setGeometry (r); - win->addToolBarBreak (); - win->addToolBar (bar); - m_blockUpdates = false; + m_blockUpdates = true; + win->setGeometry (r); + win->addToolBarBreak (); + win->addToolBar (bar); + m_blockUpdates = false; - //qDebug () << "Figure::addCustomToolBar:" << win->geometry (); - updateBoundingBox (false); - } -} + //qDebug () << "Figure::addCustomToolBar:" << win->geometry (); + updateBoundingBox (false); + } + } -void -Figure::showCustomToolBar (QToolBar* bar, bool visible) -{ - QMainWindow* win = qWidget<QMainWindow> (); + void + Figure::showCustomToolBar (QToolBar* bar, bool visible) + { + QMainWindow* win = qWidget<QMainWindow> (); - if ((! bar->isHidden ()) != visible) - { - QSize sz = bar->sizeHint (); - QRect r = win->geometry (); + if ((! bar->isHidden ()) != visible) + { + QSize sz = bar->sizeHint (); + QRect r = win->geometry (); - if (visible) - r.adjust (0, -sz.height (), 0, 0); - else - r.adjust (0, sz.height (), 0, 0); + if (visible) + r.adjust (0, -sz.height (), 0, 0); + else + r.adjust (0, sz.height (), 0, 0); - m_blockUpdates = true; - win->setGeometry (r); - bar->setVisible (visible); - m_blockUpdates = false; + m_blockUpdates = true; + win->setGeometry (r); + bar->setVisible (visible); + m_blockUpdates = false; - updateBoundingBox (false); - } -} + updateBoundingBox (false); + } + } -void -Figure::updateContainer (void) -{ - redraw (); -} + void + Figure::updateContainer (void) + { + redraw (); + } -void -Figure::toggleAxes (void) -{ - Canvas* canvas = m_container->canvas (m_handle); + void + Figure::toggleAxes (void) + { + Canvas* canvas = m_container->canvas (m_handle); - if (canvas) - canvas->toggleAxes (m_handle); -} + if (canvas) + canvas->toggleAxes (m_handle); + } -void -Figure::toggleGrid (void) -{ - Canvas* canvas = m_container->canvas (m_handle); + void + Figure::toggleGrid (void) + { + Canvas* canvas = m_container->canvas (m_handle); - if (canvas) - canvas->toggleGrid (m_handle); -} + if (canvas) + canvas->toggleGrid (m_handle); + } -void -Figure::autoAxes (void) -{ - Canvas* canvas = m_container->canvas (m_handle); + void + Figure::autoAxes (void) + { + Canvas* canvas = m_container->canvas (m_handle); - if (canvas) - canvas->autoAxes (m_handle); -} + if (canvas) + canvas->autoAxes (m_handle); + } -void -Figure::enableMouseTracking (void) -{ - // Enable mouse tracking on every widgets - m_container->setMouseTracking (true); - m_container->canvas (m_handle)->qWidget ()->setMouseTracking (true); - foreach (QWidget* w, m_container->findChildren<QWidget*> ()) + void + Figure::enableMouseTracking (void) + { + // Enable mouse tracking on every widgets + m_container->setMouseTracking (true); + m_container->canvas (m_handle)->qWidget ()->setMouseTracking (true); + foreach (QWidget* w, m_container->findChildren<QWidget*> ()) { w->setMouseTracking (true); } -} + } }; // namespace QtHandles +