[niepce: 8/22] [mg] Update for the new Gio::Action framework.



commit c7d9ecce09588c7bd1fa3cce032bdc28bb96c87f
Author: Hubert Figuière <hub figuiere net>
Date:   Fri Jul 18 01:43:02 2014 -0400

    [mg] Update for the new Gio::Action framework.

 magellan/src/mgwindow.cpp |  161 ++++++++++++++++++---------------------------
 magellan/src/mgwindow.hpp |    7 +-
 2 files changed, 66 insertions(+), 102 deletions(-)
---
diff --git a/magellan/src/mgwindow.cpp b/magellan/src/mgwindow.cpp
index ad5541e..e0a7306 100644
--- a/magellan/src/mgwindow.cpp
+++ b/magellan/src/mgwindow.cpp
@@ -20,12 +20,12 @@
 
 #include <glibmm/i18n.h>
 
-#include <gtkmm/stock.h>
 #include <gtkmm/window.h>
 
 #include "fwk/base/debug.hpp"
 #include "fwk/toolkit/application.hpp"
 #include "fwk/toolkit/undo.hpp"
+#include "fwk/toolkit/gtkutils.hpp"
 #include "mgwindow.hpp"
 
 
@@ -53,13 +53,9 @@ Gtk::Widget * MgWindow::buildWidget()
   Application::Ptr pApp = Application::app();
 
   init_actions();
-  init_ui(manager);
 
   win.add(m_vbox);
 
-  Gtk::Widget* pMenuBar = pApp->uiManager()->get_widget("/MenuBar");
-  m_vbox.pack_start(*pMenuBar, Gtk::PACK_SHRINK);
-
   Glib::RefPtr<Gtk::Builder> bldr
          = Gtk::Builder::create_from_file(GLADEDIR"mgwindow.ui",
                                           "content_box");
@@ -69,7 +65,7 @@ Gtk::Widget * MgWindow::buildWidget()
 
   Gtk::Button* dload_btn;
   bldr->get_widget("download_btn", dload_btn);
-  dload_btn->set_related_action(m_importAction);
+  gtk_actionable_set_action_name(GTK_ACTIONABLE(dload_btn->gobj()), "win.Import");
 
   win.set_size_request(600, 400);
   win.show_all_children();
