-/*=========================================================================
-
+/*=========================================================================
Program: bbtk
Module: $RCSfile: bbtkWxBlackBox.cxx,v $
Language: C++
- Date: $Date: 2008/04/08 06:59:30 $
- Version: $Revision: 1.11 $
-
- Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
- l'Image). All rights reserved. See Doc/License.txt or
- http://www.creatis.insa-lyon.fr/Public/bbtk/License.html for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notices for more information.
-
+ Date: $Date: 2009/05/19 10:19:23 $
+ Version: $Revision: 1.40 $
=========================================================================*/
+/* ---------------------------------------------------------------------
+
+* Copyright (c) CREATIS-LRMN (Centre de Recherche en Imagerie Medicale)
+* Authors : Eduardo Davila, Laurent Guigues, Jean-Pierre Roux
+*
+* This software is governed by the CeCILL-B license under French law and
+* abiding by the rules of distribution of free software. You can use,
+* modify and/ or redistribute the software under the terms of the CeCILL-B
+* license as circulated by CEA, CNRS and INRIA at the following URL
+* http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+* or in the file LICENSE.txt.
+*
+* As a counterpart to the access to the source code and rights to copy,
+* modify and redistribute granted by the license, users are provided only
+* with a limited warranty and the software's author, the holder of the
+* economic rights, and the successive licensors have only limited
+* liability.
+*
+* The fact that you are presently reading this means that you have had
+* knowledge of the CeCILL-B license and that you accept its terms.
+* ------------------------------------------------------------------------ */
+
+
#ifdef _USE_WXWIDGETS_
*/
#include "bbtkWxBlackBox.h"
+#include "bbtkBlackBoxOutputConnector.h"
+
//#include "bbtkWxContainerBlackBox.h"
#include <wx/dialog.h>
- //=========================================================================
- // WxBlackBoxWindow
- //=========================================================================
-
-
-
- //=========================================================================
- WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box)
- : mBox(box), mShown(false)
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<<
- mBox->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWindow(this);
- Wx::IncNbWindowsAlive();
- bbtkDebugMessage("Wx",5," -> Number of windows alive = "
- <<Wx::GetNbWindowsAlive()<<std::endl);
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxWindow::~WxBlackBoxWindow()
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::~WxBlackBoxWindow() ["<<
- mBox->bbGetFullName()<<"]"<<std::endl);
- bbHide();
- mBox->bbSetWindow(0);
- Wx::DecNbWindowsAlive();
- bbtkDebugMessage("Wx",5," -> Number of windows alive = "
- <<Wx::GetNbWindowsAlive()<<std::endl);
-
-
- }
- //=========================================================================
-
-
- //=========================================================================
- void WxBlackBoxWindow::bbShow()
- {
- if (bbIsShown()) return;
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::bbShow() ["<<
- mBox->bbGetFullName()<<"]"<<std::endl);
- Wx::IncNbWindowsShown();
- mShown = true;
- bbtkDebugMessage("Wx",5," -> Number of windows shown = "
- <<Wx::GetNbWindowsShown()<<std::endl);
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxWindow::bbHide()
- {
- if (!bbIsShown()) return;
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::bbHide() ["<<
- mBox->bbGetFullName()<<"]"<<std::endl);
- Wx::DecNbWindowsShown();
- mShown = false;
- bbtkDebugMessage("Wx",5," -> Number of windows shown = "
- <<Wx::GetNbWindowsShown()<<std::endl);
- }
- //=========================================================================
-
-
//=========================================================================
// WxBlackBoxDialog
//=========================================================================
//=========================================================================
- WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox* box,
+ WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox::Pointer box,
wxWindow *parent,
wxString title,
wxSize size)
:
- WxBlackBoxWindow(box),
wxDialog( parent,
-1,
title,
wxMAXIMIZE_BOX |
wxMINIMIZE_BOX |
wxCAPTION
- )
+ ),
+ Parent(box)
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<<
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<<
bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
<<title<<",size)"<<std::endl);
// Insert the widget into the window
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ // Create the widget
+ box->bbCreateWidgetAndEventHandler(this);
wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
- widget->Reparent(this);
sizer->Add( widget, 1, wxALL|wxEXPAND, 2);
//SetAutoLayout(true);
SetSizer(sizer);
//=========================================================================
void WxBlackBoxDialog::bbShow()
{
- bbtkDebugMessage("Wx",5,"WxBlackBoxDialog::bbShow() ["
+ if (bbIsShown()) return;
+ bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() ["
<<bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbShow();
+ Parent::bbShow();
+ Show(false);
SetReturnCode( wxDialog::ShowModal() );
+ bbDestroy();
}
//=========================================================================
//=========================================================================
void WxBlackBoxDialog::bbHide()
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxDialog::bbHide() ["<<
- bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbHide();
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbHide()"<<std::endl);
+ Parent::bbHide();
Hide();
}
//=========================================================================
+ //=========================================================================
+ void WxBlackBoxDialog::bbDestroy()
+ {
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbDestroy()"<<std::endl);
+ wxDialog::Destroy();
+ }
+ //=========================================================================
+
//=========================================================================
WxBlackBoxDialog::~WxBlackBoxDialog()
{
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::~WxBlackBoxDialog()"
+ <<std::endl);
}
//=========================================================================
//=========================================================================
//=========================================================================
- WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox* box,
+ WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox::Pointer box,
wxWindow *parent,
wxString title,
wxSize size)
- : WxBlackBoxWindow(box),
- wxFrame( parent,
+ : wxFrame( parent,
-1,
title,
wxDefaultPosition,
wxMAXIMIZE_BOX |
wxMINIMIZE_BOX |
wxCAPTION
- )
+ ),
+ Parent(box)
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::WxBlackBoxFrame("<<
+ bbtkDebugMessage("wx",9,"WxBlackBoxFrame::WxBlackBoxFrame("<<
bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
<<title<<",size)"<<std::endl);
// Insert the widget into the window
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ box->bbCreateWidgetAndEventHandler(this);
wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
wxFrame* frame = (wxFrame*)this;
- 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);
}
//=========================================================================
//=========================================================================
void WxBlackBoxFrame::bbShow()
{
- bbtkDebugMessage("Wx",5,"WxBlackBoxFrame::bbShow("
+ 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
// (force wx objects creation **NOW**)
+
+
+#if defined(_WIN32)
+ wxFrame::Refresh();
+#endif
+
wxFrame::Update();
- bbGetBlackBox()->bbUserOnShow();
- // wxFrame::SetFocus();
+ wxFrame::SetFocus();
+ // if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
}
//=========================================================================
//=========================================================================
void WxBlackBoxFrame::bbHide()
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::bbHide() ["<<
- bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbHide();
+ bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbHide()"<<std::endl);
+ Parent::bbHide();
wxFrame::Hide();
- bbGetBlackBox()->bbUserOnHide();
- }
- //=========================================================================
-
-
-
- //=========================================================================
- // WxBlackBoxDialogWrapper
- //=========================================================================
- /*
- //=========================================================================
- WxBlackBoxDialogWrapper::WxBlackBoxDialogWrapper(WxBlackBox* box,
- wxDialog *wrapped)
- : WxBlackBoxWindow(box),
- mWrapped(wrapped)
- {
- bbtkDebugMessage("Wx",9,
- "WxBlackBoxDialogWrapper::WxBlackBoxDialogWrapper("
- <<bbGetBlackBox()->bbGetFullName()<<","<<wrapped
- <<")"<<std::endl);
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxDialogWrapper::~WxBlackBoxDialogWrapper()
- {
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialogWrapper::bbShow()
- {
- bbtkDebugMessage("Wx",5,"WxBlackBoxDialogWrapper::bbShow("
- <<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
- WxBlackBoxWindow::bbShow();
- int i = mWrapped->ShowModal();
- // For Windows :
- mWrapped->SetReturnCode( i );
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialogWrapper::bbHide()
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxDialogWrapper::bbHide() ["<<
- bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbHide();
- mWrapped->Hide();
+ if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnHide();
}
//=========================================================================
- */
-
- /*
- //=========================================================================
- // WxBlackBoxWidget
- //=========================================================================
-
//=========================================================================
- WxBlackBoxWidget::WxBlackBoxWidget( WxBlackBox* box)
- : mBox(box)
+ void WxBlackBoxFrame::bbDestroy()
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::WxBlackBoxWidget("<<box->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWidget(this);
+ bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbDestroy()"<<std::endl);
+ wxFrame::Destroy();
}
//=========================================================================
- //=========================================================================
- WxBlackBoxWidget::~WxBlackBoxWidget()
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::~WxBlackBoxWidget("<<mBox->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWidget(0);
- //bbtkDebugMessage("Wx",9,"EO WxBlackBoxWidget::~WxBlackBoxWidget("<<mBox->bbGetFullName()<<")"<<std::endl);
- }
- //=========================================================================
- */
-
//=========================================================================
//=========================================================================
//=========================================================================
- WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler( WxBlackBox* box,
- wxWindow *widget )
+ WxBlackBoxWidgetEventHandler::
+ WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box,
+ wxWindow *widget )
:
mBox(box),
mWindow(widget)
- // mDead(false)
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler("<<mBox->bbGetFullName()<<")"<<std::endl);
+ bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler("<<mBox.lock()->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWidgetEventHandler(this);
+ mBox.lock()->bbSetWidgetEventHandler(this);
Connect ( mWindow->GetId(),
wxEVT_DESTROY,
//=========================================================================
WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler()
{
- bbtkDebugMessage("Wx",9,
- "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler("
- <<mBox->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWidgetEventHandler(0);
+ 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);
}
//=========================================================================
//=========================================================================
void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&)
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() ["
- <<mBox->bbGetFullName()<<"]"<<std::endl);
- mBox->bbSetOutputWidget(0);
- mBox->bbSetModifiedStatus();
- //mDead = true;
- //delete this;
+ bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() []"<<std::endl);
+ if (mBox.expired()) return;
+ bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() alive ["
+ <<mBox.lock()->bbGetFullName()<<"]"<<std::endl);
+ mBox.lock()->bbSetOutputWidget(0);
}
//=========================================================================
- /*
- //=========================================================================
- wxWindow* WxParentToChildData::GetWindowInWhichToInsert( const BlackBox* b)
- const
- {
- bbtkDebugMessageInc("Kernel",9,"WxParentToChildData::GetWindowInWhichToInsert("<<b->bbGetFullName()<<")"<<std::endl);
-
- BlackBox::InputConnectorMapType::const_iterator i = b->bbGetInputConnectorMap().find("WinParent");
- if (i==b->bbGetInputConnectorMap().end())
- {
- bbtkError("WxParentToChildData::GetWindowInWhichToInsert : the box "
- <<b->bbGetFullName()
- <<" does not have any 'Parent' input ?!?");
- }
- Connection* c = i->second->GetConnection();
- if (!c)
- {
- bbtkDebugMessage("Kernel",9,
- "-> The input 'Parent' of the box "
- <<b->bbGetFullName()
- <<" is not connected."<<std::endl);
- return 0;
- }
-
- std::map< Connection*, wxWindow *>::const_iterator j
- = mConnectionToWindowMap.find(c);
-
- if (j==mConnectionToWindowMap.end())
- {
- bbtkError("WxParentToChildData::GetWindowInWhichToInsert("
- <<b->bbGetFullName()
- <<") no window provided by parent ?!?");
- }
-
- bbtkDebugDecTab("Kernel",9);
- return j->second;
- }
- //=========================================================================
- */
-
//=========================================================================
// WxBlackBox
//=========================================================================
//=========================================================================
//=========================================================================
//=========================================================================
- BBTK_USER_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()
+ void WxBlackBox::bbUserInitializeProcessing()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()"
- <<std::endl);
- bbInitAttributes();
}
- //=========================================================================
-
+ //==================================================================
//=========================================================================
- void WxBlackBox::bbUserDestructor()
+ void WxBlackBox::bbUserFinalizeProcessing()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserDestructor()"<<std::endl);
- if (bbGetWindow()) {
- delete bbGetWindow();
- // bbSetWindow(0);
- }
- bbtkDebugMessage("Kernel",9,"EO WxBlackBox::bbUserDestructor()"<<std::endl);
- }
- //=========================================================================
-
-
- /*
- //=========================================================================
- WxBlackBox::Widget* WxBlackBox::bbGetWidget()
- {
- if (bbGetOutputWidget() && bbGetOutputWidget()->IsDead())
+ bbtkDebugMessage("wx",9,"WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
+ if (bbGetWidgetEventHandler()!=0)
{
- bbtkDebugMessage("Wx",9,"WxBlackBox::bbGetWidget() ["<<
- bbGetFullName()<<"] : Widget is dead : deleting it"
- <<std::endl);
- delete bbGetOutputWidget();
- bbSetOutputWidget(0);
+ bbtkDebugMessage("wx",9,"Deleting Widget Event Handler"<<std::endl);
+ delete bbGetWidgetEventHandler();
}
- return bbGetOutputWidget();
+
}
- //=========================================================================
- */
+ //==================================================================
-
- //=========================================================================
- /**
- * \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);
- }
- //=========================================================================
-
- //=========================================================================
- /// Main processing method of the box.
- void WxBlackBox::bbExecute(bool force)
+ WxBlackBoxDialog* w = 0;
+ w = new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle()
+ + " - bbtk (c) CREATIS LRMN"),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ));
+ w->Show(true);
+ }
+ //==================================================================
+
+ //==================================================================
+ /// Callback for creating a Frame window
+ void WxBlackBox::bbCreateFrameWindow()
{
- 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()
- ->GetBlackBoxTo()->bbExecute(force);
-
- }
- // else call 'standard' BlackBox execution method
- else
- {
- BlackBox::bbExecute(force);
- }
- //
-
- bbtkDebugMessageDec("Process",1,
- "<= WxBlackBox::bbExecute() ["
- <<bbGetFullName()<<"]"<<std::endl);
+ WxBlackBoxFrame* w = 0;
+ w = new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+ std2wx( bbGetInputWinTitle()
+ + " - bbtk (c) CREATIS LRMN"),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ) );
+ w->Show();
}
- //=========================================================================
-
+ //==================================================================
+
+
+
//=========================================================================
- /// Main processing method of the box.
- IOStatus WxBlackBox::bbBackwardUpdate( Connection* caller )
+ void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent)
{
- 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"))
- )
+ if (bbGetOutputWidget()==0)
{
- 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()
- ->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
- /// (called after bbProcess during bbExecute)
- void WxBlackBox::bbShowWindow()
- {
- bbtkDebugMessageInc("Process",1,"=> WxBlackBox::bbShowWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- // If Event Handler for the widget does not exist or is obsolete : create it
+ this->bbUserCreateWidget(parent);
+ }
+ // If Event Handler for the widget does not exist or is obsolete:
+ // create it
if (bbGetOutputWidget()!=0)
{
if (bbGetWidgetEventHandler()==0)
{
- bbtkDebugMessage("Process",3,
+ bbtkDebugMessage("wx",3,
"-> No widget event handler : creating one"
<<std::endl);
- new WxBlackBoxWidgetEventHandler(this,bbGetOutputWidget());
+ new WxBlackBoxWidgetEventHandler(GetThisPointer<WxBlackBox>(),
+ bbGetOutputWidget());
}
else if ( ! bbGetWidgetEventHandler()->IsHandlerOf
( bbGetOutputWidget() ) )
{
- bbtkDebugMessage("Process",3,
+ bbtkDebugMessage("wx",3,
"-> 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()));
}
-
- // 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("Process",2,
- "-> Output 'Widget' connected : nothing to do"
- <<std::endl);
- bbtkDebugDecTab("Process",1);
- return;
- }
-
-
- Window* show = 0;
- // If the window already exists : no need creating it
- if (bbGetWindow()!=0)
- {
- bbtkDebugMessage("Process",2,
- "-> Window already exists"
- <<std::endl);
- show = bbGetWindow();
- }
- // Else if the widget exists : create window
- else if (bbGetOutputWidget()!=0)
- {
- bbtkDebugMessage("Process",2,
- "-> Widget exists : creating the window"
- <<std::endl);
-
-
- // Input WinDialog set to true : creating a Dialog
- if (bbGetInputWinDialog())
- {
- bbtkDebugMessage("Process",2,
- " Input WinDialog set to true : creating a Dialog"
- <<std::endl);
- show = (Window*) new WxBlackBoxDialog( this,
- bbGetWxParent(),
- 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( this,
- bbGetWxParent(),
- 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
- {
- bbtkDebugMessage("Process",2,"-> Already shown : nothing to do"<<std::endl);
- }
-
-
- bbtkDebugMessage("Process",1,"<= WxBlackBox::bbShowWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
- bbtkDebugDecTab("Process",1);
- }
- //==================================================================
-
-
-
-
- //==================================================================
- void WxBlackBox::bbHideWindow()
- {
- bbtkDebugMessageInc("Process",1,"=> WxBlackBox::bbHideWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- if (bbGetWindow()!=0) bbGetWindow()->bbHide();
-
- bbtkDebugMessageDec("Process",1,"<= WxBlackBox::bbHideWindow() ["
- <<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 ((WxBlackBox*)i->second->GetConnectionVector().front()
- ->GetBlackBoxTo())->bbGetContainingWindow();
- }
- return 0;
+
}
- //==================================================================
-
-
- //==================================================================
- wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); }
- //==================================================================
+ //=========================================================================
//==================================================================
- 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