[niepce] API change in fwk::Controller to pass a Gtk::UIManager to buildWidget()



commit 16d267f0561c9a1ac337c2ba0099c50f734a3c35
Author: Hubert Figuiere <hub figuiere net>
Date:   Mon Jul 13 00:47:43 2009 -0400

    API change in fwk::Controller to pass a Gtk::UIManager to buildWidget()

 ChangeLog                                         |    5 ++++
 camerawire/ChangeLog                              |    5 ++++
 camerawire/src/cwwindow.cpp                       |   16 +++++++----
 camerawire/src/cwwindow.hpp                       |    4 +-
 src/fwk/toolkit/application.cpp                   |    4 +-
 src/fwk/toolkit/application.hpp                   |    2 +-
 src/fwk/toolkit/controller.cpp                    |    6 +----
 src/fwk/toolkit/controller.hpp                    |   27 +++++++++++----------
 src/fwk/toolkit/dialog.cpp                        |    4 +++
 src/fwk/toolkit/dialog.hpp                        |    2 +
 src/fwk/toolkit/frame.cpp                         |    4 ---
 src/fwk/toolkit/frame.hpp                         |    1 -
 src/niepce/modules/darkroom/darkroommodule.cpp    |    9 ++++--
 src/niepce/modules/darkroom/darkroommodule.hpp    |    2 +-
 src/niepce/modules/darkroom/toolboxcontroller.cpp |    5 +++-
 src/niepce/modules/darkroom/toolboxcontroller.hpp |    2 +-
 src/niepce/ui/filmstripcontroller.cpp             |    5 +++-
 src/niepce/ui/filmstripcontroller.hpp             |    5 +--
 src/niepce/ui/gridviewmodule.cpp                  |   10 +++++--
 src/niepce/ui/gridviewmodule.hpp                  |    2 +-
 src/niepce/ui/metadatapanecontroller.cpp          |    5 +++-
 src/niepce/ui/metadatapanecontroller.hpp          |    2 +-
 src/niepce/ui/moduleshell.cpp                     |   16 +++++++++---
 src/niepce/ui/moduleshell.hpp                     |    3 +-
 src/niepce/ui/niepcewindow.cpp                    |   24 ++++++++++--------
 src/niepce/ui/niepcewindow.hpp                    |    4 +-
 src/niepce/ui/selectioncontroller.hpp             |    2 +-
 src/niepce/ui/workspacecontroller.cpp             |    8 ++++-
 src/niepce/ui/workspacecontroller.hpp             |    3 +-
 29 files changed, 114 insertions(+), 73 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 52a5140..a7270d2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-13  Hubert Figuiere  <hub figuiere net>
+
+	* API change in fwk::Controller to pass a Gtk::UIManager
+	to buildWidget()
+
 2009-07-09  Hubert Figuiere  <hub figuiere net>
 
 	* configure.ac: Bump gegl requirements to 0.1.0
diff --git a/camerawire/ChangeLog b/camerawire/ChangeLog
index cd4e698..87782fe 100644
--- a/camerawire/ChangeLog
+++ b/camerawire/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-13  Hubert Figuiere  <hub figuiere net>
+
+	* API change in fwk::Controller to pass a Gtk::UIManager
+	to buildWidget()
+
 2009-05-22  Hubert Figuiere  <hub figuiere net>
 
 	* src/cwwindow.{hpp,cpp}:
diff --git a/camerawire/src/cwwindow.cpp b/camerawire/src/cwwindow.cpp
index 9d224f5..73a9458 100644
--- a/camerawire/src/cwwindow.cpp
+++ b/camerawire/src/cwwindow.cpp
@@ -40,14 +40,19 @@ CwWindow::CwWindow()
 }
 
 
-Gtk::Widget * CwWindow::buildWidget()
+Gtk::Widget * CwWindow::buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
+  if(m_widget) {
+    return m_widget;
+  }
+
   Gtk::Window & win(gtkWindow());
+  m_widget = &win;
 
   Application::Ptr pApp = Application::app();
 
   init_actions();
-  init_ui();
+  init_ui(manager);
 
   win.add(m_vbox);
 
@@ -73,7 +78,7 @@ Gtk::Widget * CwWindow::buildWidget()
 
   win.set_size_request(600, 400);
   win.show_all_children();
