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
//=========================================================================
- WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box)
+ WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox::Pointer box)
: mBox(box), mShown(false)
{
bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<<
mBox->bbGetFullName()<<")"<<std::endl);
mBox->bbSetWindow(this);
Wx::IncNbWindowsAlive();
- bbtkDebugMessage("Wx",9," -> Number of windows alive = "
+ bbtkDebugMessage("Wx",5," -> Number of windows alive = "
<<Wx::GetNbWindowsAlive()<<std::endl);
}
//=========================================================================
bbHide();
mBox->bbSetWindow(0);
Wx::DecNbWindowsAlive();
- bbtkDebugMessage("Wx",9," -> Number of windows alive = "
+ bbtkDebugMessage("Wx",5," -> Number of windows alive = "
<<Wx::GetNbWindowsAlive()<<std::endl);
}
//=========================================================================
+
//=========================================================================
void WxBlackBoxWindow::bbShow()
{
mBox->bbGetFullName()<<"]"<<std::endl);
Wx::IncNbWindowsShown();
mShown = true;
- bbtkDebugMessage("Wx",9," -> Number of windows shown = "
+ bbtkDebugMessage("Wx",5," -> Number of windows shown = "
<<Wx::GetNbWindowsShown()<<std::endl);
}
//=========================================================================
mBox->bbGetFullName()<<"]"<<std::endl);
Wx::DecNbWindowsShown();
mShown = false;
- bbtkDebugMessage("Wx",9," -> Number of windows shown = "
+ bbtkDebugMessage("Wx",5," -> Number of windows shown = "
<<Wx::GetNbWindowsShown()<<std::endl);
}
//=========================================================================
//=========================================================================
//=========================================================================
- WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox* box,
+ WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox::Pointer box,
wxWindow *parent,
wxString title,
wxSize size)
//=========================================================================
//=========================================================================
- WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox* box,
+ WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox::Pointer box,
wxWindow *parent,
wxString title,
wxSize size)
bbtkDebugMessage("Wx",5,"WxBlackBoxFrame::bbShow("
<<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
WxBlackBoxWindow::bbShow();
- wxFrame::Show();
+ wxFrame::Show();
+ // This Update is ** MANDATORY **
+ // to synchronize wxvtkRenderWindowInteractor objects
+ // (force wx objects creation **NOW**)
+ wxFrame::Update();
+ bbGetBlackBox()->bbUserOnShow();
+ // wxFrame::SetFocus();
}
//=========================================================================
bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::bbHide() ["<<
bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
WxBlackBoxWindow::bbHide();
- Hide();
+ wxFrame::Hide();
+ bbGetBlackBox()->bbUserOnHide();
}
//=========================================================================
//=========================================================================
//=========================================================================
- WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler( WxBlackBox* box,
- wxWindow *widget )
+ WxBlackBoxWidgetEventHandler::
+ WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box,
+ wxWindow *widget )
:
mBox(box),
mWindow(widget)
//=========================================================================
//=========================================================================
//=========================================================================
- BBTK_USER_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox);
+ BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox);
//=========================================================================
//=========================================================================
}
//=========================================================================
+ //=========================================================================
+ /// Main processing method of the box.
+ void WxBlackBox::bbExecute(bool force)
+ {
+ bbtkDebugMessageInc("Process",1,
+ "=> WxBlackBox::bbExecute() ["
+ <<bbGetFullName()<<"]"<<std::endl);
+
+ // If the output 'Widget' is connected then
+ // we must execute the parent box
+ BlackBox::OutputConnectorMapType::const_iterator i
+ = bbGetOutputConnectorMap().find("Widget");
+
+ if ( i->second->GetConnectionVector().size() != 0 )
+ {
+ bbtkDebugMessage("Process",2,
+ "-> Output 'Widget' connected : transfering execution to parent"
+ <<std::endl);
+
+ i->second->GetConnectionVector().front().lock()
+ ->GetBlackBoxTo()->bbExecute(force);
+
+ }
+ // else call 'standard' BlackBox execution method
+ else
+ {
+ BlackBox::bbExecute(force);
+ }
+ //
+
+ bbtkDebugMessageDec("Process",1,
+ "<= WxBlackBox::bbExecute() ["
+ <<bbGetFullName()<<"]"<<std::endl);
+ }
+ //=========================================================================
+
+ //=========================================================================
+ /// Main processing method of the box.
+ IOStatus WxBlackBox::bbBackwardUpdate( Connection::Pointer caller )
+ {
+ bbtkDebugMessageInc("Process",1,
+ "=> WxBlackBox::bbBackwardUpdate("
+ <<(caller?caller->GetFullName():"0")<<") ["
+ <<bbGetFullName()<<"]"<<std::endl);
+ if (bbGetExecuting())
+ {
+ bbtkWarning(bbGetFullName()<<" : Cyclic execution stopped");
+ return UPTODATE;
+ }
+ bbSetExecuting(true);
+
+ // If the caller is not the connection to the output widget
+ // and the output 'Widget' is connected then
+ // we must execute the parent box
+ bool done = false;
+ if ( (caller==0) ||
+ ((caller!=0)&&(caller->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"
+ <<std::endl);
+
+ i->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() ["
+ <<bbGetFullName()<<"]"<<std::endl);
+
+ bbSetExecuting(false);
+ }
+
+ //=========================================================================
+ void WxBlackBox::bbProcess()
+ {
+ if (bbGetOutputWidget()==0) this->bbUserCreateWidget();
+ this->bbUserProcess();
+ bbShowWindow();
+ }
+ //=========================================================================
+
//==================================================================
/// Specific methods for window creation during pipeline execution
/// Shows the window associated to the box
bbtkDebugMessage("Process",3,
"-> No widget event handler : creating one"
<<std::endl);
- new WxBlackBoxWidgetEventHandler(this,bbGetOutputWidget());
+ new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
+ bbGetOutputWidget());
}
else if ( ! bbGetWidgetEventHandler()->IsHandlerOf
( bbGetOutputWidget() ) )
"-> Obsolete widget event handler : re-creating one"
<<std::endl);
delete bbGetWidgetEventHandler();
- new WxBlackBoxWidgetEventHandler(this,bbGetOutputWidget());
+ new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
+ bbGetOutputWidget());
}
// Sets the name of the wxWindow to the input WinTitle
bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle()));
bbtkDebugMessage("Process",2,
" Input WinDialog set to true : creating a Dialog"
<<std::endl);
- show = (Window*) new WxBlackBoxDialog( this,
- Wx::GetTopWindow(),
+ show = (Window*) new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
+ bbGetWxParent(),
std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) );
}
bbtkDebugMessage("Process",2,
" Input WinDialog set to false : creating a Frame"
<<std::endl);
- show = (Window*) new WxBlackBoxFrame( this,
- Wx::GetTopWindow(),
+ show = (Window*) new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
+ bbGetWxParent(),
std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) );
}
//==================================================================
+ //==================================================================
+ 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<WxBlackBox>
+ (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