@@ -79,100 +75,69 @@ Gtk::Widget * MgWindow::buildWidget()
 
 void MgWindow::init_actions()
 {
-    Glib::RefPtr<Gtk::Action> an_action;
-
-    m_refActionGroup = Gtk::ActionGroup::create();
-
-    m_refActionGroup->add(Gtk::Action::create("MenuFile", _("_File")));
-    m_importAction = Gtk::Action::create("Import", _("_Import"));
-    m_refActionGroup->add(m_importAction,
-                         sigc::mem_fun(*this,
-                                       &MgWindow::on_action_import));
-    m_refActionGroup->add(Gtk::Action::create("Close", Gtk::Stock::CLOSE),
-                          sigc::mem_fun(gtkWindow(),
-                                        &Gtk::Window::hide));
-    m_refActionGroup->add(Gtk::Action::create("Quit", Gtk::Stock::QUIT),
-                          sigc::mem_fun(*Application::app(),
-                                        &Application::quit));
-
-    m_refActionGroup->add(Gtk::Action::create("MenuEdit", _("_Edit")));
-
-    create_undo_action(m_refActionGroup);
-    create_redo_action(m_refActionGroup);
+    m_actionGroup = Gio::SimpleActionGroup::create();
+    gtkWindow().insert_action_group("win", m_actionGroup);
+
+    m_menu = Gio::Menu::create();
+    auto submenu = Gio::Menu::create();
+    m_menu->append_submenu(_("File"), submenu);
+
+    fwk::add_action(m_actionGroup, "Import",
+                    sigc::mem_fun(*this,
+                                  &MgWindow::on_action_import),
+                    submenu, _("_Import..."), "win", nullptr);
+    fwk::add_action(m_actionGroup, "Close",
+                    sigc::mem_fun(gtkWindow(),
+                                  &Gtk::Window::hide),
+                    submenu, _("Close"), "win", "<Primary>w");
+
+    submenu = Gio::Menu::create();
+    m_menu->append_submenu(_("Edit"), submenu);
+    auto section = Gio::Menu::create();
+    submenu->append_section(section);
+
+    create_undo_action(m_actionGroup, section);
+    create_redo_action(m_actionGroup, section);
 
     // FIXME: bind
-    m_refActionGroup->add(Gtk::Action::create("Cut", Gtk::Stock::CUT));
-    m_refActionGroup->add(Gtk::Action::create("Copy", Gtk::Stock::COPY));
-    m_refActionGroup->add(Gtk::Action::create("Paste", Gtk::Stock::PASTE));
-    m_refActionGroup->add(Gtk::Action::create("Delete", Gtk::Stock::DELETE));
-
-    m_refActionGroup->add(Gtk::Action::create("Preferences",
-                                              Gtk::Stock::PREFERENCES),
-                          sigc::mem_fun(*this,
-                                        &MgWindow::on_preferences));
-
-    m_refActionGroup->add(Gtk::Action::create("MenuTools", _("_Tools")));
-    m_refActionGroup->add(Gtk::Action::create("RedetectDevices",
-                                              Gtk::Stock::REFRESH),
-                          Gtk::AccelKey("F5"),
-                          sigc::mem_fun(*this, &MgWindow::detect_devices));
-    m_hide_tools_action = Gtk::ToggleAction::create("ToggleToolsVisible",
-                                                    _("_Hide tools"));
-    m_refActionGroup->add(m_hide_tools_action,
-                          sigc::mem_fun(*this, &Frame::toggle_tools_visible));
-
-    m_refActionGroup->add(Gtk::Action::create("MenuHelp", _("_Help")));
-    m_refActionGroup->add(Gtk::Action::create("Help", Gtk::Stock::HELP));
-    m_refActionGroup->add(Gtk::Action::create("About", Gtk::Stock::ABOUT),
-                          sigc::mem_fun(*Application::app(),
-                                        &Application::about));
-
-    Application::app()->uiManager()->insert_action_group(m_refActionGroup);
-
-    gtkWindow().add_accel_group(Application::app()
-                                ->uiManager()->get_accel_group());
-}
-
-
-void MgWindow::init_ui(const Glib::RefPtr<Gtk::UIManager> & manager)
-{
-  Glib::ustring ui_info =
-    "<ui>"
-    "  <menubar name='MenuBar'>"
-    "    <menu action='MenuFile'>"
-    "      <menuitem action='Import'/>"
-    "      <separator/>"
-    "      <menuitem action='Close'/>"
-    "      <menuitem action='Quit'/>"
-    "    </menu>"
-    "    <menu action='MenuEdit'>"
-    "      <menuitem action='Undo'/>"
-    "      <menuitem action='Redo'/>"
-    "      <separator/>"
-    "      <menuitem action='Cut'/>"
-    "      <menuitem action='Copy'/>"
-    "      <menuitem action='Paste'/>"
-    "      <menuitem action='Delete'/>"
-    "      <separator/>"
-    "      <menuitem action='Preferences'/>"
-    "    </menu>"
-    "    <menu action='MenuTools'>"
-    "      <menuitem action='RedetectDevices' />"
-    "      <separator/>"
-    "      <menuitem action='ToggleToolsVisible'/>"
-    "      <separator/>"
-    "    </menu>"
-    "    <menu action='MenuHelp'>"
-    "      <menuitem action='Help'/>"
-    "      <menuitem action='About'/>"
-    "    </menu>"
-    "  </menubar>"
-    "  <toolbar  name='ToolBar'>"
-    "    <toolitem action='Import'/>"
-    "    <toolitem action='Quit'/>"
-    "  </toolbar>"
-    "</ui>";
-  manager->add_ui_from_string(ui_info);
+    section = Gio::Menu::create();
+    submenu->append_section(section);
+
+    fwk::add_action(m_actionGroup,
+                    "Cut",
+                    Gio::ActionMap::ActivateSlot(), section,
+                    _("Cut"), "win", "<control>x");
+    fwk::add_action(m_actionGroup,
+                    "Copy",
+                    Gio::ActionMap::ActivateSlot(), section,
+                    _("Copy"), "win", "<control>c");
+    fwk::add_action(m_actionGroup,
+                    "Paste",
+                    Gio::ActionMap::ActivateSlot(), section,
+                    _("Paste"), "win" "<control>v");
+
+    section = Gio::Menu::create();
+    submenu->append_section(section);
+    fwk::add_action(m_actionGroup,
+                    "Preferences",
+                    sigc::mem_fun(*this,
+                                  &MgWindow::on_preferences),
+                    section, _("Preferences"), "win", nullptr);
+
+    submenu = Gio::Menu::create();
+    m_menu->append_submenu(_("Tools"), submenu);
+
+    fwk::add_action(m_actionGroup,
+                    "RedetectDevices",
+                    sigc::mem_fun(*this, &MgWindow::detect_devices),
+                    submenu, _("Refresh"), "win", "F5");
+
+
+    m_hide_tools_action
+        = fwk::add_action(m_actionGroup, "ToggleToolsVisible",
+                          sigc::mem_fun(*this, &Frame::toggle_tools_visible),
+                          submenu, _("Hide tools"), "win",
+                          nullptr);
 }
 
 
diff --git a/magellan/src/mgwindow.hpp b/magellan/src/mgwindow.hpp
index 0a173cb..3c27eac 100644
--- a/magellan/src/mgwindow.hpp
+++ b/magellan/src/mgwindow.hpp
@@ -21,8 +21,9 @@
 #ifndef __MG_WINDOW_HPP_
 #define __MG_WINDOW_HPP_
 
+#include <giomm/simpleactiongroup.h>
+
 #include <gtkmm/action.h>
-#include <gtkmm/actiongroup.h>
 #include <gtkmm/box.h>
 #include <gtkmm/liststore.h>
 #include <gtkmm/treemodel.h>
@@ -43,7 +44,6 @@ protected:
 
 private:
 
-  void init_ui(const Glib::RefPtr<Gtk::UIManager> & manager);
   void init_actions();
   void on_action_import();
   void on_preferences();
@@ -51,8 +51,7 @@ private:
   void detect_devices();
 
   Gtk::VBox                      m_vbox;
-  Glib::RefPtr<Gtk::ActionGroup> m_refActionGroup;
-       Glib::RefPtr<Gtk::Action>      m_importAction;
+  Glib::RefPtr<Gio::SimpleActionGroup> m_actionGroup;
 };
 
 }


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