bbtkWxBlackBox.cxx

Go to the documentation of this file.
00001 /*=========================================================================                                                                               
00002   Program:   bbtk
00003   Module:    $RCSfile: bbtkWxBlackBox.cxx,v $
00004   Language:  C++
00005   Date:      $Date: 2010/01/14 13:17:27 $
00006   Version:   $Revision: 1.43 $
00007 =========================================================================*/
00008 
00009 /* ---------------------------------------------------------------------
00010 
00011 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
00012 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
00013 *
00014 *  This software is governed by the CeCILL-B license under French law and 
00015 *  abiding by the rules of distribution of free software. You can  use, 
00016 *  modify and/ or redistribute the software under the terms of the CeCILL-B 
00017 *  license as circulated by CEA, CNRS and INRIA at the following URL 
00018 *  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
00019 *  or in the file LICENSE.txt.
00020 *
00021 *  As a counterpart to the access to the source code and  rights to copy,
00022 *  modify and redistribute granted by the license, users are provided only
00023 *  with a limited warranty  and the software's author,  the holder of the
00024 *  economic rights,  and the successive licensors  have only  limited
00025 *  liability. 
00026 *
00027 *  The fact that you are presently reading this means that you have had
00028 *  knowledge of the CeCILL-B license and that you accept its terms.
00029 * ------------------------------------------------------------------------ */                                                                         
00030 
00031 #ifdef _USE_WXWIDGETS_
00032 
00038 #include "bbtkWxBlackBox.h"
00039 #include "bbtkBlackBoxOutputConnector.h"
00040 
00041 //#include "bbtkWxContainerBlackBox.h"
00042 #include <wx/dialog.h>
00043 
00044 //#include "bbtkData.h"
00045 //#include "bbtkFactory.h"
00046 
00047 namespace bbtk
00048 {
00049   //=========================================================================
00050   // WxFrame
00051   //=========================================================================
00052 
00053   //==================================================================
00054   class WxFrame : public wxFrame
00055   {
00056   public:
00057     WxFrame(WxBlackBox::Pointer b,
00058             wxWindow *parent,
00059             wxString title,
00060             wxSize size);
00061     ~WxFrame();
00062     void OnCloseWindow(wxCloseEvent& event);
00063 
00064 
00065     WxBlackBox::WeakPointer mBox;      
00066     DECLARE_EVENT_TABLE();
00067     
00068   };
00069   
00070   BEGIN_EVENT_TABLE(WxFrame, wxFrame)
00071   //  EVT_CLOSE(WxFrame::OnCloseWindow)
00072     END_EVENT_TABLE();
00073      //==================================================================
00074   
00075      //==================================================================
00076   WxFrame::WxFrame(WxBlackBox::Pointer b,
00077                    wxWindow *parent,
00078                    wxString title,
00079                    wxSize size) 
00080     : 
00081     wxFrame( parent, 
00082              -1, 
00083              title,
00084              wxDefaultPosition,
00085              size,
00086              wxRESIZE_BORDER | 
00087              wxSYSTEM_MENU  |
00088              wxCLOSE_BOX |
00089              wxMAXIMIZE_BOX | 
00090              wxMINIMIZE_BOX | 
00091              wxCAPTION  
00092              ),
00093     mBox(b)
00094   {   
00095     bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
00096                      <<std::endl);
00097     Wx::IncNbWindowsAlive();
00098     b->bbSetWindow(this);
00099     // Insert the widget into the window
00100     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00101     b->bbUserCreateWidget(this);
00102     wxWindow* widget = b->bbGetOutputWidget();
00103     sizer->Add( widget, 1, wxALL|wxGROW, 2);
00104     SetSizer(sizer);
00105     Layout();
00106   }
00107   //==================================================================
00108   //==================================================================
00109   WxFrame::~WxFrame() 
00110     { 
00111       if (mBox.lock())
00112         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
00113                          <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
00114                          <<std::endl);
00115       else 
00116         bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
00117       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
00118       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
00119       Wx::DecNbWindowsAlive();
00120     }
00121    //==================================================================
00122    //==================================================================
00123   void WxFrame::OnCloseWindow(wxCloseEvent& event)
00124     {
00125       if (mBox.lock())
00126         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
00127                          <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
00128       else
00129         bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
00130                          <<std::endl);
00131       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
00132       Wx::DecNbWindowsAlive();
00133       
00134         bbtkDebugMessage("widget",9,
00135                          "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
00136         //      this->Destroy();
00137     }
00138    //==================================================================
00139 
00140   //=========================================================================
00141   // WxDialog
00142   //=========================================================================
00143 
00144    //==================================================================
00145   // Dialog window which is modal
00146   class BBTK_EXPORT  WxDialog : public wxDialog
00147   {
00148   public:
00149     WxDialog(WxBlackBox::Pointer box, 
00150                      wxWindow *parent, 
00151                      wxString title, 
00152                      wxSize size);
00153     ~WxDialog();
00154     void OnCloseWindow(wxCloseEvent& event);
00155 
00156 
00157     WxBlackBox::WeakPointer mBox;      
00158     DECLARE_EVENT_TABLE();
00159     
00160   };
00161   
00162   BEGIN_EVENT_TABLE(WxDialog, wxDialog)
00163     EVT_CLOSE(WxDialog::OnCloseWindow)
00164     END_EVENT_TABLE();
00165   //=========================================================================
00166 
00167   //=========================================================================
00168   WxDialog::WxDialog(WxBlackBox::Pointer b,
00169                      wxWindow *parent,
00170                      wxString title,
00171                      wxSize size)
00172     :
00173     wxDialog( parent, 
00174                 -1, 
00175                 title,
00176                 wxDefaultPosition,
00177                 size,
00178                 wxRESIZE_BORDER | 
00179                 wxSYSTEM_MENU  |
00180                 wxCLOSE_BOX |
00181                 wxMAXIMIZE_BOX | 
00182                 wxMINIMIZE_BOX | 
00183                 wxCAPTION  
00184               ),
00185     mBox(b)
00186   {
00187     bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
00188                      <<std::endl);
00189     Wx::IncNbWindowsAlive();
00190     b->bbSetWindow(this);
00191     // Insert the widget into the window
00192     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
00193     b->bbUserCreateWidget(this);
00194     wxWindow* widget = b->bbGetOutputWidget();
00195     sizer->Add( widget, 1, wxALL|wxGROW, 2);
00196     SetSizer(sizer);
00197     Layout();
00198   }
00199   //==================================================================
00200   //==================================================================
00201   WxDialog::~WxDialog() 
00202     { 
00203       bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
00204       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
00205       //      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
00206       //      Wx::DecNbWindowsAlive();
00207     }
00208    //==================================================================
00209    //==================================================================
00210   void WxDialog::OnCloseWindow(wxCloseEvent& event)
00211     {
00212       bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
00213       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
00214       Wx::DecNbWindowsAlive();
00215       this->Destroy();
00216     }
00217    //==================================================================
00218 
00219 
00220  //=========================================================================
00221   // WxBlackBox
00222   //=========================================================================
00223 
00224   //=========================================================================
00225   //=========================================================================
00226   //=========================================================================
00227   //=========================================================================
00228   BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
00229   //=========================================================================
00230   
00231   //=========================================================================
00232   void WxBlackBox::bbUserSetDefaultValues()
00233   {
00234     bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
00235     bbmWindow = 0;
00236   }
00237   //=========================================================================
00238 
00239   //=========================================================================
00240   void WxBlackBox::bbUserInitializeProcessing()
00241   {
00242   }
00243   //==================================================================    
00244 
00245   //=========================================================================
00246   void WxBlackBox::bbUserFinalizeProcessing()
00247   {
00248     bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
00249     bbDestroyWindow();
00250     bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
00251   }
00252   //==================================================================    
00253 
00254   //==================================================================    
00256   void WxBlackBox::bbCreateDialogWindow()
00257   {
00258   bbtkBlackBoxDebugMessage("widget",3,
00259                      "==> WxBlackBox::bbCreateDialogWindow() - parent = "
00260                      <<Wx::GetTopWindow()
00261                      <<std::endl);
00262     WxDialog* w = 0;  
00263     w = new WxDialog( GetThisPointer<WxBlackBox>(),
00264                       Wx::GetTopWindow(),
00265                       std2wx( bbGetInputWinTitle()  
00266                               + " - bbtk (c) CREATIS-LRMN"),
00267                       wxSize( bbGetInputWinWidth() , 
00268                               bbGetInputWinHeight() ) );
00269     w->Show(false);
00270     //    w->ShowModal();
00271   } 
00272   //=========================================================================
00273 
00274   //==================================================================    
00275 
00276   //==================================================================    
00278   void WxBlackBox::bbCreateFrameWindow()
00279   {
00280     bbtkBlackBoxDebugMessage("widget",3,
00281                      "==> WxBlackBox::bbCreateFrameWindow() - parent = "
00282                      <<Wx::GetTopWindow()
00283                      <<std::endl);
00284     WxFrame* w = 0;  
00285     w = new WxFrame( GetThisPointer<WxBlackBox>(),
00286                      Wx::GetTopWindow(),
00287                      std2wx( bbGetInputWinTitle()  
00288                              + " - bbtk (c) CREATIS-LRMN"),
00289                      wxSize( bbGetInputWinWidth() , 
00290                              bbGetInputWinHeight() ) );
00291     w->Show();
00292    }
00293 
00294   //==================================================================    
00295 
00296   //==================================================================    
00297   void WxBlackBox::bbSetWindow(wxWindow* w) 
00298   {
00299     bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
00300     if ((bbmWindow != 0)&&(w!=0)) 
00301       { 
00302         std::cout << "ERRRRRRRROOOOR"<<std::endl; 
00303       }
00304     bbmWindow = w;
00305   }
00306   //==================================================================    
00307 
00308   //==================================================================    
00309   void WxBlackBox::bbShowWindow()
00310   {
00311     if ((bbmWindow) && (!bbIsShown()))
00312       {
00313         bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
00314                          <<std::endl);
00315         if (bbGetInputWinDialog()) 
00316           {
00317             ((WxDialog*)bbmWindow)->ShowModal();
00318           }
00319         else
00320           {
00321             bbGetWindow()->Show();
00322             bbSetShown(true);
00323           } 
00324       }
00325   }
00326   //==================================================================    
00327 
00328   //==================================================================    
00329   void WxBlackBox::bbDestroyWindow()
00330   {
00331     bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
00332     if (bbGetWindow()!=NULL) 
00333       {
00334         //       wxWindow* w = bbGetWindow();
00335         //bbSetWindow(0);
00336         // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
00337         // HOWEVER I
00338         //w->Close(true);
00339         //
00340         delete bbGetWindow();
00341         bbSetShown(false);
00342       }
00343     bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
00344 
00345   }
00346   //==================================================================    
00347 
00348 }//namespace bbtk
00349 
00350 #endif
00351 

Generated on Thu May 31 14:12:03 2012 for BBTK by  doxygen 1.5.7.1