]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxBlackBox.cxx
efdaa1946221dbe11fddab5d9de4cc4e4bc88565
[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      //==================================================================
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     b->bbUserCreateWidget(this);
115     wxWindow* widget = b->bbGetOutputWidget();
116     sizer->Add( widget, 1, wxALL|wxGROW, 2);
117     SetSizer(sizer);
118     Layout();
119   }
120   //==================================================================
121   //==================================================================
122   WxFrame::~WxFrame() 
123     { 
124       if (mBox.lock())
125         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
126                          <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
127                          <<std::endl);
128       else 
129         bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
130       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
131       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
132       Wx::DecNbWindowsAlive();
133     }
134    //==================================================================
135    //==================================================================
136   void WxFrame::OnCloseWindow(wxCloseEvent& event)
137     {
138       if (mBox.lock())
139         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
140                          <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
141       else
142         bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
143                          <<std::endl);
144       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
145       Wx::DecNbWindowsAlive();
146       
147         bbtkDebugMessage("widget",9,
148                          "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
149         //      this->Destroy();
150     }
151    //==================================================================
152
153   //=========================================================================
154   // WxDialog
155   //=========================================================================
156
157    //==================================================================
158   // Dialog window which is modal
159   class BBTK_EXPORT  WxDialog : public wxDialog
160   {
161   public:
162     WxDialog(WxBlackBox::Pointer box, 
163                      wxWindow *parent, 
164                      wxString title, 
165                      wxSize size);
166     ~WxDialog();
167     void OnCloseWindow(wxCloseEvent& event);
168
169
170     WxBlackBox::WeakPointer mBox;      
171     DECLARE_EVENT_TABLE();
172     
173   };
174   
175   BEGIN_EVENT_TABLE(WxDialog, wxDialog)
176     EVT_CLOSE(WxDialog::OnCloseWindow)
177     END_EVENT_TABLE();
178   //=========================================================================
179
180   //=========================================================================
181   WxDialog::WxDialog(WxBlackBox::Pointer b,
182                      wxWindow *parent,
183                      wxString title,
184                      wxSize size)
185     :
186     wxDialog( parent, 
187                 -1, 
188                 title,
189                 wxDefaultPosition,
190                 size,
191                 wxRESIZE_BORDER | 
192                 wxSYSTEM_MENU  |
193                 wxCLOSE_BOX |
194                 wxMAXIMIZE_BOX | 
195                 wxMINIMIZE_BOX | 
196                 wxCAPTION  
197               ),
198     mBox(b)
199   {
200                 
201     bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
202                      <<std::endl);
203     Wx::IncNbWindowsAlive();
204     b->bbSetWindow(this);
205     // Insert the widget into the window
206     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
207     b->bbUserCreateWidget(this);
208     wxWindow* widget = b->bbGetOutputWidget();
209     sizer->Add( widget, 1, wxALL|wxGROW, 2);
210     SetSizer(sizer);
211     Layout();
212   }
213   //==================================================================
214   //==================================================================
215   WxDialog::~WxDialog() 
216     { 
217       bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
218       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
219       //      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
220       //      Wx::DecNbWindowsAlive();
221     }
222    //==================================================================
223    //==================================================================
224   void WxDialog::OnCloseWindow(wxCloseEvent& event)
225     {
226       bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
227       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
228       Wx::DecNbWindowsAlive();
229       this->Destroy();
230     }
231    //==================================================================
232
233
234  //=========================================================================
235   // WxBlackBox
236   //=========================================================================
237
238   //=========================================================================
239   //=========================================================================
240   //=========================================================================
241   //=========================================================================
242   BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
243   //=========================================================================
244   
245   //=========================================================================
246   void WxBlackBox::bbUserSetDefaultValues()
247   {
248     bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
249     bbmWindow = 0;
250   }
251   //=========================================================================
252
253   //=========================================================================
254   void WxBlackBox::bbUserInitializeProcessing()
255   {
256   }
257   //==================================================================    
258
259   //=========================================================================
260   void WxBlackBox::bbUserFinalizeProcessing()
261   {
262     bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
263     bbDestroyWindow();
264     bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
265   }
266   //==================================================================    
267
268   //==================================================================    
269   /// Callback for creating a Dialog window (modal)
270   void WxBlackBox::bbCreateDialogWindow()
271   {
272   bbtkBlackBoxDebugMessage("widget",3,
273                      "==> WxBlackBox::bbCreateDialogWindow() - parent = "
274                      <<Wx::GetTopWindow()
275                      <<std::endl);
276     WxDialog* w = 0;  
277     w = new WxDialog( GetThisPointer<WxBlackBox>(),
278                       Wx::GetTopWindow(),
279                       std2wx( bbGetInputWinTitle()  
280                               + " - bbtk (c) CREATIS"),
281                       wxSize( bbGetInputWinWidth() , 
282                               bbGetInputWinHeight() ) );
283     w->Show(false);
284     //    w->ShowModal();
285   } 
286   //=========================================================================
287
288   //==================================================================    
289
290   //==================================================================    
291   /// Callback for creating a Frame window 
292   void WxBlackBox::bbCreateFrameWindow()
293   {
294     bbtkBlackBoxDebugMessage("widget",3,
295                      "==> WxBlackBox::bbCreateFrameWindow() - parent = "
296                      <<Wx::GetTopWindow()
297                      <<std::endl);
298     WxFrame* w = 0;  
299     w = new WxFrame( GetThisPointer<WxBlackBox>(),
300                      Wx::GetTopWindow(),
301                      std2wx( bbGetInputWinTitle()  
302                              + " - bbtk (c) CREATIS"),
303                      wxSize( bbGetInputWinWidth() , 
304                              bbGetInputWinHeight() ) );
305     std::cout<<"--!!--JFGA Testing bbCreateFrameWindow "<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
306     w->Show();
307    }
308
309   //==================================================================    
310
311   //==================================================================    
312   void WxBlackBox::bbSetWindow(wxWindow* w) 
313   {
314     bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
315     if ((bbmWindow != 0)&&(w!=0)) 
316       { 
317         std::cout << "ERRRRRRRROOOOR"<<std::endl; 
318       }
319                 std::cout<<"SetWindow   DELETE ME bbtkWxBlackBox.cxx ------"<<std::endl;
320                 std::cout<<"WINDOW     :  "<<bbtk::wx2std(w->GetName())<<std::endl;
321     bbmWindow = w;
322   }
323   //==================================================================    
324
325   //==================================================================    
326   void WxBlackBox::bbShowWindow()
327   {
328          std::cout<<"--!!--JFGA Testing bbShowWindow PRE IF "<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
329     if ((bbmWindow) && (!bbIsShown()))
330       {
331         bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
332                          <<std::endl);
333         if (bbGetInputWinDialog()) 
334           {
335             ((WxDialog*)bbmWindow)->ShowModal();
336           }
337         else    
338           {
339             std::cout<<"--!!--JFGA Testing bbShowWindow "<<bbGetInputWinTitle()<<"......!! D E L E T  M E !! bbtkWxBlackBox.cxx"<<std::endl;
340             bbGetWindow()->Show();
341             bbSetShown(true);
342           } 
343       }
344   }
345   //==================================================================    
346
347   //==================================================================    
348   void WxBlackBox::bbDestroyWindow()
349   {
350     bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
351     if (bbGetWindow()!=NULL) 
352       {
353         //       wxWindow* w = bbGetWindow();
354         //bbSetWindow(0);
355         // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
356         // HOWEVER I
357         //w->Close(true);
358         //
359         delete bbGetWindow();
360         bbSetShown(false);
361       }
362     bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
363
364   }
365   //==================================================================    
366
367 }//namespace bbtk
368
369 #endif
370