2 # ---------------------------------------------------------------------
4 # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
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
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.
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
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 # ------------------------------------------------------------------------ */
28 /*=========================================================================
30 Module: $RCSfile: bbtkWxBlackBox.cxx,v $
32 Date: $Date: 2012/11/16 08:49:01 $
33 Version: $Revision: 1.45 $
34 =========================================================================*/
38 #ifdef _USE_WXWIDGETS_
45 #include "bbtkWxBlackBox.h"
46 #include "bbtkBlackBoxOutputConnector.h"
48 //#include "bbtkWxContainerBlackBox.h"
49 #include <wx/dialog.h>
51 //#include "bbtkData.h"
52 //#include "bbtkFactory.h"
56 //=========================================================================
58 //=========================================================================
60 //==================================================================
61 class WxFrame : public wxFrame
64 WxFrame(WxBlackBox::Pointer b,
69 void OnCloseWindow(wxCloseEvent& event);
72 WxBlackBox::WeakPointer mBox;
73 DECLARE_EVENT_TABLE();
77 BEGIN_EVENT_TABLE(WxFrame, wxFrame)
78 // EVT_CLOSE(WxFrame::OnCloseWindow)
80 //==========================================Window ========================
82 //==================================================================
83 WxFrame::WxFrame(WxBlackBox::Pointer b,
102 bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
104 Wx::IncNbWindowsAlive();
105 b->bbSetWindow(this);
106 // Insert the widget into the window
107 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
108 b->bbUserCreateWidget(this);
109 wxWindow* widget = b->bbGetOutputWidget();
110 sizer->Add( widget, 1, wxALL|wxGROW, 2);
114 //==================================================================
115 //==================================================================
119 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
120 <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
123 bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
124 //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
125 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
126 Wx::DecNbWindowsAlive();
128 //==================================================================
129 //==================================================================
130 void WxFrame::OnCloseWindow(wxCloseEvent& event)
133 bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
134 <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
136 bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
138 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
139 Wx::DecNbWindowsAlive();
141 bbtkDebugMessage("widget",9,
142 "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
145 //==================================================================
147 //====================================================SetWin=====================
149 //=========================================================================
151 //==================================================================
152 // Dialog window which is modal
153 class BBTK_EXPORT WxDialog : public wxDialog
156 WxDialog(WxBlackBox::Pointer box,
161 void OnCloseWindow(wxCloseEvent& event);
164 WxBlackBox::WeakPointer mBox;
165 DECLARE_EVENT_TABLE();
169 BEGIN_EVENT_TABLE(WxDialog, wxDialog)
170 EVT_CLOSE(WxDialog::OnCloseWindow)
172 //=========================================================================
174 //=========================================================================
175 WxDialog::WxDialog(WxBlackBox::Pointer b,
195 bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
197 Wx::IncNbWindowsAlive();
198 b->bbSetWindow(this);
199 // Insert the widget into the window
200 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
201 b->bbUserCreateWidget(this);
202 wxWindow* widget = b->bbGetOutputWidget();
203 sizer->Add( widget, 1, wxALL|wxGROW, 2);
207 //==================================================================
208 //==================================================================
209 WxDialog::~WxDialog()
211 bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
212 //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
213 // if (mBox.lock()) mBox.lock()->bbSetWindow(0);
214 // Wx::DecNbWindowsAlive();
216 //==================================================================
217 //==================================================================
218 void WxDialog::OnCloseWindow(wxCloseEvent& event)
220 bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
221 if (mBox.lock()) mBox.lock()->bbSetWindow(0);
222 Wx::DecNbWindowsAlive();
225 //==================================================================
228 //=========================================================================
230 //=========================================================================
232 //=========================================================================
233 //=========================================================================
234 //=========================================================================
235 //=========================================================================
236 BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
237 //=========================================================================
239 //=========================================================================
240 void WxBlackBox::bbUserSetDefaultValues()
242 bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
245 //=========================================================================
247 //=========================================================================
248 void WxBlackBox::bbUserInitializeProcessing()
251 //==================================================================
253 //=========================================================================
254 void WxBlackBox::bbUserFinalizeProcessing()
256 bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
258 bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
260 //==================================================================
262 //==================================================================
263 /// Callback for creating a Dialog window (modal)
264 void WxBlackBox::bbCreateDialogWindow()
266 bbtkBlackBoxDebugMessage("widget",3,
267 "==> WxBlackBox::bbCreateDialogWindow() - parent = "
271 w = new WxDialog( GetThisPointer<WxBlackBox>(),
273 // std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS"),
274 std2wx( ConstructWinTitle() ),
275 wxSize( bbGetInputWinWidth() ,
276 bbGetInputWinHeight() ) );
280 //=========================================================================
282 //==================================================================
284 //==================================================================
285 /// Callback for creating a Frame window
286 void WxBlackBox::bbCreateFrameWindow()
288 bbtkBlackBoxDebugMessage("widget",3,
289 "==> WxBlackBox::bbCreateFrameWindow() - parent = "
293 w = new WxFrame( GetThisPointer<WxBlackBox>(),
295 // std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS"),
296 std2wx( ConstructWinTitle() ),
297 wxSize( bbGetInputWinWidth() ,
298 bbGetInputWinHeight() ) );
304 //==================================================================
306 //==================================================================
307 void WxBlackBox::bbSetWindow(wxWindow* w)
309 bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
310 if ((bbmWindow != 0)&&(w!=0))
312 std::cout << "WxBlackBox::bbSetWindow ?? EED ?? ERRRRRRRROOOOR"<<std::endl;
316 //==================================================================
318 //==================================================================
319 void WxBlackBox::bbShowWindow()
321 if ((bbmWindow) && (!bbIsShown()))
323 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
325 if (bbGetInputWinDialog())
327 ((WxDialog*)bbmWindow)->ShowModal();
331 bbGetWindow()->Show();
338 //==================================================================
340 //==================================================================
341 void WxBlackBox::bbDestroyWindow()
343 bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
344 if (bbGetWindow()!=NULL)
346 // wxWindow* w = bbGetWindow();
348 // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
352 delete bbGetWindow();
355 bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
358 //==================================================================
360 //==================================================================
361 void WxBlackBox::PutWinTitle()
363 if ( ! bbIsOutputWidgetConnected() )
365 wxTopLevelWindow* wParent = (wxTopLevelWindow*)( bbGetOutputWidget()->GetParent() );
366 wParent->SetTitle( std2wx( ConstructWinTitle() ) );
369 //==================================================================
371 //==================================================================
372 std::string WxBlackBox::ConstructWinTitle()
374 std::string title( bbGetInputWinTitle() + " - bbtk (c) CREATIS");
377 //==================================================================