Program: bbtk
Module: $RCSfile: bbtkWxBlackBox.cxx,v $
Language: C++
- Date: $Date: 2009/03/23 13:06:41 $
- Version: $Revision: 1.37 $
+ Date: $Date: 2009/05/19 10:19:23 $
+ Version: $Revision: 1.40 $
=========================================================================*/
/* ---------------------------------------------------------------------
- //=========================================================================
- // WxBlackBoxWindow
- //=========================================================================
-
-
-
- //=========================================================================
- WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox::Pointer box)
- : mBox(box), mShown(false)
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<<
- mBox.lock()->bbGetFullName()<<")"<<std::endl);
- mBox.lock()->bbSetWindow(this);
- Wx::IncNbWindowsAlive();
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxWindow::~WxBlackBoxWindow()
- {
- bbtkDebugMessage("wx",9,"WxBlackBoxWindow::~WxBlackBoxWindow() "
- <<this<<std::endl);
- bbHide();
- Wx::DecNbWindowsAlive();
- if (!mBox.expired())
- {
- mBox.lock()->bbSetWindow(0);
- }
- }
- //=========================================================================
-
-
- //=========================================================================
- void WxBlackBoxWindow::bbShow()
- {
- if (bbIsShown()) return;
- bbtkDebugMessage("wx",9,"WxBlackBoxWindow::bbShow()"<<std::endl);
- Wx::IncNbWindowsShown();
- mShown = true;
- if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxWindow::bbHide()
- {
- if (!bbIsShown()) return;
- bbtkDebugMessage("wx",9,"WxBlackBoxWindow::bbHide()"<<std::endl);
- Wx::DecNbWindowsShown();
- mShown = false;
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxWindow::bbClose()
- {
- }
- //=========================================================================
-
//=========================================================================
// WxBlackBoxDialog
wxMINIMIZE_BOX |
wxCAPTION
),
- WxBlackBoxWindow(box)
+ Parent(box)
{
bbtkDebugMessage("wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<<
bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
<<title<<",size)"<<std::endl);
// Insert the widget into the window
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
- // LG 22/11/08 : new widget pipeline
- bbGetBlackBox()->bbCreateWidgetAndEventHandler(this);
+ // Create the widget
+ box->bbCreateWidgetAndEventHandler(this);
wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
-// old : widget->Reparent(this);
sizer->Add( widget, 1, wxALL|wxEXPAND, 2);
//SetAutoLayout(true);
SetSizer(sizer);
if (bbIsShown()) return;
bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() ["
<<bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbShow();
- Show(false);
+ Parent::bbShow();
+ Show(false);
SetReturnCode( wxDialog::ShowModal() );
- bbClose();
+ bbDestroy();
}
//=========================================================================
void WxBlackBoxDialog::bbHide()
{
bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbHide()"<<std::endl);
- WxBlackBoxWindow::bbHide();
+ Parent::bbHide();
Hide();
}
//=========================================================================
//=========================================================================
- void WxBlackBoxDialog::bbClose()
+ void WxBlackBoxDialog::bbDestroy()
{
- bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbClose()"<<std::endl);
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbDestroy()"<<std::endl);
wxDialog::Destroy();
}
//=========================================================================
//=========================================================================
WxBlackBoxDialog::~WxBlackBoxDialog()
{
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::~WxBlackBoxDialog()"
+ <<std::endl);
}
//=========================================================================
wxMINIMIZE_BOX |
wxCAPTION
),
- WxBlackBoxWindow(box)
+ Parent(box)
{
bbtkDebugMessage("wx",9,"WxBlackBoxFrame::WxBlackBoxFrame("<<
bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
<<title<<",size)"<<std::endl);
// Insert the widget into the window
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
- // LG 22/11/08 : new widget pipeline
- bbGetBlackBox()->bbCreateWidgetAndEventHandler(this);
+ box->bbCreateWidgetAndEventHandler(this);
wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
wxFrame* frame = (wxFrame*)this;
-// old : widget->Reparent(frame);
sizer->Add( widget, 1, wxALL|wxGROW, 2);
// frame->SetAutoLayout(true);
frame->SetSizer(sizer);
//=========================================================================
WxBlackBoxFrame::~WxBlackBoxFrame()
{
+ bbtkDebugMessage("wx",9,"WxBlackBoxFrame::~WxBlackBoxFrame()"
+ <<std::endl);
}
//=========================================================================
if (bbIsShown()) return;
bbtkDebugMessage("wx",5,"WxBlackBoxFrame::bbShow("
<<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
- WxBlackBoxWindow::bbShow();
+ Parent::bbShow();
wxFrame::Show();
// This Update is ** MANDATORY **
// to synchronize wxvtkRenderWindowInteractor objects
void WxBlackBoxFrame::bbHide()
{
bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbHide()"<<std::endl);
- WxBlackBoxWindow::bbHide();
+ Parent::bbHide();
wxFrame::Hide();
if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnHide();
}
//=========================================================================
//=========================================================================
- void WxBlackBoxFrame::bbClose()
+ void WxBlackBoxFrame::bbDestroy()
{
- bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbClose()"<<std::endl);
- wxFrame::Close();
+ bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbDestroy()"<<std::endl);
+ wxFrame::Destroy();
}
//=========================================================================
//=========================================================================
WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler()
{
+ bbtkDebugMessage("wx",9,
+ "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() ["
+ <<std::endl);
+
+
+ Disconnect ( mWindow->GetId() );
+
if (mBox.expired()) return;
bbtkDebugMessage("wx",9,
"WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() ["
<<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
- mBox.lock()->bbSetWidgetEventHandler(0);
+
+ mBox.lock()->bbSetWidgetEventHandler(0);
}
//=========================================================================
//=========================================================================
void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&)
{
+ bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() []"<<std::endl);
if (mBox.expired()) return;
- bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() ["
+ bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() alive ["
<<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
mBox.lock()->bbSetOutputWidget(0);
- // LGSIGNAL
- // mBox.lock()->bbSetModifiedStatus();
}
//=========================================================================
//=========================================================================
//=========================================================================
//=========================================================================
- BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox);
+ BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
//=========================================================================
//=========================================================================
- void WxBlackBox::bbUserConstructor()
+ void WxBlackBox::bbUserSetDefaultValues()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserConstructor()"<<std::endl);
- bbInitAttributes();
+ bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
+ bbSetWidgetEventHandler(0);
}
//=========================================================================
//=========================================================================
- void WxBlackBox::bbUserCopyConstructor(bbtk::BlackBox::Pointer)
+ void WxBlackBox::bbUserInitializeProcessing()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()"
- <<std::endl);
- bbInitAttributes();
}
- //=========================================================================
-
+ //==================================================================
//=========================================================================
- void WxBlackBox::bbUserDestructor()
+ void WxBlackBox::bbUserFinalizeProcessing()
{
- bbtkDebugMessage("wx",9,"==> WxBlackBox::bbUserDestructor() ["<<bbGetFullName()<<"]"<<std::endl);
- if (bbGetWindow()) {
- delete bbGetWindow();
- bbSetWindow(0);
- }
- bbtkDebugMessage("wx",9,"<== WxBlackBox::bbUserDestructor() ["<<bbGetFullName()<<"]"<<std::endl);
+ bbtkDebugMessage("wx",9,"WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
+ if (bbGetWidgetEventHandler()!=0)
+ {
+ bbtkDebugMessage("wx",9,"Deleting Widget Event Handler"<<std::endl);
+ delete bbGetWidgetEventHandler();
+ }
+
}
- //=========================================================================
-
+ //==================================================================
- //=========================================================================
- /**
- * \brief Initialize the attributes of the class
- *
- */
- void WxBlackBox::bbInitAttributes()
+ //==================================================================
+ /// Callback for creating a Dialog window (modal)
+ void WxBlackBox::bbCreateDialogWindow()
{
- bbmWindow = 0;
- // bbmWidget = 0;
- // bbSetInputWinParent(0);
- bbSetInputWinTitle(bbGetName());
- bbSetInputWinWidth(800);
- bbSetInputWinHeight(800);
- bbSetInputWinDialog(false);
- bbSetOutputWidget(0);
-
- bbSetWidgetEventHandler(0);
- // bbSetUpdateTransferedToParent(false);
+ WxBlackBoxDialog* w = 0;
+ w = new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle()
+ + " - bbtk (c) CREATIS LRMN"),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ));
+ w->Show(true);
}
- //=========================================================================
-
+ //==================================================================
- //=========================================================================
- void WxBlackBox::bbCreateWidget()
- {
- // If output widget not connected : have to create and show the window
- 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();
- } // 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>(),
- Wx::GetTopWindow(),
- std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
- wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ));
- //bbGetInputWinWidth() , bbGetInputWinHeight() ) );
-// show->bbGetDialog()->Update();
-// show->bbGetDialog()->Refresh();
-
- //show->bbGetDialog()->Iconize(true);
- show->bbGetDialog()->Show(true);
-// show->bbGetDialog()->Show(false);
-// show->bbGetDialog()->SetSize(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() ) );
-// show->bbGetFrame()->Update();
-// show->bbGetFrame()->Refresh();
- show->bbGetFrame()->Show();
- }
-
- } // else bbGetWindow
-// show->bbShow();
-
- } // bbGetOutputConnectorMap().find("Widget")).second->GetConnectionVector().size()
- }
- //=========================================================================
-
-
- //=========================================================================
- void WxBlackBox::bbShowWidget()
- {
- // Show the window
- Window *show = bbGetWindow();
- if (show!=NULL)
- {
- show->bbShow();
- }
- }
- //=========================================================================
-
-
- //=========================================================================
- void WxBlackBox::bbProcess()
- {
- // TODO : update the window size and title
- this->bbUserProcess();
- }
- //=========================================================================
-
- /* EED BORRAME original 18 mars 2009
- //=========================================================================
- void WxBlackBox::bbProcess()
- {
- // If output widget not connected : have to create and show the window
- 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>(),
- 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() ) );
- }
-
- }
-
- // Show the window
- show->bbShow();
-
-
- }
- this->bbUserProcess();
-
+ //==================================================================
+ /// Callback for creating a Frame window
+ void WxBlackBox::bbCreateFrameWindow()
+ {
+ WxBlackBoxFrame* w = 0;
+ w = new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle()
+ + " - bbtk (c) CREATIS LRMN"),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ) );
+ w->Show();
}
- //=========================================================================
-*/
-
+ //==================================================================
+
+
+
//=========================================================================
void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent)
{
this->bbUserCreateWidget(parent);
}
- // If Event Handler for the widget does not exist or is obsolete : create it
+ // If Event Handler for the widget does not exist or is obsolete:
+ // create it
if (bbGetOutputWidget()!=0)
{
if (bbGetWidgetEventHandler()==0)
//=========================================================================
- //=========================================================================
- 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;
- }
- //==================================================================
-
-
//==================================================================
- void WxBlackBox::bbHideWindow()
- {
- bbtkDebugMessageInc("wx",1,"=> WxBlackBox::bbHideWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- if (bbGetWindow()!=0) bbGetWindow()->bbHide();
-
- bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbHideWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
- }
- //==================================================================
-
-
- //==================================================================
- void WxBlackBox::bbCloseWindow()
- {
- bbtkDebugMessageInc("wx",1,"=> WxBlackBox::bbCloseWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- if (bbGetWindow()!=0) bbGetWindow()->bbClose();
-
- bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbCloseWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
- }
- //==================================================================
-
- //==================================================================
- 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;
- }
- //==================================================================
-
-
- //==================================================================
- bool WxBlackBox::bbIsShown()
- {
- if (bbGetContainingWindow()!=0)
- return bbGetContainingWindow()->bbIsShown();
- return false;
- }
+ // void WxBlackBox::InitWindowManagerIfNeeded() { Wx::
+ void WxBlackBox::IncNbWindowsAlive() { Wx::IncNbWindowsAlive(); }
+ void WxBlackBox::DecNbWindowsAlive() { Wx::DecNbWindowsAlive(); }
+ int WxBlackBox::GetNbWindowsAlive() { return Wx::GetNbWindowsAlive(); }
+ bool WxBlackBox::IsSomeWindowAlive() { return Wx::IsSomeWindowAlive(); }
+
+ void WxBlackBox::IncNbWindowsShown() { Wx::IncNbWindowsShown(); }
+ void WxBlackBox::DecNbWindowsShown() { Wx::DecNbWindowsShown(); }
+ int WxBlackBox::GetNbWindowsShown() { return Wx::GetNbWindowsShown(); }
+ bool WxBlackBox::IsSomeWindowShown() { return Wx::GetNbWindowsShown(); }
//==================================================================
-
+
}//namespace bbtk