From ec295f74a006dd11577a17b4dea54dddebc0be97 Mon Sep 17 00:00:00 2001
From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Wed, 21 Apr 2010 13:13:26 +0000
Subject: [PATCH] New Export for panels

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2078 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gui/pymod/export_panel_bar.cc | 90 +++++++++++++++++++--------
 modules/gui/pymod/menu_bar_proxy.hh   | 46 --------------
 modules/gui/pymod/menu_proxy.hh       | 46 --------------
 scripts/init.py                       |  2 +-
 4 files changed, 64 insertions(+), 120 deletions(-)
 delete mode 100644 modules/gui/pymod/menu_bar_proxy.hh
 delete mode 100644 modules/gui/pymod/menu_proxy.hh

diff --git a/modules/gui/pymod/export_panel_bar.cc b/modules/gui/pymod/export_panel_bar.cc
index 38e2b6458..e83a8cb2b 100644
--- a/modules/gui/pymod/export_panel_bar.cc
+++ b/modules/gui/pymod/export_panel_bar.cc
@@ -20,10 +20,8 @@
 
 #include <ost/gui/panel_bar/panels.hh>
 #include <ost/gui/panel_bar/panel_bar.hh>
-#include <ost/gui/panel_bar/button_bar.hh>
 #include "ost/gui/widget.hh"
 
-#include "menu_proxy.hh"
 #include "sip_handler.hh"
 
 
@@ -35,22 +33,21 @@ using namespace ost::gui;
 namespace{
 void panels_add_widget_a(Panels * panels, PanelPosition pos, const SipHandlerBase& sh, bool hidden=false)
 {
-  panels->AddWidget(pos,reinterpret_cast<Widget*>(sh.GetSipHandle()),hidden);
+  if(Widget* widget = reinterpret_cast<Widget*>(sh.GetSipHandle())){
+    panels->AddWidget(pos,widget,hidden);
+  }
 }
 
-void panels_add_widget_b(Panels * panels, PanelPosition pos, const SipHandlerBase& sh)
+void panels_add_widget_b(Panels * panels, PanelPosition pos, Widget* widget, bool hidden=false)
 {
-  panels->AddWidget(pos,reinterpret_cast<Widget*>(sh.GetSipHandle()));
+  panels->AddWidget(pos,widget,hidden);
 }
 
-void panels_add_widget_c(Panels * panels, PanelPosition pos, Widget* w, bool hidden=false)
+void panels_add_widget_c(Panels * panels, PanelPosition pos, object py_object, bool hidden=false)
 {
-  panels->AddWidget(pos,w,hidden);
-}
-
-void panels_add_widget_d(Panels * panels, PanelPosition pos, Widget* w)
-{
-  panels->AddWidget(pos,w);
+  if(Widget* widget = get_cpp_qobject<Widget>(py_object)){
+    panels->AddWidget(pos,widget,hidden);
+  }
 }
 
 void panels_remove_widget_a(Panels * panels, Widget* w)
@@ -60,7 +57,16 @@ void panels_remove_widget_a(Panels * panels, Widget* w)
 
 void panels_remove_widget_b(Panels * panels, const SipHandlerBase& sh)
 {
-  panels->RemoveWidget(reinterpret_cast<Widget*>(sh.GetSipHandle()));
+  if(Widget* widget = reinterpret_cast<Widget*>(sh.GetSipHandle())){
+    panels->RemoveWidget(widget);
+  }
+}
+
+void panels_remove_widget_c(Panels * panels, object py_object)
+{
+  if(Widget* widget = get_cpp_qobject<Widget>(py_object)){
+    panels->RemoveWidget(widget);
+  }
 }
 
 void panels_add_widget_to_pool_a(Panels * panels, const QString& full_name, Widget* widget)
@@ -68,7 +74,21 @@ void panels_add_widget_to_pool_a(Panels * panels, const QString& full_name, Widg
   panels->AddWidgetToPool(full_name,widget);
 }
 
-void panels_add_widget_to_pool_b(Panels * panels, const QString& name, int limit=-1)
+void panels_add_widget_to_pool_b(Panels * panels, const QString& full_name, const SipHandlerBase& sh)
+{
+  if(Widget* widget = reinterpret_cast<Widget*>(sh.GetSipHandle())){
+    panels->AddWidgetToPool(full_name,widget);
+  }
+}
+
+void panels_add_widget_to_pool_c(Panels * panels, const QString& full_name, object py_object)
+{
+  if(Widget* widget = get_cpp_qobject<Widget>(py_object)){
+    panels->AddWidgetToPool(full_name,widget);
+  }
+}
+
+void panels_add_widget_to_pool_d(Panels * panels, const QString& name, int limit=-1)
 {
   panels->AddWidgetToPool(name,limit);
 }
@@ -89,9 +109,23 @@ object panels_get_qwidget(Panels* panels)
   return widget;
 }
 
