Gdlmm port nuances. Signals/Containers etc...

This commit is contained in:
Michael R. Fisher 2011-10-16 21:28:55 -05:00 committed by Ichthyostega
parent 68c6cef003
commit 2d8805c554
4 changed files with 36 additions and 48 deletions

View file

@ -47,42 +47,36 @@ Panel::Panel(workspace::PanelManager &panel_manager,
val.set(long_name); val.set(long_name);
g_object_set_property (G_OBJECT (dockItem.gobj()), "long-name", val.gobj()); 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( GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP(
gdl_dock_item_get_grip(dockItem.gobj())); gdl_dock_item_get_grip(dockItem.gobj()));
gdl_dock_item_grip_show_handle(grip); gdl_dock_item_grip_show_handle(grip);
gdl_dock_item_grip_set_label(grip, ((Widget&)panelBar).gobj()); gdl_dock_item_grip_set_label(grip, ((Widget&)panelBar).gobj());
/* End FIXME */
// Set up the panel body /* Set up the panel body */
gtk_container_add (GTK_CONTAINER(dockItem.gobj()), GTK_WIDGET(gobj())); // Add this panel's container to the DockItem
dockItem.add((Gtk::Widget&)*this);
gtk_widget_show (GTK_WIDGET(dockItem.gobj())); /* Connect the signals */
dockItem.signal_hide().connect(
sigc::mem_fun(*this, &Panel::on_item_hidden));
// Connect the signals dockItem.show();
hide_panel_handler_id = g_signal_connect (GTK_OBJECT(dockItem.gobj()),
"hide", G_CALLBACK(on_item_hidden), this);
} }
Panel::~Panel() Panel::~Panel()
{ {
TODO("Fix for Gdlmm"); /* Detach the panel bar */
//REQUIRE(dockItem != NULL);
// Detach the panel bar
GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP( GdlDockItemGrip *grip = GDL_DOCK_ITEM_GRIP(
gdl_dock_item_get_grip(dockItem.gobj())); gdl_dock_item_get_grip(dockItem.gobj()));
gtk_container_remove (GTK_CONTAINER(grip), gtk_container_remove (GTK_CONTAINER(grip),
((Widget&)panelBar).gobj()); ((Widget&)panelBar).gobj());
gtk_container_remove (GTK_CONTAINER(dockItem.gobj()), GTK_WIDGET(gobj())); /* Remove this panel's container from the DockItem */
dockItem.remove((Gtk::Widget&)*this);
// 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;
} }
Gdl::DockItem& Gdl::DockItem&
@ -162,17 +156,16 @@ Panel::get_controller()
return panelManager.get_workspace_window().get_controller(); return panelManager.get_workspace_window().get_controller();
} }
sigc::signal<void>& sigc::signal<void>
Panel::signal_hide_panel() Panel::signal_hide_panel()
{ {
return hidePanelSignal; return hidePanelSignal;
} }
void void
Panel::on_item_hidden(GdlDockItem*, Panel *panel) Panel::on_item_hidden()
{ {
REQUIRE(panel); hidePanelSignal.emit();
panel->hidePanelSignal();
} }
} // namespace panels } // namespace panels

View file

@ -135,9 +135,8 @@ private:
/** /**
* An event handler for when dockItem is hidden. * 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: protected:

View file

@ -50,7 +50,13 @@ PanelManager::PanelManager(WorkspaceWindow &workspace_window) :
dockBar(dock), dockBar(dock),
dockLayout() dockLayout()
{ {
/* Create the DockLayout */
dockLayout = Gdl::DockLayout::create(dock); dockLayout = Gdl::DockLayout::create(dock);
/* Setup the Switcher Style */
Glib::RefPtr<Gdl::DockMaster> dock_master = dock.property_master();
dock_master->property_switcher_style() = Gdl::SWITCHER_STYLE_ICON;
memset(&dockPlaceholders, 0, sizeof(dockPlaceholders)); memset(&dockPlaceholders, 0, sizeof(dockPlaceholders));
} }
@ -118,7 +124,6 @@ PanelManager::show_panel(const int description_index)
Gdl::DockItem &dock_item = panel->get_dock_item(); Gdl::DockItem &dock_item = panel->get_dock_item();
// ENSURE(dock_item); // ENSURE(dock_item);
dock_item.present(dock); dock_item.present(dock);
// gdl_dock_object_present(GDL_DOCK_OBJECT(dock_item.gobj()), NULL);
return; return;
} }
} }
@ -144,37 +149,36 @@ void PanelManager::switch_panel(panels::Panel &old_panel,
// Create the new panel // Create the new panel
create_panel_by_index(description_index, dock_item); create_panel_by_index(description_index, dock_item);
} }
void void
PanelManager::split_panel(panels::Panel &panel, PanelManager::split_panel(panels::Panel &panel,
Gtk::Orientation split_direction) Gtk::Orientation split_direction)
{ {
TODO("Port to Gdlmm");
// Create the new panel // Create the new panel
const int index = get_panel_type(&panel); const int index = get_panel_type(&panel);
panels::Panel *new_panel = create_panel_by_index(index); panels::Panel *new_panel = create_panel_by_index(index);
// Dock the panel // Dock the panel
// Gdl::DockPlacement placement = Gdl::DOCK_NONE; Gdl::DockPlacement placement = Gdl::DOCK_NONE;
GdlDockPlacement placement = GDL_DOCK_NONE;
switch(split_direction) switch(split_direction)
{ {
case ORIENTATION_HORIZONTAL: case ORIENTATION_HORIZONTAL:
placement = GDL_DOCK_RIGHT; placement = Gdl::DOCK_RIGHT;
break; break;
case ORIENTATION_VERTICAL: case ORIENTATION_VERTICAL:
placement = GDL_DOCK_BOTTOM; placement = Gdl::DOCK_BOTTOM;
break; break;
default: default:
ERROR(gui, "Unrecognisized split_direction: %d", split_direction); ERROR(gui, "Unrecognisized split_direction: %d",
split_direction);
return; return;
break; break;
} }
gdl_dock_object_dock(GDL_DOCK_OBJECT(panel.get_dock_item().gobj()), panel.get_dock_item().dock(
GDL_DOCK_OBJECT(new_panel->get_dock_item().gobj()), placement, NULL); new_panel->get_dock_item(),placement);
} }
int int

View file

@ -57,7 +57,7 @@ WorkspaceWindow::WorkspaceWindow(Project &source_project,
WorkspaceWindow::~WorkspaceWindow() WorkspaceWindow::~WorkspaceWindow()
{ {
INFO (gui_dbg, "closing workspace window..."); INFO (gui_dbg, "Closing workspace window...");
} }
Project& Project&
@ -103,14 +103,6 @@ WorkspaceWindow::create_ui()
//----- Create the Docks -----// //----- Create the Docks -----//
panelManager.setup_dock(); 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_bar(),false,false,0);
dockContainer.pack_start(panelManager.get_dock(),true,true,0); dockContainer.pack_start(panelManager.get_dock(),true,true,0);
baseContainer.pack_start(dockContainer, PACK_EXPAND_WIDGET); baseContainer.pack_start(dockContainer, PACK_EXPAND_WIDGET);