-  return &win;
+  return m_widget;
 }
 
 
@@ -133,9 +138,8 @@ void CwWindow::init_actions()
 }
 
 
-void CwWindow::init_ui()
+void CwWindow::init_ui(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
-  fwk::Application::Ptr pApp = fwk::Application::app();
   Glib::ustring ui_info =
     "<ui>"
     "  <menubar name='MenuBar'>"
@@ -172,7 +176,7 @@ void CwWindow::init_ui()
     "    <toolitem action='Quit'/>"
     "  </toolbar>"
     "</ui>";
-  pApp->uiManager()->add_ui_from_string(ui_info);
+  manager->add_ui_from_string(ui_info);
 } 
 
 
diff --git a/camerawire/src/cwwindow.hpp b/camerawire/src/cwwindow.hpp
index 659ec30..cc0b0c5 100644
--- a/camerawire/src/cwwindow.hpp
+++ b/camerawire/src/cwwindow.hpp
@@ -40,7 +40,7 @@ public:
   CwWindow();
 
 protected:
-  virtual Gtk::Widget * buildWidget();
+  virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager);
 
 private:
   class CameraTreeRecord
@@ -61,7 +61,7 @@ private:
     Gtk::TreeModelColumn<bool>               m_persistent;
   };
 
-  void init_ui();
+  void init_ui(const Glib::RefPtr<Gtk::UIManager> & manager);
   void init_actions();
   void on_action_import();
   void on_preferences();
diff --git a/src/fwk/toolkit/application.cpp b/src/fwk/toolkit/application.cpp
index 08d981d..b13568d 100644
--- a/src/fwk/toolkit/application.cpp
+++ b/src/fwk/toolkit/application.cpp
@@ -50,7 +50,7 @@ Application::~Application()
 }
 
 /** no widget for applications */
-Gtk::Widget * Application::buildWidget()
+Gtk::Widget * Application::buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
 {
     return NULL;
 }
@@ -161,7 +161,7 @@ void Application::about()
 void Application::add(const Controller::Ptr & sub)
 {
     Controller::add(sub);
-    sub->buildWidget();
+    sub->buildWidget(uiManager());
 }
 
 void Application::on_about()
diff --git a/src/fwk/toolkit/application.hpp b/src/fwk/toolkit/application.hpp
index b4d252f..a41127e 100644
--- a/src/fwk/toolkit/application.hpp
+++ b/src/fwk/toolkit/application.hpp
@@ -63,7 +63,7 @@ public:
             return m_refUIManager; 
         }
 
-    virtual Gtk::Widget * buildWidget();
+    virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager);
     virtual void quit();
     void about();
     virtual void add(const Controller::Ptr & sub);
diff --git a/src/fwk/toolkit/controller.cpp b/src/fwk/toolkit/controller.cpp
index c88e732..79a2d25 100644
--- a/src/fwk/toolkit/controller.cpp
+++ b/src/fwk/toolkit/controller.cpp
@@ -39,13 +39,9 @@ Controller::~Controller()
 //    DBG_OUT("destroy Controllers");
 }
 
-Gtk::Widget * Controller::widget()
+Gtk::Widget * Controller::widget() const
 {
     DBG_ASSERT(!m_parent.expired(), "must be attached");
-    if(m_widget == NULL) 
-    {
-        m_widget = buildWidget();
-    }
     return m_widget;
 }
 
diff --git a/src/fwk/toolkit/controller.hpp b/src/fwk/toolkit/controller.hpp
index 4ee3b43..cd50ddd 100644
--- a/src/fwk/toolkit/controller.hpp
+++ b/src/fwk/toolkit/controller.hpp
@@ -26,7 +26,8 @@
 #include <list>
 #include <tr1/memory>
 
-#include "sigc++/trackable.h"
+#include <gtkmm/uimanager.h>
+#include <sigc++/trackable.h>
 
 #include "fwk/utils/databinder.hpp"
 
