X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=kernel%2Fsrc%2FbbtkWxBlackBox.h;h=e55a7512dce4136c191fe1387e364b13ad56200b;hb=6ac9074f717f22c4ffdc6a70d0704c1b1f8fe842;hp=c967fd1e31ea0dafcaea601c484c781f495409cf;hpb=f5db17702a2c51a5933f6c556d070167e4db9cfd;p=bbtk.git diff --git a/kernel/src/bbtkWxBlackBox.h b/kernel/src/bbtkWxBlackBox.h index c967fd1..e55a751 100644 --- a/kernel/src/bbtkWxBlackBox.h +++ b/kernel/src/bbtkWxBlackBox.h @@ -1,20 +1,35 @@ -/*========================================================================= - +/*========================================================================= 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: 2010/01/14 13:17:27 $ + Version: $Revision: 1.32 $ +========================================================================*/ + + +/* --------------------------------------------------------------------- + +* 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,320 +45,83 @@ */ -#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 - { - BBTK_USER_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::AtomicBlackBox); - // BBTK_DECLARE_INPUT(WinParent,WxParentToChildData*); - 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*); - +//EED 10/06/2009 /*BBTK_EXPORT*/ + class BBTK_EXPORT WxBlackBox : public bbtk::WidgetBlackBox + { public: - typedef WxBlackBoxWindow Window; - - /// Returns the 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(); } - + BBTK_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::WidgetBlackBox); - /// 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);} - - static void bbGlobalDecNbWindowsShown(); - static void bbGlobalIncNbWindowsShown() { WxBlackBox::bbmgNbWindowsShown++; } - static int bbGlobalGetNbWindowsShown() { return WxBlackBox::bbmgNbWindowsShown; } - static bool bbGlobalIsSomeWindowShown() { return (WxBlackBox::bbmgNbWindowsShown>0);} - - - private: - static wxWindow* bbmgTopWindow; - static int bbmgNbWindowsAlive; - static int bbmgNbWindowsShown; - - protected: + + // protected: + public: - //================================================================== - /// 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(); + //================================================================== + /// Callback for creating a Dialog window (modal) + /// ** Must be defined ** in toolkit specific descendants + virtual void bbCreateDialogWindow(); //================================================================== //================================================================== - /// User callback for creating the widget associated to the box - /// ** Must be defined ** - virtual void bbUserCreateWidget() - { - bbtkError(bbGetTypeName()<<" is a WxBlackBox whose bbUserCreateWidget methods is undefined : cannot work !!"); - } + /// Callback for creating a Frame window + /// ** Must be defined ** in toolkit specific descendants + virtual void bbCreateFrameWindow(); //================================================================== - - //================================================================== - /// 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(); - } - //================================================================== - - //================================================================== - /// Specific methods for windows creation during pipeline execution - void bbShowWindow(); - void bbHideWindow(); - //================================================================== - - 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; + + //================================================================== + wxWindow* bbGetWindow() { return bbmWindow; } + void bbSetWindow(wxWindow*) ; + bool bbWindowIsCreated() { return (bbGetWindow() != 0); } + //================================================================== - void bbInitAttributes(); + //================================================================== + virtual void bbShowWindow(); + //================================================================== + + //================================================================== + virtual void bbDestroyWindow(); + //================================================================== + private: + wxWindow* bbmWindow; + }; //================================================================= - //====================================================================== - /// Defines the bbUserCreateWidget method -#define BBTK_CREATE_WIDGET(CALLBACK) \ - public: \ - inline void bbUserCreateWidget() \ - { \ - bbtkDebugMessageInc("Process",1,"=> "< + 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 inserted in another widget)",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); - 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* box); - virtual ~WxBlackBoxWindow(); - virtual void bbShow(); - virtual void bbHide(); - bool bbIsShown() { return mShown; } - virtual WxBlackBox* bbGetBlackBox() { return mBox; } - virtual wxDialog* bbGetDialog() { return 0; } - virtual wxFrame* bbGetFrame() { return 0; } - private: - WxBlackBox* mBox; - bool mShown; - }; - //================================================================== - - //================================================================== - // Dialog window which is modal - class BBTK_EXPORT WxBlackBoxDialog : public wxDialog, public WxBlackBoxWindow - { - public: - WxBlackBoxDialog(WxBlackBox* box, - wxWindow *parent, wxString title, wxSize size); - ~WxBlackBoxDialog(); - void bbShow(); - void bbHide(); - wxDialog* bbGetDialog() { return this; } - }; - //================================================================== - - //================================================================== - // Frame window which is not modal - class BBTK_EXPORT WxBlackBoxFrame : public wxFrame, public WxBlackBoxWindow - { - public: - WxBlackBoxFrame(WxBlackBox* box, - wxWindow *parent, wxString title, wxSize size); - ~WxBlackBoxFrame(); - void bbShow(); - void bbHide(); - wxFrame* bbGetFrame() { return this; } - }; - //================================================================== - - - /* - //================================================================= - /// 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 - // 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* 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* 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 #endif //__bbtkWxBlackBox_h__ -#endif //_USE_WXWIDGETS_ +#endif //USE_WXWIDGETS