1 /*=========================================================================
3 Module: $RCSfile: bbtkWxBlackBox.cxx,v $
5 Date: $Date: 2010/01/14 13:17:27 $
6 Version: $Revision: 1.43 $
7 =========================================================================*/
9 /* ---------------------------------------------------------------------
11 * Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
12 * Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
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.
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
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 * ------------------------------------------------------------------------ */
31 #ifdef _USE_WXWIDGETS_
38 #include "bbtkWxBlackBox.h"
39 #include "bbtkBlackBoxOutputConnector.h"
41 //#include "bbtkWxContainerBlackBox.h"
42 #include <wx/dialog.h>
44 //#include "bbtkData.h"
45 //#include "bbtkFactory.h"
49 //=========================================================================
51 //=========================================================================
53 //==================================================================
54 class WxFrame : public wxFrame
57 WxFrame(WxBlackBox::Pointer b,
62 void OnCloseWindow(wxCloseEvent& event);
65 WxBlackBox::WeakPointer mBox;
66 DECLARE_EVENT_TABLE();
70 BEGIN_EVENT_TABLE(WxFrame, wxFrame)
71 // EVT_CLOSE(WxFrame::OnCloseWindow)
73 //==================================================================
75 //==================================================================
76 WxFrame::WxFrame(WxBlackBox::Pointer b,
95 bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
97 Wx::IncNbWindowsAlive();
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);
107 //==================================================================
108 //==================================================================
112 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
113 <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
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();
121 //==================================================================
122 //==================================================================
123 void WxFrame::OnCloseWindow(wxCloseEvent& event)
126 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
127 <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
129 bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
131 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
132 Wx::DecNbWindowsAlive();
134 bbtkDebugMessage("widget",9,
135 "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
138 //==================================================================
140 //=========================================================================
142 //=========================================================================
144 //==================================================================
145 // Dialog window which is modal
146 class BBTK_EXPORT WxDialog : public wxDialog
149 WxDialog(WxBlackBox::Pointer box,
154 void OnCloseWindow(wxCloseEvent& event);
157 WxBlackBox::WeakPointer mBox;
158 DECLARE_EVENT_TABLE();
162 BEGIN_EVENT_TABLE(WxDialog, wxDialog)
163 EVT_CLOSE(WxDialog::OnCloseWindow)
165 //=========================================================================
167 //=========================================================================
168 WxDialog::WxDialog(WxBlackBox::Pointer b,
187 bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
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);
199 //==================================================================
200 //==================================================================
201 WxDialog::~WxDialog()
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();
208 //==================================================================
209 //==================================================================
210 void WxDialog::OnCloseWindow(wxCloseEvent& event)
212 bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
213 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
214 Wx::DecNbWindowsAlive();
217 //==================================================================
220 //=========================================================================
222 //=========================================================================
224 //=========================================================================
225 //=========================================================================
226 //=========================================================================
227 //=========================================================================
228 BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
229 //=========================================================================
231 //=========================================================================
232 void WxBlackBox::bbUserSetDefaultValues()
234 bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
237 //=========================================================================
239 //=========================================================================
240 void WxBlackBox::bbUserInitializeProcessing()
243 //==================================================================
245 //=========================================================================
246 void WxBlackBox::bbUserFinalizeProcessing()
248 bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
250 bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
252 //==================================================================
254 //==================================================================
255 /// Callback for creating a Dialog window (modal)
256 void WxBlackBox::bbCreateDialogWindow()
258 bbtkBlackBoxDebugMessage("widget",3,
259 "==> WxBlackBox::bbCreateDialogWindow() - parent = "
263 w = new WxDialog( GetThisPointer<WxBlackBox>(),
265 std2wx( bbGetInputWinTitle()
266 + " - bbtk (c) CREATIS-LRMN"),
267 wxSize( bbGetInputWinWidth() ,
268 bbGetInputWinHeight() ) );
272 //=========================================================================
274 //==================================================================
276 //==================================================================
277 /// Callback for creating a Frame window
278 void WxBlackBox::bbCreateFrameWindow()
280 bbtkBlackBoxDebugMessage("widget",3,
281 "==> WxBlackBox::bbCreateFrameWindow() - parent = "
285 w = new WxFrame( GetThisPointer<WxBlackBox>(),
287 std2wx( bbGetInputWinTitle()
288 + " - bbtk (c) CREATIS-LRMN"),
289 wxSize( bbGetInputWinWidth() ,
290 bbGetInputWinHeight() ) );
294 //==================================================================
296 //==================================================================
297 void WxBlackBox::bbSetWindow(wxWindow* w)
299 bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
300 if ((bbmWindow != 0)&&(w!=0))
302 std::cout << "ERRRRRRRROOOOR"<<std::endl;
306 //==================================================================
308 //==================================================================
309 void WxBlackBox::bbShowWindow()
311 if ((bbmWindow) && (!bbIsShown()))
313 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
315 if (bbGetInputWinDialog())
317 ((WxDialog*)bbmWindow)->ShowModal();
321 bbGetWindow()->Show();
326 //==================================================================
328 //==================================================================
329 void WxBlackBox::bbDestroyWindow()
331 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
332 if (bbGetWindow()!=NULL)
334 // wxWindow* w = bbGetWindow();
336 // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
340 delete bbGetWindow();
343 bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
346 //==================================================================