X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.h;h=dd870f95b3663bb6259e631bbe167137c1fdbeae;hb=ba235cfa6ce74178ab468c01af002af0ab3a7d82;hp=5ff5d6644b4d350503e8d448b48d1ff2b014fce3;hpb=a26195c366a89795288009cf7e20f11afa494970;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.h b/kernel/src/bbtkWxBlackBox.h index 5ff5d66..dd870f9 100644 --- a/kernel/src/bbtkWxBlackBox.h +++ b/kernel/src/bbtkWxBlackBox.h @@ -3,8 +3,8 @@ Program: bbtk Module: $RCSfile: bbtkWxBlackBox.h,v $ Language: C++ - Date: $Date: 2008/01/22 15:02:00 $ - Version: $Revision: 1.1 $ + Date: $Date: 2008/04/24 10:24:58 $ + 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 @@ -38,7 +38,7 @@ #include "bbtkWx.h" -#include "bbtkUserBlackBox.h" +#include "bbtkAtomicBlackBox.h" namespace bbtk @@ -60,9 +60,9 @@ namespace bbtk //================================================================== /// Widget black boxes - class BBTK_EXPORT WxBlackBox : public bbtk::UserBlackBox - { - BBTK_USER_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::UserBlackBox); + class BBTK_EXPORT WxBlackBox : public bbtk::AtomicBlackBox + { + BBTK_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::AtomicBlackBox); // BBTK_DECLARE_INPUT(WinParent,WxParentToChildData*); BBTK_DECLARE_INPUT(WinTitle,std::string); BBTK_DECLARE_INPUT(WinWidth,int); @@ -70,39 +70,40 @@ namespace bbtk BBTK_DECLARE_INPUT(WinDialog,bool); BBTK_DECLARE_INPUT(WinHide,Void); BBTK_DECLARE_OUTPUT(Widget, wxWindow*);//WxBlackBoxWidget*); - BBTK_PROCESS(Process); public: 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() { bbmgNbWindowsAlive++; } - static void bbGlobalDecNbWindowsAlive(); - static int bbGlobalGetNbWindowsAlive() { return bbmgNbWindowsAlive; } - static bool bbGlobalIsSomeWindowAlive() { return (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() { bbmgNbWindowsShown++; } - static int bbGlobalGetNbWindowsShown() { return bbmgNbWindowsShown; } - static bool bbGlobalIsSomeWindowShown() { return (bbmgNbWindowsShown>0);} + /// Returns the parent wxWindow that must be used to create the widget + wxWindow* bbGetWxParent(); + /// Returns true iff the 'containing window' exists and is shown + /// (see bbGetContainingWindow). + bool bbIsShown(); - private: - static wxWindow* bbmgTopWindow; - static int bbmgNbWindowsAlive; - static int bbmgNbWindowsShown; + //================================================================== + /// User callback invoked when the containing window is shown + virtual void bbUserOnShow() {} + //================================================================== + + //================================================================== + /// User callback invoked when the containing window is hidden + virtual void bbUserOnHide() {} + //================================================================== protected: @@ -116,41 +117,44 @@ namespace bbtk virtual void bbUserDestructor(); //================================================================== - /* - - //================================================================== - /// User callback for creating the window associated to the box - /// Can be overloaded in order to impose your own window to show, - /// Typically if your widget is already a dialog that cannot - /// be inserted into a parent. - /// WARNING : If you use it then your widget will not be inserted - /// in the parent window, if any - /// (i.e. even if the Parent-Child connection is set) - virtual Window* bbUserCreateWindow() - { - return 0; - } - //================================================================== - //================================================================== /// User callback for creating the widget associated to the box - /// Must be defined if bbUserCreateWindow is not - virtual Widget* bbUserCreateWidget(wxWindow *parent) + /// ** Must be defined ** + virtual void bbUserCreateWidget() { - bbtkError(bbGetTypeName()<<" is a WxBlackBox whose bbUserCreateWindow and bbUserCreateWidget methods are both undefined : cannot work !!"); - return 0; + bbtkError(bbGetTypeName()<<" is a WxBlackBox whose bbUserCreateWidget methods is not overloaded : is it a feature or a bug ?!?"); } //================================================================== - */ + + + //================================================================== - /// Specific methods for windows creation during pipeline execution - //void bbCreateWindow(); - void bbShowWindow(Connection* caller); - void bbHideWindow(); + /// Main processing method of the box. + virtual IOStatus bbBackwardUpdate( Connection::Pointer caller ); + //================================================================== + + + + //================================================================== + /// Overloaded processing method for WxBlackBoxes : + /// 1) if the widget is null then + /// calls the user defined widget creation method : bbUserCreateWidget() + /// 2) calls the user defined processing method : bbUserProcess() + /// 3) displays the window : bbShowWindow(); + virtual void bbProcess(); //================================================================== - void Process() { } + //================================================================== + /// 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(); + //================================================================== private: /// friendship @@ -176,29 +180,56 @@ namespace bbtk void bbInitAttributes(); + protected : + /// 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 (the container window must be created and displayed - this box will be also executed by the normal pipeline recursion mechanism) + virtual void bbExecute(bool force = false); + + + /// 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; } }; //================================================================= + //====================================================================== + /// Defines the bbUserCreateWidget method +#define BBTK_CREATE_WIDGET(CALLBACK) \ + public: \ + inline void bbUserCreateWidget() \ + { \ + bbtkDebugMessageInc("process",1,"**> Creating widget for [" \ + <