[glom/gmenu] More use of GMenu with GtkBuilder



commit 2767399ece2a491d9039479dada33f2db050bdfe
Author: Murray Cumming <murrayc murrayc com>
Date:   Tue Aug 6 18:07:40 2013 +0200

    More use of GMenu with GtkBuilder

 .../print_layouts/window_print_layout_edit.cc      |  622 ++++++++++++--------
 .../print_layouts/window_print_layout_edit.h       |   75 ++--
 2 files changed, 423 insertions(+), 274 deletions(-)
---
diff --git a/glom/mode_design/print_layouts/window_print_layout_edit.cc 
b/glom/mode_design/print_layouts/window_print_layout_edit.cc
index 794d7fb..e00a9e0 100644
--- a/glom/mode_design/print_layouts/window_print_layout_edit.cc
+++ b/glom/mode_design/print_layouts/window_print_layout_edit.cc
@@ -24,13 +24,14 @@
 #include <glom/utils_ui.h>
 #include <glom/appwindow.h>
 #include <glom/print_layout/print_layout_utils.h>
-#include <gtkmm/radioaction.h>
 #include <gtkmm/printsettings.h>
 #include <gtkmm/grid.h>
 #include <gtkmm/printoperation.h>
 #include <libglom/data_structure/layout/layoutitem_line.h>
 #include <libglom/data_structure/layout/layoutitem_portal.h>
-#include <libglom/utils.h> //For bold_message()).>
+#include <libglom/utils.h> //For bold_message().
+#include <giomm/menu.h>
+#include <giomm/simpleactiongroup.h>
 #include <glibmm/i18n.h>
 
 #include <iostream>
@@ -192,178 +193,274 @@ Window_PrintLayout_Edit::Window_PrintLayout_Edit(BaseObjectType* cobject, const
 
 void Window_PrintLayout_Edit::init_menu()
 {
-  m_action_group = Gtk::ActionGroup::create();
+  Glib::RefPtr<Gio::SimpleActionGroup> action_group = Gio::SimpleActionGroup::create();
 
-  m_action_group->add(Gtk::Action::create("Menu_File", _("_File")));
-  m_action_group->add(Gtk::Action::create("Action_Menu_File_PageSetup", _("Page Set_up")),
+  action_group->add_action("pagesetup",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_file_page_setup));
-  m_action_group->add(Gtk::Action::create("Action_Menu_File_PrintPreview", _("Print Pre_view")),
-    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_file_print_preview));
+  action_group->add_action("printpreview",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_file_print_preview) );
 
-
-  m_action_group->add(Gtk::Action::create("Menu_Edit", _("_Edit")));
-
-  m_action_edit_cut = Gtk::Action::create("Action_Menu_Edit_Cut", _("Cu_t"));
-  m_action_group->add(m_action_edit_cut,
+  m_action_edit_cut = action_group->add_action("cut",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_cut) );
 
-  m_action_edit_copy = Gtk::Action::create("Action_Menu_Edit_Copy", _("_Copy"));
-  m_action_group->add(m_action_edit_copy,
+  m_action_edit_copy = action_group->add_action("copy",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_copy) );
   
-  m_action_edit_paste = Gtk::Action::create("Action_Menu_Edit_Paste", _("_Paste"));
-  m_action_group->add(m_action_edit_paste,
+  m_action_edit_paste = action_group->add_action("paste", 
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_paste) );
-  m_action_edit_paste->set_sensitive(false); //This is enable when something is copied or cut.
+  m_action_edit_paste->set_enabled(false); //This is enabled when something is copied or cut.
 
-  m_action_edit_delete = Gtk::Action::create("Action_Menu_Edit_Delete", _("_Delete"));
-  m_action_group->add(m_action_edit_delete,
+  m_action_edit_delete = action_group->add_action("delete",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_delete) );
 
-  m_action_group->add(
-    Gtk::Action::create("Action_Menu_Edit_SelectAll", _("Select _All")),
-    Gtk::AccelKey("<control>A"), //TODO: Suggest this as part of the stock item in GTK+?
-    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_selectall) );
-  m_action_group->add(
-    Gtk::Action::create("Action_Menu_Edit_UnselectAll", _("Unselect All")), //TODO: Propose a new stock item 
for GTK+.
+  action_group->add_action("selectall",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_selectall) ); //TODO: 
Gtk::AccelKey("<control>A"), //TODO: Suggest this as part of the stock item in GTK+?
+  action_group->add_action("unnselectall", //TODO: Propose a new stock item for GTK+.
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_edit_unselectall) );
 
-  m_action_group->add(Gtk::Action::create("Menu_Insert", _("_Insert")));
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_Field", _("Insert _Field")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_field) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_Text", _("Insert _Text")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_text) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_Image", _("Insert _Image")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_image) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_RelatedRecords", _("Insert _Related Records")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_relatedrecords) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_LineHorizontal", _("Insert _Horizontal Line")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_line_horizontal) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_LineVertical", _("Insert _Vertical Line")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_line_vertical) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_CreateStandard", _("_Create Standard Layout")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_create_standard) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_AddPage", _("_Add Page")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_add_page) );
-  m_action_group->add(Gtk::Action::create("Action_Menu_Insert_DeletePage", _("_Delete Page")),
-                        sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_delete_page) );
-
-
-  m_action_group->add(Gtk::Action::create("Menu_Align", _("_Align")));
-
-  m_action_align_top = Gtk::Action::create("Action_Menu_Align_Top", _("Align _Top"));
-  m_action_group->add(m_action_align_top,
+  action_group->add_action("insertfield",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_field) );
+  action_group->add_action("inserttext",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_text) );
+  action_group->add_action("insertimage",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_image) );
+  action_group->add_action("insertrelatedrecords",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_relatedrecords) );
+  action_group->add_action("inserthoriztonalline",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_line_horizontal) );
+  action_group->add_action("insertveticalline",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_line_vertical) );
+  action_group->add_action("createstandard",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_create_standard) );
+  action_group->add_action("addpage",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_add_page) );
+  action_group->add_action("deletepage",
+   sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_insert_delete_page) );
+
+
+  m_action_align_top = action_group->add_action("aligntop", 
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_align_top) );
 