@@ -36,13 +37,13 @@ namespace Gtk {
 
 namespace fwk {
 
-	/** Generic controller class
-	 */
-	class Controller
-      : public std::tr1::enable_shared_from_this<Controller>
-      , public sigc::trackable
-	{
-	public:
+/** Generic controller class
+ */
+class Controller
+    : public std::tr1::enable_shared_from_this<Controller>
+    , public sigc::trackable
+{
+public:
 		typedef std::tr1::shared_ptr<Controller> Ptr;
 		typedef std::tr1::weak_ptr<Controller> WeakPtr;
 
@@ -53,7 +54,7 @@ namespace fwk {
 		void add(const Ptr & sub);
 		/** clear the parent. Usually called by the parent when unparenting */
 		void clearParent()
-			{ m_parent.reset(); }
+        { m_parent.reset(); }
 		void remove(const Ptr & sub);
 		
 		virtual bool canTerminate();
@@ -61,14 +62,14 @@ namespace fwk {
 		virtual void terminate();
 
 		/** return the widget controlled (construct it if needed) */
-		virtual Gtk::Widget * buildWidget() = 0;
-		Gtk::Widget * widget();
+		virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager) = 0;
+		Gtk::Widget * widget() const;
 
 		/** called when everything is ready 
 		 * subclasses should reimplement if needed
 		 */
 		virtual void on_ready();
-	protected:
+protected:
 		/** called when the controller has been added to a parent. */
 		virtual void _added();
 
@@ -79,7 +80,7 @@ namespace fwk {
 		std::list<Ptr> m_subs; /**< sub controllers */
 
 		DataBinderPool m_databinders;
-	};
+};
 
 }
 
diff --git a/src/fwk/toolkit/dialog.cpp b/src/fwk/toolkit/dialog.cpp
index 95e7735..b4445ad 100644
--- a/src/fwk/toolkit/dialog.cpp
+++ b/src/fwk/toolkit/dialog.cpp
@@ -52,6 +52,10 @@ int Dialog::run_modal(const Frame::Ptr & parent)
 		return result;
 }
 
+Gtk::Widget *Dialog::buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
+{
+    return &gtkWindow();
+}
 
 }
 
diff --git a/src/fwk/toolkit/dialog.hpp b/src/fwk/toolkit/dialog.hpp
index b8d66be..56ef3ff 100644
--- a/src/fwk/toolkit/dialog.hpp
+++ b/src/fwk/toolkit/dialog.hpp
@@ -57,6 +57,8 @@ public:
     int run_modal();
     int run_modal(const Frame::Ptr & parent);
 protected:
+    virtual Gtk::Widget *buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
+
     bool m_is_setup;
 };
 
diff --git a/src/fwk/toolkit/frame.cpp b/src/fwk/toolkit/frame.cpp
index 53976f8..6c32cb6 100644
--- a/src/fwk/toolkit/frame.cpp
+++ b/src/fwk/toolkit/frame.cpp
@@ -204,10 +204,6 @@ void Frame::frameRectToConfig()
 		}
 }
 
-Gtk::Widget *Frame::buildWidget()
-{
-    return m_window;
-}
 /*
   Local Variables:
   mode:c++
diff --git a/src/fwk/toolkit/frame.hpp b/src/fwk/toolkit/frame.hpp
index 12d187c..10d1c91 100644
--- a/src/fwk/toolkit/frame.hpp
+++ b/src/fwk/toolkit/frame.hpp
@@ -92,7 +92,6 @@ private:
     /** frame have the widget set at construction time
      * from a ui file or directly.
      */
-    virtual Gtk::Widget *buildWidget();
 		void connectSignals();
 		void frameRectFromConfig();
 		void frameRectToConfig();
diff --git a/src/niepce/modules/darkroom/darkroommodule.cpp b/src/niepce/modules/darkroom/darkroommodule.cpp
index 0e96fa2..9562074 100644
--- a/src/niepce/modules/darkroom/darkroommodule.cpp
+++ b/src/niepce/modules/darkroom/darkroommodule.cpp
@@ -44,9 +44,13 @@ void DarkroomModule::dispatch_action(const std::string & /*action_name*/)
 }
 
 
-Gtk::Widget * DarkroomModule::buildWidget()
+Gtk::Widget * DarkroomModule::buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
+    if(m_widget) {
+        return m_widget;
+    }
     ncr::init();
