From 56eaf80c4b232f8f2a78c467fb9f1a404282d420 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Tue, 16 Nov 2010 08:12:00 +0100 Subject: [PATCH 1/9] SCons: look for gdlmm instead of gdl --- admin/scons/Platform.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/admin/scons/Platform.py b/admin/scons/Platform.py index 3614e2561..4961ef34f 100644 --- a/admin/scons/Platform.py +++ b/admin/scons/Platform.py @@ -126,6 +126,10 @@ def configure(env): if not conf.CheckPkgConfig('gdl-lum', verGDL, alias='gdl'): problems.append('GNOME Docking Library not found. We either need a sufficiently recent GDL ' 'version (>=%s), or the custom package "gdl-lum" from Lumiera.org.' % verGDL) + verGDLmm = '2.30.0' + if not conf.CheckPkgConfig('gdlmm-1.0', verGDLmm, alias='gdlmm'): + problems.append('GNOME Docking Library not found. We need a sufficiently recent GDL mm-bindings ' + 'version (>=%s).' % verGDL) if not conf.CheckPkgConfig('librsvg-2.0', '2.18.1'): problems.append('Need rsvg Library for rendering icons.') From eb4cdcd97577c2540fe929add77ed5e61152e7ec Mon Sep 17 00:00:00 2001 From: "Michael R. Fisher" Date: Sun, 16 Oct 2011 01:43:03 -0500 Subject: [PATCH 2/9] Panel Manager ported to Gdlmm-1.0 --- src/gui/gtk-lumiera.cpp | 2 +- src/gui/panels/panel.hpp | 1 + src/gui/workspace/panel-manager.cpp | 55 ++++++++++------------------- src/gui/workspace/panel-manager.hpp | 14 ++++---- 4 files changed, 27 insertions(+), 45 deletions(-) diff --git a/src/gui/gtk-lumiera.cpp b/src/gui/gtk-lumiera.cpp index b5186452a..1b587dc3e 100644 --- a/src/gui/gtk-lumiera.cpp +++ b/src/gui/gtk-lumiera.cpp @@ -88,7 +88,7 @@ void GtkLumiera::main (int argc, char *argv[]) { Glib::thread_init(); - + Gdl::init(); Main kit(argc, argv); Glib::set_application_name (getAppTitle()); diff --git a/src/gui/panels/panel.hpp b/src/gui/panels/panel.hpp index a6f508403..4c2d89fd3 100644 --- a/src/gui/panels/panel.hpp +++ b/src/gui/panels/panel.hpp @@ -31,6 +31,7 @@ #include "gui/gtk-lumiera.hpp" #include "gui/widgets/panel-bar.hpp" +#include #include namespace gui { diff --git a/src/gui/workspace/panel-manager.cpp b/src/gui/workspace/panel-manager.cpp index 852b8402e..3e2f0770c 100644 --- a/src/gui/workspace/panel-manager.cpp +++ b/src/gui/workspace/panel-manager.cpp @@ -46,23 +46,16 @@ unsigned short PanelManager::panelID = 0; PanelManager::PanelManager(WorkspaceWindow &workspace_window) : workspaceWindow(workspace_window), - dock(NULL), - dockBar(NULL), - dockLayout(NULL) + dock(), + dockBar(dock), + dockLayout() { + dockLayout = Gdl::DockLayout::create(dock); memset(&dockPlaceholders, 0, sizeof(dockPlaceholders)); } PanelManager::~PanelManager() { - if(dock) - g_object_unref(dock); - - if(dockBar) - g_object_unref(dockBar); - - if(dockLayout) - g_object_unref(dockLayout); for(int i = 0; i < 4; i++) if(dockPlaceholders[i]) @@ -74,28 +67,17 @@ PanelManager::~PanelManager() void PanelManager::setup_dock() { - REQUIRE(dock == NULL); - dock = GDL_DOCK(gdl_dock_new()); - ENSURE(dock); - - REQUIRE(dockBar == NULL); - dockBar = GDL_DOCK_BAR(gdl_dock_bar_new(dock)); - ENSURE(dockBar); - - REQUIRE(dockLayout == NULL); - dockLayout = GDL_DOCK_LAYOUT(gdl_dock_layout_new(dock)); - ENSURE(dockLayout); - + REQUIRE(dockPlaceholders[0] == NULL && dockPlaceholders[1] == NULL && dockPlaceholders[2] == NULL && dockPlaceholders[3] == NULL); dockPlaceholders[0] = GDL_DOCK_PLACEHOLDER(gdl_dock_placeholder_new( - "ph1", GDL_DOCK_OBJECT(dock), GDL_DOCK_TOP, FALSE)); + "ph1", GDL_DOCK_OBJECT(dock.gobj()), GDL_DOCK_TOP, FALSE)); dockPlaceholders[1] = GDL_DOCK_PLACEHOLDER(gdl_dock_placeholder_new( - "ph2", GDL_DOCK_OBJECT(dock), GDL_DOCK_BOTTOM, FALSE)); + "ph2", GDL_DOCK_OBJECT(dock.gobj()), GDL_DOCK_BOTTOM, FALSE)); dockPlaceholders[2] = GDL_DOCK_PLACEHOLDER(gdl_dock_placeholder_new( - "ph3", GDL_DOCK_OBJECT(dock), GDL_DOCK_LEFT, FALSE)); + "ph3", GDL_DOCK_OBJECT(dock.gobj()), GDL_DOCK_LEFT, FALSE)); dockPlaceholders[3] = GDL_DOCK_PLACEHOLDER(gdl_dock_placeholder_new( - "ph4", GDL_DOCK_OBJECT(dock), GDL_DOCK_RIGHT, FALSE)); + "ph4", GDL_DOCK_OBJECT(dock.gobj()), GDL_DOCK_RIGHT, FALSE)); ENSURE(dockPlaceholders[0] && dockPlaceholders[1] && dockPlaceholders[2] && dockPlaceholders[3]); @@ -103,17 +85,15 @@ PanelManager::setup_dock() } GdlDock* -PanelManager::get_dock() const +PanelManager::get_dock() { - ENSURE(dock); - return dock; + return dock.gobj(); } GdlDockBar* -PanelManager::get_dock_bar() const +PanelManager::get_dock_bar() { - ENSURE(dockBar); - return dockBar; + return dockBar.gobj(); } WorkspaceWindow& @@ -146,7 +126,8 @@ PanelManager::show_panel(const int description_index) panels::Panel *new_panel = create_panel_by_index(description_index); // Dock the item - gdl_dock_add_item(dock, new_panel->get_dock_item(), + TODO("Port to Gdlmm."); + gdl_dock_add_item(dock.gobj(), new_panel->get_dock_item(), GDL_DOCK_FLOATING); } @@ -226,11 +207,11 @@ PanelManager::create_panels() panels::Panel* timelinePanel = create_panel_by_name("TimelinePanel"); - gdl_dock_add_item(dock, + gdl_dock_add_item(dock.gobj(), assetsPanel->get_dock_item(), GDL_DOCK_LEFT); - gdl_dock_add_item(dock, + gdl_dock_add_item(dock.gobj(), timelinePanel->get_dock_item(), GDL_DOCK_BOTTOM); - gdl_dock_add_item(dock, + gdl_dock_add_item(dock.gobj(), viewerPanel->get_dock_item(), GDL_DOCK_RIGHT); } diff --git a/src/gui/workspace/panel-manager.hpp b/src/gui/workspace/panel-manager.hpp index 936b2afa9..a4ca91dda 100644 --- a/src/gui/workspace/panel-manager.hpp +++ b/src/gui/workspace/panel-manager.hpp @@ -30,7 +30,7 @@ #include "gui/panels/panel.hpp" -#include +#include #include @@ -70,13 +70,13 @@ public: * Gets a pointer to the dock object. * @remarks Note that this must not be called before setup_dock. */ - GdlDock* get_dock() const; + GdlDock* get_dock(); /** * Gets a pointer to the dock bar. * @remarks Note that this must not be called before setup_dock. */ - GdlDockBar* get_dock_bar() const; + GdlDockBar* get_dock_bar(); /** * Returns a reference to the owner workspace window. @@ -204,19 +204,19 @@ private: * The pointer to GDL dock widget. * @remarks This value is NULL until setup_dock has been called. */ - GdlDock *dock; - + Gdl::Dock dock; + /** * The pointer to GDL dock bar widget. * @remarks This value is NULL until setup_dock has been called. */ - GdlDockBar *dockBar; + Gdl::DockBar dockBar; /** * The pointer to GDL dock layout object. * @remarks This value is NULL until setup_dock has been called. */ - GdlDockLayout *dockLayout; + Glib::RefPtr dockLayout; /** * Pointers to the 4 root place holders. From 68c6cef00386ea949a2bdecf9b972325c1b53bb1 Mon Sep 17 00:00:00 2001 From: "Michael R. Fisher" Date: Sun, 16 Oct 2011 09:43:59 -0500 Subject: [PATCH 3/9] Individual Panels initial Gdlmm port --- src/gui/panels/assets-panel.cpp | 2 +- src/gui/panels/assets-panel.hpp | 2 +- src/gui/panels/panel.cpp | 64 +++++++++++++------------- src/gui/panels/panel.hpp | 6 +-- src/gui/panels/timeline-panel.cpp | 3 +- src/gui/panels/timeline-panel.hpp | 2 +- src/gui/panels/viewer-panel.cpp | 2 +- src/gui/panels/viewer-panel.hpp | 2 +- src/gui/workspace/panel-manager.cpp | 51 +++++++++----------- src/gui/workspace/panel-manager.hpp | 14 +++--- src/gui/workspace/workspace-window.cpp | 5 +- 11 files changed, 76 insertions(+), 77 deletions(-) diff --git a/src/gui/panels/assets-panel.cpp b/src/gui/panels/assets-panel.cpp index f9a9d1259..9ebdc50bd 100644 --- a/src/gui/panels/assets-panel.cpp +++ b/src/gui/panels/assets-panel.cpp @@ -27,7 +27,7 @@ namespace gui { namespace panels { AssetsPanel::AssetsPanel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item) : + Gdl::DockItem &dock_item) : Panel(panel_manager, dock_item, get_title(), get_stock_id()) { notebook.append_page(media, _("Media")); diff --git a/src/gui/panels/assets-panel.hpp b/src/gui/panels/assets-panel.hpp index 60cdf688f..2e625781b 100644 --- a/src/gui/panels/assets-panel.hpp +++ b/src/gui/panels/assets-panel.hpp @@ -41,7 +41,7 @@ public: * @param dock_item The GdlDockItem that will host this panel. */ AssetsPanel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item); + Gdl::DockItem &dock_item); /** * Get the title of the panel. diff --git a/src/gui/panels/panel.cpp b/src/gui/panels/panel.cpp index 03349e3ff..e28beddc9 100644 --- a/src/gui/panels/panel.cpp +++ b/src/gui/panels/panel.cpp @@ -34,60 +34,59 @@ namespace gui { namespace panels { Panel::Panel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item, const gchar* long_name, + Gdl::DockItem &dock_item, const gchar* long_name, const gchar *stock_id) : panelManager(panel_manager), dockItem(dock_item), hide_panel_handler_id(0), panelBar(*this, stock_id) { - REQUIRE(dockItem); - g_object_ref(dockItem); - + // Set dockItems long-name property Glib::Value val; val.init(val.value_type()); val.set(long_name); - g_object_set_property (G_OBJECT (dockItem), "long-name", val.gobj()); + g_object_set_property (G_OBJECT (dockItem.gobj()), "long-name", val.gobj()); // Set the grip handle GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP( - gdl_dock_item_get_grip(dockItem)); + gdl_dock_item_get_grip(dockItem.gobj())); gdl_dock_item_grip_show_handle(grip); gdl_dock_item_grip_set_label(grip, ((Widget&)panelBar).gobj()); // Set up the panel body - gtk_container_add (GTK_CONTAINER(dockItem), GTK_WIDGET(gobj())); + gtk_container_add (GTK_CONTAINER(dockItem.gobj()), GTK_WIDGET(gobj())); - gtk_widget_show (GTK_WIDGET(dockItem)); + gtk_widget_show (GTK_WIDGET(dockItem.gobj())); // Connect the signals - hide_panel_handler_id = g_signal_connect (GTK_OBJECT(dockItem), + hide_panel_handler_id = g_signal_connect (GTK_OBJECT(dockItem.gobj()), "hide", G_CALLBACK(on_item_hidden), this); } Panel::~Panel() { - REQUIRE(dockItem != NULL); + TODO("Fix for Gdlmm"); + //REQUIRE(dockItem != NULL); // Detach the panel bar GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP( - gdl_dock_item_get_grip(dockItem)); + gdl_dock_item_get_grip(dockItem.gobj())); gtk_container_remove (GTK_CONTAINER(grip), ((Widget&)panelBar).gobj()); - gtk_container_remove (GTK_CONTAINER(dockItem), GTK_WIDGET(gobj())); + gtk_container_remove (GTK_CONTAINER(dockItem.gobj()), GTK_WIDGET(gobj())); // Detach the signals g_signal_handler_disconnect( - GTK_OBJECT(dockItem), hide_panel_handler_id); + GTK_OBJECT(dockItem.gobj()), hide_panel_handler_id); // Unref the dock item - g_object_unref(dockItem); - dockItem = NULL; + // g_object_unref(dockItem); + // dockItem = NULL; } -GdlDockItem* -Panel::get_dock_item() const +Gdl::DockItem& +Panel::get_dock_item() { return dockItem; } @@ -95,45 +94,48 @@ Panel::get_dock_item() const void Panel::show(bool show) { - REQUIRE(dockItem != NULL); - if(show) gdl_dock_item_show_item (dockItem); - else gdl_dock_item_hide_item (dockItem); + //REQUIRE(dockItem != NULL); + if(show) dockItem.show_item(); + else dockItem.hide_item(); } bool Panel::is_shown() const { - REQUIRE(dockItem != NULL); - return GTK_WIDGET_VISIBLE((GtkWidget*)dockItem); + //REQUIRE(dockItem != NULL); + return dockItem.is_visible(); } void Panel::iconify() { - REQUIRE(dockItem != NULL); - gdl_dock_item_iconify_item(dockItem); + // //REQUIRE(dockItem != NULL); + // gdl_dock_item_iconify_item(dockItem); + dockItem.iconify_item(); } bool Panel::is_iconified() const { - REQUIRE(dockItem != NULL); - return GDL_DOCK_ITEM_ICONIFIED(dockItem); + // REQUIRE(dockItem); + TODO("Port to Gdlmm"); + return GDL_DOCK_ITEM_ICONIFIED(dockItem.gobj()); } void Panel::lock(bool lock) { - REQUIRE(dockItem != NULL); - if(lock) gdl_dock_item_lock (dockItem); - else gdl_dock_item_unlock (dockItem); + // //REQUIRE(dockItem != NULL); + + if(lock) dockItem.lock(); + else dockItem.unlock(); } bool Panel::is_locked() const { - REQUIRE(dockItem != NULL); - return !GDL_DOCK_ITEM_NOT_LOCKED(dockItem); + ////REQUIRE(dockItem != NULL); + return !GDL_DOCK_ITEM_NOT_LOCKED(dockItem.gobj()); } workspace::PanelManager& diff --git a/src/gui/panels/panel.hpp b/src/gui/panels/panel.hpp index 4c2d89fd3..f5c3978de 100644 --- a/src/gui/panels/panel.hpp +++ b/src/gui/panels/panel.hpp @@ -57,7 +57,7 @@ protected: * @param stock_id The stock_id of this panel. */ Panel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item, const gchar* long_name, + Gdl::DockItem &dock_item, const gchar* long_name, const gchar *stock_id); public: @@ -66,7 +66,7 @@ public: /** * Returns a pointer to the underlying GdlDockItem structure */ - GdlDockItem* get_dock_item() const; + Gdl::DockItem& get_dock_item(); /** * Shows or hides the panel. @@ -150,7 +150,7 @@ protected: * The owner dock item widget that will host the widgets in this * panel. */ - GdlDockItem* dockItem; + Gdl::DockItem &dockItem; /** * A signal that fires when the dock item is hidden. diff --git a/src/gui/panels/timeline-panel.cpp b/src/gui/panels/timeline-panel.cpp index 3ae37c357..3d383d058 100644 --- a/src/gui/panels/timeline-panel.cpp +++ b/src/gui/panels/timeline-panel.cpp @@ -48,9 +48,8 @@ namespace panels { const int TimelinePanel::ZoomToolSteps = 2; // 2 seems comfortable - TimelinePanel::TimelinePanel (workspace::PanelManager &panel_manager, - GdlDockItem *dock_item) + Gdl::DockItem &dock_item) : Panel(panel_manager, dock_item, get_title(), get_stock_id()) , timeCode("sequence_clock", "timecode_widget", true) , previousButton(Stock::MEDIA_PREVIOUS) diff --git a/src/gui/panels/timeline-panel.hpp b/src/gui/panels/timeline-panel.hpp index c1c29aee2..9effef8ce 100644 --- a/src/gui/panels/timeline-panel.hpp +++ b/src/gui/panels/timeline-panel.hpp @@ -70,7 +70,7 @@ public: * @param dock_item The GdlDockItem that will host this panel. */ TimelinePanel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item); + Gdl::DockItem &dock_item); /** diff --git a/src/gui/panels/viewer-panel.cpp b/src/gui/panels/viewer-panel.cpp index 955b92e3e..6124052a4 100644 --- a/src/gui/panels/viewer-panel.cpp +++ b/src/gui/panels/viewer-panel.cpp @@ -37,7 +37,7 @@ namespace gui { namespace panels { ViewerPanel::ViewerPanel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item) : + Gdl::DockItem &dock_item) : Panel(panel_manager, dock_item, get_title(), get_stock_id()) { //----- Pack in the Widgets -----// diff --git a/src/gui/panels/viewer-panel.hpp b/src/gui/panels/viewer-panel.hpp index 1c050e4ac..fc44f3418 100644 --- a/src/gui/panels/viewer-panel.hpp +++ b/src/gui/panels/viewer-panel.hpp @@ -45,7 +45,7 @@ public: * @param dock_item The GdlDockItem that will host this panel. */ ViewerPanel(workspace::PanelManager &panel_manager, - GdlDockItem *dock_item); + Gdl::DockItem &dock_item); /** * Get the title of the panel. diff --git a/src/gui/workspace/panel-manager.cpp b/src/gui/workspace/panel-manager.cpp index 3e2f0770c..7a1368340 100644 --- a/src/gui/workspace/panel-manager.cpp +++ b/src/gui/workspace/panel-manager.cpp @@ -84,16 +84,16 @@ PanelManager::setup_dock() create_panels(); } -GdlDock* +Gdl::Dock& PanelManager::get_dock() { - return dock.gobj(); + return dock; } -GdlDockBar* +Gdl::DockBar& PanelManager::get_dock_bar() { - return dockBar.gobj(); + return dockBar; } WorkspaceWindow& @@ -115,9 +115,10 @@ PanelManager::show_panel(const int description_index) if(!panel->is_shown()) panel->show(); - GdlDockItem *dock_item = panel->get_dock_item(); - ENSURE(dock_item); - gdl_dock_object_present(GDL_DOCK_OBJECT(dock_item), NULL); + Gdl::DockItem &dock_item = panel->get_dock_item(); + // ENSURE(dock_item); + dock_item.present(dock); + // gdl_dock_object_present(GDL_DOCK_OBJECT(dock_item.gobj()), NULL); return; } } @@ -126,9 +127,7 @@ PanelManager::show_panel(const int description_index) panels::Panel *new_panel = create_panel_by_index(description_index); // Dock the item - TODO("Port to Gdlmm."); - gdl_dock_add_item(dock.gobj(), new_panel->get_dock_item(), - GDL_DOCK_FLOATING); + dock.add_item(new_panel->get_dock_item(), Gdl::DOCK_FLOATING); } void PanelManager::switch_panel(panels::Panel &old_panel, @@ -138,26 +137,27 @@ void PanelManager::switch_panel(panels::Panel &old_panel, description_index < get_panel_description_count()); // Get the dock item - GdlDockItem *dock_item = old_panel.get_dock_item(); - g_object_ref(dock_item); + Gdl::DockItem &dock_item = old_panel.get_dock_item(); // Release the old panel remove_panel(&old_panel); // Create the new panel create_panel_by_index(description_index, dock_item); - g_object_unref(dock_item); + } void PanelManager::split_panel(panels::Panel &panel, Gtk::Orientation split_direction) { + TODO("Port to Gdlmm"); // Create the new panel const int index = get_panel_type(&panel); panels::Panel *new_panel = create_panel_by_index(index); // Dock the panel + // Gdl::DockPlacement placement = Gdl::DOCK_NONE; GdlDockPlacement placement = GDL_DOCK_NONE; switch(split_direction) { @@ -172,9 +172,9 @@ PanelManager::split_panel(panels::Panel &panel, return; break; } - - gdl_dock_object_dock(GDL_DOCK_OBJECT(panel.get_dock_item()), - GDL_DOCK_OBJECT(new_panel->get_dock_item()), placement, NULL); + + gdl_dock_object_dock(GDL_DOCK_OBJECT(panel.get_dock_item().gobj()), + GDL_DOCK_OBJECT(new_panel->get_dock_item().gobj()), placement, NULL); } int @@ -206,13 +206,11 @@ PanelManager::create_panels() create_panel_by_name("ViewerPanel"); panels::Panel* timelinePanel = create_panel_by_name("TimelinePanel"); - - gdl_dock_add_item(dock.gobj(), - assetsPanel->get_dock_item(), GDL_DOCK_LEFT); - gdl_dock_add_item(dock.gobj(), - timelinePanel->get_dock_item(), GDL_DOCK_BOTTOM); - gdl_dock_add_item(dock.gobj(), - viewerPanel->get_dock_item(), GDL_DOCK_RIGHT); + + dock.add_item(assetsPanel->get_dock_item(),Gdl::DOCK_LEFT); + dock.add_item(timelinePanel->get_dock_item(),Gdl::DOCK_BOTTOM); + dock.add_item(viewerPanel->get_dock_item(),Gdl::DOCK_RIGHT); + } int @@ -242,15 +240,12 @@ PanelManager::create_panel_by_index(const int index) snprintf(name, sizeof(name), "%X", panelID++); // Create a dock item - GdlDockItem *dock_item = GDL_DOCK_ITEM( - gdl_dock_item_new(name, "", GDL_DOCK_ITEM_BEH_NORMAL)); - - return create_panel_by_index(index, dock_item); + return create_panel_by_index(index, *new Gdl::DockItem(name,"",Gdl::DOCK_ITEM_BEH_NORMAL)); } panels::Panel* PanelManager::create_panel_by_index( - const int index, GdlDockItem *dock_item) + const int index, Gdl::DockItem &dock_item) { // Create the panel object panels::Panel *panel = diff --git a/src/gui/workspace/panel-manager.hpp b/src/gui/workspace/panel-manager.hpp index a4ca91dda..986711f1b 100644 --- a/src/gui/workspace/panel-manager.hpp +++ b/src/gui/workspace/panel-manager.hpp @@ -70,13 +70,13 @@ public: * Gets a pointer to the dock object. * @remarks Note that this must not be called before setup_dock. */ - GdlDock* get_dock(); + Gdl::Dock& get_dock(); /** * Gets a pointer to the dock bar. * @remarks Note that this must not be called before setup_dock. */ - GdlDockBar* get_dock_bar(); + Gdl::DockBar& get_dock_bar(); /** * Returns a reference to the owner workspace window. @@ -157,7 +157,7 @@ private: * @return Returns a pointer to the new instantiated panel object. */ panels::Panel* create_panel_by_index( - const int index, GdlDockItem *dock_item); + const int index, Gdl::DockItem &dock_item); /** * Creates a panel by class name. @@ -244,7 +244,7 @@ private: protected: typedef panels::Panel* (*const CreatePanelProc)( - PanelManager&, GdlDockItem*); + PanelManager&, Gdl::DockItem&); protected: /** @@ -309,7 +309,7 @@ private: * @return Returns a pointer to the panel object. */ panels::Panel* create( - PanelManager &panel_manager, GdlDockItem* dock_item) const + PanelManager &panel_manager, Gdl::DockItem &dock_item) const { REQUIRE(createPanelProc); return createPanelProc(panel_manager, dock_item); @@ -357,11 +357,11 @@ private: /** * A helper function that will create a panel of type P * @param panel_manager The owner panel manager. - * @param dock_item The GdlDockItem that will host this panel. + * @param dock_item The Gdl::DockItem that will host this panel. * @return Returns a pointer to the panel object. */ static panels::Panel* create_panel( - PanelManager &panel_manager, GdlDockItem* dock_item) + PanelManager &panel_manager, Gdl::DockItem &dock_item) { return new P(panel_manager, dock_item); } diff --git a/src/gui/workspace/workspace-window.cpp b/src/gui/workspace/workspace-window.cpp index 3a525a760..8e078f90e 100644 --- a/src/gui/workspace/workspace-window.cpp +++ b/src/gui/workspace/workspace-window.cpp @@ -103,13 +103,16 @@ WorkspaceWindow::create_ui() //----- Create the Docks -----// panelManager.setup_dock(); - + /* GdlDock const *dock = panelManager.get_dock(); gtk_box_pack_start(GTK_BOX(dockContainer.gobj()), GTK_WIDGET(panelManager.get_dock_bar()), FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(dockContainer.gobj()), GTK_WIDGET(dock), TRUE, TRUE, 0); + */ + dockContainer.pack_start(panelManager.get_dock_bar(),false,false,0); + dockContainer.pack_start(panelManager.get_dock(),true,true,0); baseContainer.pack_start(dockContainer, PACK_EXPAND_WIDGET); //----- Create the status bar -----// From 2d8805c5545ad0f181f7156e6287c0f1bf5be587 Mon Sep 17 00:00:00 2001 From: "Michael R. Fisher" Date: Sun, 16 Oct 2011 21:28:55 -0500 Subject: [PATCH 4/9] Gdlmm port nuances. Signals/Containers etc... --- src/gui/panels/panel.cpp | 47 +++++++++++--------------- src/gui/panels/panel.hpp | 3 +- src/gui/workspace/panel-manager.cpp | 24 +++++++------ src/gui/workspace/workspace-window.cpp | 10 +----- 4 files changed, 36 insertions(+), 48 deletions(-) diff --git a/src/gui/panels/panel.cpp b/src/gui/panels/panel.cpp index e28beddc9..2ba98931d 100644 --- a/src/gui/panels/panel.cpp +++ b/src/gui/panels/panel.cpp @@ -47,42 +47,36 @@ Panel::Panel(workspace::PanelManager &panel_manager, val.set(long_name); g_object_set_property (G_OBJECT (dockItem.gobj()), "long-name", val.gobj()); - // Set the grip handle + /* Set the grip handle */ + FIXME("Implement interpanel docking. Try using the dockItem.signal_dock(). Signal Handler will switch the grip depending on dock position. For iconify and interpanel docking, it needs to be a plain label"); + /* @todo This code causes a crash on panel iconify and interpanel docking */ GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP( gdl_dock_item_get_grip(dockItem.gobj())); gdl_dock_item_grip_show_handle(grip); gdl_dock_item_grip_set_label(grip, ((Widget&)panelBar).gobj()); - - // Set up the panel body - gtk_container_add (GTK_CONTAINER(dockItem.gobj()), GTK_WIDGET(gobj())); - - gtk_widget_show (GTK_WIDGET(dockItem.gobj())); - - // Connect the signals - hide_panel_handler_id = g_signal_connect (GTK_OBJECT(dockItem.gobj()), - "hide", G_CALLBACK(on_item_hidden), this); + /* End FIXME */ + + /* Set up the panel body */ + // Add this panel's container to the DockItem + dockItem.add((Gtk::Widget&)*this); + + /* Connect the signals */ + dockItem.signal_hide().connect( + sigc::mem_fun(*this, &Panel::on_item_hidden)); + + dockItem.show(); } Panel::~Panel() { - TODO("Fix for Gdlmm"); - //REQUIRE(dockItem != NULL); - - // Detach the panel bar + /* Detach the panel bar */ GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP( gdl_dock_item_get_grip(dockItem.gobj())); gtk_container_remove (GTK_CONTAINER(grip), ((Widget&)panelBar).gobj()); - - gtk_container_remove (GTK_CONTAINER(dockItem.gobj()), GTK_WIDGET(gobj())); - - // Detach the signals - g_signal_handler_disconnect( - GTK_OBJECT(dockItem.gobj()), hide_panel_handler_id); - // Unref the dock item - // g_object_unref(dockItem); - // dockItem = NULL; + /* Remove this panel's container from the DockItem */ + dockItem.remove((Gtk::Widget&)*this); } Gdl::DockItem& @@ -162,17 +156,16 @@ Panel::get_controller() return panelManager.get_workspace_window().get_controller(); } -sigc::signal& +sigc::signal Panel::signal_hide_panel() { return hidePanelSignal; } void -Panel::on_item_hidden(GdlDockItem*, Panel *panel) +Panel::on_item_hidden() { - REQUIRE(panel); - panel->hidePanelSignal(); + hidePanelSignal.emit(); } } // namespace panels diff --git a/src/gui/panels/panel.hpp b/src/gui/panels/panel.hpp index f5c3978de..43fe5c7f2 100644 --- a/src/gui/panels/panel.hpp +++ b/src/gui/panels/panel.hpp @@ -135,9 +135,8 @@ private: /** * An event handler for when dockItem is hidden. - * @param func_data A pointer to the panel that owns dock_item */ - static void on_item_hidden(GdlDockItem*, Panel *panel); + void on_item_hidden(); protected: diff --git a/src/gui/workspace/panel-manager.cpp b/src/gui/workspace/panel-manager.cpp index 7a1368340..cc479b78b 100644 --- a/src/gui/workspace/panel-manager.cpp +++ b/src/gui/workspace/panel-manager.cpp @@ -50,7 +50,13 @@ PanelManager::PanelManager(WorkspaceWindow &workspace_window) : dockBar(dock), dockLayout() { + /* Create the DockLayout */ dockLayout = Gdl::DockLayout::create(dock); + + /* Setup the Switcher Style */ + Glib::RefPtr dock_master = dock.property_master(); + dock_master->property_switcher_style() = Gdl::SWITCHER_STYLE_ICON; + memset(&dockPlaceholders, 0, sizeof(dockPlaceholders)); } @@ -118,7 +124,6 @@ PanelManager::show_panel(const int description_index) Gdl::DockItem &dock_item = panel->get_dock_item(); // ENSURE(dock_item); dock_item.present(dock); - // gdl_dock_object_present(GDL_DOCK_OBJECT(dock_item.gobj()), NULL); return; } } @@ -144,37 +149,36 @@ void PanelManager::switch_panel(panels::Panel &old_panel, // Create the new panel create_panel_by_index(description_index, dock_item); - } void PanelManager::split_panel(panels::Panel &panel, Gtk::Orientation split_direction) { - TODO("Port to Gdlmm"); + // Create the new panel const int index = get_panel_type(&panel); panels::Panel *new_panel = create_panel_by_index(index); // Dock the panel - // Gdl::DockPlacement placement = Gdl::DOCK_NONE; - GdlDockPlacement placement = GDL_DOCK_NONE; + Gdl::DockPlacement placement = Gdl::DOCK_NONE; switch(split_direction) { case ORIENTATION_HORIZONTAL: - placement = GDL_DOCK_RIGHT; + placement = Gdl::DOCK_RIGHT; break; case ORIENTATION_VERTICAL: - placement = GDL_DOCK_BOTTOM; + placement = Gdl::DOCK_BOTTOM; break; default: - ERROR(gui, "Unrecognisized split_direction: %d", split_direction); + ERROR(gui, "Unrecognisized split_direction: %d", + split_direction); return; break; } - gdl_dock_object_dock(GDL_DOCK_OBJECT(panel.get_dock_item().gobj()), - GDL_DOCK_OBJECT(new_panel->get_dock_item().gobj()), placement, NULL); + panel.get_dock_item().dock( + new_panel->get_dock_item(),placement); } int diff --git a/src/gui/workspace/workspace-window.cpp b/src/gui/workspace/workspace-window.cpp index 8e078f90e..32cc32389 100644 --- a/src/gui/workspace/workspace-window.cpp +++ b/src/gui/workspace/workspace-window.cpp @@ -57,7 +57,7 @@ WorkspaceWindow::WorkspaceWindow(Project &source_project, WorkspaceWindow::~WorkspaceWindow() { - INFO (gui_dbg, "closing workspace window..."); + INFO (gui_dbg, "Closing workspace window..."); } Project& @@ -103,14 +103,6 @@ WorkspaceWindow::create_ui() //----- Create the Docks -----// panelManager.setup_dock(); - /* - GdlDock const *dock = panelManager.get_dock(); - - gtk_box_pack_start(GTK_BOX(dockContainer.gobj()), - GTK_WIDGET(panelManager.get_dock_bar()), FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(dockContainer.gobj()), - GTK_WIDGET(dock), TRUE, TRUE, 0); - */ dockContainer.pack_start(panelManager.get_dock_bar(),false,false,0); dockContainer.pack_start(panelManager.get_dock(),true,true,0); baseContainer.pack_start(dockContainer, PACK_EXPAND_WIDGET); From d42d917b4c1797f36a41d11530f0dc65e04c3343 Mon Sep 17 00:00:00 2001 From: "Michael R. Fisher" Date: Sun, 16 Oct 2011 22:07:26 -0500 Subject: [PATCH 5/9] House Cleaning --- src/gui/panels/panel.cpp | 18 ++++++++---------- src/gui/widgets/panel-bar.cpp | 7 +++++-- src/gui/workspace/panel-manager.cpp | 5 ++--- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/gui/panels/panel.cpp b/src/gui/panels/panel.cpp index 2ba98931d..e4f2b1bee 100644 --- a/src/gui/panels/panel.cpp +++ b/src/gui/panels/panel.cpp @@ -48,8 +48,6 @@ Panel::Panel(workspace::PanelManager &panel_manager, g_object_set_property (G_OBJECT (dockItem.gobj()), "long-name", val.gobj()); /* Set the grip handle */ - FIXME("Implement interpanel docking. Try using the dockItem.signal_dock(). Signal Handler will switch the grip depending on dock position. For iconify and interpanel docking, it needs to be a plain label"); - /* @todo This code causes a crash on panel iconify and interpanel docking */ GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP( gdl_dock_item_get_grip(dockItem.gobj())); gdl_dock_item_grip_show_handle(grip); @@ -103,24 +101,24 @@ Panel::is_shown() const void Panel::iconify() { - // //REQUIRE(dockItem != NULL); - // gdl_dock_item_iconify_item(dockItem); dockItem.iconify_item(); } bool Panel::is_iconified() const { - // REQUIRE(dockItem); - TODO("Port to Gdlmm"); - return GDL_DOCK_ITEM_ICONIFIED(dockItem.gobj()); + /** Gdlmm as of v1.30.0 does not have + * a facility for checking the whether + * a dock item is iconified or not + */ + GdlDockItem *item = dockItem.gobj(); + REQUIRE(item != NULL); + return GDL_DOCK_ITEM_ICONIFIED (item); } void Panel::lock(bool lock) { - // //REQUIRE(dockItem != NULL); - if(lock) dockItem.lock(); else dockItem.unlock(); } @@ -156,7 +154,7 @@ Panel::get_controller() return panelManager.get_workspace_window().get_controller(); } -sigc::signal +sigc::signal& Panel::signal_hide_panel() { return hidePanelSignal; diff --git a/src/gui/widgets/panel-bar.cpp b/src/gui/widgets/panel-bar.cpp index 7aeccb160..2328eef81 100644 --- a/src/gui/widgets/panel-bar.cpp +++ b/src/gui/widgets/panel-bar.cpp @@ -50,7 +50,7 @@ PanelBar::PanelBar(panels::Panel &owner_panel, const gchar *stock_id) : panelButton.unset_flags(CAN_FOCUS); panelButton.show(); pack_start(panelButton, PACK_SHRINK); - + setup_panel_button(); } @@ -93,12 +93,14 @@ PanelBar::setup_panel_button() void PanelBar::on_realize() { + FIXME("Somehow the Gdk window causes lumiera to crash when docking to CENTER or iconifying a panel"); set_flags(Gtk::NO_WINDOW); - + // Call base class: Gtk::Container::on_realize(); // Create the GdkWindow: + GdkWindowAttr attributes; memset(&attributes, 0, sizeof(attributes)); @@ -124,6 +126,7 @@ PanelBar::on_realize() unset_flags(Gtk::NO_WINDOW); unset_bg(STATE_NORMAL); + } void diff --git a/src/gui/workspace/panel-manager.cpp b/src/gui/workspace/panel-manager.cpp index cc479b78b..b985aba28 100644 --- a/src/gui/workspace/panel-manager.cpp +++ b/src/gui/workspace/panel-manager.cpp @@ -73,7 +73,6 @@ PanelManager::~PanelManager() void PanelManager::setup_dock() { - REQUIRE(dockPlaceholders[0] == NULL && dockPlaceholders[1] == NULL && dockPlaceholders[2] == NULL && dockPlaceholders[3] == NULL); dockPlaceholders[0] = GDL_DOCK_PLACEHOLDER(gdl_dock_placeholder_new( @@ -258,8 +257,8 @@ PanelManager::create_panel_by_index( panel->show_all(); // Connect event handlers - panel->signal_hide_panel().connect(bind( - mem_fun(*this, &PanelManager::on_panel_shown), panel)); + panel->signal_hide_panel().connect(sigc::bind( + sigc::mem_fun(*this, &PanelManager::on_panel_shown), panel)); // Add the panel to the list panels.push_back(panel); From 13a27a8fd8982b7c6c8579ea39f212c203d1cac8 Mon Sep 17 00:00:00 2001 From: "Michael R. Fisher" Date: Mon, 17 Oct 2011 22:05:46 -0500 Subject: [PATCH 6/9] Comment problematic code --- src/gui/panels/panel.cpp | 3 +-- src/gui/panels/panel.hpp | 5 ----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/gui/panels/panel.cpp b/src/gui/panels/panel.cpp index e4f2b1bee..1c4b40e3b 100644 --- a/src/gui/panels/panel.cpp +++ b/src/gui/panels/panel.cpp @@ -38,7 +38,6 @@ Panel::Panel(workspace::PanelManager &panel_manager, const gchar *stock_id) : panelManager(panel_manager), dockItem(dock_item), - hide_panel_handler_id(0), panelBar(*this, stock_id) { // Set dockItems long-name property @@ -52,7 +51,7 @@ Panel::Panel(workspace::PanelManager &panel_manager, gdl_dock_item_get_grip(dockItem.gobj())); gdl_dock_item_grip_show_handle(grip); gdl_dock_item_grip_set_label(grip, ((Widget&)panelBar).gobj()); - /* End FIXME */ + //gdl_dock_item_grip_set_cursor_type(grip, GDK_LEFT_PTR); /* Set up the panel body */ // Add this panel's container to the DockItem diff --git a/src/gui/panels/panel.hpp b/src/gui/panels/panel.hpp index 43fe5c7f2..23834c0c7 100644 --- a/src/gui/panels/panel.hpp +++ b/src/gui/panels/panel.hpp @@ -155,11 +155,6 @@ protected: * A signal that fires when the dock item is hidden. */ sigc::signal hidePanelSignal; - - /** - * The id of the hide panel handler. - */ - gulong hide_panel_handler_id; /** * The panel bar to attach to the panel grip. From 708c977d57562a0d156d2c9bf2ae5332417c7bfc Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Sat, 4 Aug 2012 11:33:12 -0500 Subject: [PATCH 7/9] Remove unused GDL headers --- src/gui/panels/panel.hpp | 2 -- src/gui/workspace/workspace-window.cpp | 5 ----- 2 files changed, 7 deletions(-) diff --git a/src/gui/panels/panel.hpp b/src/gui/panels/panel.hpp index 23834c0c7..a00b7eb84 100644 --- a/src/gui/panels/panel.hpp +++ b/src/gui/panels/panel.hpp @@ -27,12 +27,10 @@ #ifndef PANEL_HPP #define PANEL_HPP - #include "gui/gtk-lumiera.hpp" #include "gui/widgets/panel-bar.hpp" #include -#include namespace gui { diff --git a/src/gui/workspace/workspace-window.cpp b/src/gui/workspace/workspace-window.cpp index 32cc32389..78365847a 100644 --- a/src/gui/workspace/workspace-window.cpp +++ b/src/gui/workspace/workspace-window.cpp @@ -30,11 +30,6 @@ # include #endif -#include -#include -#include -#include -#include using namespace Gtk; From fd95c74bb86aebe6885877d5644c0275521862e1 Mon Sep 17 00:00:00 2001 From: Michael Fisher Date: Sat, 4 Aug 2012 12:04:12 -0500 Subject: [PATCH 8/9] Assertion to investigate GLib warnings trying to track down where these messages GLib-GObject-CRITICAL **: g_object_unref: assertion G_IS_OBJECT (object) failed are coming from. These appear when iconifying panels. --- src/gui/panels/panel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/panels/panel.cpp b/src/gui/panels/panel.cpp index 1c4b40e3b..a284ca776 100644 --- a/src/gui/panels/panel.cpp +++ b/src/gui/panels/panel.cpp @@ -125,7 +125,7 @@ Panel::lock(bool lock) bool Panel::is_locked() const { - ////REQUIRE(dockItem != NULL); + REQUIRE(dockItem.gobj() != NULL); return !GDL_DOCK_ITEM_NOT_LOCKED(dockItem.gobj()); } From 6cab04c348c684233095ec2ee6b96c730e5c6303 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Sun, 5 Oct 2014 05:04:49 +0200 Subject: [PATCH 9/9] Project: switch to GTK-3 based GDL and C++ bindings GDLmm For the Gnome Docking Library, a recent official version will do. For the mm-bindings by Fabien Parent we maintain our own debian package at Lumiera.org/debian (there is no official debian package yet) --- admin/scons/Platform.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/admin/scons/Platform.py b/admin/scons/Platform.py index 4961ef34f..106f8f488 100644 --- a/admin/scons/Platform.py +++ b/admin/scons/Platform.py @@ -120,16 +120,17 @@ def configure(env): if not conf.CheckPkgConfig('cairomm-1.0', 0.6): problems.append('Unable to configure Cairo--') - verGDL = '2.27.1' - if not conf.CheckPkgConfig('gdl-1.0', verGDL, alias='gdl'): - print 'No sufficiently recent (>=%s) version of GDL found. Maybe use custom package gdl-lum?' % verGDL - if not conf.CheckPkgConfig('gdl-lum', verGDL, alias='gdl'): - problems.append('GNOME Docking Library not found. We either need a sufficiently recent GDL ' - 'version (>=%s), or the custom package "gdl-lum" from Lumiera.org.' % verGDL) - verGDLmm = '2.30.0' - if not conf.CheckPkgConfig('gdlmm-1.0', verGDLmm, alias='gdlmm'): - problems.append('GNOME Docking Library not found. We need a sufficiently recent GDL mm-bindings ' - 'version (>=%s).' % verGDL) + verGDL = '3.12' + verGDLmm = '3.7.3' + urlGDLmm = 'http://ftp.gnome.org/pub/GNOME/sources/gdlmm/' + urlGDLmmDEB = 'http://lumiera.org/debian/' + if not conf.CheckPkgConfig('gdl-3.0', verGDL): + problems.append('GNOME Docking Library not found. We need at least GDL %s ' + 'and suitable C++ ("mm")-bindings (GDLmm >=%s)' % (verGDL, verGDLmm)) + if not conf.CheckPkgConfig('gdlmm-3.0', verGDLmm, alias='gdl'): + problems.append('We need the C++ bindings for GDL by Fabien Parent: GDLmm >=%s ' + '(either from GNOME %s or use the debian package from %s)' % + (verGDLmm, urlGDLmm, urlGDLmmDEB)) if not conf.CheckPkgConfig('librsvg-2.0', '2.18.1'): problems.append('Need rsvg Library for rendering icons.')