/*========================================================================= Program: bbtk Module: $RCSfile: bbtkWxBlackBox.h,v $ Language: C++ Date: $Date: 2009/05/14 14:43:34 $ Version: $Revision: 1.27 $ ========================================================================*/ /* --------------------------------------------------------------------- * 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 * can span multiple lines */ /** * \file * \brief */ /** * \class bbtk:: * \brief */ #ifdef USE_WXWIDGETS #ifndef __bbtkWxBlackBox_h__ #define __bbtkWxBlackBox_h__ #include "bbtkWx.h" #include "bbtkWidgetBlackBox.h" namespace bbtk { //================================================================== // Forward declaration of the widget event handler class class WxBlackBoxWidgetEventHandler; //================================================================== //================================================================== /// Widget black boxes class BBTK_EXPORT WxBlackBox : public bbtk::WidgetBlackBox { public: BBTK_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::WidgetBlackBox); // protected: public: //================================================================== /// Callback for creating a Dialog window (modal) /// ** Must be defined ** in toolkit specific descendants virtual void bbCreateDialogWindow(); //================================================================== //================================================================== /// Callback for creating a Frame window /// ** Must be defined ** in toolkit specific descendants virtual void bbCreateFrameWindow(); //================================================================== //================================================================== // virtual void InitWindowManagerIfNeeded(); virtual void IncNbWindowsAlive(); virtual void DecNbWindowsAlive(); virtual int GetNbWindowsAlive(); virtual bool IsSomeWindowAlive(); virtual void IncNbWindowsShown(); virtual void DecNbWindowsShown(); virtual int GetNbWindowsShown(); virtual bool IsSomeWindowShown(); //================================================================== //================================================================== void bbCreateWidgetAndEventHandler(wxWindow* parent); //================================================================== //================================================================== private: /// friendship friend class WxBlackBoxWidgetEventHandler; /// Sets the Widget Event Handler inline void bbSetWidgetEventHandler(WxBlackBoxWidgetEventHandler* w) { bbmWidgetEventHandler = w; } /// Gets the Widget Event Handler inline WxBlackBoxWidgetEventHandler* bbGetWidgetEventHandler() { return bbmWidgetEventHandler; } /// The WxBlackBoxWidgetEventHandler associated to the box WxBlackBoxWidgetEventHandler* bbmWidgetEventHandler; }; //================================================================= //================================================================= // WxBlackBoxDescriptor declaration // class WxBlackBoxDescriptor : public WidgetBlackBoxDescriptor BBTK_BEGIN_DESCRIBE_BLACK_BOX_BODY(WxBlackBox); BBTK_NAME("WxBlackBox"); BBTK_END_DESCRIBE_BLACK_BOX(WxBlackBox); //================================================================= //================================================================== // Dialog window which is modal class BBTK_EXPORT WxBlackBoxDialog : public wxDialog, public WidgetBlackBoxWindow { public: typedef WidgetBlackBoxWindow Parent; WxBlackBoxDialog(WxBlackBox::Pointer box, wxWindow *parent, wxString title, wxSize size); ~WxBlackBoxDialog(); void bbShow(); void bbHide(); void bbClose(); bool IsDialog() { return true; } bool IsFrame() { return false; } wxDialog* bbGetDialog() { return this; } }; //================================================================== //================================================================== // Frame window which is not modal class BBTK_EXPORT WxBlackBoxFrame : public wxFrame, public WidgetBlackBoxWindow { public: typedef WidgetBlackBoxWindow Parent; WxBlackBoxFrame(WxBlackBox::Pointer box, wxWindow *parent, wxString title, wxSize size); ~WxBlackBoxFrame(); void bbShow(); void bbHide(); void bbClose(); bool IsDialog() { return false; } bool IsFrame() { return true; } 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