/*========================================================================= Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ Date: $Date: 2008/01/22 15:02:00 $ Version: $Revision: 1.1 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifdef _USE_WXWIDGETS_ /** * \file * \brief */ #include "bbtkWxBlackBox.h" //#include "bbtkWxContainerBlackBox.h" #include //#include "bbtkData.h" //#include "bbtkFactory.h" namespace bbtk { //========================================================================= wxWindow* WxBlackBox::bbGlobalGetTopWindow() { return bbmgTopWindow; } //========================================================================= //========================================================================= void WxBlackBox::bbGlobalSetTopWindow(wxWindow* w) { if ( bbmgTopWindow ) { bbtkGlobalError("WxBlackBox::bbGlobalSetTopWindow : top window already set !"); } bbmgTopWindow = w; } //========================================================================= //========================================================================= void WxBlackBox::bbGlobalDecNbWindowsAlive() { bbmgNbWindowsAlive--; /* if ( (bbmgNbWindowsAlive==0) && bbmgTopWindow && (!bbmgTopWindow->IsShown())) { bbmgTopWindow->Close(); } */ } //========================================================================= //========================================================================= void WxBlackBox::bbGlobalDecNbWindowsShown() { bbmgNbWindowsShown--; if ( (bbmgNbWindowsShown==0) && bbmgTopWindow && (!bbmgTopWindow->IsShown())) { bbmgTopWindow->Close(); } } //========================================================================= //========================================================================= // Static members wxWindow* WxBlackBox::bbmgTopWindow =0; int WxBlackBox::bbmgNbWindowsAlive = 0; int WxBlackBox::bbmgNbWindowsShown = 0; //========================================================================= //========================================================================= // WxBlackBoxWindow //========================================================================= //========================================================================= WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box) : mBox(box), mShown(false) { bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<< mBox->bbGetFullName()<<")"<bbSetWindow(this); WxBlackBox::bbGlobalIncNbWindowsAlive(); bbtkDebugMessage("Wx",9," -> Number of windows alive = " <bbGetFullName()<<"]"<bbSetWindow(0); WxBlackBox::bbGlobalDecNbWindowsAlive(); bbtkDebugMessage("Wx",9," -> Number of windows alive = " <bbGetFullName()<<"]"< Number of windows shown = " <bbGetFullName()<<"]"< Number of windows shown = " <bbGetFullName()<<","<bbGetOutputWidget(); widget->Reparent(this); sizer->Add( widget, 1, wxALL|wxEXPAND, 2); //SetAutoLayout(true); SetSizer(sizer); Layout(); } //========================================================================= //========================================================================= void WxBlackBoxDialog::bbShow() { bbtkDebugMessage("Wx",5,"WxBlackBoxDialog::bbShow() [" <bbGetFullName()<<"]"<bbGetFullName()<<"]"<bbGetFullName()<<","<bbGetOutputWidget(); wxFrame* frame = (wxFrame*)this; widget->Reparent(frame); sizer->Add( widget, 1, wxALL|wxGROW, 2); // frame->SetAutoLayout(true); frame->SetSizer(sizer); //frame->Fit(); frame->Layout(); } //========================================================================= //========================================================================= WxBlackBoxFrame::~WxBlackBoxFrame() { } //========================================================================= //========================================================================= void WxBlackBoxFrame::bbShow() { bbtkDebugMessage("Wx",5,"WxBlackBoxFrame::bbShow(" <bbGetFullName()<<")"<bbGetFullName()<<"]"<bbGetFullName()<<","<bbGetFullName()<<")"<ShowModal(); // For Windows : mWrapped->SetReturnCode( i ); } //========================================================================= //========================================================================= void WxBlackBoxDialogWrapper::bbHide() { bbtkDebugMessage("Wx",9,"WxBlackBoxDialogWrapper::bbHide() ["<< bbGetBlackBox()->bbGetFullName()<<"]"<Hide(); } //========================================================================= */ /* //========================================================================= // WxBlackBoxWidget //========================================================================= //========================================================================= WxBlackBoxWidget::WxBlackBoxWidget( WxBlackBox* box) : mBox(box) { bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::WxBlackBoxWidget("<bbGetFullName()<<")"<bbSetWidget(this); } //========================================================================= //========================================================================= WxBlackBoxWidget::~WxBlackBoxWidget() { bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::~WxBlackBoxWidget("<bbGetFullName()<<")"<bbSetWidget(0); //bbtkDebugMessage("Wx",9,"EO WxBlackBoxWidget::~WxBlackBoxWidget("<bbGetFullName()<<")"<bbGetFullName()<<")"<bbSetWidgetEventHandler(this); Connect ( mWindow->GetId(), wxEVT_DESTROY, (wxObjectEventFunction) (void (wxEvtHandler::*)(wxWindowDestroyEvent& c)) &WxBlackBoxWidgetEventHandler::OnWindowDestroy ); mWindow->PushEventHandler(this); } //========================================================================= //========================================================================= WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() { bbtkDebugMessage("Wx",9, "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler(" <bbGetFullName()<<")"<bbSetWidgetEventHandler(0); } //========================================================================= //========================================================================= void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&) { bbtkDebugMessage("Wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() [" <bbGetFullName()<<"]"<bbSetOutputWidget(0); mBox->bbSetModifiedStatus(); //mDead = true; //delete this; } //========================================================================= /* //========================================================================= wxWindow* WxParentToChildData::GetWindowInWhichToInsert( const BlackBox* b) const { bbtkDebugMessageInc("Core",9,"WxParentToChildData::GetWindowInWhichToInsert("<bbGetFullName()<<")"<bbGetInputConnectorMap().find("WinParent"); if (i==b->bbGetInputConnectorMap().end()) { bbtkError("WxParentToChildData::GetWindowInWhichToInsert : the box " <bbGetFullName() <<" does not have any 'Parent' input ?!?"); } Connection* c = i->second->GetConnection(); if (!c) { bbtkDebugMessage("Core",9, "-> The input 'Parent' of the box " <bbGetFullName() <<" is not connected."<::const_iterator j = mConnectionToWindowMap.find(c); if (j==mConnectionToWindowMap.end()) { bbtkError("WxParentToChildData::GetWindowInWhichToInsert(" <bbGetFullName() <<") no window provided by parent ?!?"); } bbtkDebugDecTab("Core",9); return j->second; } //========================================================================= */ //========================================================================= // WxBlackBox //========================================================================= //========================================================================= //========================================================================= //========================================================================= //========================================================================= BBTK_USER_BLACK_BOX_IMPLEMENTATION(WxBlackBox,UserBlackBox); //========================================================================= //========================================================================= void WxBlackBox::bbUserConstructor() { bbtkDebugMessage("Core",9,"WxBlackBox::bbUserConstructor()"<IsDead()) { bbtkDebugMessage("Wx",9,"WxBlackBox::bbGetWidget() ["<< bbGetFullName()<<"] : Widget is dead : deleting it" < WxBlackBox::bbShowWindow() [" < No widget event handler : creating one" <IsHandlerOf ( bbGetOutputWidget() ) ) { bbtkDebugMessage("Process",3, "-> Obsolete widget event handler : re-creating one" <GetConnectionVector().size() != 0 ) { bbtkDebugMessage("Process",2, "-> Output 'Widget' connected : nothing to do" < Window already exists" < Widget exists : creating the window" <IsShown()) { show->bbShow(); } else { bbtkDebugMessage("Process",2,"-> Already shown : nothing to do"< WxBlackBox::bbHideWindow() [" <bbHide(); bbtkDebugMessageDec("Process",1,"<= WxBlackBox::bbHideWindow() [" <