X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=d543faa5df26920e6cfc82f2ea1ff5442b333860;hb=28479cf7460f053625842de2e8df98b2e3363ede;hp=f214188a02121428c991d8a315fab4105c37fb1d;hpb=b0f948e65655a106e7328784444554f34da7dcac;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index f214188..d543faa 100644 --- a/kernel/src/bbtkWxBlackBox.cxx +++ b/kernel/src/bbtkWxBlackBox.cxx @@ -1,21 +1,34 @@ -/*========================================================================= - +/*========================================================================= Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/03/10 10:01:14 $ - Version: $Revision: 1.9 $ - - 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. - + Date: $Date: 2009/05/19 10:19:23 $ + Version: $Revision: 1.40 $ =========================================================================*/ +/* --------------------------------------------------------------------- + +* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale) +* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux +* +* This software is governed by the CeCILL-B license under French law and +* abiding by the rules of distribution of free software. You can use, +* modify and/ or redistribute the software under the terms of the CeCILL-B +* license as circulated by CEA, CNRS and INRIA at the following URL +* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +* or in the file LICENSE.txt. +* +* As a counterpart to the access to the source code and rights to copy, +* modify and redistribute granted by the license, users are provided only +* with a limited warranty and the software's author, the holder of the +* economic rights, and the successive licensors have only limited +* liability. +* +* The fact that you are presently reading this means that you have had +* knowledge of the CeCILL-B license and that you accept its terms. +* ------------------------------------------------------------------------ */ + + #ifdef _USE_WXWIDGETS_ @@ -26,6 +39,8 @@ */ #include "bbtkWxBlackBox.h" +#include "bbtkBlackBoxOutputConnector.h" + //#include "bbtkWxContainerBlackBox.h" #include @@ -41,80 +56,17 @@ namespace bbtk - //========================================================================= - // WxBlackBoxWindow - //========================================================================= - - - - //========================================================================= - WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box) - : mBox(box), mShown(false) - { - bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<< - mBox->bbGetFullName()<<")"<bbSetWindow(this); - Wx::IncNbWindowsAlive(); - bbtkDebugMessage("Wx",9," -> Number of windows alive = " - <bbGetFullName()<<"]"<bbSetWindow(0); - Wx::DecNbWindowsAlive(); - bbtkDebugMessage("Wx",9," -> Number of windows alive = " - <bbGetFullName()<<"]"< Number of windows shown = " - <bbGetFullName()<<"]"< Number of windows shown = " - <bbGetFullName()<<","<bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); - widget->Reparent(this); sizer->Add( widget, 1, wxALL|wxEXPAND, 2); //SetAutoLayout(true); SetSizer(sizer); @@ -145,26 +99,38 @@ namespace bbtk //========================================================================= void WxBlackBoxDialog::bbShow() { - bbtkDebugMessage("Wx",5,"WxBlackBoxDialog::bbShow() [" + if (bbIsShown()) return; + bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() [" <bbGetFullName()<<"]"<bbGetFullName()<<"]"<bbGetFullName()<<","<bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); wxFrame* frame = (wxFrame*)this; - widget->Reparent(frame); sizer->Add( widget, 1, wxALL|wxGROW, 2); // frame->SetAutoLayout(true); frame->SetSizer(sizer); @@ -214,101 +180,51 @@ namespace bbtk //========================================================================= WxBlackBoxFrame::~WxBlackBoxFrame() { + bbtkDebugMessage("wx",9,"WxBlackBoxFrame::~WxBlackBoxFrame()" + <bbGetFullName()<<")"<bbUserOnShow(); } //========================================================================= //========================================================================= void WxBlackBoxFrame::bbHide() { - bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::bbHide() ["<< - bbGetBlackBox()->bbGetFullName()<<"]"<bbUserOnHide(); } //========================================================================= - - - //========================================================================= - // WxBlackBoxDialogWrapper - //========================================================================= - /* - //========================================================================= - WxBlackBoxDialogWrapper::WxBlackBoxDialogWrapper(WxBlackBox* box, - wxDialog *wrapped) - : WxBlackBoxWindow(box), - mWrapped(wrapped) - { - bbtkDebugMessage("Wx",9, - "WxBlackBoxDialogWrapper::WxBlackBoxDialogWrapper(" - <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() + void WxBlackBoxFrame::bbDestroy() { - bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::~WxBlackBoxWidget("<bbGetFullName()<<")"<bbSetWidget(0); - //bbtkDebugMessage("Wx",9,"EO WxBlackBoxWidget::~WxBlackBoxWidget("<bbGetFullName()<<")"<bbGetFullName()<<")"<bbGetFullName()<<")"<bbSetWidgetEventHandler(this); + mBox.lock()->bbSetWidgetEventHandler(this); Connect ( mWindow->GetId(), wxEVT_DESTROY, @@ -342,22 +258,30 @@ namespace bbtk //========================================================================= WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() { - bbtkDebugMessage("Wx",9, - "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler(" - <bbGetFullName()<<")"<bbSetWidgetEventHandler(0); + bbtkDebugMessage("wx",9, + "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() [" + <GetId() ); + + if (mBox.expired()) return; + 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; + bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() []"<bbGetFullName()<<"]"<bbSetOutputWidget(0); } //========================================================================= @@ -367,46 +291,6 @@ namespace bbtk - /* - //========================================================================= - wxWindow* WxParentToChildData::GetWindowInWhichToInsert( const BlackBox* b) - const - { - bbtkDebugMessageInc("Kernel",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("Kernel",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("Kernel",9); - return j->second; - } - //========================================================================= - */ - //========================================================================= // WxBlackBox //========================================================================= @@ -415,246 +299,120 @@ namespace bbtk //========================================================================= //========================================================================= //========================================================================= - BBTK_USER_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox); + BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox); //========================================================================= //========================================================================= - void WxBlackBox::bbUserConstructor() + void WxBlackBox::bbUserSetDefaultValues() { - bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserConstructor()"<IsDead()) + bbtkDebugMessage("wx",9,"WxBlackBox::bbUserFinalizeProcessing()"<(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() )); + w->Show(true); } - //========================================================================= + //================================================================== - //========================================================================= - /// Main processing method of the box. - void WxBlackBox::bbExecute(bool force) + //================================================================== + /// Callback for creating a Frame window + void WxBlackBox::bbCreateFrameWindow() { - bbtkDebugMessageInc("Process",1, - "=> WxBlackBox::bbExecute() [" - <(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() ) ); + w->Show(); + } + //================================================================== - if ( i->second->GetConnectionVector().size() != 0 ) - { - bbtkDebugMessage("Process",2, - "-> Output 'Widget' connected : transfering execution to parent" - <second->GetConnectionVector().front() - ->GetBlackBoxTo()->bbExecute(force); - - } - // else call 'standard' BlackBox execution method - else - { - BlackBox::bbExecute(force); - } - // - - bbtkDebugMessageDec("Process",1, - "<= WxBlackBox::bbExecute() [" - < WxBlackBox::bbShowWindow() [" - <bbUserCreateWidget(parent); + } + // If Event Handler for the widget does not exist or is obsolete: + // create it if (bbGetOutputWidget()!=0) { if (bbGetWidgetEventHandler()==0) { - bbtkDebugMessage("Process",3, + bbtkDebugMessage("wx",3, "-> No widget event handler : creating one" <(), + bbGetOutputWidget()); } else if ( ! bbGetWidgetEventHandler()->IsHandlerOf ( bbGetOutputWidget() ) ) { - bbtkDebugMessage("Process",3, + bbtkDebugMessage("wx",3, "-> Obsolete widget event handler : re-creating one" <(), + bbGetOutputWidget()); } // Sets the name of the wxWindow to the input WinTitle bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle())); } - - // If the output 'Widget' is connected then it's gonna - // be captured by its parent window : nothing to do - if ( (*bbGetOutputConnectorMap().find("Widget")).second - ->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() [" - <