]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxBlackBox.cxx
Qt black boxes updated
[bbtk.git] / kernel / src / bbtkWxBlackBox.cxx
1 /*=========================================================================                                                                               
2   Program:   bbtk
3   Module:    $RCSfile: bbtkWxBlackBox.cxx,v $
4   Language:  C++
5   Date:      $Date: 2009/05/28 14:22:11 $
6   Version:   $Revision: 1.42 $
7 =========================================================================*/
8
9 /* ---------------------------------------------------------------------
10
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
13 *
14 *  This software is governed by the CeCILL-B license under French law and 
15 *  abiding by the rules of distribution of free software. You can  use, 
16 *  modify and/ or redistribute the software under the terms of the CeCILL-B 
17 *  license as circulated by CEA, CNRS and INRIA at the following URL 
18 *  http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html 
19 *  or in the file LICENSE.txt.
20 *
21 *  As a counterpart to the access to the source code and  rights to copy,
22 *  modify and redistribute granted by the license, users are provided only
23 *  with a limited warranty  and the software's author,  the holder of the
24 *  economic rights,  and the successive licensors  have only  limited
25 *  liability. 
26 *
27 *  The fact that you are presently reading this means that you have had
28 *  knowledge of the CeCILL-B license and that you accept its terms.
29 * ------------------------------------------------------------------------ */                                                                         
30
31
32 #ifdef _USE_WXWIDGETS_
33
34
35
36 /**
37  *  \file 
38  *  \brief 
39  */
40  
41 #include "bbtkWxBlackBox.h"
42 #include "bbtkBlackBoxOutputConnector.h"
43
44 //#include "bbtkWxContainerBlackBox.h"
45 #include <wx/dialog.h>
46
47 //#include "bbtkData.h"
48 //#include "bbtkFactory.h"
49
50
51
52
53 namespace bbtk
54 {
55
56
57
58  
59
60   //=========================================================================
61   // WxFrame
62   //=========================================================================
63
64   //==================================================================
65   class WxFrame : public wxFrame
66   {
67   public:
68     WxFrame(WxBlackBox::Pointer b,
69             wxWindow *parent,
70             wxString title,
71             wxSize size);
72     ~WxFrame();
73     void OnCloseWindow(wxCloseEvent& event);
74
75
76     WxBlackBox::WeakPointer mBox;      
77     DECLARE_EVENT_TABLE();
78     
79   };
80   
81   BEGIN_EVENT_TABLE(WxFrame, wxFrame)
82   //  EVT_CLOSE(WxFrame::OnCloseWindow)
83     END_EVENT_TABLE();
84      //==================================================================
85   
86      //==================================================================
87   WxFrame::WxFrame(WxBlackBox::Pointer b,
88                    wxWindow *parent,
89                    wxString title,
90                    wxSize size) 
91     : 
92     wxFrame( parent, 
93              -1, 
94              title,
95              wxDefaultPosition,
96              size,
97              wxRESIZE_BORDER | 
98              wxSYSTEM_MENU  |
99              wxCLOSE_BOX |
100              wxMAXIMIZE_BOX | 
101              wxMINIMIZE_BOX | 
102              wxCAPTION  
103              ),
104     mBox(b)
105   {   
106     bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
107                      <<std::endl);
108     Wx::IncNbWindowsAlive();
109     b->bbSetWindow(this);
110     // Insert the widget into the window
111     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
112     b->bbUserCreateWidget(this);
113     wxWindow* widget = b->bbGetOutputWidget();
114     sizer->Add( widget, 1, wxALL|wxGROW, 2);
115     SetSizer(sizer);
116     Layout();
117   }
118   //==================================================================
119   //==================================================================
120   WxFrame::~WxFrame() 
121     { 
122       if (mBox.lock())
123         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
124                          <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
125                          <<std::endl);
126       else 
127         bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
128       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
129       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
130       Wx::DecNbWindowsAlive();
131     }
132    //==================================================================
133    //==================================================================
134   void WxFrame::OnCloseWindow(wxCloseEvent& event)
135     {
136       if (mBox.lock())
137         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
138                          <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
139       else
140         bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
141                          <<std::endl);
142       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
143       Wx::DecNbWindowsAlive();
144       
145         bbtkDebugMessage("widget",9,
146                          "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
147         //      this->Destroy();
148     }
149    //==================================================================
150
151
152
153
154
155   //=========================================================================
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     bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
203                      <<std::endl);
204     Wx::IncNbWindowsAlive();
205     b->bbSetWindow(this);
206     // Insert the widget into the window
207     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
208     b->bbUserCreateWidget(this);
209     wxWindow* widget = b->bbGetOutputWidget();
210     sizer->Add( widget, 1, wxALL|wxGROW, 2);
211     SetSizer(sizer);
212     Layout();
213   }
214   //=========================================================================
215   //==================================================================
216   WxDialog::~WxDialog() 
217     { 
218       bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
219       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
220       //      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
221       //      Wx::DecNbWindowsAlive();
222     }
223    //==================================================================
224    //==================================================================
225   void WxDialog::OnCloseWindow(wxCloseEvent& event)
226     {
227       bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
228       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
229       Wx::DecNbWindowsAlive();
230       this->Destroy();
231     }
232    //==================================================================
233
234
235
236
237
238
239
240  //=========================================================================
241   // WxBlackBox
242   //=========================================================================
243
244   //=========================================================================
245   //=========================================================================
246   //=========================================================================
247   //=========================================================================
248   BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
249   //=========================================================================
250   
251   //=========================================================================
252   void WxBlackBox::bbUserSetDefaultValues()
253   {
254     bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
255     bbmWindow = 0;
256   }
257   //=========================================================================
258
259   //=========================================================================
260   void WxBlackBox::bbUserInitializeProcessing()
261   {
262   }
263   //==================================================================    
264
265   //=========================================================================
266   void WxBlackBox::bbUserFinalizeProcessing()
267   {
268     bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
269     bbDestroyWindow();
270     bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
271   }
272   //==================================================================    
273
274   //==================================================================    
275   /// Callback for creating a Dialog window (modal)
276   void WxBlackBox::bbCreateDialogWindow()
277   {
278   bbtkBlackBoxDebugMessage("widget",3,
279                      "==> WxBlackBox::bbCreateDialogWindow() - parent = "
280                      <<Wx::GetTopWindow()
281                      <<std::endl);
282     WxDialog* w = 0;  
283     w = new WxDialog( GetThisPointer<WxBlackBox>(),
284                       Wx::GetTopWindow(),
285                       std2wx( bbGetInputWinTitle()  
286                               + " - bbtk (c) CREATIS-LRMN"),
287                       wxSize( bbGetInputWinWidth() , 
288                               bbGetInputWinHeight() ) );
289     w->Show(false);
290     //    w->ShowModal();
291   } 
292   //=========================================================================
293
294   //==================================================================    
295
296   //==================================================================    
297   /// Callback for creating a Frame window 
298   void WxBlackBox::bbCreateFrameWindow()
299   {
300     bbtkBlackBoxDebugMessage("widget",3,
301                      "==> WxBlackBox::bbCreateFrameWindow() - parent = "
302                      <<Wx::GetTopWindow()
303                      <<std::endl);
304     WxFrame* w = 0;  
305     w = new WxFrame( GetThisPointer<WxBlackBox>(),
306                      Wx::GetTopWindow(),
307                      std2wx( bbGetInputWinTitle()  
308                              + " - bbtk (c) CREATIS-LRMN"),
309                      wxSize( bbGetInputWinWidth() , 
310                              bbGetInputWinHeight() ) );
311     w->Show();
312    }
313   //==================================================================    
314
315   //==================================================================    
316   void WxBlackBox::bbSetWindow(wxWindow* w) 
317   {
318     bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
319     if ((bbmWindow != 0)&&(w!=0)) 
320       { 
321         std::cout << "ERRRRRRRROOOOR"<<std::endl; 
322       }
323     bbmWindow = w;
324   }
325   //==================================================================    
326
327   //==================================================================    
328   void WxBlackBox::bbShowWindow()
329   {
330     if ((bbmWindow) && (!bbIsShown()))
331       {
332         bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
333                          <<std::endl);
334         if (bbGetInputWinDialog()) 
335           {
336             ((WxDialog*)bbmWindow)->ShowModal();
337           }
338         else
339           {
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
368
369 }//namespace bbtk
370
371
372 #endif
373