+    m_widget = &m_dr_splitview;
     m_imagecanvas = Gtk::manage(new ImageCanvas());
 // TODO set a proper canvas size
 //    m_canvas_scroll.add(*m_imagecanvas);
@@ -87,9 +91,8 @@ Gtk::Widget * DarkroomModule::buildWidget()
 
     m_toolbox_ctrl = ToolboxController::Ptr(new ToolboxController(*m_dock));
     add(m_toolbox_ctrl);
-    (void)m_toolbox_ctrl->buildWidget();
+    (void)m_toolbox_ctrl->buildWidget(manager);
 
-    m_widget = &m_dr_splitview;
     return m_widget;
 }
 
diff --git a/src/niepce/modules/darkroom/darkroommodule.hpp b/src/niepce/modules/darkroom/darkroommodule.hpp
index 6ca1c0a..d2f32c1 100644
--- a/src/niepce/modules/darkroom/darkroommodule.hpp
+++ b/src/niepce/modules/darkroom/darkroommodule.hpp
@@ -60,7 +60,7 @@ public:
   virtual void dispatch_action(const std::string & action_name);
 
 protected:
-	virtual Gtk::Widget * buildWidget();
+	virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
 
 private:
     // darkroom split view
diff --git a/src/niepce/modules/darkroom/toolboxcontroller.cpp b/src/niepce/modules/darkroom/toolboxcontroller.cpp
index 653db87..3e8fbff 100644
--- a/src/niepce/modules/darkroom/toolboxcontroller.cpp
+++ b/src/niepce/modules/darkroom/toolboxcontroller.cpp
@@ -38,8 +38,11 @@ ToolboxController::ToolboxController(fwk::Dock &dock)
 
 }
 
-Gtk::Widget * ToolboxController::buildWidget()
+Gtk::Widget * ToolboxController::buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
 {
+    if(m_widget) {
+        return m_widget;
+    }
     DrItemWidget *item = NULL;
     fwk::EditableHScale *s = NULL;
     Gtk::VBox *toolbox = DockItem::get_vbox();
diff --git a/src/niepce/modules/darkroom/toolboxcontroller.hpp b/src/niepce/modules/darkroom/toolboxcontroller.hpp
index 8c9fed6..c618742 100644
--- a/src/niepce/modules/darkroom/toolboxcontroller.hpp
+++ b/src/niepce/modules/darkroom/toolboxcontroller.hpp
@@ -35,7 +35,7 @@ class ToolboxController
 public:
     typedef std::tr1::shared_ptr<ToolboxController> Ptr;
     ToolboxController(fwk::Dock &);
-    virtual Gtk::Widget * buildWidget();
+    virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
 };
 
 }
