X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=01ee4712626af54419e49df5e12a8f8e631fbaa1;hb=8cbad3dc345346d0473d93cdc06dc9eb5cbdbf23;hp=e436c1ca9988c46cc762cc557a8d46076bfd24ca;hpb=0278e44db6547b325fe00f4ffc5a9cabac5a8534;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index e436c1c..01ee471 100644 --- a/kernel/src/bbtkWxBlackBox.cxx +++ b/kernel/src/bbtkWxBlackBox.cxx @@ -1,21 +1,34 @@ -/*========================================================================= - +/*========================================================================= Program: bbtk Module: $RCSfile: bbtkWxBlackBox.cxx,v $ Language: C++ - Date: $Date: 2008/06/26 18:45:58 $ - Version: $Revision: 1.22 $ - - 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_ @@ -110,7 +123,6 @@ namespace bbtk wxString title, wxSize size) : - WxBlackBoxWindow(box), wxDialog( parent, -1, title, @@ -122,15 +134,18 @@ namespace bbtk wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxCAPTION - ) + ), + WxBlackBoxWindow(box) { bbtkDebugMessage("wx",9,"WxBlackBoxDialog::WxBlackBoxDialog("<< bbGetBlackBox()->bbGetFullName()<<","<bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); - widget->Reparent(this); +// old : widget->Reparent(this); sizer->Add( widget, 1, wxALL|wxEXPAND, 2); //SetAutoLayout(true); SetSizer(sizer); @@ -141,11 +156,12 @@ namespace bbtk //========================================================================= void WxBlackBoxDialog::bbShow() { + if (bbIsShown()) return; bbtkDebugMessage("wx",5,"WxBlackBoxDialog::bbShow() [" <bbGetFullName()<<"]"<bbGetFullName()<<","<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); @@ -223,6 +242,7 @@ namespace bbtk //========================================================================= void WxBlackBoxFrame::bbShow() { + if (bbIsShown()) return; bbtkDebugMessage("wx",5,"WxBlackBoxFrame::bbShow(" <bbGetFullName()<<")"< WxBlackBox::bbExecute() [" + "=> WxBlackBox::bbExecute("<<(int)force<<") [" < WxBlackBox::bbBackwardUpdate(" <<(caller?caller->GetFullName():"0")<<") [" <second->GetConnectionVector().size() != 0 ) @@ -480,9 +503,12 @@ namespace bbtk <GetBlackBoxTo() != to))&& - (!bbGetUpdateTransferedToParent())) + ( (caller!=0) && + (caller->GetBlackBoxTo() != to)&& + (!bbGetUpdateTransferedToParent())&& + (!to->bbGetExecuting()) + ) + ) { bbtkDebugMessage("process",3, " ... Transfering update order to parent" @@ -531,13 +557,133 @@ namespace bbtk //========================================================================= 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" + < Creating the window" + <(), + // 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" + <(), + // 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" + <(), + bbGetOutputWidget()); + } + else if ( ! bbGetWidgetEventHandler()->IsHandlerOf + ( bbGetOutputWidget() ) ) + { + bbtkDebugMessage("wx",3, + "-> Obsolete widget event handler : re-creating one" + <(), + 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(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 @@ -609,7 +755,9 @@ namespace bbtk " Input WinDialog set to true : creating a Dialog" <(), - bbGetWxParent(), + // bbGetWxParent(), + // LG 24/11/08 : New widget pipeline + Wx::GetTopWindow(), std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); } @@ -620,7 +768,9 @@ namespace bbtk " Input WinDialog set to false : creating a Frame" <(), - bbGetWxParent(), + // bbGetWxParent(), + // LG 24/11/08 : New widget pipeline + Wx::GetTopWindow(), std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); } @@ -646,12 +796,12 @@ namespace bbtk } - bbtkDebugMessage("wx",1,"<= WxBlackBox::bbShowWindow() [" + bbtkDebugMessage("wx",2,"<= WxBlackBox::bbShowWindow() [" <bbHide(); - bbtkDebugMessageDec("wx",1,"<= WxBlackBox::bbHideWindow() [" + bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbHideWindow() [" <bbClose(); - bbtkDebugMessageDec("wx",1,"<= WxBlackBox::bbCloseWindow() [" + bbtkDebugMessageDec("wx",2,"<= WxBlackBox::bbCloseWindow() [" <