X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=2413e4a55aba8e69c9e067adafb05c2db8b156db;hb=4ad5b5ee44357ad873bc8c43230defb6d0a79879;hp=1cea747459170fe233e9acec99b57b89f49ce3f1;hpb=5ca30b861f60def2666a1c675e8b45df0a713f95;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index 1cea747..2413e4a 100644 --- a/kernel/src/bbtkWxBlackBox.cxx +++ b/kernel/src/bbtkWxBlackBox.cxx @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/02/08 10:05:38 $ - Version: $Revision: 1.7 $ + Date: $Date: 2008/04/18 12:59:16 $ + Version: $Revision: 1.12 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -48,14 +48,14 @@ namespace bbtk //========================================================================= - WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box) + WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox::Pointer box) : mBox(box), mShown(false) { bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<< mBox->bbGetFullName()<<")"<bbSetWindow(this); Wx::IncNbWindowsAlive(); - bbtkDebugMessage("Wx",9," -> Number of windows alive = " + bbtkDebugMessage("Wx",5," -> Number of windows alive = " <bbSetWindow(0); Wx::DecNbWindowsAlive(); - bbtkDebugMessage("Wx",9," -> Number of windows alive = " + bbtkDebugMessage("Wx",5," -> Number of windows alive = " <bbGetFullName()<<"]"< Number of windows shown = " + bbtkDebugMessage("Wx",5," -> Number of windows shown = " <bbGetFullName()<<"]"< Number of windows shown = " + bbtkDebugMessage("Wx",5," -> Number of windows shown = " <bbGetFullName()<<")"<bbUserOnShow(); + // wxFrame::SetFocus(); } //========================================================================= @@ -232,7 +239,8 @@ namespace bbtk bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::bbHide() ["<< bbGetBlackBox()->bbGetFullName()<<"]"<bbUserOnHide(); } //========================================================================= @@ -316,8 +324,9 @@ namespace bbtk //========================================================================= //========================================================================= - WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler( WxBlackBox* box, - wxWindow *widget ) + WxBlackBoxWidgetEventHandler:: + WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box, + wxWindow *widget ) : mBox(box), mWindow(widget) @@ -414,7 +423,7 @@ namespace bbtk //========================================================================= //========================================================================= //========================================================================= - BBTK_USER_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox); + BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox); //========================================================================= //========================================================================= @@ -486,8 +495,104 @@ namespace bbtk } //========================================================================= + //========================================================================= + /// Main processing method of the box. + void WxBlackBox::bbExecute(bool force) + { + bbtkDebugMessageInc("Process",1, + "=> WxBlackBox::bbExecute() [" + <second->GetConnectionVector().size() != 0 ) + { + bbtkDebugMessage("Process",2, + "-> Output 'Widget' connected : transfering execution to parent" + <second->GetConnectionVector().front().lock() + ->GetBlackBoxTo()->bbExecute(force); + + } + // else call 'standard' BlackBox execution method + else + { + BlackBox::bbExecute(force); + } + // + + bbtkDebugMessageDec("Process",1, + "<= WxBlackBox::bbExecute() [" + < WxBlackBox::bbBackwardUpdate(" + <<(caller?caller->GetFullName():"0")<<") [" + <GetBlackBoxFromOutput()!="Widget")) + ) + { + BlackBox::OutputConnectorMapType::const_iterator i + = bbGetOutputConnectorMap().find("Widget") ; + if ( + i->second->GetConnectionVector().size() != 0 ) + { + bbtkDebugMessage("Process",2, + "-> Output 'Widget' connected : transfering execution to parent" + <second->GetConnectionVector().front().lock() + ->GetBlackBoxTo()->bbExecute(false); + done = true; + } + } + // call 'standard' BlackBox execution method + if (!done) + { + bbSetExecuting(false); + AtomicBlackBox::bbBackwardUpdate(caller); + } + + bbtkDebugMessageDec("Process",1, + "<= WxBlackBox::bbBackwardUpdate() [" + <bbUserCreateWidget(); + this->bbUserProcess(); + bbShowWindow(); + } + //========================================================================= + //================================================================== /// Specific methods for window creation during pipeline execution /// Shows the window associated to the box @@ -505,7 +610,8 @@ namespace bbtk bbtkDebugMessage("Process",3, "-> No widget event handler : creating one" <(), + bbGetOutputWidget()); } else if ( ! bbGetWidgetEventHandler()->IsHandlerOf ( bbGetOutputWidget() ) ) @@ -514,7 +620,8 @@ namespace bbtk "-> Obsolete widget event handler : re-creating one" <(), + bbGetOutputWidget()); } // Sets the name of the wxWindow to the input WinTitle bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle())); @@ -557,8 +664,8 @@ namespace bbtk bbtkDebugMessage("Process",2, " Input WinDialog set to true : creating a Dialog" <(), + bbGetWxParent(), std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); } @@ -568,8 +675,8 @@ namespace bbtk bbtkDebugMessage("Process",2, " Input WinDialog set to false : creating a Frame" <(), + bbGetWxParent(), std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); } @@ -618,6 +725,36 @@ namespace bbtk //================================================================== + //================================================================== + WxBlackBox::Window* WxBlackBox::bbGetContainingWindow() + { + if (bbGetWindow()!=0) return bbGetWindow(); + BlackBox::OutputConnectorMapType::const_iterator i + = bbGetOutputConnectorMap().find("Widget"); + if ( i->second->GetConnectionVector().size() != 0 ) + { + return boost::static_pointer_cast + (i->second->GetConnectionVector().front().lock()->GetBlackBoxTo()) + ->bbGetContainingWindow(); + } + return 0; + } + //================================================================== + + + //================================================================== + wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); } + //================================================================== + + + //================================================================== + bool WxBlackBox::bbIsShown() + { + if (bbGetContainingWindow()!=0) + return bbGetContainingWindow()->bbIsShown(); + return false; + } + //================================================================== }//namespace bbtk