From 1a4d94355641146033366e9bf84c034e9b38b5cb Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Sat, 18 Jul 2026 18:34:13 +0200 Subject: [PATCH] Pushing the new functions to the grid menu and adding the 'default' indicator as proposed --- src/lay/lay/layMainWindow.cc | 73 +++++++++++++++++------ src/lay/lay/layMainWindow.h | 14 +++++ src/layui/layui/layLayoutViewFunctions.cc | 2 - 3 files changed, 70 insertions(+), 19 deletions(-) diff --git a/src/lay/lay/layMainWindow.cc b/src/lay/lay/layMainWindow.cc index b112544e7..7371b9a44 100644 --- a/src/lay/lay/layMainWindow.cc +++ b/src/lay/lay/layMainWindow.cc @@ -4167,6 +4167,20 @@ MainWindow::default_grids () const return m_default_grids; } +double +MainWindow::default_grid () const +{ + lay::TechnologyController *tc = lay::TechnologyController::instance (); + if (tc && tc->active_technology ()) { + auto tech_grids = tc->active_technology ()->default_grid_list (); + if (! tech_grids.empty ()) { + return tc->active_technology ()->default_grid (); + } + } + + return m_default_grid; +} + void MainWindow::change_grid (int dir) { @@ -4204,35 +4218,49 @@ MainWindow::change_grid (int dir) void MainWindow::do_update_grids () { - const std::vector *grids = &m_default_grids; - double default_grid = m_default_grid; + std::vector grids = default_grids (); + double def_grid = default_grid (); - std::vector tech_grids; - lay::TechnologyController *tc = lay::TechnologyController::instance (); - if (tc && tc->active_technology ()) { - tech_grids = tc->active_technology ()->default_grid_list (); - if (! tech_grids.empty ()) { - grids = &tech_grids; - default_grid = tc->active_technology ()->default_grid (); - } - } - - if (default_grid > db::epsilon) { - for (auto g = grids->begin (); g != grids->end (); ++g) { + if (def_grid > db::epsilon) { + for (auto g = grids.begin (); g != grids.end (); ++g) { if (db::coord_traits::equals (*g, m_grid_micron)) { - default_grid = 0.0; + def_grid = 0.0; break; } } } - if (default_grid > db::epsilon) { - dispatcher ()->config_set (cfg_grid, default_grid); + if (def_grid > db::epsilon) { + dispatcher ()->config_set (cfg_grid, def_grid); } do_update_menu (); } +namespace { + +class GenericMenuAction + : public Action +{ +public: + GenericMenuAction (lay::Dispatcher *dispatcher, const std::string &title, const std::string &symbol) + : Action (title), mp_dispatcher (dispatcher), m_symbol (symbol) + { } + + void triggered () + { + if (mp_dispatcher) { + mp_dispatcher->menu_activated (m_symbol); + } + } + +private: + Dispatcher *mp_dispatcher; + std::string m_symbol; +}; + +} + void MainWindow::do_update_menu () { @@ -4241,14 +4269,21 @@ MainWindow::do_update_menu () m_default_grids_updated = false; std::vector grids = default_grids (); + double def_grid = default_grid (); std::vector group = menu ()->group ("default_grids_group"); for (std::vector::const_iterator t = group.begin (); t != group.end (); ++t) { + std::vector items = menu ()->items (*t); for (std::vector::const_iterator i = items.begin (); i != items.end (); ++i) { menu ()->delete_item (*i); } + + menu ()->insert_item (*t + ".end", "finer_grid", new GenericMenuAction (dispatcher (), tl::to_string (tr ("Finer Grid(G)")), "cm_grid_decrease")); + menu ()->insert_item (*t + ".end", "coarser_grid", new GenericMenuAction (dispatcher (), tl::to_string (tr ("Coarser Grid(Shift+G)")), "cm_grid_increase")); + menu ()->insert_separator (*t + ".end", "default_grids_group_separator"); + } int i = 1; @@ -4264,6 +4299,10 @@ MainWindow::do_update_menu () gs = tl::to_string (*g) + tl::to_string (QObject::tr (" um")); } + if (def_grid > 0 && db::coord_traits::equals (*g, def_grid)) { + gs += tl::to_string (tr (" \\(default)")); + } + lay::Action *ga = new lay::ConfigureAction (gs, cfg_grid, tl::to_string (*g)); ga->set_checkable (true); ga->set_checked (db::coord_traits::equals (*g, m_grid_micron)); diff --git a/src/lay/lay/layMainWindow.h b/src/lay/lay/layMainWindow.h index c0d00b5f7..7e26be752 100644 --- a/src/lay/lay/layMainWindow.h +++ b/src/lay/lay/layMainWindow.h @@ -285,6 +285,20 @@ public: */ std::vector default_grids () const; + /** + * @brief Gets the default grid + * + * The default (fallback) grid is the one marked with "!" in the grid list + * and it is used, when the current grid is not one of the provided grids + * in the default grid list. + * + * The default grid is globally defined, but my change depending on the technology + * selected in the current view. + * + * If no such grid exists, 0 is returned. + */ + double default_grid () const; + /** * @brief Hierarchy level selection setter */ diff --git a/src/layui/layui/layLayoutViewFunctions.cc b/src/layui/layui/layLayoutViewFunctions.cc index 9511947ac..f965ed152 100644 --- a/src/layui/layui/layLayoutViewFunctions.cc +++ b/src/layui/layui/layLayoutViewFunctions.cc @@ -2154,8 +2154,6 @@ public: menu_entries.push_back (lay::menu_item ("cm_sel_move_interactive", "sel_move_interactive:edit", at, tl::to_string (tr ("Move Interactive")))); menu_entries.push_back (lay::menu_item ("cm_select_next_item", "select_next_item:edit", at, tl::to_string (tr ("Select Next Item(Space)")))); menu_entries.push_back (lay::menu_item ("cm_select_next_item_add", "select_next_item_add:edit", at, tl::to_string (tr ("Select Next Item too(Shift+Space)")))); - menu_entries.push_back (lay::menu_item ("cm_grid_decrease", "grid_decrease:edit", at, tl::to_string (tr ("Select Finer Grid(G)")))); - menu_entries.push_back (lay::menu_item ("cm_grid_increase", "grid_increase:edit", at, tl::to_string (tr ("Select Coarser Grid(Shift+G)")))); at = "edit_menu.edit_options_group"; menu_entries.push_back (lay::menu_item ("cm_undo", "undo:edit", at, tl::to_string (tr ("Undo(Ctrl+Z)"))));