diff --git a/src/niepce/ui/filmstripcontroller.cpp b/src/niepce/ui/filmstripcontroller.cpp
index 170d045..fb9677f 100644
--- a/src/niepce/ui/filmstripcontroller.cpp
+++ b/src/niepce/ui/filmstripcontroller.cpp
@@ -36,8 +36,11 @@ FilmStripController::FilmStripController(const Glib::RefPtr<ImageListStore> & st
 {
 }
 
-Gtk::Widget * FilmStripController::buildWidget()
+Gtk::Widget * FilmStripController::buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
 {
+    if(m_widget) {
+        return m_widget;
+    }
     DBG_ASSERT(m_store, "m_store NULL");
 	m_thumbview = Glib::wrap(GTK_ICON_VIEW(eog_thumb_view_new(m_store)));
 	GtkWidget *thn = eog_thumb_nav_new(GTK_WIDGET(m_thumbview->gobj()), 
diff --git a/src/niepce/ui/filmstripcontroller.hpp b/src/niepce/ui/filmstripcontroller.hpp
index f6db159..7b2c684 100644
--- a/src/niepce/ui/filmstripcontroller.hpp
+++ b/src/niepce/ui/filmstripcontroller.hpp
@@ -49,9 +49,8 @@ public:
 
 //	void on_tnail_notification(const framework::Notification::Ptr &);
 //	void on_lib_notification(const framework::Notification::Ptr &);
-	
-protected:
-	virtual Gtk::Widget * buildWidget();
+	virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
+
 private:
 	Gtk::IconView * m_thumbview;
 	Glib::RefPtr<ImageListStore> m_store;
diff --git a/src/niepce/ui/gridviewmodule.cpp b/src/niepce/ui/gridviewmodule.cpp
index 3f7ca61..1bf035c 100644
--- a/src/niepce/ui/gridviewmodule.cpp
+++ b/src/niepce/ui/gridviewmodule.cpp
@@ -74,8 +74,12 @@ void GridViewModule::display_none()
 }
 
 
-Gtk::Widget * GridViewModule::buildWidget()
+Gtk::Widget * GridViewModule::buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
+  if(m_widget) {
+    return m_widget;
+  }
+  m_widget = &m_lib_splitview;
   m_librarylistview.set_model(m_model);
   m_librarylistview.set_selection_mode(Gtk::SELECTION_SINGLE);
   m_librarylistview.property_row_spacing() = 0;
@@ -103,13 +107,13 @@ Gtk::Widget * GridViewModule::buildWidget()
   m_metapanecontroller = MetaDataPaneController::Ptr(new MetaDataPaneController(*m_dock));
   add(m_metapanecontroller);
   m_lib_splitview.pack2(m_dock->getWidget());
-  (void)m_metapanecontroller->buildWidget();
+  (void)m_metapanecontroller->buildWidget(manager);
 
   m_databinders.add_binder(new fwk::ConfigDataBinder<int>(
                              m_lib_splitview.property_position(),
                              fwk::Application::app()->config(),
                              "meta_pane_splitter"));
-  return &m_lib_splitview;
+  return m_widget;
 }
 
 
diff --git a/src/niepce/ui/gridviewmodule.hpp b/src/niepce/ui/gridviewmodule.hpp
index 33ad5ef..ea808e3 100644
--- a/src/niepce/ui/gridviewmodule.hpp
+++ b/src/niepce/ui/gridviewmodule.hpp
@@ -63,7 +63,7 @@ public:
   virtual void select_image(int id);
 
 protected:
-  virtual Gtk::Widget * buildWidget();
+  virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager);
 
 
 private:
diff --git a/src/niepce/ui/metadatapanecontroller.cpp b/src/niepce/ui/metadatapanecontroller.cpp
index 969f239..9894efc 100644
--- a/src/niepce/ui/metadatapanecontroller.cpp
+++ b/src/niepce/ui/metadatapanecontroller.cpp
@@ -95,8 +95,11 @@ namespace ui {
     {
     }
 	
-	Gtk::Widget * MetaDataPaneController::buildWidget()
+	Gtk::Widget * MetaDataPaneController::buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
 	{
+    if(m_widget) {
+      return m_widget;
+    }
 		m_widget = &DockItem::getWidget();
 
 		const MetaDataSectionFormat * formats = get_format();
diff --git a/src/niepce/ui/metadatapanecontroller.hpp b/src/niepce/ui/metadatapanecontroller.hpp
index 1f0df58..09b3b0a 100644
--- a/src/niepce/ui/metadatapanecontroller.hpp
+++ b/src/niepce/ui/metadatapanecontroller.hpp
@@ -42,7 +42,7 @@ public:
 		typedef std::tr1::shared_ptr<MetaDataPaneController> Ptr;
 		MetaDataPaneController(fwk::Dock &);
     ~MetaDataPaneController();
-		virtual Gtk::Widget * buildWidget();
+		virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
 		void display(int file_id, const fwk::XmpMeta * meta);
     int displayed_file() const 
         { return m_fileid; }
diff --git a/src/niepce/ui/moduleshell.cpp b/src/niepce/ui/moduleshell.cpp
index 4ca379c..e3d80a3 100644
--- a/src/niepce/ui/moduleshell.cpp
+++ b/src/niepce/ui/moduleshell.cpp
@@ -38,8 +38,13 @@ namespace ui {
 
 
 
-Gtk::Widget * ModuleShell::buildWidget()
+Gtk::Widget * ModuleShell::buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
+    if(m_widget) {
+        return m_widget;
+    }
+    m_widget = &m_shell;
+    m_ui_manager = manager;
     add_library_module(m_gridview, _("Library"));
 
 
@@ -49,15 +54,18 @@ Gtk::Widget * ModuleShell::buildWidget()
 
     // TODO PrintModuleController
     // add_library_module(, _("Print"));
-    return &m_shell;
+    return m_widget;
 }
 
 
 void ModuleShell::add_library_module(const ILibraryModule::Ptr & module,
                                                    const std::string & label)
 {
-    add(module);
-    m_shell.append_page(*module->widget(), label);
+    Gtk::Widget * w = module->buildWidget(m_ui_manager);
+    if(w) {
+        add(module);
+        m_shell.append_page(*w, label);
+    }
 }
 
 void ModuleShell::on_ready()
diff --git a/src/niepce/ui/moduleshell.hpp b/src/niepce/ui/moduleshell.hpp
index 6c25bc2..bc0f740 100644
--- a/src/niepce/ui/moduleshell.hpp
+++ b/src/niepce/ui/moduleshell.hpp
@@ -64,8 +64,8 @@ public:
 		void on_selected(int id);
 		void on_image_activated(int id);
 
+		virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager);
 protected:
-		virtual Gtk::Widget * buildWidget();
     virtual void add_library_module(const ILibraryModule::Ptr & module,
                                     const std::string & label);
 		virtual void on_ready();
@@ -76,6 +76,7 @@ private:
 
 		// managed widgets...
 		ModuleShellWidget             m_shell;
+    Glib::RefPtr<Gtk::UIManager>  m_ui_manager;
 
     GridViewModule::Ptr           m_gridview;
     darkroom::DarkroomModule::Ptr m_darkroom;
diff --git a/src/niepce/ui/niepcewindow.cpp b/src/niepce/ui/niepcewindow.cpp
index 0df86f2..c45344f 100644
--- a/src/niepce/ui/niepcewindow.cpp
+++ b/src/niepce/ui/niepcewindow.cpp
@@ -69,17 +69,20 @@ NiepceWindow::~NiepceWindow()
 }
 
 Gtk::Widget * 
