]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWxBlackBox.h
BUGs INSTALL , External Packages, CPACK windows
[bbtk.git] / kernel / src / bbtkWxBlackBox.h
index 8159ba8a7e7289a08932f14542c10e7dea69ed47..700fa3e044a32849732f2995e398f759f1a3c0c0 100644 (file)
@@ -3,8 +3,8 @@
   Program:   bbtk
   Module:    $RCSfile: bbtkWxBlackBox.h,v $
   Language:  C++
-  Date:      $Date: 2008/02/06 14:14:22 $
-  Version:   $Revision: 1.4 $
+  Date:      $Date: 2008/03/10 12:28:43 $
+  Version:   $Revision: 1.9 $
                                                                                 
   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  
+  class BBTK_EXPORT WxBlackBox : public bbtk::AtomicBlackBox  
   {
-    BBTK_USER_BLACK_BOX_INTERFACE(WxBlackBox,bbtk::UserBlackBox);
+    BBTK_USER_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 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 
+    wxWindow* bbGetWxParent();
 
-    /// Returns the global parent of all bbtk windows
-    static wxWindow* bbGlobalGetTopWindow();
-    /// Sets the global parent of all bbtk windows
-    static void bbGlobalSetTopWindow(wxWindow*);
+    /// Returns true iff the 'containing window' exists and is shown 
+    /// (see bbGetContainingWindow).
+    bool bbIsShown();
 
-       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;
+    //==================================================================    
+    /// 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,35 @@ 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();
-    }
+    /// 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 +178,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,16 +202,16 @@ 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_DESCRIPTION("Widget box. The inputs marked with (*) are only used if the widget is not inserted in another widget.\n");
+  // 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 (*)",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 (*)",int);
   BBTK_INPUT(WxBlackBox,WinDialog,