From 39c2d538733633d92a31ec852945e61048b16a72 Mon Sep 17 00:00:00 2001
From: marco <marco@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Fri, 20 Aug 2010 09:54:58 +0000
Subject: [PATCH] fix AddWidgetToPool and rename WrappedWidget to Widget

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2666 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 examples/code_fragments/ui/widget_example.py  |  2 +-
 modules/gui/pymod/export_widget.cc            |  8 ++---
 modules/gui/src/panels/panel_bar.cc           |  4 +--
 .../gui/src/panels/panel_bar_widget_holder.cc |  6 ++--
 modules/gui/src/panels/panel_manager.cc       | 31 +++++++++----------
 modules/gui/src/panels/tabbed_panel_bar.cc    |  2 +-
 modules/gui/src/widget.hh                     | 15 +++++++++
 7 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/examples/code_fragments/ui/widget_example.py b/examples/code_fragments/ui/widget_example.py
index a59847093..733e9dcdb 100644
--- a/examples/code_fragments/ui/widget_example.py
+++ b/examples/code_fragments/ui/widget_example.py
@@ -29,7 +29,7 @@ panels=gui.GostyApp.Instance().perspective.panels
 tetris=Board(panels.qobject)
 
 #Wrap widget to Qt Widget
-wid=gui.WrappedWidget(tetris)
+wid=gui.Widget(tetris)
 
 #Add Widget to widget pool
 panels.AddWidgetToPool("Break Widget",wid)
