+
+ //=========================================================================
+ /// Main processing method of the box.
+ IOStatus WxBlackBox::bbBackwardUpdate( Connection::Pointer caller )
+ {
+ bbtkDebugMessage("process",3,
+ "=> WxBlackBox::bbBackwardUpdate("
+ <<(caller?caller->GetFullName():"0")<<") ["
+ <<bbGetFullName()<<"]"<<std::endl);
+ // If the caller's box to is not the box to connected to the
+ // output 'Widget'
+ if ( ! (( bbGetStatus() == MODIFIED ) ||
+ ( bbBoxProcessModeIsAlways() )) )
+ {
+ bbtkDebugMessage("process",3,"Up-to-date : nothing to do"<<std::endl);
+ bbtkDebugMessage("process",3,
+ "<= WxBlackBox::bbBackwardUpdate("
+ <<(caller?caller->GetFullName():"0")<<") ["
+ <<bbGetFullName()<<"]"<<std::endl);
+ return bbGetStatus();
+ }
+
+ 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()))
+ {
+ 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();
+ }
+ //=========================================================================
+