+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ # pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ # 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.
+ # ------------------------------------------------------------------------ */
+
+
/*=========================================================================
-
Program: bbtk
Module: $RCSfile: bbtkWxBlackBox.cxx,v $
Language: C++
- Date: $Date: 2008/02/07 07:58:54 $
- Version: $Revision: 1.6 $
-
- 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: 2012/11/16 08:49:01 $
+ Version: $Revision: 1.45 $
=========================================================================*/
-#ifdef _USE_WXWIDGETS_
+#ifdef _USE_WXWIDGETS_
/**
* \file
*/
#include "bbtkWxBlackBox.h"
+#include "bbtkBlackBoxOutputConnector.h"
+
//#include "bbtkWxContainerBlackBox.h"
#include <wx/dialog.h>
//#include "bbtkData.h"
//#include "bbtkFactory.h"
-
-
-
namespace bbtk
{
-
//=========================================================================
- wxWindow* WxBlackBox::bbGlobalGetTopWindow()
- {
- return bbmgTopWindow;
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBox::bbGlobalSetTopWindow(wxWindow* w)
- {
- if ( bbmgTopWindow )
- {
- bbtkGlobalError("WxBlackBox::bbGlobalSetTopWindow : top window already set !");
- }
- bbmgTopWindow = w;
- }
+ // WxFrame
//=========================================================================
-
-
- //=========================================================================
- void WxBlackBox::bbGlobalDecNbWindowsAlive()
- {
- bbmgNbWindowsAlive--;
- /*
- if ( (bbmgNbWindowsAlive==0) &&
- bbmgTopWindow && (!bbmgTopWindow->IsShown()))
- {
- bbmgTopWindow->Close();
- }
- */
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBox::bbGlobalDecNbWindowsShown()
- {
- bbmgNbWindowsShown--;
- if ( (bbmgNbWindowsShown==0) &&
- bbmgTopWindow && (!bbmgTopWindow->IsShown()))
- {
- bbmgTopWindow->Close();
- }
- }
- //=========================================================================
-
- //=========================================================================
- // Static members
- wxWindow* WxBlackBox::bbmgTopWindow =0;
- int WxBlackBox::bbmgNbWindowsAlive = 0;
- int WxBlackBox::bbmgNbWindowsShown = 0;
- //=========================================================================
-
-
-
-
- //=========================================================================
- // WxBlackBoxWindow
- //=========================================================================
-
-
-
- //=========================================================================
- WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox* box)
- : mBox(box), mShown(false)
+ //==================================================================
+ class WxFrame : public wxFrame
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<<
- mBox->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWindow(this);
- WxBlackBox::bbGlobalIncNbWindowsAlive();
- bbtkDebugMessage("Wx",9," -> Number of windows alive = "
- <<WxBlackBox::bbGlobalGetNbWindowsAlive()<<std::endl);
- }
- //=========================================================================
+ public:
+ WxFrame(WxBlackBox::Pointer b,
+ wxWindow *parent,
+ wxString title,
+ wxSize size);
+ ~WxFrame();
+ void OnCloseWindow(wxCloseEvent& event);
- //=========================================================================
- WxBlackBoxWindow::~WxBlackBoxWindow()
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::~WxBlackBoxWindow() ["<<
- mBox->bbGetFullName()<<"]"<<std::endl);
- bbHide();
- mBox->bbSetWindow(0);
- WxBlackBox::bbGlobalDecNbWindowsAlive();
- bbtkDebugMessage("Wx",9," -> Number of windows alive = "
- <<WxBlackBox::bbGlobalGetNbWindowsAlive()<<std::endl);
-
+ WxBlackBox::WeakPointer mBox;
+ DECLARE_EVENT_TABLE();
+
+ };
+
+ BEGIN_EVENT_TABLE(WxFrame, wxFrame)
+ // EVT_CLOSE(WxFrame::OnCloseWindow)
+ END_EVENT_TABLE();
+ //==========================================Window ========================
+
+ //==================================================================
+ WxFrame::WxFrame(WxBlackBox::Pointer b,
+ wxWindow *parent,
+ wxString title,
+ wxSize size)
+ :
+ wxFrame( parent,
+ -1,
+ title,
+ wxDefaultPosition,
+ size,
+ wxRESIZE_BORDER |
+ wxSYSTEM_MENU |
+ wxCLOSE_BOX |
+ wxMAXIMIZE_BOX |
+ wxMINIMIZE_BOX |
+ wxCAPTION
+ ),
+ mBox(b)
+ {
+ bbtkDebugMessage("widget",9,"["<<b->bbGetName()<<"] WxFrame()"
+ <<std::endl);
+ Wx::IncNbWindowsAlive();
+ b->bbSetWindow(this);
+ // Insert the widget into the window
+ wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ b->bbUserCreateWidget(this);
+ wxWindow* widget = b->bbGetOutputWidget();
+ sizer->Add( widget, 1, wxALL|wxGROW, 2);
+ SetSizer(sizer);
+ Layout();
}
- //=========================================================================
+ //==================================================================
+ //==================================================================
+ WxFrame::~WxFrame()
+ {
+ if (mBox.lock())
+ bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
+ <<"] $$$$$$$$$$$$$$$$$$$ ~WxFrame()"
+ <<std::endl);
+ else
+ bbtkDebugMessage("widget",9,"[DEAD] $$$$$$$$$$$$$$$$$$$$$ ~WxFrame()"<<std::endl);
+ //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
+ if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ Wx::DecNbWindowsAlive();
+ }
+ //==================================================================
+ //==================================================================
+ void WxFrame::OnCloseWindow(wxCloseEvent& event)
+ {
+ if (mBox.lock())
+ bbtkDebugMessage("widget",9,"["<<mBox.lock()->bbGetName()
+ <<"] $$$$$$$$$$$$$$$ WxFrame::OnCloseWindow()"<<std::endl);
+ else
+ bbtkDebugMessage("widget",9,"[DEAD] WxFrame::OnCloseWindow()"
+ <<std::endl);
+ if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ Wx::DecNbWindowsAlive();
+
+ bbtkDebugMessage("widget",9,
+ "$$$$$$$$$$$$$$$ Destroy !!!"<<std::endl);
+ // this->Destroy();
+ }
+ //==================================================================
- //=========================================================================
- void WxBlackBoxWindow::bbShow()
- {
- if (bbIsShown()) return;
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::bbShow() ["<<
- mBox->bbGetFullName()<<"]"<<std::endl);
- WxBlackBox::bbGlobalIncNbWindowsShown();
- mShown = true;
- bbtkDebugMessage("Wx",9," -> Number of windows shown = "
- <<WxBlackBox::bbGlobalGetNbWindowsShown()<<std::endl);
- }
+ //====================================================SetWin=====================
+ // WxDialog
//=========================================================================
- //=========================================================================
- void WxBlackBoxWindow::bbHide()
+ //==================================================================
+ // Dialog window which is modal
+ class BBTK_EXPORT WxDialog : public wxDialog
{
- if (!bbIsShown()) return;
- bbtkDebugMessage("Wx",9,"WxBlackBoxWindow::bbHide() ["<<
- mBox->bbGetFullName()<<"]"<<std::endl);
- WxBlackBox::bbGlobalDecNbWindowsShown();
- mShown = false;
- bbtkDebugMessage("Wx",9," -> Number of windows shown = "
- <<WxBlackBox::bbGlobalGetNbWindowsShown()<<std::endl);
- }
- //=========================================================================
+ public:
+ WxDialog(WxBlackBox::Pointer box,
+ wxWindow *parent,
+ wxString title,
+ wxSize size);
+ ~WxDialog();
+ void OnCloseWindow(wxCloseEvent& event);
-
- //=========================================================================
- // WxBlackBoxDialog
+ WxBlackBox::WeakPointer mBox;
+ DECLARE_EVENT_TABLE();
+
+ };
+
+ BEGIN_EVENT_TABLE(WxDialog, wxDialog)
+ EVT_CLOSE(WxDialog::OnCloseWindow)
+ END_EVENT_TABLE();
//=========================================================================
//=========================================================================
- WxBlackBoxDialog::WxBlackBoxDialog(WxBlackBox* box,
- wxWindow *parent,
- wxString title,
- wxSize size)
+ WxDialog::WxDialog(WxBlackBox::Pointer b,
+ wxWindow *parent,
+ wxString title,
+ wxSize size)
:
- WxBlackBoxWindow(box),
wxDialog( parent,
-1,
title,
wxMAXIMIZE_BOX |
wxMINIMIZE_BOX |
wxCAPTION
- )
+ ),
+ mBox(b)
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<<
- bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
- <<title<<",size)"<<std::endl);
+
+ bbtkDebugMessage("widget",9,"WxDialog::WxDialog ["<<b->bbGetName()<<"]"
+ <<std::endl);
+ Wx::IncNbWindowsAlive();
+ b->bbSetWindow(this);
// Insert the widget into the window
wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
- wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
- widget->Reparent(this);
- sizer->Add( widget, 1, wxALL|wxEXPAND, 2);
- //SetAutoLayout(true);
+ b->bbUserCreateWidget(this);
+ wxWindow* widget = b->bbGetOutputWidget();
+ sizer->Add( widget, 1, wxALL|wxGROW, 2);
SetSizer(sizer);
Layout();
}
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialog::bbShow()
- {
- bbtkDebugMessage("Wx",5,"WxBlackBoxDialog::bbShow() ["
- <<bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbShow();
- SetReturnCode( wxDialog::ShowModal() );
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxDialog::bbHide()
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxDialog::bbHide() ["<<
- bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbHide();
- Hide();
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxDialog::~WxBlackBoxDialog()
- {
- }
- //=========================================================================
-
-
-
-
-
- //=========================================================================
- // WxBlackBoxFrame
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxFrame::WxBlackBoxFrame(WxBlackBox* box,
- wxWindow *parent,
- wxString title,
- wxSize size)
- : WxBlackBoxWindow(box),
- wxFrame( parent,
- -1,
- title,
- wxDefaultPosition,
- size,
- wxRESIZE_BORDER |
- wxSYSTEM_MENU |
- wxCLOSE_BOX |
- wxMAXIMIZE_BOX |
- wxMINIMIZE_BOX |
- wxCAPTION
- )
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::WxBlackBoxFrame("<<
- bbGetBlackBox()->bbGetFullName()<<","<<parent<<","
- <<title<<",size)"<<std::endl);
- // Insert the widget into the window
- wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
- wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
- wxFrame* frame = (wxFrame*)this;
- widget->Reparent(frame);
- sizer->Add( widget, 1, wxALL|wxGROW, 2);
- // frame->SetAutoLayout(true);
- frame->SetSizer(sizer);
- //frame->Fit();
- frame->Layout();
- }
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxFrame::~WxBlackBoxFrame()
- {
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxFrame::bbShow()
- {
- bbtkDebugMessage("Wx",5,"WxBlackBoxFrame::bbShow("
- <<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
- WxBlackBoxWindow::bbShow();
- wxFrame::Show();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBoxFrame::bbHide()
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxFrame::bbHide() ["<<
- bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
- WxBlackBoxWindow::bbHide();
- Hide();
- }
- //=========================================================================
-
-
-
- //=========================================================================
- // 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();
- }
- //=========================================================================
+ //==================================================================
+ //==================================================================
+ WxDialog::~WxDialog()
+ {
+ bbtkDebugMessage("widget",9,"WxDialog::~WxDialog()"<<std::endl);
+ //bbtkDebugMessage("widget",9,"WxFrame::~WxFrame()"<<std::endl);
+ // if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ // Wx::DecNbWindowsAlive();
+ }
+ //==================================================================
+ //==================================================================
+ void WxDialog::OnCloseWindow(wxCloseEvent& event)
+ {
+ bbtkDebugMessage("widget",9,"WxDialog::OnCloseWindow()"<<std::endl);
+ if (mBox.lock()) mBox.lock()->bbSetWindow(0);
+ Wx::DecNbWindowsAlive();
+ this->Destroy();
+ }
+ //==================================================================
- */
- /*
- //=========================================================================
- // WxBlackBoxWidget
- //=========================================================================
-
- //=========================================================================
- WxBlackBoxWidget::WxBlackBoxWidget( WxBlackBox* box)
- : mBox(box)
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidget::WxBlackBoxWidget("<<box->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWidget(this);
- }
+ //=========================================================================
+ // WxBlackBox
//=========================================================================
//=========================================================================
- 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::WxBlackBoxWidgetEventHandler( WxBlackBox* box,
- wxWindow *widget )
- :
- mBox(box),
- mWindow(widget)
- // mDead(false)
- {
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidgetEventHandler::WxBlackBoxWidgetEventHandler("<<mBox->bbGetFullName()<<")"<<std::endl);
-
- mBox->bbSetWidgetEventHandler(this);
-
- Connect ( mWindow->GetId(),
- wxEVT_DESTROY,
- (wxObjectEventFunction)
- (void (wxEvtHandler::*)(wxWindowDestroyEvent& c))
- &WxBlackBoxWidgetEventHandler::OnWindowDestroy );
-
- mWindow->PushEventHandler(this);
-
- }
+ BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox<wxWindow>);
//=========================================================================
-
+
//=========================================================================
- WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler()
+ void WxBlackBox::bbUserSetDefaultValues()
{
- bbtkDebugMessage("Wx",9,
- "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler("
- <<mBox->bbGetFullName()<<")"<<std::endl);
- mBox->bbSetWidgetEventHandler(0);
+ bbtkBlackBoxDebugMessage("widget",5,"WxBlackBox::bbUserSetDefaultValues()"<<std::endl);
+ bbmWindow = 0;
}
//=========================================================================
//=========================================================================
- void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&)
+ void WxBlackBox::bbUserInitializeProcessing()
{
- bbtkDebugMessage("Wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() ["
- <<mBox->bbGetFullName()<<"]"<<std::endl);
- mBox->bbSetOutputWidget(0);
- mBox->bbSetModifiedStatus();
- //mDead = true;
- //delete this;
}
- //=========================================================================
-
-
-
-
-
+ //==================================================================
-
- /*
//=========================================================================
- wxWindow* WxParentToChildData::GetWindowInWhichToInsert( const BlackBox* b)
- const
+ void WxBlackBox::bbUserFinalizeProcessing()
{
- 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;
+ bbtkBlackBoxDebugMessage("widget",5,"==> WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
+ bbDestroyWindow();
+ bbtkBlackBoxDebugMessage("widget",5,"<== WxBlackBox::bbUserFinalizeProcessing()"<<std::endl);
}
- //=========================================================================
- */
-
- //=========================================================================
- // WxBlackBox
- //=========================================================================
+ //==================================================================
- //=========================================================================
- //=========================================================================
- //=========================================================================
- //=========================================================================
- BBTK_USER_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox);
- //=========================================================================
-
- //=========================================================================
- void WxBlackBox::bbUserConstructor()
+ //==================================================================
+ /// Callback for creating a Dialog window (modal)
+ void WxBlackBox::bbCreateDialogWindow()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserConstructor()"<<std::endl);
- bbInitAttributes();
- }
- //=========================================================================
-
- //=========================================================================
- void WxBlackBox::bbUserCopyConstructor()
+ bbtkBlackBoxDebugMessage("widget",3,
+ "==> WxBlackBox::bbCreateDialogWindow() - parent = "
+ <<Wx::GetTopWindow()
+ <<std::endl);
+ WxDialog* w = 0;
+ w = new WxDialog( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+// std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS"),
+ std2wx( ConstructWinTitle() ),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ) );
+ w->Show(false);
+ // w->ShowModal();
+ }
+ //=========================================================================
+
+ //==================================================================
+
+ //==================================================================
+ /// Callback for creating a Frame window
+ void WxBlackBox::bbCreateFrameWindow()
{
- bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()"
+ bbtkBlackBoxDebugMessage("widget",3,
+ "==> WxBlackBox::bbCreateFrameWindow() - parent = "
+ <<Wx::GetTopWindow()
<<std::endl);
- bbInitAttributes();
- }
- //=========================================================================
+ WxFrame* w = 0;
+ w = new WxFrame( GetThisPointer<WxBlackBox>(),
+ Wx::GetTopWindow(),
+// std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS"),
+ std2wx( ConstructWinTitle() ),
+ wxSize( bbGetInputWinWidth() ,
+ bbGetInputWinHeight() ) );
+ w->Show();
- //=========================================================================
- void WxBlackBox::bbUserDestructor()
- {
- 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::bbGetWidget() ["<<
- bbGetFullName()<<"] : Widget is dead : deleting it"
- <<std::endl);
- delete bbGetOutputWidget();
- bbSetOutputWidget(0);
- }
- return bbGetOutputWidget();
- }
- //=========================================================================
- */
+ }
+ //==================================================================
- //=========================================================================
- /**
- * \brief Initialize the attributes of the class
- *
- */
- void WxBlackBox::bbInitAttributes()
+ //==================================================================
+ void WxBlackBox::bbSetWindow(wxWindow* w)
{
- bbmWindow = 0;
- // bbmWidget = 0;
- // bbSetInputWinParent(0);
- bbSetInputWinTitle(bbGetName());
- bbSetInputWinWidth(800);
- bbSetInputWinHeight(800);
- bbSetInputWinDialog(false);
- bbSetOutputWidget(0);
-
- bbSetWidgetEventHandler(0);
+ bbtkBlackBoxDebugMessage("widget",9,"==> WxBlackBox::bbSetWindow("<<w<<")"<<std::endl);
+ if ((bbmWindow != 0)&&(w!=0))
+ {
+ std::cout << "WxBlackBox::bbSetWindow ?? EED ?? ERRRRRRRROOOOR"<<std::endl;
+ }
+ bbmWindow = w;
}
- //=========================================================================
-
+ //==================================================================
-
- //==================================================================
- /// 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
- if (bbGetOutputWidget()!=0)
+ if ((bbmWindow) && (!bbIsShown()))
{
- if (bbGetWidgetEventHandler()==0)
+ bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbShowWindow()"
+ <<std::endl);
+ if (bbGetInputWinDialog())
{
- bbtkDebugMessage("Process",3,
- "-> No widget event handler : creating one"
- <<std::endl);
- new WxBlackBoxWidgetEventHandler(this,bbGetOutputWidget());
+ ((WxDialog*)bbmWindow)->ShowModal();
}
- else if ( ! bbGetWidgetEventHandler()->IsHandlerOf
- ( bbGetOutputWidget() ) )
+ else
{
- bbtkDebugMessage("Process",3,
- "-> Obsolete widget event handler : re-creating one"
- <<std::endl);
- delete bbGetWidgetEventHandler();
- new WxBlackBoxWidgetEventHandler(this,bbGetOutputWidget());
- }
- // Sets the name of the wxWindow to the input WinTitle
- bbGetOutputWidget()->SetName(bbtk::std2wx(bbGetInputWinTitle()));
- }
+ bbGetWindow()->Show();
+ bbSetShown(true);
+ }
+ } // if
- // 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)
+ //==================================================================
+ void WxBlackBox::bbDestroyWindow()
+ {
+ bbtkBlackBoxDebugMessage("widget",3,"==> WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
+ if (bbGetWindow()!=NULL)
{
- bbtkDebugMessage("Process",2,
- "-> Window already exists"
- <<std::endl);
- show = bbGetWindow();
+ // wxWindow* w = bbGetWindow();
+ //bbSetWindow(0);
+ // WE SHOULD DESTROY THE WINDOW WITH THE Close METHOD
+ // HOWEVER I
+ //w->Close(true);
+ //
+ delete bbGetWindow();
+ bbSetShown(false);
}
- // 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,
- bbGlobalGetTopWindow(),
- 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,
- bbGlobalGetTopWindow(),
- std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
- wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) );
- }
+ bbtkBlackBoxDebugMessage("widget",3,"<== WxBlackBox::bbDestroyWindow("<<bbmWindow<<")"<<std::endl);
- }
- // 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::PutWinTitle()
+ {
+ if ( ! bbIsOutputWidgetConnected() )
+ {
+ wxTopLevelWindow* wParent = (wxTopLevelWindow*)( bbGetOutputWidget()->GetParent() );
+ wParent->SetTitle( std2wx( ConstructWinTitle() ) );
+ } // if
}
- //==================================================================
-
+ //==================================================================
-
-
- //==================================================================
- void WxBlackBox::bbHideWindow()
+ //==================================================================
+ std::string WxBlackBox::ConstructWinTitle()
{
- bbtkDebugMessageInc("Process",1,"=> WxBlackBox::bbHideWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
-
- if (bbGetWindow()!=0) bbGetWindow()->bbHide();
-
- bbtkDebugMessageDec("Process",1,"<= WxBlackBox::bbHideWindow() ["
- <<bbGetFullName()<<"]"<<std::endl);
+ std::string title( bbGetInputWinTitle() + " - bbtk (c) CREATIS");
+ return title;
}
- //==================================================================
-
+ //==================================================================
}//namespace bbtk
-
#endif