From 22b3a5faced064621b61ed8369e8678c07bbd95f Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Tue, 4 Feb 2020 21:33:14 +0100 Subject: [PATCH] WIP: refactoring - at least some local context menus for detached views --- src/ant/ant/antPlugin.cc | 10 ++++++---- src/edt/edt/edtPlugin.cc | 6 +++--- src/lay/lay/layTechnologyController.cc | 4 ++-- src/laybasic/laybasic/layBookmarksView.cc | 6 ++++-- .../laybasic/layHierarchyControlPanel.cc | 6 ++++-- src/laybasic/laybasic/layLayerControlPanel.cc | 12 ++++++++---- src/laybasic/laybasic/layLayoutView.cc | 17 +++++++++++++++++ src/laybasic/laybasic/layLayoutView.h | 9 +++++++++ src/laybasic/laybasic/layLibrariesView.cc | 6 ++++-- 9 files changed, 57 insertions(+), 19 deletions(-) diff --git a/src/ant/ant/antPlugin.cc b/src/ant/ant/antPlugin.cc index af283337f..5a9391fff 100644 --- a/src/ant/ant/antPlugin.cc +++ b/src/ant/ant/antPlugin.cc @@ -150,10 +150,6 @@ PluginDeclaration::configure (const std::string &name, const std::string &value) void PluginDeclaration::config_finalize () { - if (!lay::AbstractMenuProvider::instance ()) { - return; - } - if (m_templates_updated) { update_menu (); @@ -217,6 +213,9 @@ void PluginDeclaration::update_current_template () { lay::AbstractMenuProvider *mp = lay::AbstractMenuProvider::instance (); + if (! mp || ! mp->menu ()) { + return; + } if (m_current_template >= 0 && m_current_template < int (m_templates.size ())) { @@ -240,6 +239,9 @@ void PluginDeclaration::update_menu () { lay::AbstractMenuProvider *mp = lay::AbstractMenuProvider::instance (); + if (! mp || ! mp->menu ()) { + return; + } if (m_current_template < 0 || m_current_template >= int (m_templates.size ())) { m_current_template = 0; diff --git a/src/edt/edt/edtPlugin.cc b/src/edt/edt/edtPlugin.cc index dae12d5af..38c2c9fd4 100644 --- a/src/edt/edt/edtPlugin.cc +++ b/src/edt/edt/edtPlugin.cc @@ -273,7 +273,7 @@ public: virtual void initialize (lay::PluginRoot *root) { lay::AbstractMenuProvider *mp = lay::AbstractMenuProvider::instance (); - if (! mp) { + if (! mp || ! mp->menu ()) { return; } @@ -312,7 +312,7 @@ public: void update_menu (combine_mode_type cm) { lay::AbstractMenuProvider *mp = lay::AbstractMenuProvider::instance (); - if (! mp) { + if (! mp || ! mp->menu ()) { return; } @@ -375,7 +375,7 @@ public: void initialized (lay::PluginRoot *root) { lay::AbstractMenuProvider *mp = lay::AbstractMenuProvider::instance (); - if (! mp) { + if (! mp || ! mp->menu ()) { return; } diff --git a/src/lay/lay/layTechnologyController.cc b/src/lay/lay/layTechnologyController.cc index ab637df3a..66efa75eb 100644 --- a/src/lay/lay/layTechnologyController.cc +++ b/src/lay/lay/layTechnologyController.cc @@ -299,7 +299,7 @@ void TechnologyController::update_current_technology () { lay::AbstractMenuProvider *pr = lay::AbstractMenuProvider::instance (); - if (! pr) { + if (! pr || ! pr->menu ()) { return; } @@ -326,7 +326,7 @@ void TechnologyController::update_menu () { lay::AbstractMenuProvider *pr = lay::AbstractMenuProvider::instance (); - if (! pr) { + if (! pr || ! pr->menu ()) { return; } diff --git a/src/laybasic/laybasic/layBookmarksView.cc b/src/laybasic/laybasic/layBookmarksView.cc index 3313f5a61..57831e651 100644 --- a/src/laybasic/laybasic/layBookmarksView.cc +++ b/src/laybasic/laybasic/layBookmarksView.cc @@ -182,11 +182,13 @@ BookmarksView::refresh () void BookmarksView::context_menu (const QPoint &p) { - tl_assert (lay::AbstractMenuProvider::instance () != 0); + if (! mp_view->menu ()) { + return; + } QListView *bm_list = dynamic_cast (sender ()); if (bm_list) { - QMenu *ctx_menu = lay::AbstractMenuProvider::instance ()->menu ()->detached_menu ("bookmarks_context_menu"); + QMenu *ctx_menu = mp_view->menu ()->detached_menu ("bookmarks_context_menu"); ctx_menu->exec (bm_list->mapToGlobal (p)); } } diff --git a/src/laybasic/laybasic/layHierarchyControlPanel.cc b/src/laybasic/laybasic/layHierarchyControlPanel.cc index fc4930f25..304445681 100644 --- a/src/laybasic/laybasic/layHierarchyControlPanel.cc +++ b/src/laybasic/laybasic/layHierarchyControlPanel.cc @@ -370,12 +370,14 @@ HierarchyControlPanel::event (QEvent *e) void HierarchyControlPanel::context_menu (const QPoint &p) { - tl_assert (lay::AbstractMenuProvider::instance () != 0); + if (! mp_view->menu ()) { + return; + } QTreeView *cell_list = dynamic_cast (sender ()); if (cell_list) { set_active_celltree_from_sender (); - QMenu *ctx_menu = lay::AbstractMenuProvider::instance ()->menu ()->detached_menu ("hcp_context_menu"); + QMenu *ctx_menu = mp_view->menu ()->detached_menu ("hcp_context_menu"); ctx_menu->exec (cell_list->mapToGlobal (p)); } } diff --git a/src/laybasic/laybasic/layLayerControlPanel.cc b/src/laybasic/laybasic/layLayerControlPanel.cc index 844b53128..152862370 100644 --- a/src/laybasic/laybasic/layLayerControlPanel.cc +++ b/src/laybasic/laybasic/layLayerControlPanel.cc @@ -1686,9 +1686,11 @@ LayerControlPanel::cm_expand_all () void LayerControlPanel::tab_context_menu (const QPoint &p) { - tl_assert (lay::AbstractMenuProvider::instance () != 0); + if (! mp_view->menu ()) { + return; + } - QMenu *ctx_menu = lay::AbstractMenuProvider::instance ()->menu ()->detached_menu ("lcp_tabs_context_menu"); + QMenu *ctx_menu = mp_view->menu ()->detached_menu ("lcp_tabs_context_menu"); if (ctx_menu) { ctx_menu->exec (mp_tab_bar->mapToGlobal (p)); } @@ -1697,9 +1699,11 @@ LayerControlPanel::tab_context_menu (const QPoint &p) void LayerControlPanel::context_menu (const QPoint &p) { - tl_assert (lay::AbstractMenuProvider::instance () != 0); + if (! mp_view->menu ()) { + return; + } - QMenu *ctx_menu = lay::AbstractMenuProvider::instance ()->menu ()->detached_menu ("lcp_context_menu"); + QMenu *ctx_menu = mp_view->menu ()->detached_menu ("lcp_context_menu"); if (ctx_menu) { ctx_menu->exec (mp_layer_list->mapToGlobal (p)); } diff --git a/src/laybasic/laybasic/layLayoutView.cc b/src/laybasic/laybasic/layLayoutView.cc index 1bb082683..7d14bd803 100644 --- a/src/laybasic/laybasic/layLayoutView.cc +++ b/src/laybasic/laybasic/layLayoutView.cc @@ -44,6 +44,7 @@ #include "tlAssert.h" #include "tlExceptions.h" #include "layLayoutView.h" +#include "layAbstractMenuProvider.h" #include "layViewOp.h" #include "layViewObject.h" #include "layLayoutViewConfigPages.h" @@ -255,6 +256,7 @@ static LayoutView *ms_current = 0; LayoutView::LayoutView (db::Manager *manager, bool editable, lay::Plugin *plugin_parent, QWidget *parent, const char *name, unsigned int options) : QFrame (parent), lay::Plugin (plugin_parent), + m_menu (0), m_editable (editable), m_options (options), m_annotation_shapes (manager), @@ -270,6 +272,7 @@ LayoutView::LayoutView (db::Manager *manager, bool editable, lay::Plugin *plugin LayoutView::LayoutView (lay::LayoutView *source, db::Manager *manager, bool editable, lay::PluginRoot *root, QWidget *parent, const char *name, unsigned int options) : QFrame (parent), lay::Plugin (root), + m_menu (0), m_editable (editable), m_options (options), m_annotation_shapes (manager), @@ -348,6 +351,10 @@ LayoutView::init (db::Manager *mgr, lay::PluginRoot *root, QWidget * /*parent*/) { manager (mgr); + if (! lay::AbstractMenuProvider::instance () || ! lay::AbstractMenuProvider::instance ()->menu ()) { + init_menu (m_menu); + } + m_annotation_shapes.manager (mgr); m_visibility_changed = false; @@ -6461,6 +6468,16 @@ LayoutView::intrinsic_mouse_modes (std::vector *descriptions) return 2; } +AbstractMenu * +LayoutView::menu () +{ + if (lay::AbstractMenuProvider::instance () && lay::AbstractMenuProvider::instance ()->menu ()) { + return lay::AbstractMenuProvider::instance ()->menu (); + } else { + return &m_menu; + } +} + int LayoutView::default_mode () { diff --git a/src/laybasic/laybasic/layLayoutView.h b/src/laybasic/laybasic/layLayoutView.h index feab2526a..fe7e34e1d 100644 --- a/src/laybasic/laybasic/layLayoutView.h +++ b/src/laybasic/laybasic/layLayoutView.h @@ -36,6 +36,7 @@ #include #include "layLayerProperties.h" +#include "layAbstractMenu.h" #include "layAnnotationShapes.h" #include "layLayoutCanvas.h" #include "layColorPalette.h" @@ -1666,6 +1667,12 @@ public: */ static void update_menu (lay::LayoutView *view, lay::AbstractMenu &menu); + /** + * @brief Get the menu abstraction object + * This is either the global abstract menu or a view-local one if the view is not embedded into a main window. + */ + AbstractMenu *menu (); + /** * @brief Query the default mode */ @@ -2750,6 +2757,8 @@ protected: void activate (); private: + lay::AbstractMenu m_menu; + bool m_editable; int m_disabled_edits; unsigned int m_options; diff --git a/src/laybasic/laybasic/layLibrariesView.cc b/src/laybasic/laybasic/layLibrariesView.cc index 58b4c0737..ad8d84346 100644 --- a/src/laybasic/laybasic/layLibrariesView.cc +++ b/src/laybasic/laybasic/layLibrariesView.cc @@ -338,11 +338,13 @@ LibrariesView::event (QEvent *e) void LibrariesView::context_menu (const QPoint &p) { - tl_assert (lay::AbstractMenuProvider::instance () != 0); + if (! mp_view->menu ()) { + return; + } QTreeView *cell_list = dynamic_cast (sender ()); if (cell_list) { - QMenu *ctx_menu = lay::AbstractMenuProvider::instance ()->menu ()->detached_menu ("lib_context_menu"); + QMenu *ctx_menu = mp_view->menu ()->detached_menu ("lib_context_menu"); ctx_menu->exec (cell_list->mapToGlobal (p)); } }