]> Creatis software - bbtk.git/blobdiff - kernel/src/bbtkWx.cxx
*** empty log message ***
[bbtk.git] / kernel / src / bbtkWx.cxx
index 346d0fbfe94263dfe720a2a634ce61041691943c..aa05db7b0633e969f12352490573b3335a180011 100644 (file)
@@ -2,41 +2,65 @@
 
 #include "bbtkWx.h"
 #include "bbtkMessageManager.h"
+#include <boost/signal.hpp>
+//#include <boost/bind.hpp>
 
 namespace bbtk
 {
 
-//EED
   static wxWindow* mgTopWindow = 0;
   static int mgNbWindowsAlive  = 0;
   static int mgNbWindowsShown  = 0;
+  static bool mgAutoDestroyTopWindow = true;
 
-  void Wx::CreateInvisibleTopWindow(wxWindow* parent)
+  // BBTKWXSIG
+  static Wx::Signal_type mgWxSignal;
+  // \BBTKWXSIG
+
+
+  //=========================================================================
+  void Wx::CreateTopWindow(wxWindow* parent, bool autodestroy)
   {
-    wxWindow* top = new wxFrame(parent,
-                               -1,_T("TOP (YOU SHOULD NOT SEE ME !!)"));
+    wxWindow* top = 
+      new wxFrame(parent,
+                 -1,
+                 _T("TOP BBTK FRAME (YOU SHOULD NOT SEE ME !!)"));
     top->Hide();
     Wx::SetTopWindow(top);
+    mgAutoDestroyTopWindow = autodestroy;
   }
-  void Wx::ResetCursor() 
+  //=========================================================================
+  
+  //=========================================================================
+  wxWindow* Wx::GetTopWindow() 
+  { 
+    if (mgTopWindow==0) Wx::CreateTopWindow(0);
+    return mgTopWindow; 
+  }
+  //=========================================================================
+  
+  //=========================================================================
+  bool Wx::TopWindowExists()
   {
-    if (!GetTopWindow()) return;
-    bbtkDebugMessage("wx",9,"wx::ResetCursor()"<<std::endl);
-    while (wxIsBusy()) ::wxEndBusyCursor();
+    return (mgTopWindow!=0);
   }
-  void Wx::BeginBusyCursor() 
+  //=========================================================================
+
+  // BBTKWXSIG
+  //=========================================================================
+  void Wx::AddSignalObserver(Slot_function_type f)
   {
-    if (!GetTopWindow()) return;
-    bbtkDebugMessage("wx",9,"wx::BeginBusyCursor()"<<std::endl);
-    ::wxBeginBusyCursor();
+    mgWxSignal.connect(f);
   }
-  void Wx::EndBusyCursor()
+  //=========================================================================
+  // \BBTKWXSIG
+
+  //=========================================================================
+  void Wx::AutoDestroyTopWindow(bool b)
   {
-    if (!GetTopWindow()) return;
-    bbtkDebugMessage("wx",9,"wx::EndBusyCursor()"<<std::endl);
-    ::wxEndBusyCursor();
+    mgAutoDestroyTopWindow = b;
   }
+  //=========================================================================
   
   //=========================================================================
   void Wx::SetTopWindow(wxWindow* w) 
@@ -48,17 +72,48 @@ namespace bbtk
     mgTopWindow = w;
   }
   //=========================================================================
+
+
+  //=========================================================================
+  void Wx::IncNbWindowsAlive() 
+  { 
+    mgNbWindowsAlive++; 
+    bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
+                    <<std::endl);
+    // BBTKWXSIG
+    mgWxSignal();
+    // \BBTKWXSIG
+  }
+  //=========================================================================
+
   //=========================================================================
   void Wx::DecNbWindowsAlive()
   { 
     mgNbWindowsAlive--; 
-    /*
-    if ( (bbmgNbWindowsAlive==0) && 
-        bbmgTopWindow && (!bbmgTopWindow->IsShown()))
+    bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
+                    <<std::endl);
+    if ( (mgNbWindowsAlive==0) && 
+        (mgAutoDestroyTopWindow) )
       {
-       bbmgTopWindow->Close();
+    bbtkDebugMessage("wx",2,"  --> Destructing top window"<<std::endl);
+       mgTopWindow->Close();
+       mgTopWindow = 0;
       }
-    */
+    // BBTKWXSIG
+    mgWxSignal();
+    // \BBTKWXSIG
+  }
+  //=========================================================================
+  
+  //=========================================================================
+  void Wx::IncNbWindowsShown() 
+  { 
+    mgNbWindowsShown++; 
+    bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
+                    <<std::endl);
+    // BBTKWXSIG
+    mgWxSignal();
+    // \BBTKWXSIG
   }
   //=========================================================================
 
