From 18146693013688fd048ed056b16fc1b5243622dc Mon Sep 17 00:00:00 2001 From: Joel Holdsworth Date: Sat, 4 Apr 2009 23:01:50 +0100 Subject: [PATCH] Added nieve PanelManager::switch_panel --- src/gui/panels/panel.cpp | 6 +++++ src/gui/panels/panel.hpp | 5 +++++ src/gui/widgets/panel-bar.cpp | 5 +++++ src/gui/workspace/panel-manager.cpp | 31 ++++++++++++++++++++++++++ src/gui/workspace/panel-manager.hpp | 3 +++ src/gui/workspace/workspace-window.cpp | 6 +++++ src/gui/workspace/workspace-window.hpp | 2 ++ 7 files changed, 58 insertions(+) diff --git a/src/gui/panels/panel.cpp b/src/gui/panels/panel.cpp index 955880b6d..fcb6de6a8 100644 --- a/src/gui/panels/panel.cpp +++ b/src/gui/panels/panel.cpp @@ -89,6 +89,12 @@ Panel::is_shown() const return GTK_WIDGET_VISIBLE((GtkWidget*)dock_item); } +workspace::WorkspaceWindow& +Panel::get_workspace_window() +{ + return workspace; +} + void Panel::internal_setup() { diff --git a/src/gui/panels/panel.hpp b/src/gui/panels/panel.hpp index d6e72706f..9614e9b30 100644 --- a/src/gui/panels/panel.hpp +++ b/src/gui/panels/panel.hpp @@ -90,6 +90,11 @@ public: * Returns true if the panel is currently visible. */ bool is_shown() const; + + /** + * Returns a reference to the owner workspace window object. + **/ + workspace::WorkspaceWindow& get_workspace_window(); private: /** diff --git a/src/gui/widgets/panel-bar.cpp b/src/gui/widgets/panel-bar.cpp index 0b2a6e32a..3ed8464cc 100644 --- a/src/gui/widgets/panel-bar.cpp +++ b/src/gui/widgets/panel-bar.cpp @@ -21,6 +21,7 @@ * *****************************************************/ #include "panel-bar.hpp" +#include "../workspace/workspace-window.hpp" #include "../workspace/panel-manager.hpp" #include "../panels/panel.hpp" #include "../util/rectangle.hpp" @@ -129,6 +130,10 @@ void PanelBar::on_panel_type(int type_index) { g_message("on_panel_type %d", type_index); + + workspace::PanelManager &manager = panel.get_workspace_window(). + get_panel_manager(); + manager.switch_panel(panel, type_index); } void diff --git a/src/gui/workspace/panel-manager.cpp b/src/gui/workspace/panel-manager.cpp index b9d7963b2..a11f78ebc 100644 --- a/src/gui/workspace/panel-manager.cpp +++ b/src/gui/workspace/panel-manager.cpp @@ -111,6 +111,37 @@ PanelManager::get_dock_bar() const return dockBar; } +void PanelManager::switch_panel(panels::Panel &old_panel, + int new_panel_description_index) +{ + REQUIRE(new_panel_description_index >= 0 && + new_panel_description_index < get_panel_description_count()); + + shared_ptr new_panel( + panelDescriptionList[new_panel_description_index].create( + workspaceWindow)); + + new_panel->show_all(); + + panels.push_back(new_panel); + + gdl_dock_object_dock (GDL_DOCK_OBJECT(old_panel.get_dock_item()), + GDL_DOCK_OBJECT(new_panel->get_dock_item()), + GDL_DOCK_CENTER, NULL); + + gdl_dock_object_unbind(GDL_DOCK_OBJECT(old_panel.get_dock_item())); + + list< boost::shared_ptr >::iterator i; + for(i = panels.begin(); i != panels.end(); i++) + { + if((*i).get() == &old_panel) + { + panels.erase(i); + break; + } + } +} + int PanelManager::get_panel_description_count() { diff --git a/src/gui/workspace/panel-manager.hpp b/src/gui/workspace/panel-manager.hpp index 1fc014c1b..5e13da0b1 100644 --- a/src/gui/workspace/panel-manager.hpp +++ b/src/gui/workspace/panel-manager.hpp @@ -76,6 +76,9 @@ public: **/ GdlDockBar* get_dock_bar() const; + void switch_panel(panels::Panel &old_panel, + int new_panel_description_index); + public: /** diff --git a/src/gui/workspace/workspace-window.cpp b/src/gui/workspace/workspace-window.cpp index 1188cb469..b940ccad3 100644 --- a/src/gui/workspace/workspace-window.cpp +++ b/src/gui/workspace/workspace-window.cpp @@ -69,6 +69,12 @@ WorkspaceWindow::get_controller() return controller; } +PanelManager& +WorkspaceWindow::get_panel_manager() +{ + return panelManager; +} + void WorkspaceWindow::create_ui() { diff --git a/src/gui/workspace/workspace-window.hpp b/src/gui/workspace/workspace-window.hpp index e46acf6c1..866fb872c 100644 --- a/src/gui/workspace/workspace-window.hpp +++ b/src/gui/workspace/workspace-window.hpp @@ -66,6 +66,8 @@ public: gui::model::Project& get_project(); gui::controller::Controller& get_controller(); + + PanelManager& get_panel_manager(); private: void create_ui();