-  m_action_align_bottom = Gtk::Action::create("Action_Menu_Align_Bottom", _("Align _Bottom"));
-  m_action_group->add(m_action_align_bottom,
+  m_action_align_bottom = action_group->add_action("alignbottom",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_align_bottom) );
   
-  m_action_align_left = Gtk::Action::create("Action_Menu_Align_Left", _("Align _Left"));
-  m_action_group->add(m_action_align_left,
+  m_action_align_left = action_group->add_action("alignleft",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_align_left) );
 
-  m_action_align_right = Gtk::Action::create("Action_Menu_Align_Right", _("Align _Right"));
-  m_action_group->add(m_action_align_right,
+  m_action_align_right = action_group->add_action("alignright",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_align_right) );
 
 
-  m_action_group->add(Gtk::Action::create("Menu_View", _("_View")));
-  m_action_showgrid = Gtk::ToggleAction::create("Action_Menu_View_ShowGrid", _("Show Grid"));
-  m_action_group->add(m_action_showgrid, sigc::mem_fun(*this, 
&Window_PrintLayout_Edit::on_menu_view_show_grid));
-  m_action_showrules = Gtk::ToggleAction::create("Action_Menu_View_ShowRules", _("Show Rules"));
-  m_action_group->add(m_action_showrules, sigc::mem_fun(*this, 
&Window_PrintLayout_Edit::on_menu_view_show_rules));
-  m_action_showoutlines = Gtk::ToggleAction::create("Action_Menu_View_ShowOutlines", _("Show Outlines"));
-  m_action_group->add(m_action_showoutlines, sigc::mem_fun(*this, 
&Window_PrintLayout_Edit::on_menu_view_show_outlines));
-
-  Gtk::RadioAction::Group group_zoom;
-  m_action_zoom_fit_page_width = Gtk::RadioAction::create(group_zoom, "Action_Menu_View_ZoomFitPageWidth", 
_("Fit Page _Width"));
-  m_action_group->add(m_action_zoom_fit_page_width,
-    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_fitpagewidth));
-
-  m_action_group->add(Gtk::RadioAction::create(group_zoom, "Action_Menu_View_Zoom200", _("Zoom 200%")),
-    sigc::bind( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom), 200));
-
-  Glib::RefPtr<Gtk::RadioAction> action_zoom100 = 
-    Gtk::RadioAction::create(group_zoom, "Action_Menu_View_Zoom100", _("_Normal Size"));
-  m_action_group->add(action_zoom100,
-    sigc::bind( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom), 100));
-
-  Glib::RefPtr<Gtk::Action> action_50 = Gtk::RadioAction::create(group_zoom, "Action_Menu_View_Zoom50", 
_("Zoom 50%"));
-  m_action_group->add(action_50,
-    sigc::bind( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom), 50));
-
-  m_action_group->add(Gtk::RadioAction::create(group_zoom, "Action_Menu_View_Zoom25", _("Zoom 25%")),
-    sigc::bind( sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom), 25));
-
-  action_zoom100->activate(); //This seems like a sane default.
-
-  //Build part of the menu structure, to be merged in by using the "PH" placeholders:
-  static const Glib::ustring ui_description =
-    "<ui>"
-    "  <menubar name='Menubar'>"
-    "      <menu action='Menu_File'>"
-    "        <menuitem action='Action_Menu_File_PageSetup' />"
-    "        <menuitem action='Action_Menu_File_PrintPreview' />"
-    "      </menu>"
-    "      <menu action='Menu_Edit'>"
-    "        <menuitem action='Action_Menu_Edit_Cut' />"
-    "        <menuitem action='Action_Menu_Edit_Copy' />"
-    "        <menuitem action='Action_Menu_Edit_Paste' />"
-    "        <menuitem action='Action_Menu_Edit_Delete' />"
-    "        <separator />"
-    "        <menuitem action='Action_Menu_Edit_SelectAll' />"
-    "        <menuitem action='Action_Menu_Edit_UnselectAll' />"
-    "      </menu>"
-    "      <menu action='Menu_Insert'>"
-    "        <menuitem action='Action_Menu_Insert_Field' />"
-    "        <menuitem action='Action_Menu_Insert_Text' />"
-    "        <menuitem action='Action_Menu_Insert_Image' />"
-    "        <menuitem action='Action_Menu_Insert_RelatedRecords' />"
-    "        <menuitem action='Action_Menu_Insert_LineHorizontal' />"
-    "        <menuitem action='Action_Menu_Insert_LineVertical' />"
-    "        <separator />"
-    "        <menuitem action='Action_Menu_Insert_CreateStandard' />"
-    "        <separator />"
-    "        <menuitem action='Action_Menu_Insert_AddPage' />"
-    "        <menuitem action='Action_Menu_Insert_DeletePage' />"
-    "      </menu>"
-    "      <menu action='Menu_Align'>"
-    "        <menuitem action='Action_Menu_Align_Top' />"
-    "        <menuitem action='Action_Menu_Align_Bottom' />"
-    "        <menuitem action='Action_Menu_Align_Left' />"
-    "        <menuitem action='Action_Menu_Align_Right' />"
-    "      </menu>"
-    "      <menu action='Menu_View'>"
-    "        <menuitem action='Action_Menu_View_ShowGrid' />"
-    "        <menuitem action='Action_Menu_View_ShowRules' />"
-    "        <menuitem action='Action_Menu_View_ShowOutlines' />"
-    "        <separator />"
-    "        <menuitem action='Action_Menu_View_ZoomFitPageWidth' />"
-    "        <menuitem action='Action_Menu_View_Zoom200' />"
-    "        <menuitem action='Action_Menu_View_Zoom100' />"
-    "        <menuitem action='Action_Menu_View_Zoom50' />"
-    "        <menuitem action='Action_Menu_View_Zoom25' />"
-    "      </menu>"
-    "  </menubar>"
-    "</ui>";
+  m_action_showgrid = action_group->add_action_bool("showgrid",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_show_grid),
+    false);
+  m_action_showrules = action_group->add_action_bool("showrules",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_show_rules),
+    false);
+  m_action_showoutlines = action_group->add_action_bool("showoutlines",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_show_outlines),
+    false);
+
+
+  m_action_zoom = action_group->add_action_radio_integer("zoom",
+    sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_menu_view_zoom),
+    100); //This seems like a sane default.
+
+  //const Glib::Variant<int> zoom = Glib::Variant<int>::create(100);
+  //m_action_zoom->activate(zoom); //This seems like a sane default.
+
+  insert_action_group("printlayout", action_group);
+
+  static const char* ui_description =
+    "<interface>"
+    "  <menu id='Menubar'>"
+    "    <submenu>"
+    "      <attribute name='label' translatable='yes'>_File</attribute>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Page Set_up</attribute>"
+    "          <attribute name='action'>printlayout.pagesetup</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Print Pre_view</attribute>"
+    "          <attribute name='action'>printlayout.printpreview</attribute>"
+    "        </item>"
+    "      </section>"
+    "    </submenu>"
+    "    <submenu>"
+    "      <attribute name='label' translatable='yes'>_Edit</attribute>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Cu_t</attribute>"
+    "          <attribute name='action'>printlayout.cut</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>_Copy</attribute>"
+    "          <attribute name='action'>printlayout.copy</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>_Paste</attribute>"
+    "          <attribute name='action'>printlayout.paste</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>_Delete</attribute>"
+    "          <attribute name='action'>printlayout.delete</attribute>"
+    "        </item>"
+    "      </section>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Select _All</attribute>"
+    "          <attribute name='action'>printlayout.selectall</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>_Unselect All</attribute>"
+    "          <attribute name='action'>printlayout.unselectall</attribute>"
+    "        </item>"
+    "      </section>"
+    "    </submenu>"
+    "    <submenu>"
+    "      <attribute name='label' translatable='yes'>_Insert</attribute>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Insert _Field</attribute>"
+    "          <attribute name='action'>printlayout.insertfield</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Insert _Text</attribute>"
+    "          <attribute name='action'>printlayout.inserttext</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Insert _Image</attribute>"
+    "          <attribute name='action'>printlayout.insertimage</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Insert _Related Records</attribute>"
+    "          <attribute name='action'>printlayout.insertrelatedrecords</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Insert _Horizontal Line</attribute>"
+    "          <attribute name='action'>printlayout.inserthorizontalline</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Insert _Vertical Line</attribute>"
+    "          <attribute name='action'>printlayout.insertverticalline</attribute>"
+    "        </item>"
+    "      </section>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Create _Standard</attribute>"
+    "          <attribute name='action'>printlayout.createstandard</attribute>"
+    "        </item>"
+    "      </section>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Add Page</attribute>"
+    "          <attribute name='action'>printlayout.addpage</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Delete Page</attribute>"
+    "          <attribute name='action'>printlayout.deletepage</attribute>"
+    "        </item>"
+    "      </section>"
+    "    </submenu>"
+    "    <submenu>"
+    "      <attribute name='label' translatable='yes'>_Align</attribute>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Align _Top</attribute>"
+    "          <attribute name='action'>printlayout.aligntop</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Align _Bottom</attribute>"
+    "          <attribute name='action'>printlayout.alignbottom</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Align _Left</attribute>"
+    "          <attribute name='action'>printlayout.alignleft</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Align _Right</attribute>"
+    "          <attribute name='action'>printlayout.alignright</attribute>"
+    "        </item>"
+    "      </section>"
+    "    </submenu>"
+    "    <submenu>"
+    "      <attribute name='label' translatable='yes'>_View</attribute>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Show _Grid</attribute>"
+    "          <attribute name='action'>printlayout.showgrid</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Show _Rules</attribute>"
+    "          <attribute name='action'>printlayout.showrules</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Show _Outlines</attribute>"
+    "          <attribute name='action'>printlayout.showoutlines</attribute>"
+    "        </item>"
+    "      </section>"
+    "      <section>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Fit Page _Width</attribute>"
+    "          <attribute name='action'>printlayout.zoom</attribute>"
+    "          <attribute name='target' type='i'>0</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Zoom 200%</attribute>"
+    "          <attribute name='action'>printlayout.zoom</attribute>"
+    "          <attribute name='target' type='i'>200</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Zoom 100%</attribute>"
+    "          <attribute name='action'>printlayout.zoom</attribute>"
+    "          <attribute name='target' type='i'>100</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Zoom 50%</attribute>"
+    "          <attribute name='action'>printlayout.zoom</attribute>"
+    "          <attribute name='target' type='i'>50</attribute>"
+    "        </item>"
+    "        <item>"
+    "          <attribute name='label' translatable='yes'>Zoom 25%</attribute>"
+    "          <attribute name='action'>printlayout.zoom</attribute>"
+    "          <attribute name='target' type='i'>25</attribute>"
+    "        </item>"
+    "      </section>"
+    "    </submenu>"
+    "  </menu>"
+    "</interface>";
 
   //Add menu:
