From 85789a386b0c9b841bf989bd73cc2fc3e60468c1 Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 8 Feb 2020 22:15:09 +0100 Subject: [PATCH] WIP: further refactoring. --- src/lay/lay/layApplication.cc | 12 +--- src/lay/lay/layApplication.h | 2 - src/lay/lay/layMainWindow.cc | 55 ------------------- src/lay/lay/layMainWindow.h | 22 -------- src/laybasic/laybasic/layAbstractMenu.cc | 20 ++++--- .../laybasic/layHierarchyControlPanel.cc | 2 +- src/laybasic/laybasic/layLayoutView.cc | 8 +-- 7 files changed, 19 insertions(+), 102 deletions(-) diff --git a/src/lay/lay/layApplication.cc b/src/lay/lay/layApplication.cc index 8609ff904..14081b137 100644 --- a/src/lay/lay/layApplication.cc +++ b/src/lay/lay/layApplication.cc @@ -1296,7 +1296,6 @@ ApplicationBase::special_app_flag (const std::string &name) GuiApplication::GuiApplication (int &argc, char **argv) : QApplication (argc, argv), ApplicationBase (false), mp_mw (0), - mp_plugin_root (0), mp_recorder (0) { // install a special style proxy to overcome the issue of black-on-black tree expanders @@ -1317,9 +1316,6 @@ GuiApplication::~GuiApplication () } shutdown (); - - delete mp_plugin_root; - mp_plugin_root = 0; } bool @@ -1475,17 +1471,15 @@ GuiApplication::start_recording () lay::Dispatcher * GuiApplication::dispatcher () const { - return mp_plugin_root; + return mp_mw; } void GuiApplication::setup () { - tl_assert (mp_mw == 0 && mp_plugin_root == 0); + tl_assert (mp_mw == 0); - mp_plugin_root = new lay::DispatcherToMainWindow (); - mp_mw = new lay::MainWindow (this, mp_plugin_root, "main_window", is_undo_enabled ()); - mp_plugin_root->attach_to (mp_mw); + mp_mw = new lay::MainWindow (this, 0, "main_window", is_undo_enabled ()); QObject::connect (mp_mw, SIGNAL (closed ()), this, SLOT (quit ())); diff --git a/src/lay/lay/layApplication.h b/src/lay/lay/layApplication.h index 31ef67256..89c262eba 100644 --- a/src/lay/lay/layApplication.h +++ b/src/lay/lay/layApplication.h @@ -57,7 +57,6 @@ namespace lay { class MainWindow; -class DispatcherToMainWindow; class Dispatcher; class ProgressReporter; class ProgressBar; @@ -445,7 +444,6 @@ protected: private: MainWindow *mp_mw; - DispatcherToMainWindow *mp_plugin_root; gtf::Recorder *mp_recorder; }; diff --git a/src/lay/lay/layMainWindow.cc b/src/lay/lay/layMainWindow.cc index d8258723c..36df34d81 100644 --- a/src/lay/lay/layMainWindow.cc +++ b/src/lay/lay/layMainWindow.cc @@ -4072,61 +4072,6 @@ MainWindow::plugin_removed (lay::PluginDeclaration *cls) } } -// ------------------------------------------------------------ -// Implementation of the DispatcherToMainWindow bride - -DispatcherToMainWindow::DispatcherToMainWindow () - : lay::Dispatcher (0, false), - mp_main_window (0) - -{ - // .. nothing yet .. -} - -void -DispatcherToMainWindow::attach_to (lay::MainWindow *main_window) -{ - mp_main_window = main_window; -} - -void -DispatcherToMainWindow::plugin_registered (lay::PluginDeclaration *cls) -{ - if (mp_main_window.get ()) { - mp_main_window->plugin_registered (cls); - } - - // re-establish the configuration - config_setup (); -} - -void -DispatcherToMainWindow::plugin_removed (lay::PluginDeclaration *cls) -{ - if (mp_main_window.get ()) { - mp_main_window->plugin_removed (cls); - } - - // re-establish the configuration - config_setup (); -} - -void -DispatcherToMainWindow::select_mode (int mode) -{ - if (mp_main_window.get ()) { - mp_main_window->select_mode (mode); - } -} - -void -DispatcherToMainWindow::menu_activated (const std::string &symbol) -{ - if (mp_main_window.get ()) { - mp_main_window->menu_activated (symbol); - } -} - // ------------------------------------------------------------ // Implementation of the "help about" dialog diff --git a/src/lay/lay/layMainWindow.h b/src/lay/lay/layMainWindow.h index 3f5c7176e..54d9dd8cf 100644 --- a/src/lay/lay/layMainWindow.h +++ b/src/lay/lay/layMainWindow.h @@ -675,8 +675,6 @@ protected: void do_update_file_menu (); private: - friend class DispatcherToMainWindow; - TextProgressDelegate m_text_progress; // Main menu @@ -825,26 +823,6 @@ private: void apply_hidden (const std::vector > &hidden); }; -class LAY_PUBLIC DispatcherToMainWindow - : public lay::Dispatcher -{ -public: - DispatcherToMainWindow (); - - void attach_to (lay::MainWindow *main_window); - - virtual void plugin_registered (lay::PluginDeclaration *cls); - virtual void plugin_removed (lay::PluginDeclaration *cls); - virtual void select_mode (int mode); - virtual void menu_activated (const std::string &symbol); - -private: - DispatcherToMainWindow (const DispatcherToMainWindow &); - DispatcherToMainWindow &operator= (const DispatcherToMainWindow &); - - tl::weak_ptr mp_main_window; -}; - } namespace tl { diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc index 003c96577..87f4e29d5 100644 --- a/src/laybasic/laybasic/layAbstractMenu.cc +++ b/src/laybasic/laybasic/layAbstractMenu.cc @@ -397,7 +397,7 @@ ActionHandle::ActionHandle (QMenu *menu, bool owned) sp_actionHandles->insert (this); // catch the destroyed signal to tell if the QAction object is deleted. - connect (mp_action, SIGNAL (destroyed (QObject *)), this, SLOT (destroyed (QObject *))); + connect (mp_menu, SIGNAL (destroyed (QObject *)), this, SLOT (destroyed (QObject *))); } ActionHandle::~ActionHandle () @@ -453,9 +453,15 @@ ActionHandle::menu () const } void -ActionHandle::destroyed (QObject * /*obj*/) +ActionHandle::destroyed (QObject *obj) { - mp_action = 0; + if (obj == mp_action) { + mp_action = 0; + } + if (obj == mp_menu) { + mp_menu = 0; + mp_action = 0; + } m_owned = false; } @@ -1088,7 +1094,7 @@ AbstractMenu::build_detached (const std::string &name, QFrame *mbar) menu_button->setText (tl::to_qstring (c->action ().get_title ())); if (c->menu () == 0) { - QMenu *menu = new QMenu (); + QMenu *menu = new QMenu (mp_dispatcher->menu_parent_widget ()); menu_button->setMenu (menu); c->set_action (Action (new ActionHandle (menu)), true); } else { @@ -1146,7 +1152,7 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar) } else if (c->name ().find ("@") == 0) { if (c->menu () == 0) { - QMenu *menu = new QMenu (tl::to_qstring (c->action ().get_title ())); + QMenu *menu = new QMenu (tl::to_qstring (c->action ().get_title ()), mp_dispatcher->menu_parent_widget ()); // HINT: it is necessary to add the menu action to a widget below the main window. // Otherwise, the keyboard shortcuts do not work for menu items inside such a // popup menu. It seems not to have a negative effect to add the menu to the @@ -1163,7 +1169,7 @@ AbstractMenu::build (QMenuBar *mbar, QToolBar *tbar) } else if (mbar) { if (c->menu () == 0) { - QMenu *menu = new QMenu (); + QMenu *menu = new QMenu (mp_dispatcher->menu_parent_widget ()); menu->setTitle (tl::to_qstring (c->action ().get_title ())); mbar->addMenu (menu); c->set_action (Action (new ActionHandle (menu)), true); @@ -1225,7 +1231,7 @@ AbstractMenu::build (QMenu *m, std::list &items) if (! c->menu ()) { // HINT: the action acts as a container for the title. Unfortunately, we cannot create a // menu with a given action. The action is provided by addMenu instead. - QMenu *menu = new QMenu (); + QMenu *menu = new QMenu (mp_dispatcher->menu_parent_widget ()); menu->setTitle (tl::to_qstring (c->action ().get_title ())); m->addMenu (menu); c->set_action (Action (new ActionHandle (menu)), true); diff --git a/src/laybasic/laybasic/layHierarchyControlPanel.cc b/src/laybasic/laybasic/layHierarchyControlPanel.cc index 39e324865..6f989622d 100644 --- a/src/laybasic/laybasic/layHierarchyControlPanel.cc +++ b/src/laybasic/laybasic/layHierarchyControlPanel.cc @@ -1181,7 +1181,7 @@ public: std::string at = "@hcp_context_menu.sorting.end"; menu_entries.push_back (lay::config_menu_item ("by_name", at, tl::to_string (QObject::tr ("By Name")), cfg_cell_list_sorting, "?by-name")); menu_entries.push_back (lay::config_menu_item ("by_area", at, tl::to_string (QObject::tr ("By Area - Small To Large")), cfg_cell_list_sorting, "?by-area")); - menu_entries.push_back (lay::config_menu_item ("by_area", at, tl::to_string (QObject::tr ("By Area - Large To Small")), cfg_cell_list_sorting, "?by-area-reverse")); + menu_entries.push_back (lay::config_menu_item ("by_area_reverse", at, tl::to_string (QObject::tr ("By Area - Large To Small")), cfg_cell_list_sorting, "?by-area-reverse")); } menu_entries.push_back (lay::separator ("operations_group", at)); diff --git a/src/laybasic/laybasic/layLayoutView.cc b/src/laybasic/laybasic/layLayoutView.cc index 36f12e07e..a9e90a63d 100644 --- a/src/laybasic/laybasic/layLayoutView.cc +++ b/src/laybasic/laybasic/layLayoutView.cc @@ -7979,7 +7979,8 @@ public: menu_entries.push_back (lay::menu_item ("cm_sel_move_interactive", "sel_move_interactive:edit", at, tl::to_string (QObject::tr ("Move Interactive")))); at = "edit_menu.end"; - menu_entries.push_back (lay::separator ("edit_select_individual_group", at)); + menu_entries.push_back (lay::menu_item ("cm_undo", "undo:edit", at, tl::to_string (QObject::tr ("Undo(Ctrl+Z)")))); + menu_entries.push_back (lay::menu_item ("cm_redo", "redo:edit", at, tl::to_string (QObject::tr ("Redo(Ctrl+Y)")))); menu_entries.push_back (lay::separator ("basic_group", at)); menu_entries.push_back (lay::submenu ("layout_menu:edit:edit_mode", at, tl::to_string (QObject::tr ("Layout")))); @@ -8034,17 +8035,12 @@ public: menu_entries.push_back (lay::menu_item ("cm_sel_move_to", "sel_move_to", at, tl::to_string (QObject::tr ("Move To")))); } - menu_entries.push_back (lay::separator ("edit_select_individual_group", at)); - menu_entries.push_back (lay::separator ("utils_group", at)); menu_entries.push_back (lay::submenu ("utils_menu:edit:edit_mode", at, tl::to_string (QObject::tr ("Utilities")))); - menu_entries.push_back (lay::separator ("edit_select_individual_group", at)); - menu_entries.push_back (lay::separator ("misc_group", at)); menu_entries.push_back (lay::menu_item ("cm_delete", "delete:edit", at, tl::to_string (QObject::tr ("Delete(Del)")))); menu_entries.push_back (lay::menu_item ("cm_show_properties", "show_properties:edit", at, tl::to_string (QObject::tr ("Properties(Q)")))); - menu_entries.push_back (lay::separator ("edit_select_individual_group", at)); menu_entries.push_back (lay::separator ("cpc_group", at)); menu_entries.push_back (lay::menu_item ("cm_copy", "copy:edit", at, tl::to_string (QObject::tr ("Copy(Ctrl+C)"))));