]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWtBlackBox.cxx
#2498 BBTK Feature New Normal - wt-version kernel
[bbtk.git] / kernel / src / bbtkWtBlackBox.cxx
diff --git a/kernel/src/bbtkWtBlackBox.cxx b/kernel/src/bbtkWtBlackBox.cxx
new file mode 100644 (file)
index 0000000..cdb6b79
--- /dev/null
@@ -0,0 +1,372 @@
+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ #                        pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ #  This software is governed by the CeCILL-B license under French law and
+ #  abiding by the rules of distribution of free software. You can  use,
+ #  modify and/ or redistribute the software under the terms of the CeCILL-B
+ #  license as circulated by CEA, CNRS and INRIA at the following URL
+ #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ #  or in the file LICENSE.txt.
+ #
+ #  As a counterpart to the access to the source code and  rights to copy,
+ #  modify and redistribute granted by the license, users are provided only
+ #  with a limited warranty  and the software's author,  the holder of the
+ #  economic rights,  and the successive licensors  have only  limited
+ #  liability.
+ #
+ #  The fact that you are presently reading this means that you have had
+ #  knowledge of the CeCILL-B license and that you accept its terms.
+ # ------------------------------------------------------------------------ */
+
+
+/*=========================================================================
+  Program:   bbtk
+  Module:    $RCSfile: bbtkWxBlackBox.cxx,v $
+  Language:  C++
+  Date:      $Date: 2012/11/16 08:49:01 $
+  Version:   $Revision: 1.45 $
+=========================================================================*/
+
+
+
+#ifdef _USE_WT_
+
+/**
+ *  \file 
+ *  \brief 
+ */
+#include "bbtkWtBlackBox.h"
+#include "bbtkBlackBoxOutputConnector.h"
+//DELETE ME
+#include <Wt/WContainerWidget>
+
+//#include "bbtkWxContainerBlackBox.h"
+//#include <wx/dialog.h>
+
+//#include "bbtkData.h"
+//#include "bbtkFactory.h"
+
+namespace bbtk
+{
+  //=========================================================================
+  // WxFrame
+  //=========================================================================
+
+  //==================================================================
+ class WtWContainer : public Wt::WContainerWidget
+  {
+  public:
+    WtWContainer(WtBlackBox::Pointer b,
+           Wt::WContainerWidget *parent,
+           Wt::WString title/*,
+           wxSize size);*/
+           );
+    ~WtWContainer();
+ //   void OnCloseWindow(wxCloseEvent& event);
+
+
+    WtBlackBox::WeakPointer mBox;      
+   // DECLARE_EVENT_TABLE();
+    
+  };   
+  
+  // BEGIN_EVENT_TABLE(WxFrame, wxFrame)
+  //  EVT_CLOSE(WxFrame::OnCloseWindow)
+   //END_EVENT_TABLE();
+     //==================================================================
+  
+     //==================================================================
+       WtWContainer::WtWContainer(WtBlackBox::Pointer b,
+                  Wt::WContainerWidget *parent,
+                  Wt::WString title/*,
+                  wxSize size) */
+                  )
+    : 
+    Wt::WContainerWidget( parent),
+    mBox(b)
+  {   
+    bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] Wt::Widget()"
+                    <<std::endl);
+               Wt::WObject::setObjectName(bbtk::wt2std(title));
+    WWt::IncNbWindowsAlive();
+    b->bbSetWindow(this);
+    // Insert the widget into the window
+    //wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+               std::cout<<"Creando WebWIDGET DELETE ME ---- bbtkWtBlackBox.cxx.................30%"<<std::endl;
+               std::cout<<"NAME :  "<<bbtk::wt2std(title);
+               if(parent)
+                       std::cout<<"      CON PADRE   "<<parent->objectName()<<std::endl;
+               else
+                       std::cout<<"        SIN PADRE "<<std::endl;
+               std::cout<<"Creando WebWIDGET DELETE ME ---- bbtkWtBlackBox.cxx.................50%"<<std::endl;
+       std::cout<<"Creando WebWIDGET DELETE ME ---- bbtkWtBlackBox.cxx.................55%"<<std::endl;
+       //this->addWidget(new Wt::WContainerWidget());
+       std::cout<<"Creando WebWIDGET DELETE ME ---- bbtkWtBlackBox.cxx.................58%"<<std::endl;
+    b->bbUserCreateWidget(this);
+               Wt::WContainerWidget* widget = b->bbGetOutputWidget();
+               this->addWidget(widget);
+ /*   Wt::WWidget* widget = b->bbGetOutputWidget();
+    sizer->Add( widget, 1, wxALL|wxGROW, 2);
+    SetSizer(sizer);
+    Layout();
+*/
+  }
+  //==================================================================
+  //==================================================================
+  WtWContainer::~WtWContainer() 
+    { 
+      if (mBox.lock())
+       bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
+                        <<"] $$$$$$$$$$$$$$$$$$$ ~W()"
+                        <<std::endl);
+      else 
+       bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WtContainer()"<<std::endl);
+      //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
+      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
+      WWt::DecNbWindowsAlive();
+    }
+
+
+
+   //==================================================================
+
+  //=========================================================================
+  // WxDialog
+  //=========================================================================
+
+   //==================================================================
+  // Dialog window which is modal
+ /* class BBTK_EXPORT  WxDialog : public wxDialog
+  {
+  public:
+    WxDialog(WxBlackBox::Pointer box, 
+                    wxWindow *parent, 
+                    wxString title, 
+                    wxSize size);
+    ~WxDialog();
+    void OnCloseWindow(wxCloseEvent& event);
+
+
+    WxBlackBox::WeakPointer mBox;      
+    DECLARE_EVENT_TABLE();
+    
+  };
+  
+  BEGIN_EVENT_TABLE(WxDialog, wxDialog)
+    EVT_CLOSE(WxDialog::OnCloseWindow)
+    END_EVENT_TABLE();
+  //=========================================================================
+
+  //=========================================================================
+  WxDialog::WxDialog(WxBlackBox::Pointer b,
+                    wxWindow *parent,
+                    wxString title,
+                    wxSize size)
+    :
+    wxDialog( parent, 
+               -1, 
+               title,
+               wxDefaultPosition,
+               size,
+               wxRESIZE_BORDER | 
+               wxSYSTEM_MENU  |
+               wxCLOSE_BOX |
+               wxMAXIMIZE_BOX | 
+               wxMINIMIZE_BOX | 
+               wxCAPTION  
+             ),
+    mBox(b)
+  {
+    bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
+                    <<std::endl);
+    Wx::IncNbWindowsAlive();
+    b->bbSetWindow(this);
+    // Insert the widget into the window
+    wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+    b->bbUserCreateWidget(this);
+    wxWindow* widget = b->bbGetOutputWidget();
+    sizer->Add( widget, 1, wxALL|wxGROW, 2);
+    SetSizer(sizer);
+    Layout();
+  }
+  //==================================================================
+  //==================================================================
+  WxDialog::~WxDialog() 
+    { 
+      bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
+      //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
+      //      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
+      //      Wx::DecNbWindowsAlive();
+    }
+   //==================================================================
+   //==================================================================
+  void WxDialog::OnCloseWindow(wxCloseEvent& event)
+    {
+      bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
+      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
+      Wx::DecNbWindowsAlive();
+      this->Destroy();
+    }
+   //==================================================================
+
+*/
+ //=========================================================================
+  // WxBlackBox
+  //=========================================================================
+
+  //=========================================================================
+  //=========================================================================
+  //=========================================================================
+  //=========================================================================
+  BBTK_BLACK_BOX_IMPLEMENTATION(WtBlackBox,WidgetBlackBox<Wt::WContainerWidget>);
+  //=========================================================================
+  
+  //=========================================================================
+  void WtBlackBox::bbUserSetDefaultValues()
+  {
+    bbtkBlackBoxDebugMessage("widget",5,"WtBlackBox::bbUserSetDefaultValues()"<<std::endl);
+    bbmWindow = 0;
+  }
+  //=========================================================================
+
+  //=========================================================================
+  void WtBlackBox::bbUserInitializeProcessing()
+  {
+               //TODO delete this commment
+               std::cout<<"Initializing WT BlackBox --- DELETE  this message bbtkWtBlackBox.cxx"<<std::endl;
+  }
+  //==================================================================    
+
+  //=========================================================================
+  void WtBlackBox::bbUserFinalizeProcessing()
+  {
+    bbtkBlackBoxDebugMessage("widget",5,"==> WtBlackBox::bbUserFinalizeProcessing()"<<std::endl);
+    bbDestroyWindow();
+    bbtkBlackBoxDebugMessage("widget",5,"<== WtBlackBox::bbUserFinalizeProcessing()"<<std::endl);
+  }
+  //==================================================================    
+
+  //==================================================================    
+  /// Callback for creating a Dialog window (modal)
+  void WtBlackBox::bbCreateDialogWindow()
+  {
+  bbtkBlackBoxDebugMessage("widget",3,
+                    "==> WtBlackBox::bbCreateDialogWindow() - No Dialog must be created, it is a web app"
+                    <<std::endl);
+ /*   WxDialog* w = 0;  
+    w = new WxDialog( GetThisPointer<WxBlackBox>(),
+                     Wx::GetTopWindow(),
+                     std2wx( bbGetInputWinTitle()  
+                             + " - bbtk (c) CREATIS"),
+                     wxSize( bbGetInputWinWidth() , 
+                             bbGetInputWinHeight() ) );
+    w->Show(false);
+    //    w->ShowModal();
+*/
+  } 
+  //=========================================================================
+
+  //==================================================================    
+
+  //==================================================================    
+  /// Callback for creating a Frame window 
+  void WtBlackBox::bbCreateFrameWindow()
+  {
+
+    std::cout<<"Creating Container WT -- DELETE THIS MESSAGE bbtkWTBlackBox.cxx"<<std::endl;
+    bbtkBlackBoxDebugMessage("widget",3,
+                    "==> WtBlackBox::bbCreateFrameWindow() - parent = "
+                    <<WWt::GetTopWindow()
+                    <<std::endl);
+               WtWContainer* w = 0;
+//    WxFrame* w = 0;  
+               w = new WtWContainer( GetThisPointer<WtBlackBox>(),
+                                       WWt::GetTopWindow(),
+                                       std2wt( bbGetInputWinTitle()
+                                               + " - bbtk (c) CREATIS")
+                                               );
+               std::cout<<"Container created succesfully -- DELETE THIS MESSAGE bbtkWTBlackBox.cxx"<<std::endl;
+    bbmWindow = w;
+               
+/*
+    w = new WxFrame( GetThisPointer<WxBlackBox>(),
+                    Wx::GetTopWindow(),
+                    std2wx( bbGetInputWinTitle()  
+                            + " - bbtk (c) CREATIS"),
+                    wxSize( bbGetInputWinWidth() , 
+                            bbGetInputWinHeight() ) );
+               
+    w->Show();
+*/
+               WWt::CreateWtAppIfNeeded();
+   }
+
+  //==================================================================    
+
+  //==================================================================    
+  void WtBlackBox::bbSetWindow(Wt::WContainerWidget* w) 
+  {
+    bbtkBlackBoxDebugMessage("widget",9,"==> WtBlackBox::bbSetWindow("<<w<<")"<<std::endl);
+    if ((bbmWindow != 0)&&(w!=0)) 
+      { 
+       std::cout << "ERRRRRRRROOOOR"<<std::endl; 
+      }
+    bbmWindow = w;
+  }
+  //==================================================================    
+
+  //==================================================================    
+  void WtBlackBox::bbShowWindow()
+  {
+    if ((bbmWindow) && (!bbIsShown()))
+      {
+       bbtkBlackBoxDebugMessage("widget",3,"==> WtBlackBox::bbShowWindow()"
+                        <<std::endl);
+       if (bbGetInputWinDialog()) 
+         {
+         //  ((WxDialog*)bbmWindow)->ShowModal();
+         }
+       else
+         {
+               // There is not such a thing like show becouse it is a webapp
+          // bbGetWindow()->Show();
+           WWt::CreateWtAppIfNeeded();
+           bbSetShown(true);
+         } 
+      }
+  }
+  //==================================================================    
+
+  //==================================================================    
+  void WtBlackBox::bbDestroyWindow()
+  {
+    bbtkBlackBoxDebugMessage("widget",3,"==> WtBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
+    if (bbGetWindow()!=NULL) 
+      {
+       //       wxWindow* w = bbGetWindow();
+       //bbSetWindow(0);
+       // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
+       // HOWEVER I
+       //w->Close(true);
+       //
+       delete bbGetWindow();
+       bbSetShown(false);
+      }
+    bbtkBlackBoxDebugMessage("widget",3,"<== WtBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
+
+  }
+  //==================================================================    
+
+}//namespace bbtk
+
+#endif
+
+