-  m_uimanager = Gtk::UIManager::create();
-  m_uimanager->insert_action_group(m_action_group);
-  m_uimanager->add_ui_from_string(ui_description);
+  Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create();
+
+  try
+  {
+    builder->add_from_string(ui_description);
+  }
+  catch(const Glib::Error& ex)
+  {
+    std::cerr << G_STRFUNC << ": building menus failed: " <<  ex.what();
+  }
+
+  //Get the menu:
+  Glib::RefPtr<Glib::Object> object =
+    builder->get_object("Menubar");
+  Glib::RefPtr<Gio::Menu> gmenu =
+    Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
+  if(!gmenu)
+    g_warning("GMenu not found");
 
   //Menubar:
-  Gtk::MenuBar* pMenuBar = static_cast<Gtk::MenuBar*>(m_uimanager->get_widget("/Menubar"));
+  Gtk::MenuBar* pMenuBar = new Gtk::MenuBar(gmenu);
   m_box_menu->pack_start(*pMenuBar, Gtk::PACK_SHRINK);
   pMenuBar->show();
 
   //TODO: Add a toolbar if it would be useful:
-  //Gtk::Toolbar* pToolBar = static_cast<Gtk::Toolbar*>(m_uimanager->get_widget("/Bakery_ToolBar"));
+  //Gtk::Toolbar* pToolBar = static_cast<Gtk::Toolbar*>(builder->get_widget("/Bakery_ToolBar"));
   //m_HandleBox_Toolbar.add(*pToolBar);
   //m_HandleBox_Toolbar.show();
 
