+ BlackBox::OutputConnectorMapType::const_iterator i
+ = bbGetOutputConnectorMap().find("Widget") ;
+ if ( i->second->GetConnectionVector().size() != 0 )
+
+ {
+ BlackBox::Pointer to =
+ i->second->GetConnectionVector()[0]->GetBlackBoxTo();
+
+ if (caller)
+ {
+ bbtkDebugMessage("process",3,
+ "-> Output 'Widget' connected to '"
+ <<to->bbGetFullName()<<"' - caller->to = '"
+ <<caller->GetBlackBoxTo()->bbGetFullName()
+ <<"'"
+ <<std::endl);
+ }
+ else
+ {
+ bbtkDebugMessage("process",3,
+ "-> Output 'Widget' connected to '"
+ <<to->bbGetFullName()<<"'"
+ <<std::endl);
+ }
+ if ((caller==0) ||
+ ( (caller!=0) &&
+ (caller->GetBlackBoxTo() != to)&&
+ (!bbGetUpdateTransferedToParent())&&
+ (!to->bbGetExecuting())
+ )
+ )
+ {
+ bbtkDebugMessage("process",3,
+ " ... Transfering update order to parent"
+ <<std::endl);
+
+ bbSetUpdateTransferedToParent(true);
+ i->second->GetConnectionVector().front() //.lock()
+ ->GetBlackBoxTo()->bbExecute(false);
+ }
+ else
+ {
+ bbSetUpdateTransferedToParent(false);
+ bbtkDebugMessage("process",3,
+ " ... No need to transfer to parent"
+ <<std::endl);
+ }
+ }
+ /*
+
+ // 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);
+ }
+
+ bbtkDebugMessageDec("process",3,
+ "<= WxBlackBox::bbBackwardUpdate() ["
+ <<bbGetFullName()<<"]"<<std::endl);
+
+ return bbGetStatus();
+
+
+ }
+
+ //=========================================================================
+ 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 )
+ {
+ Window* show = 0;
+ // If the window already exists : no need creating it
+ if (bbGetWindow()!=0)
+ {
+ bbtkDebugMessage("wx",2,
+ "-> Window already exists"
+ <<std::endl);
+ show = bbGetWindow();
+ }
+ // Else create window
+ else
+ {
+ bbtkDebugMessage("wx",2,
+ "-> Creating the window"
+ <<std::endl);
+
+
+ // Input WinDialog set to true : creating a Dialog
+ if (bbGetInputWinDialog())
+ {
+ bbtkDebugMessage("wx",2,
+ " Input WinDialog set to true : creating a Dialog"
+ <<std::endl);
+ show = (Window*) new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
+ // 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"
+ <<std::endl);
+ show = (Window*) new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
+ // bbGetWxParent(),
+ // LG 24/11/08 : New widget pipeline
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
+ wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) );
+ }
+
+ }
+
+ // 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("wx",3,
+ "-> No widget event handler : creating one"
+ <<std::endl);
+ new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
+ bbGetOutputWidget());
+ }
+ else if ( ! bbGetWidgetEventHandler()->IsHandlerOf
+ ( bbGetOutputWidget() ) )
+ {
+ bbtkDebugMessage("wx",3,
+ "-> Obsolete widget event handler : re-creating one"
+ <<std::endl);
+ delete bbGetWidgetEventHandler();
+ new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
+ bbGetOutputWidget());
+ }
+ // Sets the name of the wxWindow to the input WinTitle
+ bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle()));
+ }
+
+
+ }
+
+
+
+ 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<WxBlackBox>(from);
+ // Call bbCreateWidgetAndEventHandler
+ wfrom->bbCreateWidgetAndEventHandler(parent);
+ // Get the widget created
+ w = wfrom->bbGetOutputWidget();
+ }
+ return w;
+ }
+
+ /*