X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.h;h=878c83b79ea61bf91d09b1843ae9f9633341024d;hb=fb65ef0feb38b84723ea928ec3d3c056ba26274e;hp=c967fd1e31ea0dafcaea601c484c781f495409cf;hpb=f5db17702a2c51a5933f6c556d070167e4db9cfd;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.h b/kernel/src/bbtkWxBlackBox.h index c967fd1..878c83b 100644 --- a/kernel/src/bbtkWxBlackBox.h +++ b/kernel/src/bbtkWxBlackBox.h @@ -1,20 +1,34 @@ -/*========================================================================= - +/*========================================================================= Program: bbtk Module: $RCSfile: bbtkWxBlackBox.h,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: 2008/12/11 15:30:04 $ + Version: $Revision: 1.24 $ +========================================================================*/ + + +/* --------------------------------------------------------------------- + +* 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. +* ------------------------------------------------------------------------ */ +/** * \brief Short description in one line * * Long description which @@ -30,7 +44,7 @@ */ -#ifdef _USE_WXWIDGETS_ +#ifdef USE_WXWIDGETS #ifndef __bbtkWxBlackBox_h__ @@ -61,48 +75,56 @@ namespace bbtk //================================================================== /// Widget black boxes class BBTK_EXPORT WxBlackBox : public bbtk::AtomicBlackBox - { - BBTK_USER_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::AtomicBlackBox); - // BBTK_DECLARE_INPUT(WinParent,WxParentToChildData*); + { + BBTK_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::AtomicBlackBox); BBTK_DECLARE_INPUT(WinTitle,std::string); BBTK_DECLARE_INPUT(WinWidth,int); BBTK_DECLARE_INPUT(WinHeight,int); BBTK_DECLARE_INPUT(WinDialog,bool); BBTK_DECLARE_INPUT(WinHide,Void); - BBTK_DECLARE_OUTPUT(Widget, wxWindow*);//WxBlackBoxWidget*); + BBTK_DECLARE_INPUT(WinClose,Void); + BBTK_DECLARE_OUTPUT(Widget, wxWindow*); public: + /// Main processing method of the box. Overloaded to handle windows inclusion : if the output Widget is connected then the execution is transfered to the box to which it is connected (as the container window must be created and displayed - this box will be executed by the normal pipeline recursion mechanism) + // virtual void bbExecute(bool force = false); + + typedef WxBlackBoxWindow Window; - /// Returns the window associated to the box + /// Returns the **OWN** window associated to the box /// If 0 returned = no window Window* bbGetWindow() { return bbmWindow; } - /// Returns the Parent Window that must be used to create the widget - wxWindow* bbGetWxParent() { return bbGlobalGetTopWindow(); } - - - /// Returns the global parent of all bbtk windows - static wxWindow* bbGlobalGetTopWindow(); - /// Sets the global parent of all bbtk windows - static void bbGlobalSetTopWindow(wxWindow*); - - static void bbGlobalIncNbWindowsAlive() { WxBlackBox::bbmgNbWindowsAlive++; } - static void bbGlobalDecNbWindowsAlive(); - static int bbGlobalGetNbWindowsAlive() { return WxBlackBox::bbmgNbWindowsAlive; } - static bool bbGlobalIsSomeWindowAlive() { return (WxBlackBox::bbmgNbWindowsAlive>0);} + /// Returns the window containing the widget associated to the box + /// Which can be the own window of **ANOTHER** box in case of + /// a hierarchy of widgets. + /// More precisely : + /// If bbGetWindow() != 0 then returns bbGetWindow() + /// Else if the output 'Widget' is connected + /// then returns bbGetContainingWindow() of the box connected to 'Widget' + /// Else returns 0; + Window* bbGetContainingWindow(); - static void bbGlobalDecNbWindowsShown(); - static void bbGlobalIncNbWindowsShown() { WxBlackBox::bbmgNbWindowsShown++; } - static int bbGlobalGetNbWindowsShown() { return WxBlackBox::bbmgNbWindowsShown; } - static bool bbGlobalIsSomeWindowShown() { return (WxBlackBox::bbmgNbWindowsShown>0);} + /// Returns true iff the 'containing window' exists and is shown + /// (see bbGetContainingWindow). + bool bbIsShown(); + //================================================================== + /// User callback invoked when the containing window is shown + virtual void bbUserOnShow() {} + //================================================================== + + //================================================================== + /// User callback invoked when the containing window is hidden + virtual void bbUserOnHide() {} + //================================================================== - private: - static wxWindow* bbmgTopWindow; - static int bbmgNbWindowsAlive; - static int bbmgNbWindowsShown; + //================================================================== + void bbCreateWidgetAndEventHandler(wxWindow* parent); + //================================================================== + protected: @@ -110,7 +132,7 @@ namespace bbtk /// User callback called in the box contructor virtual void bbUserConstructor(); /// User callback called in the box copy constructor - virtual void bbUserCopyConstructor(); + virtual void bbUserCopyConstructor(bbtk::BlackBox::Pointer); /// User callback called in the box destructor virtual void bbUserDestructor(); //================================================================== @@ -118,27 +140,38 @@ namespace bbtk //================================================================== /// User callback for creating the widget associated to the box /// ** Must be defined ** - virtual void bbUserCreateWidget() + virtual void bbUserCreateWidget(wxWindow* parent) { - bbtkError(bbGetTypeName()<<" is a WxBlackBox whose bbUserCreateWidget methods is undefined : cannot work !!"); + bbtkError(bbGetTypeName()<<" is a WxBlackBox whose bbUserCreateWidget methods is not overloaded : is it a feature or a bug ?!?"); } //================================================================== - + + + //================================================================== + // For layout widgets : creates and returns the widget + // of the box connected to input in + wxWindow* bbCreateWidgetOfInput(const std::string& in, wxWindow* parent); + //================================================================== + + + //================================================================== - /// Calls the user defined widget creation method - /// and the user processing method and then displays the window - virtual void bbProcess() - { - if (bbGetOutputWidget()==0) this->bbUserCreateWidget(); - this->bbUserProcess(); - bbShowWindow(); - } + /// Overloaded processing method for WxBlackBoxes which handles + /// the window creation if needed + virtual void bbProcess(); //================================================================== //================================================================== - /// Specific methods for windows creation during pipeline execution - void bbShowWindow(); + /// If necessary creates the WxBlackBoxWindow associated to the box + /// and shows it + /// (does nothing if the box output 'Widget' is connected which + /// means that the box does not have its own window but is contained + /// into another window) + // void bbShowWindow(); + /// Hides the WxBlackBoxWindow associated to the box (if exists) void bbHideWindow(); + /// Closes (destroys) the WxBlackBoxWindow associated to the box (if exists) + void bbCloseWindow(); //================================================================== private: @@ -165,7 +198,20 @@ namespace bbtk void bbInitAttributes(); + protected : + + + /// For Forward update mechanism when execution is called + /// on a contained window + /// Is set to true before transfering update to parent + /// in order to not re-transfer a second time... + /* + bool bbmUpdateTransferedToParent; + bool bbGetUpdateTransferedToParent() const { return bbmUpdateTransferedToParent; } + void bbSetUpdateTransferedToParent(bool b) + { bbmUpdateTransferedToParent = b; } + */ }; //================================================================= @@ -174,12 +220,27 @@ namespace bbtk /// Defines the bbUserCreateWidget method #define BBTK_CREATE_WIDGET(CALLBACK) \ public: \ - inline void bbUserCreateWidget() \ + inline void bbUserCreateWidget(wxWindow* parent) \ { \ - bbtkDebugMessageInc("Process",1,"=> "< Creating widget for [" \ + < Showing [" \ <