X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.h;h=f2c91ccbe37af023f27d143f6bacd84ad3d2b446;hb=664e5cdbbcaf3dafa5fc9f206a7094248c289d5a;hp=e8acc44ab0c7cb55b56128cea2a06b3cc715ddc9;hpb=e4149b56dda0cfb15427533e6f573f09cd3ff74b;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.h b/kernel/src/bbtkWxBlackBox.h index e8acc44..f2c91cc 100644 --- a/kernel/src/bbtkWxBlackBox.h +++ b/kernel/src/bbtkWxBlackBox.h @@ -2,8 +2,8 @@ Program: bbtk Module: $RCSfile: bbtkWxBlackBox.h,v $ Language: C++ - Date: $Date: 2008/11/24 15:45:48 $ - Version: $Revision: 1.20 $ + Date: $Date: 2009/05/28 08:24:23 $ + Version: $Revision: 1.30 $ ========================================================================*/ @@ -44,329 +44,82 @@ */ -#ifdef _USE_WXWIDGETS_ +#ifdef USE_WXWIDGETS #ifndef __bbtkWxBlackBox_h__ #define __bbtkWxBlackBox_h__ + +#include "bbtkWidgetBlackBox.h" #include "bbtkWx.h" -#include "bbtkAtomicBlackBox.h" namespace bbtk { - - - - //================================================================== - // Forward declaration of the class of window associated to a WxBlackBox - class WxBlackBoxWindow; - //================================================================== - - //================================================================== - // Forward declaration of the widget event handler class - class WxBlackBoxWidgetEventHandler; - //================================================================== - + //================================================================== /// Widget black boxes - class BBTK_EXPORT WxBlackBox : public bbtk::AtomicBlackBox + class BBTK_EXPORT WxBlackBox : public bbtk::WidgetBlackBox { - 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_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); - + BBTK_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::WidgetBlackBox); - typedef WxBlackBoxWindow Window; + + // protected: - /// Returns the **OWN** window associated to the box - /// If 0 returned = no window - Window* bbGetWindow() { return bbmWindow; } - - /// 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(); - - /// Returns the parent wxWindow that must be used to create the widget - // - // LG 24/11/08 : New widget pipeline - // wxWindow* bbGetWxParent(); - - /// Returns true iff the 'containing window' exists and is shown - /// (see bbGetContainingWindow). - bool bbIsShown(); + public: + + //================================================================== + /// Callback for creating a Dialog window (modal) + /// ** Must be defined ** in toolkit specific descendants + virtual void bbCreateDialogWindow(); + //================================================================== //================================================================== - /// User callback invoked when the containing window is shown - virtual void bbUserOnShow() {} + /// Callback for creating a Frame window + /// ** Must be defined ** in toolkit specific descendants + virtual void bbCreateFrameWindow(); //================================================================== - + + //================================================================== - /// User callback invoked when the containing window is hidden - virtual void bbUserOnHide() {} + wxWindow* bbGetWindow() { return bbmWindow; } + void bbSetWindow(wxWindow*) ; + bool bbWindowIsCreated() { return (bbGetWindow() != 0); } //================================================================== - // LG 24/11/08 : New widget pipeline - void bbCreateWidgetAndEventHandler(wxWindow* parent); - - protected: - - - //================================================================== - /// User callback called in the box contructor - virtual void bbUserConstructor(); - /// User callback called in the box copy constructor - virtual void bbUserCopyConstructor(); - /// User callback called in the box destructor - virtual void bbUserDestructor(); //================================================================== - + virtual void bbShowWindow(); + //================================================================== + //================================================================== - /// User callback for creating the widget associated to the box - /// ** Must be defined ** - // LG 24/11/08 : New widget pipeline - virtual void bbUserCreateWidget(wxWindow* parent) - { - bbtkError(bbGetTypeName()<<" is a WxBlackBox whose bbUserCreateWidget methods is not overloaded : is it a feature or a bug ?!?"); - } + virtual void bbDestroyWindow(); //================================================================== - - wxWindow* bbCreateWidgetOfInput(const std::string& in, wxWindow* parent); - - - //================================================================== - /// 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(); - //================================================================== - - //================================================================== - /// 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: - /// friendship - friend class WxBlackBoxWindow; - friend class WxBlackBoxWidgetEventHandler; - - /// Sets the window - inline void bbSetWindow(Window* w) { bbmWindow=w; } - - /// Sets the Widget Event Handler - inline void bbSetWidgetEventHandler(WxBlackBoxWidgetEventHandler* w) - { bbmWidgetEventHandler = w; } - /// Gets the Widget Event Handler - inline WxBlackBoxWidgetEventHandler* bbGetWidgetEventHandler() - { return bbmWidgetEventHandler; } - - - /// The WxBlackBoxWindow associated to the box - Window* bbmWindow; - /// The WxBlackBoxWidgetEventHandler associated to the box - WxBlackBoxWidgetEventHandler* bbmWidgetEventHandler; - - - 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; } + wxWindow* bbmWindow; + }; //================================================================= - //====================================================================== - /// Defines the bbUserCreateWidget method -#define BBTK_CREATE_WIDGET(CALLBACK) \ - public: \ - inline void bbUserCreateWidget(wxWindow* parent) \ - { \ - bbtkDebugMessageInc("wx",1,"**> Creating widget for [" \ - < Showing [" \ - < + BBTK_BEGIN_DESCRIBE_BLACK_BOX_BODY(WxBlackBox); BBTK_NAME("WxBlackBox"); - // 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 (*)", - std::string,""); - BBTK_INPUT(WxBlackBox,WinWidth, - "Width of the window (* : only used if the widget is not connected to a Layout box)",int,""); - BBTK_INPUT(WxBlackBox,WinHeight, - "Height of the window (*)",int,""); - BBTK_INPUT(WxBlackBox,WinDialog, - "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 (*)",Void,"signal"); - BBTK_INPUT(WxBlackBox,WinClose, - "Any signal received closes the window (*)",Void,"signal"); - BBTK_OUTPUT(WxBlackBox,Widget,"Output widget",wxWindow*,""); BBTK_END_DESCRIBE_BLACK_BOX(WxBlackBox); //================================================================= - - - - - - - - //================================================================== - // The base of the hierarchy of windows associated to a WxBlackBox - class BBTK_EXPORT WxBlackBoxWindow //: public wxWindow - { - public: - WxBlackBoxWindow(WxBlackBox::Pointer box); - virtual ~WxBlackBoxWindow(); - virtual void bbShow(); - virtual void bbHide(); - virtual void bbClose(); - bool bbIsShown() { return mShown; } - virtual WxBlackBox::Pointer bbGetBlackBox() { return mBox.lock(); } - virtual wxDialog* bbGetDialog() { return 0; } - virtual wxFrame* bbGetFrame() { return 0; } - private: - WxBlackBox::WeakPointer mBox; - bool mShown; - }; - //================================================================== - - //================================================================== - // Dialog window which is modal - class BBTK_EXPORT WxBlackBoxDialog : public wxDialog, public WxBlackBoxWindow - { - public: - WxBlackBoxDialog(WxBlackBox::Pointer box, - wxWindow *parent, wxString title, wxSize size); - ~WxBlackBoxDialog(); - void bbShow(); - void bbHide(); - void bbClose(); - wxDialog* bbGetDialog() { return this; } - }; - //================================================================== - - //================================================================== - // Frame window which is not modal - class BBTK_EXPORT WxBlackBoxFrame : public wxFrame, public WxBlackBoxWindow - { - public: - WxBlackBoxFrame(WxBlackBox::Pointer box, - wxWindow *parent, wxString title, wxSize size); - ~WxBlackBoxFrame(); - void bbShow(); - void bbHide(); - void bbClose(); - wxFrame* bbGetFrame() { return this; } - }; - //================================================================== - - - - //================================================================= - // Handles the destroy events of a widget associated to a WxBlackBox - // in order to signal the widget death to its associated box - class BBTK_EXPORT WxBlackBoxWidgetEventHandler : public wxEvtHandler - { - public: - /// Ctor with the box and widget - WxBlackBoxWidgetEventHandler( WxBlackBox::Pointer box, wxWindow *widget ); - /// Dtor - ~WxBlackBoxWidgetEventHandler(); - /// Returns true iff is the handler for that window - bool IsHandlerOf( wxWindow* w ) { return mWindow == w; } - // wxWindow* GetWxWindow() { return mWindow; } - /// Method processing the destroy event of the widget - void OnWindowDestroy(wxWindowDestroyEvent&); - // - //bool IsDead() { return mDead; } - - private: - WxBlackBox::WeakPointer mBox; - wxWindow* mWindow; - //bool mDead; - }; - //================================================================= - - - } //namespace bbtk #endif //__bbtkWxBlackBox_h__ -#endif //_USE_WXWIDGETS_ +#endif //USE_WXWIDGETS