#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)
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
}
//=========================================================================
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