Mercurial > octave
view libgui/graphics/Object.cc @ 27335:50216d7a2f6b
eliminate static wrapper functions in gh_manager class
This is a large but straightforward change to eliminate the remains of
the singleton pattern that was used for the gh_manager class. All
static functions in the gh_manager class that previously used the
"instance" function to access the gh_manager object stored in the
global interpreter object and then called the corresponding "do_"
functions have been eliminated. The "do_" prefix has been removed
from the normal member functions and all uses of the static functions
(calls of the form gh_manager::X) have been replaced with a call to the
member function. The gh_manager object is accessed through the
interpreter object and there is a new __get_gh_manager__ convenience
function defined in the intepreter-private.cc file.
Additionally, instead of using the gh_manager::auto_lock class, we
access the mutex variable associated with the gh_manager object and
pass it to the octave::autolock constructor to manage scoped locks for
the gh_manager class.
The following interpreter functions are now "methods" and require the
interpreter as the first argument: F__calc_dimensions__,
F__fltk_check__, F__get__, F__get_frame__, F__go_axes__,
F__go_delete__, F__go_execute_callback__, F__go_figure__,
F__go_figure_handles__, F__go_handles__, F__go_hggroup__,
F__go_image__, F__go_light__, F__go_line__, F__go_patch__,
F__go_post_callback__, F__go_surface__, F__go_text__,
F__go_uibuttongroup__, F__go_uicontextmenu__, F__go_uicontrol__,
F__go_uimenu__, F__go_uipanel__, F__go_uipushtool__, F__go_uitable__,
F__go_uitoggletool__, F__go_uitoolbar__, F__image_pixel_size__,
F__show_figure__, F__shutdown_qt__, F__update_normals__, F__zoom__,
Faddlistener, Faddproperty, Fdellistener, Fdrawnow, Fget, Fishghandle,
Fkbhit, Fpause, Freset, Fset, and Fwaitfor.
Files affected:
BaseControl.cc, ButtonControl.cc, ButtonGroup.cc, Canvas.cc,
Container.cc, ContextMenu.cc, Figure.cc, GLCanvas.cc, Object.cc,
Panel.cc, QtHandlesUtils.h, SliderControl.cc, Table.cc,
__init_qt__.cc, qt-graphics-toolkit.cc, main-window.cc, gl-render.cc,
gl-render.h, gl2ps-print.cc, graphics-toolkit.cc, graphics.cc,
graphics.in.h, input.cc, interpreter.cc, sysdep.cc, utils.cc,
__init_fltk__.cc.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 09 Aug 2019 10:36:08 -0400 |
parents | 718116e9c7d3 |
children | 1952e110d346 |
line wrap: on
line source
/* Copyright (C) 2011-2019 Michael Goffioul This file is part of Octave. Octave is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Octave is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Octave; see the file COPYING. If not, see <https://www.gnu.org/licenses/>. */ #if defined (HAVE_CONFIG_H) # include "config.h" #endif #include <QString> #include <QVariant> #include "Object.h" #include "QtHandlesUtils.h" #include "qt-graphics-toolkit.h" #include "graphics.h" #include "interpreter-private.h" namespace QtHandles { Object::Object (const graphics_object& go, QObject *obj) : QObject (), m_go (go), m_handle (go.get_handle ()), m_qobject (nullptr) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::Object"); octave::autolock guard (gh_mgr.graphics_lock ()); if (! guard) qCritical ("QtHandles::Object::Object: " "creating Object (h=%g) without a valid lock!!!", m_handle.value ()); init (obj); } void Object::init (QObject *obj, bool) { if (m_qobject) qCritical ("QtHandles::Object::init: " "resetting QObject while in invalid state"); m_qobject = obj; if (m_qobject) { m_qobject->setProperty ("QtHandles::Object", qVariantFromValue<void*> (this)); connect (m_qobject, SIGNAL (destroyed (QObject*)), SLOT (objectDestroyed (QObject*))); } } Object::~Object (void) { } graphics_object Object::object (void) const { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::object"); octave::autolock guard (gh_mgr.graphics_lock (), false); if (! guard) qCritical ("QtHandles::Object::object: " "accessing graphics object (h=%g) without a valid lock!!!", m_handle.value ()); return m_go; } void Object::slotUpdate (int pId) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::slotUpdate"); octave::autolock guard (gh_mgr.graphics_lock ()); switch (pId) { // Special case for objects being deleted, as it's very likely // that the graphics_object already has been destroyed when this // is executed (because of the async behavior). case base_properties::ID_BEINGDELETED: beingDeleted (); break; default: if (object ().valid_object ()) update (pId); break; } } void Object::slotFinalize (void) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::slotFinalize"); octave::autolock guard (gh_mgr.graphics_lock ()); finalize (); } void Object::slotRedraw (void) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::slotRedraw"); octave::autolock guard (gh_mgr.graphics_lock ()); if (object ().valid_object ()) redraw (); } void Object::slotShow (void) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::slotShow"); octave::autolock guard (gh_mgr.graphics_lock ()); if (object ().valid_object ()) show (); } void Object::slotPrint (const QString& file_cmd, const QString& term) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::slotPrint"); octave::autolock guard (gh_mgr.graphics_lock ()); if (object ().valid_object ()) print (file_cmd, term); } void Object::update (int /* pId */) { } void Object::finalize (void) { if (m_qobject) { delete m_qobject; m_qobject = nullptr; } deleteLater (); } void Object::redraw (void) { } void Object::show (void) { } void Object::print (const QString& /* file_cmd */, const QString& /* term */) { } void Object::beingDeleted (void) { } void Object::objectDestroyed (QObject *obj) { if (obj && obj == m_qobject) m_qobject = nullptr; } Object* Object::parentObject (const graphics_object& go) { gh_manager& gh_mgr = octave::__get_gh_manager__ ("Object::parentObject"); octave::autolock guard (gh_mgr.graphics_lock ()); Object *parent = qt_graphics_toolkit::toolkitObject (gh_mgr.get_object (go.get_parent ())); return parent; } Object* Object::fromQObject (QObject *obj) { QVariant v = obj->property ("QtHandles::Object"); if (v.isValid ()) return reinterpret_cast<Object *> (qvariant_cast<void*> (v)); return nullptr; } }