]> Creatis software - bbtk.git/blob - kernel/src/bbtkWxBlackBox.cxx
Disclaimers
[bbtk.git] / kernel / src / bbtkWxBlackBox.cxx
1 /*=========================================================================                                                                               
2   Program:   bbtk
3   Module:    $RCSfile: bbtkWxBlackBox.cxx,v $
4   Language:  C++
5   Date:      $Date: 2010/01/14 13:17:27 $
6   Version:   $Revision: 1.43 $
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 #ifdef _USE_WXWIDGETS_
32
33 /**
34  *  \file 
35  *  \brief 
36  */
37  
38 #include "bbtkWxBlackBox.h"
39 #include "bbtkBlackBoxOutputConnector.h"
40
41 //#include "bbtkWxContainerBlackBox.h"
42 #include <wx/dialog.h>
43
44 //#include "bbtkData.h"
45 //#include "bbtkFactory.h"
46
47 namespace bbtk
48 {
49   //=========================================================================
50   // WxFrame
51   //=========================================================================
52
53   //==================================================================
54   class WxFrame : public wxFrame
55   {
56   public:
57     WxFrame(WxBlackBox::Pointer b,
58             wxWindow *parent,
59             wxString title,
60             wxSize size);
61     ~WxFrame();
62     void OnCloseWindow(wxCloseEvent& event);
63
64
65     WxBlackBox::WeakPointer mBox;      
66     DECLARE_EVENT_TABLE();
67     
68   };
69   
70   BEGIN_EVENT_TABLE(WxFrame, wxFrame)
71   //  EVT_CLOSE(WxFrame::OnCloseWindow)
72     END_EVENT_TABLE();
73      //==================================================================
74   
75      //==================================================================
76   WxFrame::WxFrame(WxBlackBox::Pointer b,
77                    wxWindow *parent,
78                    wxString title,
79                    wxSize size) 
80     : 
81     wxFrame( parent, 
82              -1, 
83              title,
84              wxDefaultPosition,
85              size,
86              wxRESIZE_BORDER | 
87              wxSYSTEM_MENU  |
88              wxCLOSE_BOX |
89              wxMAXIMIZE_BOX | 
90              wxMINIMIZE_BOX | 
91              wxCAPTION  
92              ),
93     mBox(b)
94   {   
95     bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
96                      <<std::endl);
97     Wx::IncNbWindowsAlive();
98     b->bbSetWindow(this);
99     // Insert the widget into the window
100     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
101     b->bbUserCreateWidget(this);
102     wxWindow* widget = b->bbGetOutputWidget();
103     sizer->Add( widget, 1, wxALL|wxGROW, 2);
104     SetSizer(sizer);
105     Layout();
106   }
107   //==================================================================
108   //==================================================================
109   WxFrame::~WxFrame() 
110     { 
111       if (mBox.lock())
112         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
113                          <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
114                          <<std::endl);
115       else 
116         bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
117       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
118       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
119       Wx::DecNbWindowsAlive();
120     }
121    //==================================================================
122    //==================================================================
123   void WxFrame::OnCloseWindow(wxCloseEvent& event)
124     {
125       if (mBox.lock())
126         bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
127                          <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
128       else
129         bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
130                          <<std::endl);
131       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
132       Wx::DecNbWindowsAlive();
133       
134         bbtkDebugMessage("widget",9,
135                          "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
136         //      this->Destroy();
137     }
138    //==================================================================
139
140   //=========================================================================
141   // WxDialog
142   //=========================================================================
143
144    //==================================================================
145   // Dialog window which is modal
146   class BBTK_EXPORT  WxDialog : public wxDialog
147   {
148   public:
149     WxDialog(WxBlackBox::Pointer box, 
150                      wxWindow *parent, 
151                      wxString title, 
152                      wxSize size);
153     ~WxDialog();
154     void OnCloseWindow(wxCloseEvent& event);
155
156
157     WxBlackBox::WeakPointer mBox;      
158     DECLARE_EVENT_TABLE();
159     
160   };
161   
162   BEGIN_EVENT_TABLE(WxDialog, wxDialog)
163     EVT_CLOSE(WxDialog::OnCloseWindow)
164     END_EVENT_TABLE();
165   //=========================================================================
166
167   //=========================================================================
168   WxDialog::WxDialog(WxBlackBox::Pointer b,
169                      wxWindow *parent,
170                      wxString title,
171                      wxSize size)
172     :
173     wxDialog( parent, 
174                 -1, 
175                 title,
176                 wxDefaultPosition,
177                 size,
178                 wxRESIZE_BORDER | 
179                 wxSYSTEM_MENU  |
180                 wxCLOSE_BOX |
181                 wxMAXIMIZE_BOX | 
182                 wxMINIMIZE_BOX | 
183                 wxCAPTION  
184               ),
185     mBox(b)
186   {
187     bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
188                      <<std::endl);
189     Wx::IncNbWindowsAlive();
190     b->bbSetWindow(this);
191     // Insert the widget into the window
192     wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
193     b->bbUserCreateWidget(this);
194     wxWindow* widget = b->bbGetOutputWidget();
195     sizer->Add( widget, 1, wxALL|wxGROW, 2);
196     SetSizer(sizer);
197     Layout();
198   }
199   //==================================================================
200   //==================================================================
201   WxDialog::~WxDialog() 
202     { 
203       bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
204       //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
205       //      if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
206       //      Wx::DecNbWindowsAlive();
207     }
208    //==================================================================
209    //==================================================================
210   void WxDialog::OnCloseWindow(wxCloseEvent& event)
211     {
212       bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
213       if (mBox.lock()) mBox.lock()->bbSetWindow(0); 
214       Wx::DecNbWindowsAlive();
215       this->Destroy();
216     }
217    //==================================================================
218
219
220  //=========================================================================
221   // WxBlackBox
222   //=========================================================================
223
224   //=========================================================================
225   //=========================================================================
226   //=========================================================================
227   //=========================================================================
228   BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
229   //=========================================================================
230   
231   //=========================================================================
232   void WxBlackBox::bbUserSetDefaultValues()
233   {
234     bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
235     bbmWindow = 0;
236   }
237   //=========================================================================
238
239   //=========================================================================
240   void WxBlackBox::bbUserInitializeProcessing()
241   {
242   }
243   //==================================================================    
244
245   //=========================================================================
246   void WxBlackBox::bbUserFinalizeProcessing()
247   {
248     bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
249     bbDestroyWindow();
250     bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
251   }
252   //==================================================================    
253
254   //==================================================================    
255   /// Callback for creating a Dialog window (modal)
256   void WxBlackBox::bbCreateDialogWindow()
257   {
258   bbtkBlackBoxDebugMessage("widget",3,
259                      "==> WxBlackBox::bbCreateDialogWindow() - parent = "
260                      <<Wx::GetTopWindow()
261                      <<std::endl);
262     WxDialog* w = 0;  
263     w = new WxDialog( GetThisPointer<WxBlackBox>(),
264                       Wx::GetTopWindow(),
265                       std2wx( bbGetInputWinTitle()  
266                               + " - bbtk (c) CREATIS-LRMN"),
267                       wxSize( bbGetInputWinWidth() , 
268                               bbGetInputWinHeight() ) );
269     w->Show(false);
270     //    w->ShowModal();
271   } 
272   //=========================================================================
273
274   //==================================================================    
275
276   //==================================================================    
277   /// Callback for creating a Frame window 
278   void WxBlackBox::bbCreateFrameWindow()
279   {
280     bbtkBlackBoxDebugMessage("widget",3,
281                      "==> WxBlackBox::bbCreateFrameWindow() - parent = "
282                      <<Wx::GetTopWindow()
283                      <<std::endl);
284     WxFrame* w = 0;  
285     w = new WxFrame( GetThisPointer<WxBlackBox>(),
286                      Wx::GetTopWindow(),
287                      std2wx( bbGetInputWinTitle()  
288                              + " - bbtk (c) CREATIS-LRMN"),
289                      wxSize( bbGetInputWinWidth() , 
290                              bbGetInputWinHeight() ) );
291     w->Show();
292    }
293
294   //==================================================================    
295
296   //==================================================================    
297   void WxBlackBox::bbSetWindow(wxWindow* w) 
298   {
299     bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
300     if ((bbmWindow != 0)&&(w!=0)) 
301       { 
302         std::cout << "ERRRRRRRROOOOR"<<std::endl; 
303       }
304     bbmWindow = w;
305   }
306   //==================================================================    
307
308   //==================================================================    
309   void WxBlackBox::bbShowWindow()
310   {
311     if ((bbmWindow) && (!bbIsShown()))
312       {
313         bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
314                          <<std::endl);
315         if (bbGetInputWinDialog()) 
316           {
317             ((WxDialog*)bbmWindow)->ShowModal();
318           }
319         else
320           {
321             bbGetWindow()->Show();
322             bbSetShown(true);
323           } 
324       }
325   }
326   //==================================================================    
327
328   //==================================================================    
329   void WxBlackBox::bbDestroyWindow()
330   {
331     bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
332     if (bbGetWindow()!=NULL) 
333       {
334         //       wxWindow* w = bbGetWindow();
335         //bbSetWindow(0);
336         // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
337         // HOWEVER I
338         //w->Close(true);
339         //
340         delete bbGetWindow();
341         bbSetShown(false);
342       }
343     bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
344
345   }
346   //==================================================================    
347
348 }//namespace bbtk
349
350 #endif
351