-  add_accel_group(m_uimanager->get_accel_group());
 }
 
 bool Window_PrintLayout_Edit::on_canvas_drag_drop(const Glib::RefPtr<Gdk::DragContext>& drag_context, int /* 
x */, int /* y */, guint timestamp)
@@ -399,7 +496,7 @@ bool Window_PrintLayout_Edit::on_canvas_drag_motion(const Glib::RefPtr<Gdk::Drag
   //Handle dragging of the rule from the GimpRuler widget:
   if(target == DRAG_TARGET_NAME_RULE)
   {
-    if(!m_action_showrules->get_active())
+    if(!m_action_showrules->get_state_bool())
       return false; //Don't allow the drop.
 
     if(m_temp_rule_horizontal)
@@ -534,7 +631,7 @@ void Window_PrintLayout_Edit::on_canvas_drag_data_received(const Glib::RefPtr<Gd
   //Handle dragging of the rule from the GimpRuler widget:
   if(target == DRAG_TARGET_NAME_RULE)
   {
-    if(!m_action_showrules->get_active())
+    if(!m_action_showrules->get_state_bool())
       return;
 
     m_canvas.show_temp_rule(0, 0, false);
@@ -685,9 +782,9 @@ void Window_PrintLayout_Edit::set_print_layout(const Glib::ustring& table_name,
 
   set_ruler_sizes();
 
-  m_action_showgrid->set_active( print_layout->get_show_grid() );
-  m_action_showrules->set_active( print_layout->get_show_rules() );
-  m_action_showoutlines->set_active( print_layout->get_show_outlines() );
+  do_menu_view_show_grid( print_layout->get_show_grid() );
+  do_menu_view_show_rules( print_layout->get_show_rules() );
+  do_menu_view_show_outlines( print_layout->get_show_outlines() );
 
   m_modified = false;
 }
@@ -705,9 +802,9 @@ sharedptr<PrintLayout> Window_PrintLayout_Edit::get_print_layout()
   m_print_layout->set_name( m_entry_name->get_text() );
   m_print_layout->set_title( m_entry_title->get_text() , AppWindow::get_current_locale());
 
-  m_print_layout->set_show_grid( m_action_showgrid->get_active() );
-  m_print_layout->set_show_rules( m_action_showrules->get_active() );
-  m_print_layout->set_show_outlines( m_action_showoutlines->get_active() );
+  m_print_layout->set_show_grid( m_action_showgrid->get_state_bool() );
+  m_print_layout->set_show_rules( m_action_showrules->get_state_bool() );
+  m_print_layout->set_show_outlines( m_action_showoutlines->get_state_bool() );
 
   m_print_layout->set_horizontal_rules( m_canvas.get_horizontal_rules() );
   m_print_layout->set_vertical_rules( m_canvas.get_vertical_rules() );
@@ -734,61 +831,71 @@ sharedptr<PrintLayout> Window_PrintLayout_Edit::get_print_layout()
   return m_print_layout;
 }
 
-void Window_PrintLayout_Edit::on_context_menu_insert_field()
+void Window_PrintLayout_Edit::on_context_menu_insert_field(const Glib::VariantBase& parameter)
 {
-  on_menu_insert_field();
+  on_menu_insert_field(parameter);
 }
 
-void Window_PrintLayout_Edit::on_context_menu_insert_text()
+void Window_PrintLayout_Edit::on_context_menu_insert_text(const Glib::VariantBase& parameter)
 {
-  on_menu_insert_text();
+  on_menu_insert_text(parameter);
 }
 
 void Window_PrintLayout_Edit::setup_context_menu()
 {
-  m_context_menu_action_group = Gtk::ActionGroup::create();
-
-  m_context_menu_action_group->add(Gtk::Action::create("ContextMenu", "Context Menu") );
-  m_context_menu_action_group->add(Gtk::Action::create("ContextMenuInsert", _("Insert")) );
+  Glib::RefPtr<Gio::SimpleActionGroup> action_group = Gio::SimpleActionGroup::create();
 
-  Glib::RefPtr<Gtk::Action> action =  Gtk::Action::create("ContextInsertField", _("Field"));
-  m_context_menu_action_group->add(action,
+  action_group->add_action("insertfield",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_context_menu_insert_field) );
 
-  action = Gtk::Action::create("ContextInsertText", _("Text"));
-  m_context_menu_action_group->add(action,
+  action_group->add_action("insertrelationships",
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_context_menu_insert_text) );
 
   /*
-  action =  Gtk::Action::create("ContextDelete", _("_Delete"));
-  m_context_menu_action_group->add(action,
+  action =  Gio::SimpleAction::create("ContextDelete", _("_Delete"));
+  m_context_menu_action_group->add_action(action,
     sigc::mem_fun(*this, &Window_PrintLayout_Edit::on_context_menu_delete) );
   */
 
-  m_context_menu_uimanager = Gtk::UIManager::create();
-  m_context_menu_uimanager->insert_action_group(m_context_menu_action_group);
+  insert_action_group("context", action_group);
+
+
+  Glib::RefPtr<Gtk::Builder> context_menu_builder = Gtk::Builder::create();
 
   try
   {
-    Glib::ustring ui_info = 
-      "<ui>"
-      "  <popup name='ContextMenu'>"
-      "    <menu action='ContextMenuInsert'>"
-      "      <menuitem action='ContextInsertField'/>"
-      "      <menuitem action='ContextInsertText'/>"
-      "    </menu>"
-      "  </popup>"
-      "</ui>";
-
-    m_context_menu_uimanager->add_ui_from_string(ui_info);
+    const char* ui_info =
+      "<interface>"
+      "  <menu id='ContextMenu'>"
+      "    <section>"
+      "      <item>"
+      "        <attribute name='label' translatable='yes'>Insert _Field</attribute>"
+      "        <attribute name='action'>context.insertfield</attribute>"
+      "      </item>"
+      "      <item>"
+      "        <attribute name='label' translatable='yes'>Insert _Text</attribute>"
+      "        <attribute name='action'>context.inserttext</attribute>"
+      "      </item>"
+      "    </section>"
+      "  </menu>"
+      "</interface>";
+
+    context_menu_builder->add_from_string(ui_info);
   }
   catch(const Glib::Error& ex)
   {
-    std::cerr << "building menus failed: " <<  ex.what();
+    std::cerr << G_STRFUNC << "building menus failed: " <<  ex.what();
   }
 
   //Get the menu:
-  m_context_menu = dynamic_cast<Gtk::Menu*>( m_context_menu_uimanager->get_widget("/ContextMenu") ); 
+  Glib::RefPtr<Glib::Object> object =
+    context_menu_builder->get_object("ContextMenu");
+  Glib::RefPtr<Gio::Menu> gmenu =
+    Glib::RefPtr<Gio::Menu>::cast_dynamic(object);
+  if(!gmenu)
+    g_warning("GMenu not found");
+
+  m_context_menu = new Gtk::Menu(gmenu);
 }
 
 bool Window_PrintLayout_Edit::on_canvas_motion_notify_event(GdkEventMotion* event)
@@ -847,7 +954,7 @@ void Window_PrintLayout_Edit::set_default_position(const sharedptr<LayoutItem>&
   item->set_print_layout_position(item_x, item_y, old_width, old_height);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_field()
+void Window_PrintLayout_Edit::on_menu_insert_field(const Glib::VariantBase& /* parameter */)
 {
   sharedptr<LayoutItem> layout_item = create_empty_item(PrintLayoutToolbarButton::ITEM_FIELD);
 
@@ -857,7 +964,7 @@ void Window_PrintLayout_Edit::on_menu_insert_field()
   create_canvas_layout_item_and_add(layout_item);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_text()
+void Window_PrintLayout_Edit::on_menu_insert_text(const Glib::VariantBase& /* parameter */)
 {
   sharedptr<LayoutItem> layout_item = create_empty_item(PrintLayoutToolbarButton::ITEM_TEXT);
   set_default_position(layout_item);
@@ -865,7 +972,7 @@ void Window_PrintLayout_Edit::on_menu_insert_text()
   create_canvas_layout_item_and_add(layout_item);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_image()
+void Window_PrintLayout_Edit::on_menu_insert_image(const Glib::VariantBase& /* parameter */)
 {
   sharedptr<LayoutItem> layout_item = create_empty_item(PrintLayoutToolbarButton::ITEM_IMAGE);
   // Note to translators: This is the default contents of a text item on a print layout: 
@@ -875,7 +982,7 @@ void Window_PrintLayout_Edit::on_menu_insert_image()
   create_canvas_layout_item_and_add(layout_item);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_relatedrecords()
+void Window_PrintLayout_Edit::on_menu_insert_relatedrecords(const Glib::VariantBase& /* parameter */)
 {
   sharedptr<LayoutItem> layout_item = create_empty_item(PrintLayoutToolbarButton::ITEM_PORTAL);
   set_default_position(layout_item);
@@ -883,7 +990,7 @@ void Window_PrintLayout_Edit::on_menu_insert_relatedrecords()
   create_canvas_layout_item_and_add(layout_item);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_line_horizontal()
+void Window_PrintLayout_Edit::on_menu_insert_line_horizontal(const Glib::VariantBase& /* parameter */)
 {
   sharedptr<LayoutItem> layout_item = create_empty_item(PrintLayoutToolbarButton::ITEM_LINE_HORIZONTAL);
 
@@ -900,14 +1007,14 @@ void Window_PrintLayout_Edit::on_menu_insert_line_horizontal()
   create_canvas_layout_item_and_add(layout_item);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_line_vertical()
+void Window_PrintLayout_Edit::on_menu_insert_line_vertical(const Glib::VariantBase& /* parameter */)
 {
   sharedptr<LayoutItem> layout_item = create_empty_item(PrintLayoutToolbarButton::ITEM_LINE_VERTICAL);
 
   create_canvas_layout_item_and_add(layout_item);
 }
 
-void Window_PrintLayout_Edit::on_menu_insert_create_standard()
+void Window_PrintLayout_Edit::on_menu_insert_create_standard(const Glib::VariantBase& /* parameter */)
 {
   //Ask for confirmation:
   Gtk::MessageDialog dialog(Utils::bold_message(_("Create Standard Layout")), true, Gtk::MESSAGE_QUESTION, 
Gtk::BUTTONS_NONE);
@@ -940,14 +1047,14 @@ void Window_PrintLayout_Edit::on_menu_insert_create_standard()
 }
 
 
-void Window_PrintLayout_Edit::on_menu_insert_add_page()
+void Window_PrintLayout_Edit::on_menu_insert_add_page(const Glib::VariantBase& /* parameter */)
 {
   m_canvas.set_page_count(
     m_canvas.get_page_count() + 1);
 }
 
 //TODO: Disable this menu item when there is only one page:
-void Window_PrintLayout_Edit::on_menu_insert_delete_page()
+void Window_PrintLayout_Edit::on_menu_insert_delete_page(const Glib::VariantBase& /* parameter */)
 {
   const guint page_count = m_canvas.get_page_count();
   if(page_count <= 1)
@@ -970,9 +1077,20 @@ void Window_PrintLayout_Edit::on_button_close()
   hide();
 }
 
-void Window_PrintLayout_Edit::on_menu_view_show_grid()
+void Window_PrintLayout_Edit::on_menu_view_show_grid(const Glib::VariantBase& /* parameter */)
 {
-  if(m_action_showgrid->get_active())
+  //The state is not changed automatically:
+  const bool active = !m_action_showgrid->get_state_bool();
+  do_menu_view_show_grid(active);
+}
+
+void Window_PrintLayout_Edit::do_menu_view_show_grid(bool active)
+{
+  //This doesn't seem to trigger the activate signal,
+  //so we don't risk this being called in an infinite loop:
+  m_action_showgrid->change_state(active);
+
+  if(active)
   {
     m_canvas.set_grid_gap(PrintLayoutUtils::GRID_GAP);
   }
@@ -982,9 +1100,19 @@ void Window_PrintLayout_Edit::on_menu_view_show_grid()
   }
 }
 
-void Window_PrintLayout_Edit::on_menu_view_show_rules()
+void Window_PrintLayout_Edit::on_menu_view_show_rules(const Glib::VariantBase& parameter)
 {
-  const bool active = m_action_showrules->get_active();
+  //The state is not changed automatically:
+  const bool active = !m_action_showrules->get_state_bool();
+  do_menu_view_show_rules(active);
+}
+
+void Window_PrintLayout_Edit::do_menu_view_show_rules(bool active)
+{
+  //This doesn't seem to trigger the activate signal,
+  //so we don't risk this being called in an infinite loop:
+  m_action_showrules->change_state(active);
+
   m_canvas.set_rules_visibility(active);
 
   Gtk::Widget* hruler = Glib::wrap(GTK_WIDGET(m_hruler));
@@ -1003,44 +1131,62 @@ void Window_PrintLayout_Edit::on_menu_view_show_rules()
 }
 
 
-void Window_PrintLayout_Edit::on_menu_view_show_outlines()
+void Window_PrintLayout_Edit::on_menu_view_show_outlines(const Glib::VariantBase& parameter)
 {
-  m_canvas.set_outlines_visibility(
-    m_action_showoutlines->get_active());
+  //The state is not changed automatically:
+  const bool active = !m_action_showoutlines->get_state_bool();
+  do_menu_view_show_rules(active);
 }
 
-void Window_PrintLayout_Edit::on_menu_view_zoom(guint percent)
+void Window_PrintLayout_Edit::do_menu_view_show_outlines(bool active)
 {
-  m_canvas.set_zoom_percent(percent);
+  //This doesn't seem to trigger the activate signal,
+  //so we don't risk this being called in an infinite loop:
+  m_action_showoutlines->change_state(active);
+
+  m_canvas.set_outlines_visibility(active);
 }
 
-void Window_PrintLayout_Edit::on_menu_view_fitpagewidth()
+void Window_PrintLayout_Edit::on_menu_view_zoom(const Glib::VariantBase& parameter)
 {
-  //Get the canvas size:
-  Goocanvas::Bounds bounds;
-  m_canvas.get_bounds(bounds);
-  
-  double canvas_width_pixels = bounds.get_x2() - bounds.get_x1();
-  double canvas_height_pixels = bounds.get_y2() - bounds.get_y1();
-  m_canvas.convert_to_pixels(canvas_width_pixels, canvas_height_pixels);
-  canvas_width_pixels = canvas_width_pixels / m_canvas.property_scale();
-
-  //Get the viewport size:
-  Gtk::Widget* child = m_scrolled_window.get_child();
-  if(child)
+  const Glib::Variant<int> variantInt = parameter.cast_dynamic< Glib::Variant<int> >(parameter);
+  const int percent = variantInt.get();
+
+  //The state is not changed automatically:
+  m_action_zoom->change_state(variantInt);
+
+  if(percent == 0) //For us, this means Fit Page Width.
   {
-    Gtk::Allocation widget_allocation = child->get_allocation();
-    const double viewport_width = widget_allocation.get_width();
-    if(canvas_width_pixels)
+    //Get the canvas size:
+    Goocanvas::Bounds bounds;
+    m_canvas.get_bounds(bounds);
+  
+    double canvas_width_pixels = bounds.get_x2() - bounds.get_x1();
+    double canvas_height_pixels = bounds.get_y2() - bounds.get_y1();
+    m_canvas.convert_to_pixels(canvas_width_pixels, canvas_height_pixels);
+    canvas_width_pixels = canvas_width_pixels / m_canvas.property_scale();
+
+    //Get the viewport size:
+    Gtk::Widget* child = m_scrolled_window.get_child();
+    if(child)
     {
-      //scale the canvas so it fits perfectly in the viewport:
-      const double scale = viewport_width / canvas_width_pixels;
-      m_canvas.set_zoom_percent((guint)(scale * 100));
+      Gtk::Allocation widget_allocation = child->get_allocation();
+      const double viewport_width = widget_allocation.get_width();
+      if(canvas_width_pixels)
+      {
+        //scale the canvas so it fits perfectly in the viewport:
+        const double scale = viewport_width / canvas_width_pixels;
+        m_canvas.set_zoom_percent((guint)(scale * 100));
+      }
     }
   }
+  else
+  {
+    m_canvas.set_zoom_percent(percent);
+  }  
 }
 
-void Window_PrintLayout_Edit::on_menu_file_page_setup()
+void Window_PrintLayout_Edit::on_menu_file_page_setup(const Glib::VariantBase& /* parameter */)
 {
   Glib::RefPtr<Gtk::PageSetup> page_setup = m_canvas.get_page_setup();
 
@@ -1055,7 +1201,7 @@ void Window_PrintLayout_Edit::on_menu_file_page_setup()
   set_ruler_sizes();
 }
 
-void Window_PrintLayout_Edit::on_menu_file_print_preview()
+void Window_PrintLayout_Edit::on_menu_file_print_preview(const Glib::VariantBase& /* parameter */)
 {
   //Save any recent changes in the document,
   //so that the preview will show them:
@@ -1076,13 +1222,13 @@ void Window_PrintLayout_Edit::on_menu_file_print_preview()
     app->do_print_layout(m_print_layout->get_name(), true /* preview */, this);
 }
 
-void Window_PrintLayout_Edit::on_menu_edit_cut()
+void Window_PrintLayout_Edit::on_menu_edit_cut(const Glib::VariantBase& parameter)
 {
-  on_menu_edit_copy();
-  on_menu_edit_delete();
+  on_menu_edit_copy(parameter);
+  on_menu_edit_delete(parameter);
 }
 
-void Window_PrintLayout_Edit::on_menu_edit_copy()
+void Window_PrintLayout_Edit::on_menu_edit_copy(const Glib::VariantBase& /* parameter */)
 {
   if(m_layout_items_selected.empty())
     return;
@@ -1102,10 +1248,10 @@ void Window_PrintLayout_Edit::on_menu_edit_copy()
     m_layout_items_to_paste.push_back(cloned);
   }
 
-  m_action_edit_paste->set_sensitive();
+  m_action_edit_paste->set_enabled();
 }
 
-void Window_PrintLayout_Edit::on_menu_edit_paste()
+void Window_PrintLayout_Edit::on_menu_edit_paste(const Glib::VariantBase& /* parameter */)
 {
   if(m_layout_items_to_paste.empty())
     return;
@@ -1146,7 +1292,7 @@ Glib::RefPtr<CanvasLayoutItem> Window_PrintLayout_Edit::create_canvas_layout_ite
   return canvas_item;
 }
 
-void Window_PrintLayout_Edit::on_menu_edit_delete()
+void Window_PrintLayout_Edit::on_menu_edit_delete(const Glib::VariantBase& /* parameter */)
 {
   while(!m_layout_items_selected.empty())
   {
@@ -1158,17 +1304,17 @@ void Window_PrintLayout_Edit::on_menu_edit_delete()
   m_layout_items_selected.clear();
 }
 
-void Window_PrintLayout_Edit::on_menu_edit_selectall()
+void Window_PrintLayout_Edit::on_menu_edit_selectall(const Glib::VariantBase& /* parameter */)
 {
   m_canvas.select_all();
 }
 
-void Window_PrintLayout_Edit::on_menu_edit_unselectall()
+void Window_PrintLayout_Edit::on_menu_edit_unselectall(const Glib::VariantBase& /* parameter */)
 {
   m_canvas.select_all(false);
 }
 
-void Window_PrintLayout_Edit::on_menu_align_top()
+void Window_PrintLayout_Edit::on_menu_align_top(const Glib::VariantBase& /* parameter */)
 {
   //Get the top-most position:
   double top = 0;
@@ -1204,7 +1350,7 @@ void Window_PrintLayout_Edit::on_menu_align_top()
   }
 }
 
-void Window_PrintLayout_Edit::on_menu_align_bottom()
+void Window_PrintLayout_Edit::on_menu_align_bottom(const Glib::VariantBase& /* parameter */)
 {
   //Get the bottom-most position:
   double bottom = 0;
@@ -1252,7 +1398,7 @@ void Window_PrintLayout_Edit::on_menu_align_bottom()
   }
 }
 
-void Window_PrintLayout_Edit::on_menu_align_left()
+void Window_PrintLayout_Edit::on_menu_align_left(const Glib::VariantBase& /* parameter */)
 {
   //Get the left-most position:
   double left = 0;
@@ -1288,7 +1434,7 @@ void Window_PrintLayout_Edit::on_menu_align_left()
   }
 }
 
-void Window_PrintLayout_Edit::on_menu_align_right()
+void Window_PrintLayout_Edit::on_menu_align_right(const Glib::VariantBase& /* parameter */)
 {
   //Get the right-most position:
   double right = 0;
@@ -1386,8 +1532,14 @@ bool Window_PrintLayout_Edit::on_configure_event(GdkEventConfigure* event)
   const bool result = Gtk::Window::on_configure_event(event);
 
   //If we are in fit-page-width then rescale the canvas:
-  if(m_action_zoom_fit_page_width->get_active())
-    on_menu_view_fitpagewidth();
+  const Glib::VariantBase variant = m_action_zoom->get_state();
+  const Glib::Variant<int> variantInt = variant.cast_dynamic< Glib::Variant<int> >(variant);
+  const int percent = variantInt.get();
+
+  if(percent == 0) //Fit Page Width
+  {
+    on_menu_view_zoom(variantInt);
+  }
 
   return result;
 }
@@ -1497,13 +1649,13 @@ void Window_PrintLayout_Edit::on_canvas_selection_changed()
   m_spinbutton_height->set_sensitive(one_selected);
 
   if(m_action_edit_cut)
-    m_action_edit_cut->set_sensitive(some_selected);
+    m_action_edit_cut->set_enabled(some_selected);
 
   if(m_action_edit_copy)
-    m_action_edit_copy->set_sensitive(some_selected);
+    m_action_edit_copy->set_enabled(some_selected);
 
   if(m_action_edit_delete)
-    m_action_edit_delete->set_sensitive(some_selected);
+    m_action_edit_delete->set_enabled(some_selected);
 }
 
 void Window_PrintLayout_Edit::on_selected_item_moved(const Glib::RefPtr<CanvasItemMovable>& item, double 
x_offset, double y_offset)
diff --git a/glom/mode_design/print_layouts/window_print_layout_edit.h 
b/glom/mode_design/print_layouts/window_print_layout_edit.h
index be6123a..1a4e467 100644
--- a/glom/mode_design/print_layouts/window_print_layout_edit.h
+++ b/glom/mode_design/print_layouts/window_print_layout_edit.h
@@ -30,7 +30,6 @@
 #include <gtkmm/window.h>
 #include <gtkmm/entry.h>
 #include <gtkmm/label.h>
-#include <gtkmm/uimanager.h>
 #include <glom/utility_widgets/gimpruler/gimpruler.h>
 #include <gtkmm/scrolledwindow.h>
 #include <gtkmm/spinbutton.h>
@@ -64,40 +63,39 @@ private:
 
   sharedptr<LayoutItem> create_empty_item(PrintLayoutToolbarButton::enumItems item_type);
 
-  void on_menu_file_page_setup();
-  void on_menu_file_print_preview();
-  void on_menu_insert_field();
-  void on_menu_insert_text();
-  void on_menu_insert_image();
-  void on_menu_insert_relatedrecords();
-  void on_menu_insert_line_horizontal();
-  void on_menu_insert_line_vertical();
-  void on_menu_insert_create_standard();
-  void on_menu_insert_add_page();
-  void on_menu_insert_delete_page();
+  void on_menu_file_page_setup(const Glib::VariantBase& parameter);
+  void on_menu_file_print_preview(const Glib::VariantBase& parameter);
+  void on_menu_insert_field(const Glib::VariantBase& parameter);
+  void on_menu_insert_text(const Glib::VariantBase& parameter);
+  void on_menu_insert_image(const Glib::VariantBase& parameter);
+  void on_menu_insert_relatedrecords(const Glib::VariantBase& parameter);
+  void on_menu_insert_line_horizontal(const Glib::VariantBase& parameter);
+  void on_menu_insert_line_vertical(const Glib::VariantBase& parameter);
+  void on_menu_insert_create_standard(const Glib::VariantBase& parameter);
+  void on_menu_insert_add_page(const Glib::VariantBase& parameter);
+  void on_menu_insert_delete_page(const Glib::VariantBase& parameter);
   
-  void on_menu_view_show_grid();
-  void on_menu_view_show_rules();
-  void on_menu_view_show_outlines();
-  void on_menu_view_zoom(guint percent);
-  void on_menu_view_fitpagewidth();
-
-  void on_menu_edit_cut();
-  void on_menu_edit_copy();
-  void on_menu_edit_paste();
-  void on_menu_edit_delete();
-  void on_menu_edit_selectall();
-  void on_menu_edit_unselectall();
+  void on_menu_view_show_grid(const Glib::VariantBase& parameter);
+  void on_menu_view_show_rules(const Glib::VariantBase& parameter);
+  void on_menu_view_show_outlines(const Glib::VariantBase& parameter);
+  void on_menu_view_zoom(const Glib::VariantBase& parameter);
+
+  void on_menu_edit_cut(const Glib::VariantBase& parameter);
+  void on_menu_edit_copy(const Glib::VariantBase& parameter);
+  void on_menu_edit_paste(const Glib::VariantBase& parameter);
+  void on_menu_edit_delete(const Glib::VariantBase& parameter);
+  void on_menu_edit_selectall(const Glib::VariantBase& parameter);
+  void on_menu_edit_unselectall(const Glib::VariantBase& parameter);
   
-  void on_menu_align_top();
-  void on_menu_align_bottom();
-  void on_menu_align_left();
-  void on_menu_align_right();
+  void on_menu_align_top(const Glib::VariantBase& parameter);
+  void on_menu_align_bottom(const Glib::VariantBase& parameter);
+  void on_menu_align_left(const Glib::VariantBase& parameter);
+  void on_menu_align_right(const Glib::VariantBase& parameter);
 
   bool on_canvas_motion_notify_event(GdkEventMotion* event);
   void on_canvas_show_context_menu(guint button, guint32 activate_time);
-  void on_context_menu_insert_field();
-  void on_context_menu_insert_text();
+  void on_context_menu_insert_field(const Glib::VariantBase& parameter);
+  void on_context_menu_insert_text(const Glib::VariantBase& parameter);
 
   void on_scroll_value_changed();
   void on_button_close();
@@ -123,6 +121,10 @@ private:
   //override:
   virtual bool on_configure_event(GdkEventConfigure* event);
 
+  void do_menu_view_show_grid(bool active);
+  void do_menu_view_show_rules(bool active);
+  void do_menu_view_show_outlines(bool active);
+
   void update_table_title();
   void setup_context_menu();
   void set_ruler_sizes();
@@ -185,17 +187,15 @@ private:
   GimpRuler* m_hruler;
 
   //Main menu:
-  Glib::RefPtr<Gtk::ActionGroup> m_action_group;
-  Glib::RefPtr<Gtk::UIManager> m_uimanager;
-  Glib::RefPtr<Gtk::ToggleAction> m_action_showgrid, m_action_showrules, m_action_showoutlines;
-  Glib::RefPtr<Gtk::ToggleAction> m_action_zoom_fit_page_width;
+  Glib::RefPtr<Gio::SimpleAction> m_action_showgrid, m_action_showrules, m_action_showoutlines;
+  Glib::RefPtr<Gio::SimpleAction> m_action_zoom;
 
   //Edit menu:
-  Glib::RefPtr<Gtk::Action> m_action_edit_cut, m_action_edit_copy, 
+  Glib::RefPtr<Gio::SimpleAction> m_action_edit_cut, m_action_edit_copy, 
     m_action_edit_paste, m_action_edit_delete;
     
   //Align menu:
-  Glib::RefPtr<Gtk::Action> m_action_align_top, m_action_align_bottom, 
+  Glib::RefPtr<Gio::SimpleAction> m_action_align_top, m_action_align_bottom, 
     m_action_align_left, m_action_align_right;
 
   //Toolbar:
@@ -205,9 +205,6 @@ private:
   
   //Context menu for clicking on empty space on the canvas:
   Gtk::Menu* m_context_menu;
-  Glib::RefPtr<Gtk::ActionGroup> m_context_menu_action_group;
-  Glib::RefPtr<Gtk::UIManager> m_context_menu_uimanager;
-
 };
 
 } //namespace Glom



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]