1 /*=========================================================================
3 Module: $RCSfile: bbtkWxBlackBox.cxx,v $
5 Date: $Date: 2009/05/19 10:19:23 $
6 Version: $Revision: 1.40 $
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 WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox::Pointer box,
84 bbtkDebugMessage("wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<<
85 bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
86 <<title<<",size)"<<std::endl);
87 // Insert the widget into the window
88 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
90 box->bbCreateWidgetAndEventHandler(this);
91 wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
92 sizer->Add( widget, 1, wxALL|wxEXPAND, 2);
93 //SetAutoLayout(true);
97 //=========================================================================
99 //=========================================================================
100 void WxBlackBoxDialog::bbShow()
102 if (bbIsShown()) return;
103 bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() ["
104 <<bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
107 SetReturnCode( wxDialog::ShowModal() );
110 //=========================================================================
112 //=========================================================================
113 void WxBlackBoxDialog::bbHide()
115 bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbHide()"<<std::endl);
119 //=========================================================================
121 //=========================================================================
122 void WxBlackBoxDialog::bbDestroy()
124 bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbDestroy()"<<std::endl);
127 //=========================================================================
129 //=========================================================================
130 WxBlackBoxDialog::~WxBlackBoxDialog()
132 bbtkDebugMessage("wx",9,"WxBlackBoxDialog::~WxBlackBoxDialog()"
135 //=========================================================================
141 //=========================================================================
143 //=========================================================================
145 //=========================================================================
146 WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox::Pointer box,
164 bbtkDebugMessage("wx",9,"WxBlackBoxFrame::WxBlackBoxFrame("<<
165 bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
166 <<title<<",size)"<<std::endl);
167 // Insert the widget into the window
168 wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
169 box->bbCreateWidgetAndEventHandler(this);
170 wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
171 wxFrame* frame = (wxFrame*)this;
172 sizer->Add( widget, 1, wxALL|wxGROW, 2);
173 // frame->SetAutoLayout(true);
174 frame->SetSizer(sizer);
178 //=========================================================================
180 //=========================================================================
181 WxBlackBoxFrame::~WxBlackBoxFrame()
183 bbtkDebugMessage("wx",9,"WxBlackBoxFrame::~WxBlackBoxFrame()"
186 //=========================================================================
188 //=========================================================================
189 void WxBlackBoxFrame::bbShow()
191 if (bbIsShown()) return;
192 bbtkDebugMessage("wx",5,"WxBlackBoxFrame::bbShow("
193 <<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
196 // This Update is ** MANDATORY **
197 // to synchronize wxvtkRenderWindowInteractor objects
198 // (force wx objects creation **NOW**)
207 // if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
209 //=========================================================================
211 //=========================================================================
212 void WxBlackBoxFrame::bbHide()
214 bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbHide()"<<std::endl);
217 if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnHide();
219 //=========================================================================
221 //=========================================================================
222 void WxBlackBoxFrame::bbDestroy()
224 bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbDestroy()"<<std::endl);
227 //=========================================================================
231 //=========================================================================
232 // WxBlackBoxWidgetEventHandler
233 //=========================================================================
235 //=========================================================================
236 WxBlackBoxWidgetEventHandler::
237 WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box,
243 bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler("<<mBox.lock()->bbGetFullName()<<")"<<std::endl);
245 mBox.lock()->bbSetWidgetEventHandler(this);
247 Connect ( mWindow->GetId(),
249 (wxObjectEventFunction)
250 (void (wxEvtHandler::*)(wxWindowDestroyEvent& c))
251 &WxBlackBoxWidgetEventHandler::OnWindowDestroy );
253 mWindow->PushEventHandler(this);
256 //=========================================================================
258 //=========================================================================
259 WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler()
261 bbtkDebugMessage("wx",9,
262 "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() ["
266 Disconnect ( mWindow->GetId() );
268 if (mBox.expired()) return;
269 bbtkDebugMessage("wx",9,
270 "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() ["
271 <<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
273 mBox.lock()->bbSetWidgetEventHandler(0);
275 //=========================================================================
277 //=========================================================================
278 void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&)
280 bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() []"<<std::endl);
281 if (mBox.expired()) return;
282 bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() alive ["
283 <<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
284 mBox.lock()->bbSetOutputWidget(0);
286 //=========================================================================
294 //=========================================================================
296 //=========================================================================
298 //=========================================================================
299 //=========================================================================
300 //=========================================================================
301 //=========================================================================
302 BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
303 //=========================================================================
305 //=========================================================================
306 void WxBlackBox::bbUserSetDefaultValues()
308 bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
309 bbSetWidgetEventHandler(0);
311 //=========================================================================
313 //=========================================================================
314 void WxBlackBox::bbUserInitializeProcessing()
317 //==================================================================
319 //=========================================================================
320 void WxBlackBox::bbUserFinalizeProcessing()
322 bbtkDebugMessage("wx",9,"WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
323 if (bbGetWidgetEventHandler()!=0)
325 bbtkDebugMessage("wx",9,"Deleting Widget Event Handler"<<std::endl);
326 delete bbGetWidgetEventHandler();
330 //==================================================================
332 //==================================================================
333 /// Callback for creating a Dialog window (modal)
334 void WxBlackBox::bbCreateDialogWindow()
336 WxBlackBoxDialog* w = 0;
337 w = new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
339 std2wx( bbGetInputWinTitle()
340 + " - bbtk (c) CREATIS LRMN"),
341 wxSize( bbGetInputWinWidth() ,
342 bbGetInputWinHeight() ));
345 //==================================================================
347 //==================================================================
348 /// Callback for creating a Frame window
349 void WxBlackBox::bbCreateFrameWindow()
351 WxBlackBoxFrame* w = 0;
352 w = new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
354 std2wx( bbGetInputWinTitle()
355 + " - bbtk (c) CREATIS LRMN"),
356 wxSize( bbGetInputWinWidth() ,
357 bbGetInputWinHeight() ) );
360 //==================================================================
365 //=========================================================================
366 void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent)
368 if (bbGetOutputWidget()==0)
370 this->bbUserCreateWidget(parent);
372 // If Event Handler for the widget does not exist or is obsolete:
374 if (bbGetOutputWidget()!=0)
376 if (bbGetWidgetEventHandler()==0)
378 bbtkDebugMessage("wx",3,
379 "-> No widget event handler : creating one"
381 new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
382 bbGetOutputWidget());
384 else if ( ! bbGetWidgetEventHandler()->IsHandlerOf
385 ( bbGetOutputWidget() ) )
387 bbtkDebugMessage("wx",3,
388 "-> Obsolete widget event handler : re-creating one"
390 delete bbGetWidgetEventHandler();
391 new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
392 bbGetOutputWidget());
394 // Sets the name of the wxWindow to the input WinTitle
395 bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle()));
400 //=========================================================================
403 //==================================================================
404 // void WxBlackBox::InitWindowManagerIfNeeded() { Wx::
405 void WxBlackBox::IncNbWindowsAlive() { Wx::IncNbWindowsAlive(); }
406 void WxBlackBox::DecNbWindowsAlive() { Wx::DecNbWindowsAlive(); }
407 int WxBlackBox::GetNbWindowsAlive() { return Wx::GetNbWindowsAlive(); }
408 bool WxBlackBox::IsSomeWindowAlive() { return Wx::IsSomeWindowAlive(); }
410 void WxBlackBox::IncNbWindowsShown() { Wx::IncNbWindowsShown(); }
411 void WxBlackBox::DecNbWindowsShown() { Wx::DecNbWindowsShown(); }
412 int WxBlackBox::GetNbWindowsShown() { return Wx::GetNbWindowsShown(); }
413 bool WxBlackBox::IsSomeWindowShown() { return Wx::GetNbWindowsShown(); }
414 //==================================================================