X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.h;h=92d711d3bc488bbbee1ae3a4ca3629a9d2237394;hb=4ad5b5ee44357ad873bc8c43230defb6d0a79879;hp=fcd35bebf7e314d01885953a86e50c745aa01fe4;hpb=aeafe748c859675cf481bd9e5e5a5afa84a3fa52;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.h b/kernel/src/bbtkWxBlackBox.h index fcd35be..92d711d 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/28 14:32:54 $ - Version: $Revision: 1.3 $ + Date: $Date: 2008/04/18 12:59:16 $ + Version: $Revision: 1.11 $ 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); @@ -74,34 +74,36 @@ namespace bbtk 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*); + /// 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 bbGlobalIncNbWindowsAlive() { WxBlackBox::bbmgNbWindowsAlive++; } - static void bbGlobalDecNbWindowsAlive(); - static int bbGlobalGetNbWindowsAlive() { return WxBlackBox::bbmgNbWindowsAlive; } - static bool bbGlobalIsSomeWindowAlive() { return (WxBlackBox::bbmgNbWindowsAlive>0);} + /// Returns the parent wxWindow that must be used to create the widget + wxWindow* bbGetWxParent(); - 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(); - - 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: @@ -120,24 +122,37 @@ namespace bbtk /// ** Must be defined ** virtual void bbUserCreateWidget() { - 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 ?!?"); } //================================================================== + + + //================================================================== - /// 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(); - } + /// 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(); //================================================================== //================================================================== - /// Specific methods for windows creation during pipeline execution + /// 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(); //================================================================== @@ -165,6 +180,9 @@ 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); }; //================================================================= @@ -186,23 +204,23 @@ namespace bbtk //====================================================================== //================================================================= - // UserBlackBox description - BBTK_BEGIN_DESCRIBE_BLACK_BOX(WxBlackBox,bbtk::UserBlackBox); + // WxBlackBoxDescriptor declaration + BBTK_BEGIN_DESCRIBE_BLACK_BOX(WxBlackBox,bbtk::AtomicBlackBox); BBTK_NAME("WxBlackBox"); - // BBTK_INPUT_NOCOPY(WxBlackBox,WinParent,"Parent widget box", - // WxParentToChildData*); + // BBTK_DESCRIPTION("Widget box. The inputs marked with (*) are only used if the widget is not inserted in another widget.\n"); + BBTK_CATEGORY("widget"); BBTK_INPUT(WxBlackBox,WinTitle, - "Title of the window (only used if the box is the top window of a Parent-Child hierarchy)", - std::string); + "Title of the window (*)", + std::string,""); BBTK_INPUT(WxBlackBox,WinWidth, - "Width of the window (only used if the box is the top window of a Parent-Child hierarchy)",int); + "Width of the window (* : only used if the widget is not inserted in another widget)",int,""); BBTK_INPUT(WxBlackBox,WinHeight, - "Height of the window (only used if the box is the top window of a Parent-Child hierarchy)",int); + "Height of the window (*)",int,""); BBTK_INPUT(WxBlackBox,WinDialog, - "Set to 'true' to have a dialog window, i.e. which is modal (steals the focus until closed) (only used if the box is the top window of a Parent-Child hierarchy)",bool); + "Set to 'true' to create a dialog window, i.e. which blocks the pipeline until it is closed (modal) (*)",bool,""); BBTK_INPUT(WxBlackBox,WinHide, - "Any signal received hides the window (only active if the box is the top window of a Parent-Child hierarchy)",Void); - BBTK_OUTPUT(WxBlackBox,Widget,"Output widget",wxWindow*); + "Any signal received hides the window (*)",Void,""); + BBTK_OUTPUT(WxBlackBox,Widget,"Output widget",wxWindow*,""); BBTK_END_DESCRIBE_BLACK_BOX(WxBlackBox); //================================================================= @@ -219,16 +237,16 @@ namespace bbtk class BBTK_EXPORT WxBlackBoxWindow //: public wxWindow { public: - WxBlackBoxWindow(WxBlackBox* box); + WxBlackBoxWindow(WxBlackBox::Pointer box); virtual ~WxBlackBoxWindow(); virtual void bbShow(); virtual void bbHide(); bool bbIsShown() { return mShown; } - virtual WxBlackBox* bbGetBlackBox() { return mBox; } + virtual WxBlackBox::Pointer bbGetBlackBox() { return mBox; } virtual wxDialog* bbGetDialog() { return 0; } virtual wxFrame* bbGetFrame() { return 0; } private: - WxBlackBox* mBox; + WxBlackBox::Pointer mBox; bool mShown; }; //================================================================== @@ -238,7 +256,7 @@ namespace bbtk class BBTK_EXPORT WxBlackBoxDialog : public wxDialog, public WxBlackBoxWindow { public: - WxBlackBoxDialog(WxBlackBox* box, + WxBlackBoxDialog(WxBlackBox::Pointer box, wxWindow *parent, wxString title, wxSize size); ~WxBlackBoxDialog(); void bbShow(); @@ -252,7 +270,7 @@ namespace bbtk class BBTK_EXPORT WxBlackBoxFrame : public wxFrame, public WxBlackBoxWindow { public: - WxBlackBoxFrame(WxBlackBox* box, + WxBlackBoxFrame(WxBlackBox::Pointer box, wxWindow *parent, wxString title, wxSize size); ~WxBlackBoxFrame(); void bbShow(); @@ -262,33 +280,6 @@ namespace bbtk //================================================================== - /* - //================================================================= - /// Class from which a user defined widget associated to a WxBlackBox - /// should inherit - class BBTK_EXPORT WxBlackBoxWidget - { - public: - /// Ctor with the WxBlackBox which created it - WxBlackBoxWidget( WxBlackBox* box); - /// Dtor - virtual ~WxBlackBoxWidget(); - - /// Returns the WxBlackBox which created it - WxBlackBox* GetBlackBox() { return mBox; } - /// Returns the WxBlackBox which created it (const) - const WxBlackBox* GetBlackBox() const { return mBox; } - - /// Returns the wxWindow associated to the widget - virtual wxWindow* GetWxWindow() { return 0; } - - virtual bool IsDead() { return false; } - - private: - WxBlackBox* mBox; - }; - //================================================================= - */ //================================================================= // Handles the destroy events of a widget associated to a WxBlackBox @@ -297,7 +288,7 @@ namespace bbtk { public: /// Ctor with the box and widget - WxBlackBoxWidgetEventHandler( WxBlackBox* box, wxWindow *widget ); + WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box, wxWindow *widget ); /// Dtor ~WxBlackBoxWidgetEventHandler(); /// Returns true iff is the handler for that window @@ -309,37 +300,12 @@ namespace bbtk //bool IsDead() { return mDead; } private: - WxBlackBox* mBox; + WxBlackBox::Pointer mBox; wxWindow* mWindow; //bool mDead; }; //================================================================= - /* - //================================================================= - /// A WxBlackBoxWidget which is a wxPanel also - class BBTK_EXPORT WxBlackBoxWidgetPanel : - public wxPanel, - public WxBlackBoxWidget -// public WxBlackBoxWidget, -// public wxPanel - { - public: - /// Ctor with the parent and the WxBlackBox which created it - WxBlackBoxWidgetPanel(WxBlackBox* box, wxWindow *parent) - : - wxPanel( parent, -1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL), - WxBlackBoxWidget(box) - {} - - /// Returns the top panel of the widget - wxWindow* GetWxWindow() { return (wxWindow*)(wxPanel*)(this); } - /// Returns the top panel of the widget - wxPanel* GetPanel() { return (wxPanel*)(this); } - - }; - //================================================================= - */ } //namespace bbtk