]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWxBlackBox.h
#3073 BBTK Bug New Normal - message documentation in boxes
[bbtk.git] / kernel / src / bbtkWxBlackBox.h
index fcd35bebf7e314d01885953a86e50c745aa01fe4..e5e529bdc8afbf4fcdd12822465a3dd6344b4020 100644 (file)
@@ -1,20 +1,41 @@
+/*
+ # ---------------------------------------------------------------------
+ #
+ # Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image
+ #                        pour la SantÈ)
+ # Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton
+ # Previous Authors : Laurent Guigues, Jean-Pierre Roux
+ # CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil
+ #
+ #  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.
+ # ------------------------------------------------------------------------ */
+
+
 /*=========================================================================
-                                                                                
   Program:   bbtk
   Module:    $RCSfile: bbtkWxBlackBox.h,v $
   Language:  C++
-  Date:      $Date: 2008/01/28 14:32:54 $
-  Version:   $Revision: 1.3 $
-                                                                                
-  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: 2012/11/16 08:49:01 $
+  Version:   $Revision: 1.33 $
+========================================================================*/
+
+
+
+/**
  * \brief Short description in one line
  * 
  * Long description which 
  */
 
 
-#ifdef _USE_WXWIDGETS_
+#ifdef USE_WXWIDGETS
 
 
 #ifndef __bbtkWxBlackBox_h__
 #define __bbtkWxBlackBox_h__
 
 
+
+#include "bbtkWidgetBlackBox.h"
 #include "bbtkWx.h"
-#include "bbtkUserBlackBox.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::UserBlackBox  
-  {
-    BBTK_USER_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::UserBlackBox);
-    //   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<wxWindow>
+  { 
   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(); }
-
-
-    /// 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);}
+    BBTK_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::WidgetBlackBox<wxWindow>);
 
-    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; }
+     
+    //==================================================================    
+    wxWindow* bbGetWindow() { return bbmWindow; }
+    void bbSetWindow(wxWindow*) ;
+    bool bbWindowIsCreated() { return (bbGetWindow() != 0); }
+    //==================================================================    
 
 
-    /// The WxBlackBoxWindow associated to the box
-    Window* bbmWindow;
-    /// The WxBlackBoxWidgetEventHandler associated to the box
-    WxBlackBoxWidgetEventHandler* bbmWidgetEventHandler;
+    //==================================================================    
+    virtual void bbShowWindow();
+    //==================================================================   
+    //==================================================================    
+    virtual void bbDestroyWindow();
+    //==================================================================    
 
+    //==================================================================    
+       virtual void PutWinTitle();
+    //==================================================================    
 
-    void bbInitAttributes();
+       virtual std::string ConstructWinTitle();
 
+  private:
 
+    wxWindow* bbmWindow;
   };
   //=================================================================
  
 
-  //======================================================================
-  /// Defines the bbUserCreateWidget method
-#define BBTK_CREATE_WIDGET(CALLBACK)                                   \
-  public:                                                              \
-  inline void bbUserCreateWidget()                                     \
-  {                                                                    \
-    bbtkDebugMessageInc("Process",1,"=> "<<bbGetTypeName()<<"::bbUserCreateWidget() [" \
-                       <<bbGetFullName()<<"]"<<std::endl);             \
-    CALLBACK();                                                                \
-    bbtkDebugMessageDec("Process",1,"<= "<<bbGetTypeName()<<"::bbUserCreateWidget() [" \
-                       <<bbGetFullName()<<"]"<<std::endl);             \
-  }
-  
-  //======================================================================
-
   //=================================================================
-  // UserBlackBox description
-  BBTK_BEGIN_DESCRIBE_BLACK_BOX(WxBlackBox,bbtk::UserBlackBox);
+  // WxBlackBoxDescriptor declaration
+  class WxBlackBoxDescriptor : public WidgetBlackBoxDescriptor<wxWindow>
+  BBTK_BEGIN_DESCRIBE_BLACK_BOX_BODY(WxBlackBox);
   BBTK_NAME("WxBlackBox");
-  //  BBTK_INPUT_NOCOPY(WxBlackBox,WinParent,"Parent widget box",
-  //               WxParentToChildData*);
-  BBTK_INPUT(WxBlackBox,WinTitle,
-            "Title of the window (only used if the box is the top window of a Parent-Child hierarchy)",
-            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);
-  BBTK_INPUT(WxBlackBox,WinHeight,
-            "Height of the window (only used if the box is the top window of a Parent-Child hierarchy)",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);
-  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*);
   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