X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=beec07cbc532a81877784ef857c0ae47442a7ec7;hb=a7158b8ae6724e3b7cdf3c3a3aad1157365fbcb0;hp=763fcb501bcdc6fe8a3e7505d1594865c82f9c96;hpb=236a8e2fee9937c050e2d16c7222e1caa993f01c;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index 763fcb5..beec07c 100644 --- a/kernel/src/bbtkWxBlackBox.cxx +++ b/kernel/src/bbtkWxBlackBox.cxx @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/11/13 14:46:43 $ - Version: $Revision: 1.28 $ + Date: $Date: 2008/12/08 14:02:15 $ + Version: $Revision: 1.34 $ =========================================================================*/ /* --------------------------------------------------------------------- @@ -39,6 +39,8 @@ */ #include "bbtkWxBlackBox.h" +#include "bbtkBlackBoxOutputConnector.h" + //#include "bbtkWxContainerBlackBox.h" #include @@ -142,8 +144,10 @@ namespace bbtk <bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); - widget->Reparent(this); +// old : widget->Reparent(this); sizer->Add( widget, 1, wxALL|wxEXPAND, 2); //SetAutoLayout(true); SetSizer(sizer); @@ -218,9 +222,11 @@ namespace bbtk <bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); wxFrame* frame = (wxFrame*)this; - widget->Reparent(frame); +// old : widget->Reparent(frame); sizer->Add( widget, 1, wxALL|wxGROW, 2); // frame->SetAutoLayout(true); frame->SetSizer(sizer); @@ -323,7 +329,8 @@ namespace bbtk bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() [" <bbGetFullName()<<"]"<bbSetOutputWidget(0); - mBox.lock()->bbSetModifiedStatus(); + // LGSIGNAL + // mBox.lock()->bbSetModifiedStatus(); } //========================================================================= @@ -353,7 +360,7 @@ namespace bbtk //========================================================================= //========================================================================= - void WxBlackBox::bbUserCopyConstructor() + void WxBlackBox::bbUserCopyConstructor(bbtk::BlackBox::Pointer) { bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()" < WxBlackBox::bbExecute("<<(int)force<<") [" <second->GetConnectionVector().size() != 0 ) { - bbtkDebugMessage("process",3, - "-> Output 'Widget' connected : transfering execution to parent" - <second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo()->bbExecute(force); - - } - // else call 'standard' BlackBox execution method - else - { - BlackBox::bbExecute(force); + bbtkWarning("Execution called on '"< WxBlackBox::bbBackwardUpdate(" - <<(caller?caller->GetFullName():"0")<<") [" - <GetFullName():"0")<<") [" - <second->GetConnectionVector().size() != 0 ) - + void WxBlackBox::bbProcess() + { +/* + if (bbGetOutputWidget()==0) this->bbUserCreateWidget(); + this->bbUserProcess(); + bbShowWindow(); + // this->bbUserOnShow(); + */ + // LG 22/11/08 : new widget pipeline + // If output widget not connected : + if ( (*bbGetOutputConnectorMap().find("Widget")).second + ->GetConnectionVector().size() == 0 ) { - BlackBox::Pointer to = - i->second->GetConnectionVector()[0]->GetBlackBoxTo(); - - if (caller) + Window* show = 0; + // If the window already exists : no need creating it + if (bbGetWindow()!=0) { - bbtkDebugMessage("process",3, - "-> Output 'Widget' connected to '" - <bbGetFullName()<<"' - caller->to = '" - <GetBlackBoxTo()->bbGetFullName() - <<"'" + bbtkDebugMessage("wx",2, + "-> Window already exists" < Output 'Widget' connected to '" - <bbGetFullName()<<"'" + bbtkDebugMessage("wx",2, + "-> Creating the window" <(), + // bbGetWxParent(), + // LG 24/11/08 : New widget pipeline + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); + } + // Input WinDialog set to false : creating a Frame + else + { + bbtkDebugMessage("process",2, + " Input WinDialog set to false : creating a Frame" + <(), + // bbGetWxParent(), + // LG 24/11/08 : New widget pipeline + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); + } + } - if ((caller==0) || - ((caller!=0) && - (caller->GetBlackBoxTo() != to))&& - (!bbGetUpdateTransferedToParent())&& - (!to->bbGetExecuting())) + + // Show the window + show->bbShow(); + + + } + this->bbUserProcess(); + + } + //========================================================================= + + + + // LG 24/11/08 : New widget pipeline + void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent) + { + if (bbGetOutputWidget()==0) + { + this->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, - " ... Transfering update order to parent" + bbtkDebugMessage("wx",3, + "-> No widget event handler : creating one" <second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo()->bbExecute(false); + new WxBlackBoxWidgetEventHandler(GetThisPointer(), + bbGetOutputWidget()); } - else + else if ( ! bbGetWidgetEventHandler()->IsHandlerOf + ( bbGetOutputWidget() ) ) { - bbSetUpdateTransferedToParent(false); - bbtkDebugMessage("process",3, - " ... No need to transfer to parent" + bbtkDebugMessage("wx",3, + "-> Obsolete widget event handler : re-creating one" <(), + bbGetOutputWidget()); } - } - /* - - // If the caller is not the connection to the output widget - // and the output 'Widget' is connected then - // we must execute the parent box - // but only one time - // (this is the role of the flag UpdateTransferedToParent) - if ( (caller==0) || - ((caller!=0)&&(caller->GetBlackBoxFromOutput()!="Widget")) - ) - { - } - */ - // call 'standard' BlackBox execution method - if (!bbGetUpdateTransferedToParent()) - { - AtomicBlackBox::bbBackwardUpdate(caller); + // Sets the name of the wxWindow to the input WinTitle + bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle())); } - bbtkDebugMessageDec("process",3, - "<= WxBlackBox::bbBackwardUpdate() [" - <bbUserCreateWidget(); - this->bbUserProcess(); - bbShowWindow(); - // this->bbUserOnShow(); + + + + wxWindow* WxBlackBox::bbCreateWidgetOfInput(const std::string& in, wxWindow* parent) + { + wxWindow* w = 0; + // If input is connected + BlackBoxInputConnector* c = bbGetInputConnectorMap().find(in)->second ; + if ( c->IsConnected() ) + { + // Get black box from + BlackBox::Pointer from = + c->GetConnection()->GetBlackBoxFrom(); + // Cast it into a WxBlackBox + WxBlackBox::Pointer wfrom = boost::dynamic_pointer_cast(from); + // Call bbCreateWidgetAndEventHandler + wfrom->bbCreateWidgetAndEventHandler(parent); + // Get the widget created + w = wfrom->bbGetOutputWidget(); + } + return w; } - //========================================================================= + /* //================================================================== /// Specific methods for window creation during pipeline execution /// Shows the window associated to the box @@ -629,7 +656,9 @@ namespace bbtk " Input WinDialog set to true : creating a Dialog" <(), - bbGetWxParent(), + // bbGetWxParent(), + // LG 24/11/08 : New widget pipeline + Wx::GetTopWindow(), std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); } @@ -640,7 +669,9 @@ namespace bbtk " Input WinDialog set to false : creating a Frame" <(), - bbGetWxParent(), + // bbGetWxParent(), + // LG 24/11/08 : New widget pipeline + Wx::GetTopWindow(), std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); } @@ -671,7 +702,7 @@ namespace bbtk } //================================================================== - +*/ @@ -720,7 +751,8 @@ namespace bbtk //================================================================== - wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); } + // LG 24/11/08 : New widget pipeline + // wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); } //==================================================================