-void panel_bar_add_widget(PanelBar * pb, const SipHandlerBase& sh, bool hidden)
+void panel_bar_add_widget_a(PanelBar * pb, Widget* widget, bool hidden=false)
 {
-  pb->AddWidget(reinterpret_cast<Widget*>(sh.GetSipHandle()),hidden);
+  pb->AddWidget(widget,hidden);
+}
+
+void panel_bar_add_widget_b(PanelBar * pb, const SipHandlerBase& sh, bool hidden=false)
+{
+  if(Widget* widget = reinterpret_cast<Widget*>(sh.GetSipHandle())){
+    pb->AddWidget(widget,hidden);
+  }
+}
+
+void panel_bar_add_widget_c(PanelBar * pb, object py_object, bool hidden=false)
+{
+  if(Widget* widget = get_cpp_qobject<Widget>(py_object)){
+    pb->AddWidget(widget,hidden);
+  }
 }
 
 }
@@ -107,35 +141,37 @@ void export_PanelBar()
       ;
 
   class_<Panels, boost::noncopyable>("Panels", no_init)
-    .def("AddWidget", &panels_add_widget_a)
-    .def("AddWidget", &panels_add_widget_b)
-    .def("AddWidget", &panels_add_widget_c)
-    .def("AddWidget", &panels_add_widget_d)
+    .def("AddWidget", &panels_add_widget_a, arg("hidden")=false)
+    .def("AddWidget", &panels_add_widget_b, arg("hidden")=false)
+    .def("AddWidget", &panels_add_widget_c, arg("hidden")=false)
     .def("AddWidgetByName", &Panels::AddWidgetByName)
     .def("RemoveWidget", &panels_remove_widget_a)
     .def("RemoveWidget", &panels_remove_widget_b)
+    .def("RemoveWidget", &panels_remove_widget_c)
     .def("GetMenu", &panels_get_menu)
     .def("GetQWidget", &panels_get_qwidget)
     .def("AddWidgetToPool", &panels_add_widget_to_pool_a)
     .def("AddWidgetToPool", &panels_add_widget_to_pool_b)
+    .def("AddWidgetToPool", &panels_add_widget_to_pool_c)
+    .def("AddWidgetToPool", &panels_add_widget_to_pool_d)
     .def("Save", &Panels::Save)
     .def("Restore", &Panels::Restore)
     .add_property("menu", &panels_get_menu)
-    .add_property("qwidget", &panels_get_qwidget)
+    .def("GetQObject",&get_py_qobject<Panels>)
+    .add_property("qobject", &get_py_qobject<Panels>)
   ;
 
   class_<PanelBar, boost::noncopyable>("PanelBar", no_init)
-    .def("AddWidget", &panel_bar_add_widget)
-    .def("AddWidget", &PanelBar::AddWidget)
+    .def("AddWidget", &panel_bar_add_widget_a, arg("hidden")=false)
+    .def("AddWidget", &panel_bar_add_widget_b, arg("hidden")=false)
+    .def("AddWidget", &panel_bar_add_widget_c, arg("hidden")=false)
     .def("Restore", &PanelBar::Restore)
     .def("Save", &PanelBar::Save)
     .def("Hide", &PanelBar::hide)
     .def("Show", &PanelBar::show)
