Program: bbtk
Module: $RCSfile: bbtkWxBlackBox.cxx,v $
Language: C++
- Date: $Date: 2008/11/24 15:45:48 $
- Version: $Revision: 1.30 $
+ Date: $Date: 2008/12/12 12:56:28 $
+ Version: $Revision: 1.36 $
=========================================================================*/
/* ---------------------------------------------------------------------
*/
#include "bbtkWxBlackBox.h"
+#include "bbtkBlackBoxOutputConnector.h"
+
//#include "bbtkWxContainerBlackBox.h"
#include <wx/dialog.h>
bbtkDebugMessage("wx",9,"WxBlackBoxWindow::bbShow()"<<std::endl);
Wx::IncNbWindowsShown();
mShown = true;
+ if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
}
//=========================================================================
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**)
-
-
+
+
#if defined(_WIN32)
- wxFrame::Refresh();
+ wxFrame::Refresh();
#endif
-
- wxFrame::Update();
- wxFrame::SetFocus();
- if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
+
+ wxFrame::Update();
+ wxFrame::SetFocus();
+ // if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
}
//=========================================================================
bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() ["
<<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
mBox.lock()->bbSetOutputWidget(0);
- mBox.lock()->bbSetModifiedStatus();
+ // LGSIGNAL
+ // mBox.lock()->bbSetModifiedStatus();
}
//=========================================================================
//=========================================================================
//=========================================================================
- void WxBlackBox::bbUserCopyConstructor()
+ void WxBlackBox::bbUserCopyConstructor(bbtk::BlackBox::Pointer)
{
bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()"
<<std::endl);
//=========================================================================
- /*
- //=========================================================================
- WxBlackBox::Widget* WxBlackBox::bbGetWidget()
- {
- if (bbGetOutputWidget() && bbGetOutputWidget()->IsDead())
- {
- bbtkDebugMessage("wx",9,"WxBlackBox::bbGetWidget() ["<<
- bbGetFullName()<<"] : Widget is dead : deleting it"
- <<std::endl);
- delete bbGetOutputWidget();
- bbSetOutputWidget(0);
- }
- return bbGetOutputWidget();
- }
- //=========================================================================
- */
-
-
//=========================================================================
/**
* \brief Initialize the attributes of the class
bbSetOutputWidget(0);
bbSetWidgetEventHandler(0);
- bbSetUpdateTransferedToParent(false);
+ // bbSetUpdateTransferedToParent(false);
}
//=========================================================================
//=========================================================================
- /// Main processing method of the box.
- void WxBlackBox::bbExecute(bool force)
- {
- bbtkDebugMessageInc("process",2,
- "=> WxBlackBox::bbExecute("<<(int)force<<") ["
- <<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",3,
- "-> 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",2,
- "<= WxBlackBox::bbExecute() ["
- <<bbGetFullName()<<"]"<<std::endl);
- }
- //=========================================================================
-
-
- //=========================================================================
- /// 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 ( ! (( 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();
- }
-
- // If the caller's box to is not the box to connected to the
- // output 'Widget'
-
- BlackBox::OutputConnectorMapType::const_iterator i
- = bbGetOutputConnectorMap().find("Widget") ;
- if ( i->second->GetConnectionVector().size() != 0 )
-
+ void WxBlackBox::bbProcess()
+ {
+ // If output widget not connected : have to create and show the window
+ if ( (*bbGetOutputConnectorMap().find("Widget")).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
+ Window* show = 0;
+ // If the window already exists : no need creating it
+ if (bbGetWindow()!=0)
{
- bbtkDebugMessage("process",3,
- "-> Output 'Widget' connected to '"
- <<to->bbGetFullName()<<"'"
+ bbtkDebugMessage("wx",2,
+ "-> Window already exists"
<<std::endl);
+ show = bbGetWindow();
}
- if ((caller==0) ||
- ( (caller!=0) &&
- (caller->GetBlackBoxTo() != to)&&
- (!bbGetUpdateTransferedToParent())&&
- (!to->bbGetExecuting())
- )
- )
+ // Else create window
+ else
{
- bbtkDebugMessage("process",3,
- " ... Transfering update order to parent"
+ bbtkDebugMessage("wx",2,
+ "-> Creating the window"
<<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);
+ // 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>(),
+ 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>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
+ wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) );
+ }
+
}
- }
- /*
-
- // 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();
+
+ // Show the window
+ show->bbShow();
+
+
+ }
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;
- }
-
- /*
- //==================================================================
- /// Specific methods for window creation during pipeline execution
- /// Shows the window associated to the box
- /// (called after bbProcess during bbExecute)
- void WxBlackBox::bbShowWindow()
+ //=========================================================================
+ void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent)
{
- bbtkDebugMessageInc("wx",1,"=> WxBlackBox::bbShowWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
+ if (bbGetOutputWidget()==0)
+ {
+ this->bbUserCreateWidget(parent);
+ }
// If Event Handler for the widget does not exist or is obsolete : create it
if (bbGetOutputWidget()!=0)
{
// Sets the name of the wxWindow to the input WinTitle
bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle()));
}
-
- // If the output 'Widget' is connected then it's gonna
- // be captured by its parent window : nothing to do
- if ( (*bbGetOutputConnectorMap().find("Widget")).second
- ->GetConnectionVector().size() != 0 )
- {
-
- bbtkDebugMessage("wx",2,
- "-> Output 'Widget' connected : nothing to do"
- <<std::endl);
- return;
- }
-
-
- 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 if the widget exists : create window
- else if (bbGetOutputWidget()!=0)
- {
- bbtkDebugMessage("wx",2,
- "-> Widget exists : 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() ) );
- }
-
- }
- // No window nor widget : error
- else
- {
- bbtkError("WxBlackBox::bbShowWindow() ["
- <<bbGetFullName()
- <<"] : No widget. Did you set the box output 'Widget' in the processing method of the box ?");
- }
-
- // Show the window
- if (true) //!show->IsShown())
- {
- show->bbShow();
- }
- else
+
+ }
+ //=========================================================================
+
+
+ //=========================================================================
+ 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() )
{
- bbtkDebugMessage("wx",2,"-> Already shown : nothing to do"<<std::endl);
+ // 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();
}
-
-
- bbtkDebugMessage("wx",2,"<= WxBlackBox::bbShowWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
+ return w;
}
//==================================================================
-*/
-
//==================================================================
//==================================================================
- //==================================================================
- // LG 24/11/08 : New widget pipeline
- // wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); }
- //==================================================================
-
-
//==================================================================
bool WxBlackBox::bbIsShown()
{