-NiepceWindow::buildWidget()
+NiepceWindow::buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
+    if(m_widget) {
+        return m_widget;
+    }
     Gtk::Window & win(gtkWindow());
 
-    Application::Ptr pApp = Application::app();
+    m_widget = &win;
 
     m_selection_controller = SelectionController::Ptr(new SelectionController);
     add(m_selection_controller);
 
     init_actions();
-    init_ui();
+    init_ui(manager);
 
     m_notifcenter.reset(new niepce::NotificationCenter());
 
@@ -121,15 +124,15 @@ NiepceWindow::buildWidget()
     add(m_workspacectrl);
 
     m_hbox.set_border_width(4);
-    m_hbox.pack1(*(m_workspacectrl->widget()), Gtk::EXPAND);
-    m_hbox.pack2(*(m_moduleshell->widget()), Gtk::EXPAND);
+    m_hbox.pack1(*(m_workspacectrl->buildWidget(manager)), Gtk::EXPAND);
+    m_hbox.pack2(*(m_moduleshell->buildWidget(manager)), Gtk::EXPAND);
     m_databinders.add_binder(new fwk::ConfigDataBinder<int>(m_hbox.property_position(),
                                                                   Application::app()->config(),
                                                                   "workspace_splitter"));
 
     win.add(m_vbox);
 
-    Gtk::Widget* pMenuBar = pApp->uiManager()->get_widget("/MenuBar");
+    Gtk::Widget* pMenuBar = manager->get_widget("/MenuBar");
     m_vbox.pack_start(*pMenuBar, Gtk::PACK_SHRINK);
     m_vbox.pack_start(m_hbox);
 
@@ -137,7 +140,7 @@ NiepceWindow::buildWidget()
     m_filmstrip = FilmStripController::Ptr(new FilmStripController(m_selection_controller->list_store()));
     add(m_filmstrip);
 
-    m_vbox.pack_start(*(m_filmstrip->widget()), Gtk::PACK_SHRINK);
+    m_vbox.pack_start(*(m_filmstrip->buildWidget(manager)), Gtk::PACK_SHRINK);
 
     // status bar
     m_vbox.pack_start(m_statusBar, Gtk::PACK_SHRINK);
