]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxBlackBox.cxx
2498 BBTK Feature New Normal wt-version kernel
[bbtk.git] / kernel / src / bbtkWxBlackBox.cxx
1 /*
2  # ---------------------------------------------------------------------
3  #
4  # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
5  #                        pour la SantÈ)
6  # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
7  # Previous Authors : Laurent Guigues, Jean-Pierre Roux
8  # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
9  #
10  #  This software is governed by the CeCILL-B license under French law and
11  #  abiding by the rules of distribution of free software. You can  use,
12  #  modify and/ or redistribute the software under the terms of the CeCILL-B
13  #  license as circulated by CEA, CNRS and INRIA at the following URL
14  #  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
15  #  or in the file LICENSE.txt.
16  #
17  #  As a counterpart to the access to the source code and  rights to copy,
18  #  modify and redistribute granted by the license, users are provided only
19  #  with a limited warranty  and the software's author,  the holder of the
20  #  economic rights,  and the successive licensors  have only  limited
21  #  liability.
22  #
23  #  The fact that you are presently reading this means that you have had
24  #  knowledge of the CeCILL-B license and that you accept its terms.
25  # ------------------------------------------------------------------------ */
26
27
28 /*=========================================================================
29   Program:   bbtk
30   Module:    $RCSfile: bbtkWxBlackBox.cxx,v $
31   Language:  C++
32   Date:      $Date: 2012/11/16 08:49:01 $
33   Version:   $Revision: 1.45 $
34 =========================================================================*/
35
36
37
38 #ifdef _USE_WXWIDGETS_
39
40 /**
41  *  \file 
42  *  \brief 
43  */
44  
45 #include "bbtkWxBlackBox.h"
46 #include "bbtkBlackBoxOutputConnector.h"
47
48 //#include "bbtkWxContainerBlackBox.h"
49 #include <wx/dialog.h>
50
51 //#include "bbtkData.h"
52 //#include "bbtkFactory.h"
53
54 namespace bbtk
55 {
56   //=========================================================================
57   // WxFrame
58   //=========================================================================
59
60   //==================================================================
61   class WxFrame : public wxFrame
62   {
63   public:
64     WxFrame(WxBlackBox::Pointer b,
65             wxWindow *parent,
66             wxString title,
67             wxSize size);
68     ~WxFrame();
69     void OnCloseWindow(wxCloseEvent& event);
70
71
72     WxBlackBox::WeakPointer mBox;      
73     DECLARE_EVENT_TABLE();
74     
75   };
76   
77   BEGIN_EVENT_TABLE(WxFrame, wxFrame)
78   //  EVT_CLOSE(WxFrame::OnCloseWindow)
79     END_EVENT_TABLE();
80      //==========================================Window  ========================
81   
82      //==================================================================
83   WxFrame::WxFrame(WxBlackBox::Pointer b,
84                    wxWindow *parent,
85                    wxString title,
86                    wxSize size) 
87     : 
88     wxFrame( parent, 
89              -1, 
90              title,
91              wxDefaultPosition,
92              size,
93              wxRESIZE_BORDER | 
94              wxSYSTEM_MENU  |
95              wxCLOSE_BOX |
96              wxMAXIMIZE_BOX | 
97              wxMINIMIZE_BOX | 
98              wxCAPTION  
99              ),
100     mBox(b)
101   {   
102                 std::cout<<"Creando Widget DELETE ME bbtkWxBlackBox.cxx--"<<std::endl;
103                 std::cout<<"NAME :  "<<bbtk::wx2std(title);
104                 if(parent)
105                         std::cout<<"PARENT :   "<<bbtk::wx2std(parent->GetName())<<std::endl;
106                 else
107                         std::cout<<"        SIN PADRE "<<std::endl;
108     bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
109                      <<std::endl);
110     Wx::IncNbWindowsAlive();
111     b->bbSetWindow(this);
112     // Insert the widget into the window
113     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
114         std::cout<<"------------------------------------USER CREATE WIDGET pre DELETE ME bbtkWxBlackBox.cxx--"<<std::endl;
115     b->bbUserCreateWidget(this);
116         std::cout<<"------------------------------------USER CREATE WIDGET post DELETE ME bbtkWxBlackBox.cxx--"<<std::endl;
117     wxWindow* widget = b->bbGetOutputWidget();
118     sizer->Add( widget, 1, wxALL|wxGROW, 2);
119     SetSizer(sizer);
120     Layout();
121   }
122   //==================================================================
123   //==================================================================
124   WxFrame::~WxFrame() 
125     { 
126       if (mBox.lock())
127         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
128                          <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
129                          <<std::endl);
130       else 
131         bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
132       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
133       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
134       Wx::DecNbWindowsAlive();
135     }
136    //==================================================================
137    //==================================================================
138   void WxFrame::OnCloseWindow(wxCloseEvent& event)
139     {
140       if (mBox.lock())
141         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
142                          <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
143       else
144         bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
145                          <<std::endl);
146       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
147       Wx::DecNbWindowsAlive();
148       
149         bbtkDebugMessage("widget",9,
150                          "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
151         //      this->Destroy();
152     }
153    //==================================================================
154
155   //====================================================SetWin=====================
156   // WxDialog
157   //=========================================================================
158
159    //==================================================================
160   // Dialog window which is modal
161   class BBTK_EXPORT  WxDialog : public wxDialog
162   {
163   public:
164     WxDialog(WxBlackBox::Pointer box, 
165                      wxWindow *parent, 
166                      wxString title, 
167                      wxSize size);
168     ~WxDialog();
169     void OnCloseWindow(wxCloseEvent& event);
170
171
172     WxBlackBox::WeakPointer mBox;      
173     DECLARE_EVENT_TABLE();
174     
175   };
176   
177   BEGIN_EVENT_TABLE(WxDialog, wxDialog)
178     EVT_CLOSE(WxDialog::OnCloseWindow)
179     END_EVENT_TABLE();
180   //=========================================================================
181
182   //=========================================================================
183   WxDialog::WxDialog(WxBlackBox::Pointer b,
184                      wxWindow *parent,
185                      wxString title,
186                      wxSize size)
187     :
188     wxDialog( parent, 
189                 -1, 
190                 title,
191                 wxDefaultPosition,
192                 size,
193                 wxRESIZE_BORDER | 
194                 wxSYSTEM_MENU  |
195                 wxCLOSE_BOX |
196                 wxMAXIMIZE_BOX | 
197                 wxMINIMIZE_BOX | 
198                 wxCAPTION  
199               ),
200     mBox(b)
201   {
202                 
203     bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
204                      <<std::endl);
205     Wx::IncNbWindowsAlive();
206     b->bbSetWindow(this);
207     // Insert the widget into the window
208     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
209     b->bbUserCreateWidget(this);
210     wxWindow* widget = b->bbGetOutputWidget();
211     sizer->Add( widget, 1, wxALL|wxGROW, 2);
212     SetSizer(sizer);
213     Layout();
214   }
215   //==================================================================
216   //==================================================================
217   WxDialog::~WxDialog() 
218     { 
219       bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
220       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
221       //      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
222       //      Wx::DecNbWindowsAlive();
223     }
224    //==================================================================
225    //==================================================================
226   void WxDialog::OnCloseWindow(wxCloseEvent& event)
227     {
228       bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
229       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
230       Wx::DecNbWindowsAlive();
231       this->Destroy();
232     }
233    //==================================================================
234
235
236  //=========================================================================
237   // WxBlackBox
238   //=========================================================================
239
240   //=========================================================================
241   //=========================================================================
242   //=========================================================================
243   //=========================================================================
244   BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
245   //=========================================================================
246   
247   //=========================================================================
248   void WxBlackBox::bbUserSetDefaultValues()
249   {
250     bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
251     bbmWindow = 0;  
252   }
253   //=========================================================================
254
255   //=========================================================================
256   void WxBlackBox::bbUserInitializeProcessing()
257   {
258   }
259   //==================================================================    
260
261   //=========================================================================
262   void WxBlackBox::bbUserFinalizeProcessing()
263   {
264     bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
265     bbDestroyWindow();
266     bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
267   }
268   //==================================================================    
269
270   //==================================================================    
271   /// Callback for creating a Dialog window (modal)
272   void WxBlackBox::bbCreateDialogWindow()
273   {
274   bbtkBlackBoxDebugMessage("widget",3,
275                      "==> WxBlackBox::bbCreateDialogWindow() - parent = "
276                      <<Wx::GetTopWindow()
277                      <<std::endl);
278     WxDialog* w = 0;  
279     w = new WxDialog( GetThisPointer<WxBlackBox>(),
280                       Wx::GetTopWindow(),
281                       std2wx( bbGetInputWinTitle()  
282                               + " - bbtk (c) CREATIS"),
283                       wxSize( bbGetInputWinWidth() , 
284                               bbGetInputWinHeight() ) );
285     w->Show(false);
286     //    w->ShowModal();
287   } 
288   //=========================================================================
289
290   //==================================================================    
291
292   //==================================================================    
293   /// Callback for creating a Frame window 
294   void WxBlackBox::bbCreateFrameWindow()
295   {
296     std::cout<<"--/////////////*****////////////////--JFGA Testing bbCreateFrameWindow Starting ....."<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
297     bbtkBlackBoxDebugMessage("widget",3,
298                      "==> WxBlackBox::bbCreateFrameWindow() - parent = "
299                      <<Wx::GetTopWindow()
300                      <<std::endl);
301     WxFrame* w = 0;  
302     w = new WxFrame( GetThisPointer<WxBlackBox>(),
303                      Wx::GetTopWindow(),
304                      std2wx( bbGetInputWinTitle()  
305                              + " - bbtk (c) CREATIS"),
306                      wxSize( bbGetInputWinWidth() , 
307                              bbGetInputWinHeight() ) );
308     std::cout<<"--/////////////*****////////////////!!--JFGA Testing bbCreateFrameWindow Done ........"<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
309     w->Show();
310    }
311
312   //==================================================================    
313
314   //==================================================================    
315   void WxBlackBox::bbSetWindow(wxWindow* w) 
316   {
317     bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
318     if ((bbmWindow != 0)&&(w!=0)) 
319       { 
320         std::cout << "ERRRRRRRROOOOR"<<std::endl; 
321       }
322                 std::cout<<"SetWindow   DELETE ME bbtkWxBlackBox.cxx ------"<<std::endl;
323                 std::cout<<"WINDOW     :  "<<bbtk::wx2std(w->GetName())<<std::endl;
324     bbmWindow = w;
325   }
326   //==================================================================    
327
328   //==================================================================    
329   void WxBlackBox::bbShowWindow()
330   {
331          std::cout<<"--!!--JFGA Testing bbShowWindow PRE IF "<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
332     if ((bbmWindow) && (!bbIsShown()))
333       {
334         bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
335                          <<std::endl);
336         if (bbGetInputWinDialog()) 
337           {
338             ((WxDialog*)bbmWindow)->ShowModal();
339           }
340         else    
341           {
342             std::cout<<"--!!--JFGA Testing bbShowWindow "<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
343             bbGetWindow()->Show();
344             bbSetShown(true);
345           } 
346       }
347   }
348   //==================================================================    
349
350   //==================================================================    
351   void WxBlackBox::bbDestroyWindow()
352   {
353     bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
354     if (bbGetWindow()!=NULL) 
355       {
356         //       wxWindow* w = bbGetWindow();
357         //bbSetWindow(0);
358         // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
359         // HOWEVER I
360         //w->Close(true);
361         //
362         delete bbGetWindow();
363         bbSetShown(false);
364       }
365     bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
366
367   }
368   //==================================================================    
369
370 }//namespace bbtk
371
372 #endif
373