]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWtBlackBox.cxx
#3120 BBTK Bug New Normal - merge branch changestoITK3and4 FROM master
[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..a3cb0db
--- /dev/null
@@ -0,0 +1,473 @@
+
+/*
+ # ---------------------------------------------------------------------
+ #
+ # 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"
+
+
+//#include "bbtkWxContainerBlackBox.h"
+//#include <wx/dialog.h>
+
+//#include "bbtkData.h"
+//#include "bbtkFactory.h"
+
+
+
+
+namespace bbtk
+{
+
+/*     
+       class jScript
+       {
+               public:
+                       jScript();
+                       std::string jScriptLine;
+       };
+*/
+  //=========================================================================
+  // wtData structure
+  //=========================================================================
+
+       // For the very first contruction of the application
+/*     struct wtServerData
+       {
+         std::string docRoot;
+         std::string port;
+         std::string address;
+       
+       };
+       */
+       struct wtData
+       {
+               Wt::WContainerWidget *parent;
+               WtBlackBox::Pointer b;
+               WtBlackBox *pbox;       
+               Wt::WString title;      
+       };
+
+/*     jScript::jScript()
+       {
+               jScriptLine = "";
+       }
+*/
+//     static bbtk::jScript* js  = new bbtk::jScript();
+       static wtData myWtData;
+//     static wtServerData loadedJS;
+       //static std::string* jss;
+       
+       
+
+  //=========================================================================
+  // javaScript Line
+  //=========================================================================
+       //Contains all the JS statements needed for the bbwt.
+               
+  //=========================================================================
+  // WxFrame
+  //=========================================================================
+       // Application WT deployed
+  //==================================================================
+ class WtWFrame : public Wt::WApplication
+  {
+  public:
+    WtWFrame( const Wt::WEnvironment& env );
+    ~WtWFrame();       
+    WtBlackBox::WeakPointer mBox; 
+  };   
+       
+
+       WtWFrame::WtWFrame( const Wt::WEnvironment& env ):Wt::WApplication(env)
+       {  
+               //std::cout<<"Adding JavaScript --  DELETE ME -- bbtkWtBlackBox.cxx"<<std::endl;
+               //this->require("/home/gonzalez/Documents/CREATOOLS/wt_library/wt/bbtk_wt_PKG/src/js/xtk.js");
+
+               //this->require("http://get.goXTK.com/xtk.js");
+               //this->useStyleSheet("css/demo.css");
+
+       //this->require("http://get.goXTK.com/xtk.js");
+       this->require( "resourcesXTK/xtk.js" );
+               
+       //      this->require("http://get.goXTK.com/xtk_edge.js");
+//     this->require("http://get.goXTK.com/xtk_xdat.gui.js");
+       this->require( "resourcesXTK/xtk_xdat.gui.js" );
+
+  this->useStyleSheet("resourcesXTK/styleWT.css"); 
+       //      std::cout<<"Cargado------------           "<<loadedJS<<std::endl;
+               mBox = myWtData.b;
+
+//EED -->
+               if(!myWtData.parent)
+               {
+                       std::cout<<"        SIN PADRE "<<std::endl;
+                       if(myWtData.parent == 0){std::cout<<"        PARENT 0 "<<std::endl;}
+                       if(myWtData.parent == NULL){std::cout<<"        PARENT NULL "<<std::endl;}
+                       myWtData.parent = new Wt::WContainerWidget();
+                       std::cout<<"Parent created --  DELETE ME -- bbtkWtBlackBox.cxx"<<std::endl;
+               }
+
+               Wt::WContainerWidget *myContainer = new Wt::WContainerWidget(myWtData.parent);
+               myContainer->setMinimumSize(800,500);
+               std::cout<<"Creando WebWIDGET DELETE ME ---- bbtkWtBlackBox.cxx.......50%"<<std::endl;
+               myWtData.b->bbUserCreateWidget(myContainer);
+
+               root()->addWidget(myWtData.parent);
+               //bbmWindow = myCont;
+               this->refresh();
+               //jss = WtBlackBox::jScript;
+               std::cout<<"Creando WebWIDGET DELETE ME ---- bbtkWtBlackBox.cxx........80%"<<std::endl;
+               std::cout<<"Creando WebWIDGET DELETE ME SCRIPT : ---"<<bbtk::jScript<<"......80%"<<std::endl;
+               //this->doJavaScript(bbtk::jScript); 
+
+//EED
+       myWtData.pbox->bbwtUpdateInputs();
+//       myWtData.pbox->bbwtProcess();
+
+
+  }
+  //==================================================================
+  //==================================================================
+  WtWFrame::~WtWFrame() 
+    { 
+      if (mBox.lock())
+       bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
+                        <<"] $$$$$$$$$$$$$$$$$$$ ~W()"
+                        <<std::endl);
+      else 
+       bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WtContainer()"<<std::endl);
+      bbtkDebugMessage("widget",9,"WtWFrame::~WtWFrame()"<<std::endl);
+      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
+      WWt::DecNbWindowsAlive();
+    }
+
+
+   
+       Wt::WApplication *createApplication(const Wt::WEnvironment& env)
+       {
+                       return new WtWFrame(env);                       
+       }
+
+
+  //=========================================================================
+  // WxDialogWxBlackBox::Pointer box
+  //=========================================================================
+
+   //==================================================================
+  // Dialog window which is modal
+ /* class BBTK_EXPORT  WxDialog : public wxDialog
+  {
+  public:
+    WxDialog(WxBlackBox::Pointer box, 
+                    wxWindow *parent, 
+                    wxString title, 
+                    wxSize size);
+    ~WxDialog();Wt::GetTopWindow()
+    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);WxBlackBox::Pointer box
+    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();
+  }
+  //==================================================================
+  //===========================organise=======================================
+  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()"<<wxGUIEditorGraphicBBS:std::endl);
+      if (mBox.lock()) mBox.lock()->bbSetWindow(0); http://doodle.com/qx65tfxismf7d6ku5vxykghs/admin#table
+      Wx::DecNbWindowsAlive();
+      this->Destroy();
+    }
+   //==================================================================
+
+*/
+ //=========================================================================
+  // WxBlackBox
+  //=========================================================================
+
+  //=========================================================================
+  //=========================================================================
+  //=========================================================================
+  //=========================================================================
+  BBTK_BLACK_BOX_IMPLEMENTATION(WtBlackBox,WidgetBlackBox<Wt::WContainerWidget>);
+       
+       //std::string WtBlackBox::wtServerData::docRoot = "/home/gonzalez/Documents/pruebaResources";
+       //std::string WtBlackBox::wtServerData::docRoot = "/usr/local/share/wtResources";
+  //std::string WtBlackBox::wtServerData::port    = "8081";
+
+       std::string WtBlackBox::wtServerData::docRoot   = "<void>";
+       std::string WtBlackBox::wtServerData::port      = "<void>";
+       std::string WtBlackBox::wtServerData::address   = "0.0.0.0";
+       int WtBlackBox::wtServerData::argc                              = 0;
+       char **WtBlackBox::wtServerData::argv                   = NULL;
+
+  //=========================================================================
+  //=========================================================================
+  void WtBlackBox::bbUserSetDefaultValues()
+  {
+    bbtkBlackBoxDebugMessage("widget",5,"WtBlackBox::bbUserSetDefaultValues()"<<std::endl);
+    bbmWindow = 0;
+  }
+  //=========================================================================
+
+  //=========================================================================
+  void WtBlackBox::bbUserInitializeProcessing()
+  {
+
+  }
+  //================================================================http://intranet-if.insa-lyon.fr/temps/5IF39.html==    
+
+  //=========================================================================
+  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);
+
+  } 
+  //=========================================================================
+
+  //==================================================================    
+
+  //==================================================================    
+  /// Callback for creating a Frame window 
+       void WtBlackBox::bbCreateFrameWindow()
+       {
+
+               bbtkBlackBoxDebugMessage("widget",3,
+                       "==> WtBlackBox::bbCreateFrameWindow() - parent = "
+                       <<WWt::GetTopWindow()
+                       <<std::endl);
+
+               //Setting necessary data for Wt server deployment
+               myWtData.parent = WWt::GetTopWindow();
+               myWtData.b      = GetThisPointer<WtBlackBox>();
+               myWtData.title  = std2wt( bbGetInputWinTitle() + " - bbtk (c) CREATIS");
+               myWtData.pbox   = this;
+               
+               //char  *argv[7] =  {"./WtTest","--docroot","/home/gonzalez/Documents/pruebaResources","--http-address","0.0.0.0","--http-port","8080"};
+               //int argc = 7;
+               
+/*             
+                       char  *argv[7] =  {"./WtTest"
+,"--docroot",(char*)WtBlackBox::wtServerData::docRoot.c_str()
+,"--http-address",(char*)WtBlackBox::wtServerData::address.c_str()
+,"--http-port",(char*)WtBlackBox::wtServerData::port.c_str()
+};
+               int argc = 3;
+               std::cout<<" ---  PUERTO  :"<<WtBlackBox::wtServerData::port<<std::endl;
+*/
+
+/*             
+char  *argv[2] =  {"./bbiWeb.wt","client"};
+int argc=2;
+*/
+
+
+       /*      if(Wt::WServer::instance()->isRunning())
+               {
+                       std::cout<<"Checking the existence of a Server deployed  -DELETE THIS MESSAGE bbtkWTBlackBox.cxx"<<std::endl;
+                       Wt::WServer::instance()->stop();
+               }
+       */
+
+
+               std::cout<<"EED WtBlackBox::bbCreateFrameWindow  Deploying Server -- Definition of server parameters by default  -DELETE THIS MESSAGE bbtkWTBlackBox.cxx"<<std::endl;
+
+
+//             Wt::WRun(argc,argv,&createApplication); 
+
+               Wt::WRun(WtBlackBox::wtServerData::argc,
+                         WtBlackBox::wtServerData::argv,
+                         &createApplication);  
+
+
+   }
+
+  //==================================================================    
+
+  //==================================================================    
+  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();
+
+
+               Wt::WRun(WtBlackBox::wtServerData::argc,
+                         WtBlackBox::wtServerData::argv,
+                         &createApplication);  
+
+
+           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);
+
+  }
+
+
+//==================================================================    
+       void WtBlackBox::bbwtUpdateInputs()
+       {
+               BlackBox::bbUpdateInputs();
+       }
+
+//==================================================================    
+       void WtBlackBox::bbwtProcess()
+       {
+               BlackBox::bbProcess();
+       }
+
+
+
+}//namespace bbtk
+
+#endif
+
+