@@ -66,60 +121,77 @@ namespace bbtk
   void Wx::DecNbWindowsShown()
   { 
     mgNbWindowsShown--; 
-    if ( (mgNbWindowsShown==0) && 
-        mgTopWindow && (!mgTopWindow->IsShown()))
+    bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
+                    <<std::endl);
+    if ( (mgNbWindowsAlive==0) && 
+        (mgAutoDestroyTopWindow) )
       {
-       mgTopWindow->Close();
+       bbtkDebugMessage("wx",2,"  --> Destructing top window"<<std::endl);
+       mgTopWindow->Close();
+       mgTopWindow = 0;
       }
+    // BBTKWXSIG
+    mgWxSignal();
+    // \BBTKWXSIG
   }
   //=========================================================================
 
+
   //=========================================================================
-/*EED
-  // Static members 
-  wxWindow* Wx::mgTopWindow = 0;
-  int Wx::mgNbWindowsAlive  = 0;
-  int Wx::mgNbWindowsShown  = 0;
-*/
+  int  Wx::GetNbWindowsAlive() 
+  { 
+    return mgNbWindowsAlive; 
+  }
+  //=========================================================================
+  
+  //=========================================================================
+  bool Wx::IsSomeWindowAlive() 
+  { 
+    return (mgNbWindowsAlive>0);
+  }
+  //=========================================================================
+  
+  
+  //=========================================================================
+  int  Wx::GetNbWindowsShown() 
+  { 
+    return mgNbWindowsShown; 
+  }
+  //=========================================================================
+  
+  //=========================================================================
+  bool Wx::IsSomeWindowShown() 
+  { 
+    return (mgNbWindowsShown>0);
+  }
+  //=========================================================================
+  
+  //=========================================================================
+  void Wx::ResetCursor() 
+  {
+    if (!TopWindowExists()) return;
+    bbtkDebugMessage("wx",9,"Wx::ResetCursor()"<<std::endl);
+    while (wxIsBusy()) ::wxEndBusyCursor();
+  }
+  //=========================================================================
+  //=========================================================================
+  void Wx::BeginBusyCursor() 
+  {
+    if (!TopWindowExists()) return;
+    bbtkDebugMessage("wx",9,"Wx::BeginBusyCursor()"<<std::endl);
+    ::wxBeginBusyCursor();
+  }
+  //=========================================================================
+  //=========================================================================
+  void Wx::EndBusyCursor()
+  {
+    if (!TopWindowExists()) return;
+    bbtkDebugMessage("wx",9,"Wx::EndBusyCursor()"<<std::endl);
+    ::wxEndBusyCursor();
+  }
   //=========================================================================
 
 
-//EED
-    wxWindow* Wx::GetTopWindow() 
-       { 
-               return mgTopWindow; 
-       }
-
-    void Wx::IncNbWindowsAlive() 
-       { 
-               mgNbWindowsAlive++; 
-       }
-
-    int  Wx::GetNbWindowsAlive() 
-       { 
-               return mgNbWindowsAlive; 
-       }
-
-    bool Wx::IsSomeWindowAlive() 
-       { 
-               return (mgNbWindowsAlive>0);
-       }
-
-    void Wx::IncNbWindowsShown() 
-       { 
-               mgNbWindowsShown++; 
-       }
-
-    int  Wx::GetNbWindowsShown() 
-       { 
-               return mgNbWindowsShown; 
-       }
-
-    bool Wx::IsSomeWindowShown() 
-       { 
-               return (mgNbWindowsShown>0);
-       }
-
 }
 
 #endif