diff --git a/src/lay/lay/layMainWindow.cc b/src/lay/lay/layMainWindow.cc index 90184d899..d8258723c 100644 --- a/src/lay/lay/layMainWindow.cc +++ b/src/lay/lay/layMainWindow.cc @@ -4334,8 +4334,8 @@ public: menu_entries.push_back (lay::separator ("macros_group", at)); at = "@toolbar.end"; - menu_entries.push_back (lay::menu_item ("cm_prev_display_state", "prev_display_state", at, "-")); - menu_entries.push_back (lay::menu_item ("cm_next_display_state", "next_display_state", at, "-")); + menu_entries.push_back (lay::menu_item ("cm_prev_display_state", "prev_display_state", at, tl::to_string (QObject::tr ("Back(Shift+Tab)<:/back.png>")))); + menu_entries.push_back (lay::menu_item ("cm_next_display_state", "next_display_state", at, tl::to_string (QObject::tr ("Forward(Tab)<:/forward.png>")))); menu_entries.push_back (lay::separator ("toolbar_post_navigation_group", at)); } }; diff --git a/src/laybasic/laybasic/layAbstractMenu.cc b/src/laybasic/laybasic/layAbstractMenu.cc index 64f3c563b..003c96577 100644 --- a/src/laybasic/laybasic/layAbstractMenu.cc +++ b/src/laybasic/laybasic/layAbstractMenu.cc @@ -1729,6 +1729,19 @@ AbstractMenu::group (const std::string &name) const return grp; } +std::vector +AbstractMenu::group_actions (const std::string &name) const +{ + std::vector grp = group (name); + + std::vector actions; + actions.reserve (grp.size ()); + for (std::vector::const_iterator g = grp.begin (); g != grp.end (); ++g) { + actions.push_back (action (*g)); + } + return actions; +} + void AbstractMenu::collect_group (std::vector &grp, const std::string &name, const AbstractMenuItem &item) const { diff --git a/src/laybasic/laybasic/layAbstractMenu.h b/src/laybasic/laybasic/layAbstractMenu.h index 303589d96..1f9768660 100644 --- a/src/laybasic/laybasic/layAbstractMenu.h +++ b/src/laybasic/laybasic/layAbstractMenu.h @@ -771,6 +771,14 @@ public: */ std::vector group (const std::string &name) const; + /** + * @brief Get the group members as Action objects + * + * @param group The group name + * @param A vector of all members (as actions) of the group + */ + std::vector group_actions (const std::string &name) const; + /** * @brief Get the detached menu * diff --git a/src/laybasic/laybasic/layLayoutView.cc b/src/laybasic/laybasic/layLayoutView.cc index d1094f6cb..36f12e07e 100644 --- a/src/laybasic/laybasic/layLayoutView.cc +++ b/src/laybasic/laybasic/layLayoutView.cc @@ -8115,8 +8115,8 @@ public: menu_entries.push_back (lay::separator ("redraw_group", at)); menu_entries.push_back (lay::menu_item ("cm_redraw", "redraw", at, tl::to_string (QObject::tr ("Redraw")))); menu_entries.push_back (lay::separator ("state_group", at)); - menu_entries.push_back (lay::menu_item ("cm_prev_display_state", "prev_display_state", at, tl::to_string (QObject::tr ("Back(Shift+Tab)<:/back.png>")))); - menu_entries.push_back (lay::menu_item ("cm_next_display_state", "next_display_state", at, tl::to_string (QObject::tr ("Forward(Tab)<:/forward.png>")))); + menu_entries.push_back (lay::menu_item_copy ("cm_prev_display_state", "prev_display_state", at, "@toolbar.prev_display_state")); + menu_entries.push_back (lay::menu_item_copy ("cm_next_display_state", "next_display_state", at, "@toolbar.next_display_state")); menu_entries.push_back (lay::separator ("select_group", at)); menu_entries.push_back (lay::menu_item ("cm_select_cell", "select_cell:edit", at, tl::to_string (QObject::tr ("Select Cell")))); diff --git a/src/laybasic/laybasic/layPlugin.cc b/src/laybasic/laybasic/layPlugin.cc index b2d44ea8f..bb34af587 100644 --- a/src/laybasic/laybasic/layPlugin.cc +++ b/src/laybasic/laybasic/layPlugin.cc @@ -186,7 +186,11 @@ PluginDeclaration::init_menu (lay::Dispatcher *dispatcher) for (std::vector::const_iterator m = menu_entries.begin (); m != menu_entries.end (); ++m) { - if (m->separator) { + if (! m->copy_from.empty ()) { + + menu.insert_item (m->insert_pos, m->menu_name, menu.action (m->copy_from)); + + } else if (m->separator) { menu.insert_separator (m->insert_pos, m->menu_name); @@ -520,6 +524,16 @@ MenuEntry menu_item (const std::string &symbol, const std::string &menu_name, co return e; } +MenuEntry menu_item_copy (const std::string &symbol, const std::string &menu_name, const std::string &insert_pos, const std::string ©_from) +{ + MenuEntry e; + e.symbol = symbol; + e.menu_name = menu_name; + e.insert_pos = insert_pos; + e.copy_from = copy_from; + return e; +} + MenuEntry submenu (const std::string &menu_name, const std::string &insert_pos, const std::string &title) { MenuEntry e; diff --git a/src/laybasic/laybasic/layPlugin.h b/src/laybasic/laybasic/layPlugin.h index adde8bea2..f9ac69b19 100644 --- a/src/laybasic/laybasic/layPlugin.h +++ b/src/laybasic/laybasic/layPlugin.h @@ -108,6 +108,7 @@ struct LAYBASIC_PUBLIC MenuEntry std::string symbol; std::string insert_pos; std::string title; + std::string copy_from; std::string cname; std::string cvalue; std::string exclusive_group; @@ -134,6 +135,16 @@ LAYBASIC_PUBLIC MenuEntry separator (const std::string &menu_name, const std::st */ LAYBASIC_PUBLIC MenuEntry menu_item (const std::string &symbol, const std::string &menu_name, const std::string &insert_pos, const std::string &title); +/** + * @brief Creates a menu entry as a linked copy from another one + * + * @param symbol The symbol to send when this menu item is selected + * @param menu_name The name of the menu item (see layAbstractMenu.h) + * @param insert_pos The position where to insert (see layAbstractMenu.h) + * @param copy_from The path of the item where to copy from (must exist) + */ +LAYBASIC_PUBLIC MenuEntry menu_item_copy (const std::string &symbol, const std::string &menu_name, const std::string &insert_pos, const std::string ©_from); + /** * @brief Creates a submenu entry *