@@ -160,9 +163,8 @@ NiepceWindow::buildWidget()
 }
 
 
-void NiepceWindow::init_ui()
+void NiepceWindow::init_ui(const Glib::RefPtr<Gtk::UIManager> & manager)
 {
-    Application::Ptr pApp = Application::app();
     Glib::ustring ui_info =
         "<ui>"
         "  <menubar name='MenuBar'>"
@@ -177,7 +179,7 @@ void NiepceWindow::init_ui()
         "      <menuitem action='Close'/>"
         "      <menuitem action='Quit'/>"
         "    </menu>"
-        "    <menu action='MenuEdit'>"
+        "    <menu name='edit-menu' action='MenuEdit'>"
         "      <menuitem action='Undo'/>"
         "      <menuitem action='Redo'/>"
         "      <separator/>"
@@ -228,7 +230,7 @@ void NiepceWindow::init_ui()
         "    <toolitem action='Quit'/>"
         "  </toolbar>"
         "</ui>";
-    pApp->uiManager()->add_ui_from_string(ui_info);
+    manager->add_ui_from_string(ui_info);
 } 
 
 
diff --git a/src/niepce/ui/niepcewindow.hpp b/src/niepce/ui/niepcewindow.hpp
index 7ce3cf5..cd2fd8b 100644
--- a/src/niepce/ui/niepcewindow.hpp
+++ b/src/niepce/ui/niepcewindow.hpp
@@ -58,7 +58,7 @@ public:
         { return m_libClient; }
 
 protected:
-    virtual Gtk::Widget * buildWidget();
+    virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> & manager);
 private:
     void on_action_file_import();
 
@@ -74,7 +74,7 @@ private:
     void create_initial_labels();
     void on_lib_notification(const eng::LibNotification & n);
 
-    void init_ui();
+    void init_ui(const Glib::RefPtr<Gtk::UIManager> & manager);
     void init_actions();
 
     void open_library(const std::string & libMoniker);
diff --git a/src/niepce/ui/selectioncontroller.hpp b/src/niepce/ui/selectioncontroller.hpp
index dc949c0..9e9ded3 100644
--- a/src/niepce/ui/selectioncontroller.hpp
+++ b/src/niepce/ui/selectioncontroller.hpp
@@ -88,7 +88,7 @@ public:
     void set_label(int label);
 protected:
 	virtual void _added();
-	virtual Gtk::Widget * buildWidget()
+	virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
 		{ return NULL; }
 private:
     int get_selection();
diff --git a/src/niepce/ui/workspacecontroller.cpp b/src/niepce/ui/workspacecontroller.cpp
index 363b4a5..a90ea80 100644
--- a/src/niepce/ui/workspacecontroller.cpp
+++ b/src/niepce/ui/workspacecontroller.cpp
@@ -181,8 +181,12 @@ namespace ui {
 	}
 
 
-	Gtk::Widget * WorkspaceController::buildWidget()
+	Gtk::Widget * WorkspaceController::buildWidget(const Glib::RefPtr<Gtk::UIManager> &)
 	{
+    if(m_widget) {
+      return m_widget;
+    }
+    m_widget = &m_vbox;
 		m_treestore = Gtk::TreeStore::create(m_librarycolumns);
 		m_librarytree.set_model(m_treestore);
 
@@ -218,7 +222,7 @@ namespace ui {
 			sigc::mem_fun(this, 
 						  &WorkspaceController::on_libtree_selection));
 
-		return &m_vbox;
+		return m_widget;
 	}
 	
 	void WorkspaceController::on_ready()
diff --git a/src/niepce/ui/workspacecontroller.hpp b/src/niepce/ui/workspacecontroller.hpp
index 90f486c..1d507a9 100644
--- a/src/niepce/ui/workspacecontroller.hpp
+++ b/src/niepce/ui/workspacecontroller.hpp
@@ -82,8 +82,7 @@ namespace ui {
 		void on_count_notification(int);
 		void on_libtree_selection();
 
-	protected:
-		virtual Gtk::Widget * buildWidget();
+		virtual Gtk::Widget * buildWidget(const Glib::RefPtr<Gtk::UIManager> &);
 
 	private:
 		libraryclient::LibraryClient::Ptr getLibraryClient();



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