+    .def("GetQObject",&get_py_qobject<PanelBar>)
+    .add_property("qobject", &get_py_qobject<PanelBar>)
   ;
 
-  class_<ButtonBar, boost::noncopyable>("ButtonBar", no_init)
-    .def("Hide", &ButtonBar::hide)
-    .def("Show", &ButtonBar::show)
-  ;
 }
 
diff --git a/modules/gui/pymod/menu_bar_proxy.hh b/modules/gui/pymod/menu_bar_proxy.hh
deleted file mode 100644
index 075f3a224..000000000
--- a/modules/gui/pymod/menu_bar_proxy.hh
+++ /dev/null
@@ -1,46 +0,0 @@
-//------------------------------------------------------------------------------
-// This file is part of the OpenStructure project <www.openstructure.org>
-//
-// Copyright (C) 2008-2010 by the OpenStructure authors
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License as published by the Free
-// Software Foundation; either version 3.0 of the License, or (at your option)
-// any later version.
-// This library is distributed in the hope that it will be useful, but WITHOUT
-// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-// details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this library; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//------------------------------------------------------------------------------
-#ifndef OST_GUI_MENU_BAR_PROXY_HH
-#define OST_GUI_MENU_BAR_PROXY_HH
-
-#include <QMenuBar>
-
-#include "sip_handler.hh"
-
-namespace ost { namespace gui {
-
-class  MenuBarProxy : public SipHandler<QMenuBar> {
-public:
-	MenuBarProxy(QMenuBar* gl_win=NULL):
-    SipHandler<QMenuBar>(gl_win)
-  { }
-  
-  void Show()  
-  {
-    return Me()->show();
-  }
-  void Hide()  
-  {
-    return Me()->hide();
-  }
-};
-
-}}
-
-#endif
diff --git a/modules/gui/pymod/menu_proxy.hh b/modules/gui/pymod/menu_proxy.hh
deleted file mode 100644
index 8383a1dec..000000000
--- a/modules/gui/pymod/menu_proxy.hh
+++ /dev/null
@@ -1,46 +0,0 @@
-//------------------------------------------------------------------------------
-// This file is part of the OpenStructure project <www.openstructure.org>
-//
-// Copyright (C) 2008-2010 by the OpenStructure authors
-//
-// This library is free software; you can redistribute it and/or modify it under
-// the terms of the GNU Lesser General Public License as published by the Free
-// Software Foundation; either version 3.0 of the License, or (at your option)
-// any later version.
-// This library is distributed in the hope that it will be useful, but WITHOUT
-// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-// FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-// details.
-//
-// You should have received a copy of the GNU Lesser General Public License
-// along with this library; if not, write to the Free Software Foundation, Inc.,
-// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
-//------------------------------------------------------------------------------
-#ifndef OST_GUI_MENU_PROXY_HH
-#define OST_GUI_MENU_PROXY_HH
-
-#include <QMenu>
-
-#include "sip_handler.hh"
-
-namespace ost { namespace gui {
-
-class  MenuProxy : public SipHandler<QMenu> {
-public:
-	MenuProxy(QMenu* gl_win=NULL):
-    SipHandler<QMenu>(gl_win)
-  { }
-  
-  void Show()  
-  {
-    return Me()->show();
-  }
-  void Hide()  
-  {
-    return Me()->hide();
-  }
-};
-
-}}
-
-#endif
diff --git a/scripts/init.py b/scripts/init.py
index 94bd347e1..e012b6118 100644
--- a/scripts/init.py
+++ b/scripts/init.py
@@ -51,7 +51,7 @@ def _InitFrontEnd():
   main_area=app.perspective.main_area
   _InitPanels(app, app.perspective.panels)
   _InitMenuBar(app.perspective.GetMenuBar())
-  _InitSpaceNav(app.perspective.panels.qwidget)
+  _InitSpaceNav(app.perspective.panels.qobject)
   _InitContextMenu()
   main_area.AddPersistentWidget("3D Scene", "gl_win" , app.gl_win.qobject, int(QtCore.Qt.WindowMaximized))
   app.perspective.Restore()
-- 
GitLab