From 68c6cef00386ea949a2bdecf9b972325c1b53bb1 Mon Sep 17 00:00:00 2001 From: "Michael R. Fisher" Date: Sun, 16 Oct 2011 09:43:59 -0500 Subject: [PATCH] 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 -----//