1 /*=========================================================================
3 Module: $RCSfile: bbtkWxBlackBox.cxx,v $
5 Date: $Date: 2009/05/28 14:22:11 $
6 Version: $Revision: 1.42 $
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 * ------------------------------------------------------------------------ */
32 #ifdef _USE_WXWIDGETS_
41 #include "bbtkWxBlackBox.h"
42 #include "bbtkBlackBoxOutputConnector.h"
44 //#include "bbtkWxContainerBlackBox.h"
45 #include <wx/dialog.h>
47 //#include "bbtkData.h"
48 //#include "bbtkFactory.h"
60 //=========================================================================
62 //=========================================================================
64 //==================================================================
65 class WxFrame : public wxFrame
68 WxFrame(WxBlackBox::Pointer b,
73 void OnCloseWindow(wxCloseEvent& event);
76 WxBlackBox::WeakPointer mBox;
77 DECLARE_EVENT_TABLE();
81 BEGIN_EVENT_TABLE(WxFrame, wxFrame)
82 // EVT_CLOSE(WxFrame::OnCloseWindow)
84 //==================================================================
86 //==================================================================
87 WxFrame::WxFrame(WxBlackBox::Pointer b,
106 bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
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);
118 //==================================================================
119 //==================================================================
123 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
124 <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
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();
132 //==================================================================
133 //==================================================================
134 void WxFrame::OnCloseWindow(wxCloseEvent& event)
137 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
138 <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
140 bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
142 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
143 Wx::DecNbWindowsAlive();
145 bbtkDebugMessage("widget",9,
146 "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
149 //==================================================================
155 //=========================================================================
157 //=========================================================================
159 //==================================================================
160 // Dialog window which is modal
161 class BBTK_EXPORT WxDialog : public wxDialog
164 WxDialog(WxBlackBox::Pointer box,
169 void OnCloseWindow(wxCloseEvent& event);
172 WxBlackBox::WeakPointer mBox;
173 DECLARE_EVENT_TABLE();
177 BEGIN_EVENT_TABLE(WxDialog, wxDialog)
178 EVT_CLOSE(WxDialog::OnCloseWindow)
180 //==================================================================
182 //=========================================================================
183 WxDialog::WxDialog(WxBlackBox::Pointer b,
202 bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
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);
214 //=========================================================================
215 //==================================================================
216 WxDialog::~WxDialog()
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();
223 //==================================================================
224 //==================================================================
225 void WxDialog::OnCloseWindow(wxCloseEvent& event)
227 bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
228 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
229 Wx::DecNbWindowsAlive();
232 //==================================================================
240 //=========================================================================
242 //=========================================================================
244 //=========================================================================
245 //=========================================================================
246 //=========================================================================
247 //=========================================================================
248 BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
249 //=========================================================================
251 //=========================================================================
252 void WxBlackBox::bbUserSetDefaultValues()
254 bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
257 //=========================================================================
259 //=========================================================================
260 void WxBlackBox::bbUserInitializeProcessing()
263 //==================================================================
265 //=========================================================================
266 void WxBlackBox::bbUserFinalizeProcessing()
268 bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
270 bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
272 //==================================================================
274 //==================================================================
275 /// Callback for creating a Dialog window (modal)
276 void WxBlackBox::bbCreateDialogWindow()
278 bbtkBlackBoxDebugMessage("widget",3,
279 "==> WxBlackBox::bbCreateDialogWindow() - parent = "
283 w = new WxDialog( GetThisPointer<WxBlackBox>(),
285 std2wx( bbGetInputWinTitle()
286 + " - bbtk (c) CREATIS-LRMN"),
287 wxSize( bbGetInputWinWidth() ,
288 bbGetInputWinHeight() ) );
292 //=========================================================================
294 //==================================================================
296 //==================================================================
297 /// Callback for creating a Frame window
298 void WxBlackBox::bbCreateFrameWindow()
300 bbtkBlackBoxDebugMessage("widget",3,
301 "==> WxBlackBox::bbCreateFrameWindow() - parent = "
305 w = new WxFrame( GetThisPointer<WxBlackBox>(),
307 std2wx( bbGetInputWinTitle()
308 + " - bbtk (c) CREATIS-LRMN"),
309 wxSize( bbGetInputWinWidth() ,
310 bbGetInputWinHeight() ) );
313 //==================================================================
315 //==================================================================
316 void WxBlackBox::bbSetWindow(wxWindow* w)
318 bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
319 if ((bbmWindow != 0)&&(w!=0))
321 std::cout << "ERRRRRRRROOOOR"<<std::endl;
325 //==================================================================
327 //==================================================================
328 void WxBlackBox::bbShowWindow()
330 if ((bbmWindow) && (!bbIsShown()))
332 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
334 if (bbGetInputWinDialog())
336 ((WxDialog*)bbmWindow)->ShowModal();
340 bbGetWindow()->Show();
345 //==================================================================
347 //==================================================================
348 void WxBlackBox::bbDestroyWindow()
350 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
351 if (bbGetWindow()!=NULL)
353 // wxWindow* w = bbGetWindow();
355 // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
359 delete bbGetWindow();
362 bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
365 //==================================================================