diff --git a/modules/gui/pymod/export_widget.cc b/modules/gui/pymod/export_widget.cc
index 5cbf406b0..20d4cc746 100644
--- a/modules/gui/pymod/export_widget.cc
+++ b/modules/gui/pymod/export_widget.cc
@@ -35,22 +35,22 @@ struct WrappedWidget : public Widget
 {
   WrappedWidget(PyObject *p, object py_object):
        Widget(NULL,NULL){
-    if(QWidget* widget = get_cpp_qobject<QWidget>(py_object)){
+    if (QWidget* widget=get_cpp_qobject<QWidget>(py_object)) {
       this->SetInternalWidget(widget);
     }
   }
-
   virtual bool Restore(const QString& prefix){return true;}
 
   virtual bool Save(const QString& prefix){return true;}
 
   virtual ~WrappedWidget(){ }
-
+private:
+  QString   unique_id_;
 };
 
 void export_Widget()
 {
-  class_<Widget, WrappedWidget, boost::noncopyable>("WrappedWidget",init<object>())
+  class_<Widget, WrappedWidget, boost::noncopyable>("Widget", init<object>())
     .def("Save", &WrappedWidget::Save)
     .def("Restore", &WrappedWidget::Restore)
     .def("SetDestroyOnClose", &WrappedWidget::SetDestroyOnClose)
diff --git a/modules/gui/src/panels/panel_bar.cc b/modules/gui/src/panels/panel_bar.cc
index 1afbfe138..d4e5145eb 100644
--- a/modules/gui/src/panels/panel_bar.cc
+++ b/modules/gui/src/panels/panel_bar.cc
@@ -69,7 +69,7 @@ void PanelBar::AddWidget(Widget* widget, bool is_hidden)
 {
   int index = this->GetIndex(widget);
   if (index == -1) {
-    QString class_name = widget->metaObject()->className();
+    QString class_name = widget->GetUniqueID();
     WidgetState ws = WidgetState(widget, !is_hidden, class_name);
     widget_states_.append(ws);
     if(current_view_mode_){
@@ -221,7 +221,7 @@ void PanelBar::InsertWidget(Widget * widget, int index, bool is_hidden)
       current_view_mode_->WidgetMoved(widget, index);
     }
   } else {
-    QString class_name = widget->metaObject()->className();
+    QString class_name = widget->GetUniqueID();
     WidgetState ws = WidgetState(widget, !is_hidden, class_name);
     widget_states_.insert(index, ws);
     if(current_view_mode_){
diff --git a/modules/gui/src/panels/panel_bar_widget_holder.cc b/modules/gui/src/panels/panel_bar_widget_holder.cc
index 4f098355e..523aba3ce 100644
--- a/modules/gui/src/panels/panel_bar_widget_holder.cc
+++ b/modules/gui/src/panels/panel_bar_widget_holder.cc
@@ -86,7 +86,7 @@ void PanelBarWidgetHolder::SetupToolBar()
   icon_path.cd("gui");
   icon_path.cd("icons");
 
-  QString class_name=widget_->metaObject()->className();
+  QString class_name=widget_->GetUniqueID();
   WidgetRegistry* wf=WidgetRegistry::Instance();
   toolbar_->setAttribute(Qt::WA_MacSmallSize);
   QAction* label_ = toolbar_->addAction(wf->GetFullName(class_name));
@@ -123,7 +123,7 @@ void PanelBarWidgetHolder::SetWidget(Widget* widget)
   assert(l);
   l->removeWidget(widget_);
   l->addWidget(widget, 1);
-  QString class_name=widget->metaObject()->className();
+  QString class_name=widget->GetUniqueID();
   WidgetRegistry* wf=WidgetRegistry::Instance();
   label_->setText(wf->GetFullName(class_name));
   widget_=widget;
@@ -135,7 +135,7 @@ void PanelBarWidgetHolder::LabelClick(bool checked)
   QMenu* m = panels->GetAvailableWidgetsMenu();
   if (QAction* a=m->exec(toolbar_->mapToGlobal(QPoint(0, 0)))) {
     QString new_class_name=a->data().toString();
-    if (new_class_name!=widget_->metaObject()->className()) {
+    if (new_class_name!=widget_->GetUniqueID()) {
       panels->ReplaceWidget(widget_,new_class_name);
     }
   }
diff --git a/modules/gui/src/panels/panel_manager.cc b/modules/gui/src/panels/panel_manager.cc
index 52ccf6058..695890c28 100644
--- a/modules/gui/src/panels/panel_manager.cc
+++ b/modules/gui/src/panels/panel_manager.cc
@@ -101,20 +101,19 @@ void PanelManager::AddWidgetToPool(const QString& class_name, int limit){
   pool_->Add(class_name, limit);
 }
 
-void PanelManager::AddWidgetToPool(const QString& name, Widget* widget){
-  QString id = widget->metaObject()->className();
-  widget->setParent(this);
-  id.replace(".", "::");
-  ExternalWidgetFactory* ewf = new ExternalWidgetFactory(id,name,widget);
+void PanelManager::AddWidgetToPool(const QString& name, Widget* widget) {
+  //widget->setParent(this);
+  widget->SetUniqueID(name);
+  ExternalWidgetFactory* ewf = new ExternalWidgetFactory(name, name, widget);
   WidgetRegistry::Instance()->RegisterWidgetFactory(ewf);
-  pool_->Add(id, 1);
+  pool_->Add(name, 1);
 }
 
 void PanelManager::AddWidget(PanelPosition pos, Widget* widget, bool is_hidden){
   if(panels_.contains(pos) && this->GetParentPanel(widget) == NONE){
-    if(pool_->IsAvailable(widget->metaObject()->className())){
+    if(pool_->IsAvailable(widget->GetUniqueID())){
       panels_[pos]->AddWidget(widget,is_hidden);
-      pool_->Take(widget->metaObject()->className());
+      pool_->Take(widget->GetUniqueID());
     }
   }
 }
@@ -243,11 +242,11 @@ void PanelManager::MoveWidget(Widget * widget, PanelPosition pos, int index){
     else{
       if(panels_.contains(current_position)){
         panels_[current_position]->RemoveWidget(widget);
-        pool_->Give(widget->metaObject()->className());
+        pool_->Give(widget->GetUniqueID());
       }
-      if(pool_->IsAvailable(widget->metaObject()->className())){
+      if(pool_->IsAvailable(widget->GetUniqueID())){
         panels_[pos]->InsertWidget(widget,index,false);
-        pool_->Take(widget->metaObject()->className());
+        pool_->Take(widget->GetUniqueID());
       }
     }
   }
@@ -261,15 +260,15 @@ void PanelManager::MoveNextTo(Widget* target, Widget* widget){
 }
 
 void PanelManager::ReplaceWidget(Widget* w1, Widget* w2){
-  if(pool_->IsAvailable(w2->metaObject()->className())){
+  if(pool_->IsAvailable(w2->GetUniqueID())){
     PanelPosition pos_w1 = this->GetParentPanel(w1);
     PanelPosition pos_w2  = this->GetParentPanel(w2);
     if(panels_.contains(pos_w1) && pos_w2 == NONE){
       int index = panels_[pos_w1]->GetIndex(w1);
       panels_[pos_w1]->RemoveWidget(w1);
-      pool_->Give(w1->metaObject()->className());
+      pool_->Give(w1->GetUniqueID());
       panels_[pos_w1]->InsertWidget(w2,index,false);
-      pool_->Take(w2->metaObject()->className());
+      pool_->Take(w2->GetUniqueID());
     }
   }
 }
@@ -280,7 +279,7 @@ void PanelManager::ReplaceWidget(Widget* w1, QString& class_name){
     if(panels_.contains(pos)){
       int index = panels_[pos]->GetIndex(w1);
       panels_[pos]->RemoveWidget(w1);
-      pool_->Give(w1->metaObject()->className());
+      pool_->Give(w1->GetUniqueID());
       WidgetRegistry* wf=WidgetRegistry::Instance();
       Widget* widget = wf->Create(class_name,this);
       panels_[pos]->InsertWidget(widget,index,false);
@@ -293,7 +292,7 @@ void PanelManager::RemoveWidget(Widget *widget){
   PanelPosition pos = this->GetParentPanel(widget);
   if(panels_.contains(pos)){
     panels_[pos]->RemoveWidget(widget);
-    pool_->Give(widget->metaObject()->className());
+    pool_->Give(widget->GetUniqueID());
   }
 }
 
diff --git a/modules/gui/src/panels/tabbed_panel_bar.cc b/modules/gui/src/panels/tabbed_panel_bar.cc
index dce4e0962..3535372e0 100644
--- a/modules/gui/src/panels/tabbed_panel_bar.cc
+++ b/modules/gui/src/panels/tabbed_panel_bar.cc
@@ -62,7 +62,7 @@ bool TabbedPanelBar::Restore(const QString& prefix)
 }
 
 void TabbedPanelBar::WidgetMoved(Widget* widget, int index){
-  QString class_name = widget->metaObject()->className();
+  QString class_name = widget->GetUniqueID();
   if(tab_widget_->indexOf(widget)>=0){
     tab_widget_->removeTab(tab_widget_->indexOf(widget));
   }
diff --git a/modules/gui/src/widget.hh b/modules/gui/src/widget.hh
index f8bdbd776..9aeb1bbfa 100644
--- a/modules/gui/src/widget.hh
+++ b/modules/gui/src/widget.hh
@@ -56,11 +56,26 @@ public:
   QWidget* GetInternalWidget();
   void SetInternalWidget(QWidget* widget);
   
+  
+  const QString& GetUniqueID() const
+  {
+    if (unique_id_.size()==0) {
+      unique_id_=this->metaObject()->className();
+    }
+    return unique_id_;
+  }
+  
+  void SetUniqueID(const QString& id)
+  {
+    unique_id_=id;
+  }
+  
   virtual bool Restore(const QString& prefix)=0;
   
   virtual bool Save(const QString& prefix)=0;
   
 private:
+  mutable QString  unique_id_;
   QWidget* internal_;
   bool     destroy_on_close_;
 };
-- 
GitLab