-/*=========================================================================
-
+/*=========================================================================
Program: bbtk
Module: $RCSfile: bbtkWxBlackBox.cxx,v $
Language: C++
- Date: $Date: 2008/05/15 08:02:36 $
- Version: $Revision: 1.20 $
-
- 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: 2008/11/25 11:17:13 $
+ Version: $Revision: 1.31 $
=========================================================================*/
+/* ---------------------------------------------------------------------
+
+* 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_
wxString title,
wxSize size)
:
- WxBlackBoxWindow(box),
wxDialog( parent,
-1,
title,
wxMAXIMIZE_BOX |
wxMINIMIZE_BOX |
wxCAPTION
- )
+ ),
+ WxBlackBoxWindow(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);
wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
- widget->Reparent(this);
+// old : widget->Reparent(this);
sizer->Add( widget, 1, wxALL|wxEXPAND, 2);
//SetAutoLayout(true);
SetSizer(sizer);
//=========================================================================
void WxBlackBoxDialog::bbShow()
{
+ if (bbIsShown()) return;
bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() ["
<<bbGetBlackBox()->bbGetFullName()<<"]"<<std::endl);
WxBlackBoxWindow::bbShow();
SetReturnCode( wxDialog::ShowModal() );
- bbHide();
+ bbClose();
}
//=========================================================================
//=========================================================================
void WxBlackBoxDialog::bbClose()
{
- wxDialog::Close();
+ bbtkDebugMessage("wx",9,"WxBlackBoxDialog::bbClose()"<<std::endl);
+ wxDialog::Destroy();
}
//=========================================================================
wxWindow *parent,
wxString title,
wxSize size)
- : WxBlackBoxWindow(box),
- wxFrame( parent,
+ : wxFrame( parent,
-1,
title,
wxDefaultPosition,
wxMAXIMIZE_BOX |
wxMINIMIZE_BOX |
wxCAPTION
- )
+ ),
+ WxBlackBoxWindow(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);
wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget();
wxFrame* frame = (wxFrame*)this;
- widget->Reparent(frame);
+// old : widget->Reparent(frame);
sizer->Add( widget, 1, wxALL|wxGROW, 2);
// frame->SetAutoLayout(true);
frame->SetSizer(sizer);
//=========================================================================
void WxBlackBoxFrame::bbShow()
{
+ if (bbIsShown()) return;
bbtkDebugMessage("wx",5,"WxBlackBoxFrame::bbShow("
<<bbGetBlackBox()->bbGetFullName()<<")"<<std::endl);
WxBlackBoxWindow::bbShow();
- wxFrame::Show();
+ wxFrame::Show();
// This Update is ** MANDATORY **
// to synchronize wxvtkRenderWindowInteractor objects
// (force wx objects creation **NOW**)
- wxFrame::Update();
+
+
+#if defined(_WIN32)
+ wxFrame::Refresh();
+#endif
+
+ wxFrame::Update();
+ wxFrame::SetFocus();
if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow();
- // wxFrame::SetFocus();
}
//=========================================================================
//=========================================================================
void WxBlackBoxFrame::bbClose()
{
+ bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbClose()"<<std::endl);
wxFrame::Close();
}
//=========================================================================
//=========================================================================
//=========================================================================
- void WxBlackBox::bbUserCopyConstructor()
+ void WxBlackBox::bbUserCopyConstructor(bbtk::BlackBox::Pointer)
{
bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserCopyConstructor()"
<<std::endl);
void WxBlackBox::bbExecute(bool force)
{
bbtkDebugMessageInc("process",2,
- "=> WxBlackBox::bbExecute() ["
+ "=> WxBlackBox::bbExecute("<<(int)force<<") ["
<<bbGetFullName()<<"]"<<std::endl);
// If the output 'Widget' is connected then
"=> WxBlackBox::bbBackwardUpdate("
<<(caller?caller->GetFullName():"0")<<") ["
<<bbGetFullName()<<"]"<<std::endl);
- // If the caller's box to is not the box to connected to the
- // output 'Widget'
+
if ( ! (( bbGetStatus() == MODIFIED ) ||
( bbBoxProcessModeIsAlways() )) )
{
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 )
<<std::endl);
}
if ((caller==0) ||
- ((caller!=0) &&
- (caller->GetBlackBoxTo() != to))&&
- (!bbGetUpdateTransferedToParent()))
+ ( (caller!=0) &&
+ (caller->GetBlackBoxTo() != to)&&
+ (!bbGetUpdateTransferedToParent())&&
+ (!to->bbGetExecuting())
+ )
+ )
{
bbtkDebugMessage("process",3,
" ... Transfering update order to parent"
//=========================================================================
void WxBlackBox::bbProcess()
{
- if (bbGetOutputWidget()==0) this->bbUserCreateWidget();
+/*
+ if (bbGetOutputWidget()==0) this->bbUserCreateWidget();
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
" Input WinDialog set to true : creating a Dialog"
<<std::endl);
show = (Window*) new WxBlackBoxDialog( GetThisPointer<WxBlackBox>(),
- bbGetWxParent(),
+ // 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"
<<std::endl);
show = (Window*) new WxBlackBoxFrame( GetThisPointer<WxBlackBox>(),
- bbGetWxParent(),
+ // bbGetWxParent(),
+ // LG 24/11/08 : New widget pipeline
+ Wx::GetTopWindow(),
std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"),
wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) );
}
}
- bbtkDebugMessage("wx",1,"<= WxBlackBox::bbShowWindow() ["
+ bbtkDebugMessage("wx",2,"<= WxBlackBox::bbShowWindow() ["
<<bbGetFullName()<<"]"<<std::endl);
}
//==================================================================
-
+*/
if (bbGetWindow()!=0) bbGetWindow()->bbHide();
- bbtkDebugMessageDec("wx",1,"<= WxBlackBox::bbHideWindow() ["
+ bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbHideWindow() ["
<<bbGetFullName()<<"]"<<std::endl);
}
//==================================================================
if (bbGetWindow()!=0) bbGetWindow()->bbClose();
- bbtkDebugMessageDec("wx",1,"<= WxBlackBox::bbCloseWindow() ["
+ bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbCloseWindow() ["
<<bbGetFullName()<<"]"<<std::endl);
}
//==================================================================
//==================================================================
- wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); }
+ // LG 24/11/08 : New widget pipeline
+ // wxWindow* WxBlackBox::bbGetWxParent() { return Wx::GetTopWindow(); }
//==================================================================