X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.cxx;h=d543faa5df26920e6cfc82f2ea1ff5442b333860;hb=28479cf7460f053625842de2e8df98b2e3363ede;hp=e4a8410357eedb865837908d5effa2763157f6df;hpb=2b8d8f686974ab38c9ffcf0f88dd533b01b68e84;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.cxx b/kernel/src/bbtkWxBlackBox.cxx index e4a8410..d543faa 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/04/23 14:49:28 $ - Version: $Revision: 1.15 $ - - 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_ @@ -26,6 +39,8 @@ */ #include "bbtkWxBlackBox.h" +#include "bbtkBlackBoxOutputConnector.h" + //#include "bbtkWxContainerBlackBox.h" #include @@ -41,70 +56,6 @@ namespace bbtk - //========================================================================= - // WxBlackBoxWindow - //========================================================================= - - - - //========================================================================= - WxBlackBoxWindow::WxBlackBoxWindow(WxBlackBox::Pointer box) - : mBox(box), mShown(false) - { - bbtkDebugMessage("wx",9,"WxBlackBoxWindow::WxBlackBoxWindow("<< - mBox.lock()->bbGetFullName()<<")"<bbSetWindow(this); - Wx::IncNbWindowsAlive(); - bbtkDebugMessage("wx",5," -> Number of windows alive = " - <bbSetWindow(0); - } - else - { - } - bbtkDebugMessage("wx",5," -> Number of windows alive = " - < Number of windows shown = " - < Number of windows shown = " - <bbGetFullName()<<","<bbCreateWidgetAndEventHandler(this); wxWindow* widget = bbGetBlackBox()->bbGetOutputWidget(); - widget->Reparent(this); sizer->Add( widget, 1, wxALL|wxEXPAND, 2); //SetAutoLayout(true); SetSizer(sizer); @@ -147,10 +99,13 @@ 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); sizer->Add( widget, 1, wxALL|wxGROW, 2); // frame->SetAutoLayout(true); frame->SetSizer(sizer); @@ -215,22 +180,31 @@ namespace bbtk //========================================================================= WxBlackBoxFrame::~WxBlackBoxFrame() { + bbtkDebugMessage("wx",9,"WxBlackBoxFrame::~WxBlackBoxFrame()" + <bbGetFullName()<<")"<bbUserOnShow(); - // wxFrame::SetFocus(); + wxFrame::SetFocus(); + // if (bbGetBlackBox()) bbGetBlackBox()->bbUserOnShow(); } //========================================================================= @@ -238,12 +212,19 @@ namespace bbtk void WxBlackBoxFrame::bbHide() { bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbHide()"<bbUserOnHide(); } //========================================================================= + //========================================================================= + void WxBlackBoxFrame::bbDestroy() + { + bbtkDebugMessage("wx",9,"WxBlackBoxFrame::bbDestroy()"<GetId() ); + if (mBox.expired()) return; bbtkDebugMessage("wx",9, "WxBlackBoxWidgetEventHandler::~WxBlackBoxWidgetEventHandler() [" <bbGetFullName()<<"]"<bbSetWidgetEventHandler(0); + + mBox.lock()->bbSetWidgetEventHandler(0); } //========================================================================= //========================================================================= void WxBlackBoxWidgetEventHandler::OnWindowDestroy(wxWindowDestroyEvent&) { + bbtkDebugMessage("wx",9,"WxBlackBoxWidgetEventHandler::OnWindowDestroy() []"<bbGetFullName()<<"]"<bbSetOutputWidget(0); - mBox.lock()->bbSetModifiedStatus(); } //========================================================================= @@ -310,231 +299,83 @@ namespace bbtk //========================================================================= //========================================================================= //========================================================================= - BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,AtomicBlackBox); + BBTK_BLACK_BOX_IMPLEMENTATION(WxBlackBox,WidgetBlackBox); //========================================================================= //========================================================================= - void WxBlackBox::bbUserConstructor() + void WxBlackBox::bbUserSetDefaultValues() { - bbtkDebugMessage("Kernel",9,"WxBlackBox::bbUserConstructor()"< WxBlackBox::bbUserDestructor() ["<IsDead()) + bbtkDebugMessage("wx",9,"WxBlackBox::bbUserFinalizeProcessing()"<(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() )); + w->Show(true); } - //========================================================================= + //================================================================== - //========================================================================= - /// Main processing method of the box. - void WxBlackBox::bbExecute(bool force) + //================================================================== + /// Callback for creating a Frame window + void WxBlackBox::bbCreateFrameWindow() { - bbtkDebugMessageInc("Process",1, - "=> WxBlackBox::bbExecute() [" - <second->GetConnectionVector().size() != 0 ) - { - bbtkDebugMessage("Process",2, - "-> Output 'Widget' connected : transfering execution to parent" - <second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo()->bbExecute(force); - - } - // else call 'standard' BlackBox execution method - else - { - BlackBox::bbExecute(force); - } - // - - bbtkDebugMessageDec("Process",1, - "<= WxBlackBox::bbExecute() [" - <(), + Wx::GetTopWindow(), + std2wx( bbGetInputWinTitle() + + " - bbtk (c) CREATIS LRMN"), + wxSize( bbGetInputWinWidth() , + bbGetInputWinHeight() ) ); + w->Show(); } - //========================================================================= + //================================================================== - - //========================================================================= - /// Main processing method of the box. - IOStatus WxBlackBox::bbBackwardUpdate( Connection::Pointer caller ) - { - bbtkDebugMessage("Process",1, - "=> WxBlackBox::bbBackwardUpdate(" - <<(caller?caller->GetFullName():"0")<<") [" - <GetFullName():"0")<<") [" - <second->GetConnectionVector().size() != 0 ) - - { - BlackBox::Pointer to = - i->second->GetConnectionVector()[0]->GetBlackBoxTo(); - - if (caller) - { - bbtkDebugMessage("Process",2, - "-> Output 'Widget' connected to '" - <bbGetFullName()<<"' - caller->to = '" - <GetBlackBoxTo()->bbGetFullName() - <<"'" - < Output 'Widget' connected to '" - <bbGetFullName()<<"'" - <GetBlackBoxTo() != to))&& - (!bbGetUpdateTransferedToParent())) - { - bbtkDebugMessage("Process",2, - " ... Transfering update order to parent" - <second->GetConnectionVector().front() //.lock() - ->GetBlackBoxTo()->bbExecute(false); - } - else - { - bbSetUpdateTransferedToParent(false); - bbtkDebugMessage("Process",2, - " ... No need to transfer to parent" - <GetBlackBoxFromOutput()!="Widget")) - ) - { - } - */ - // call 'standard' BlackBox execution method - if (!bbGetUpdateTransferedToParent()) - { - AtomicBlackBox::bbBackwardUpdate(caller); - } - - bbtkDebugMessageDec("Process",1, - "<= WxBlackBox::bbBackwardUpdate() [" - <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() + + //========================================================================= + void WxBlackBox::bbCreateWidgetAndEventHandler(wxWindow* parent) { - bbtkDebugMessageInc("Process",1,"=> WxBlackBox::bbShowWindow() [" - <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" <(), @@ -543,7 +384,7 @@ namespace bbtk else if ( ! bbGetWidgetEventHandler()->IsHandlerOf ( bbGetOutputWidget() ) ) { - bbtkDebugMessage("Process",3, + bbtkDebugMessage("wx",3, "-> Obsolete widget event handler : re-creating one" <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" - < Window already exists" - < Widget exists : creating the window" - <(), - 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" - <(), - bbGetWxParent(), - std2wx( bbGetInputWinTitle() + " - bbtk (c) CREATIS LRMN"), - wxSize( bbGetInputWinWidth() , bbGetInputWinHeight() ) ); - } - - } - // No window nor widget : error - else - { - bbtkError("WxBlackBox::bbShowWindow() [" - <IsShown()) - { - show->bbShow(); - } - else - { - bbtkDebugMessage("Process",2,"-> Already shown : nothing to do"< WxBlackBox::bbHideWindow() [" - <bbHide(); - - bbtkDebugMessageDec("Process",1,"<= WxBlackBox::bbHideWindow() [" - <second->GetConnectionVector().size() != 0 ) - { - return boost::static_pointer_cast - (i->second->GetConnectionVector().front() //.lock() - ->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