4 #include "bbtkMessageManager.h"
8 //=========================================================================
10 //=========================================================================
12 //=========================================================================
13 static WxApp* mgWxApp = 0;
14 static wxWindow* mgTopWindow = 0;
15 static wxWindow* mgTopWindowParent = 0;
16 static bool mgAutoDestroyTopWindow = true;
17 static int mgNbWindowsAlive = 0;
18 static int mgNbWindowsShown = 0;
19 //=========================================================================
21 //=========================================================================
23 static Wx::Signal_type mgWxSignal;
25 //=========================================================================
28 //=========================================================================
29 // The wxApp class which is used when no user wxApp was created
30 class WxApp : public wxApp
34 int OnExit() { return true; }
36 //=========================================================================
37 IMPLEMENT_APP_NO_MAIN(WxApp);
38 //=========================================================================
43 //See http://www.wxwindows.org/faqgtk.htm#locale
44 setlocale(LC_NUMERIC, "C");
48 //=========================================================================
50 //=========================================================================
51 void Wx::CreateWxAppIfNeeded()
53 if (wxApp::GetInstance()==0)
57 bbtkGlobalError("Wx::CreateWxAppIfNeeded() : INTERNAL ERROR ! (wxApp::GetInstance()==0) && (mgWxApp != 0)");
59 bbtkDebugMessage("wx",1," --> Creating bbtk wxApp"<<std::endl);
61 wxApp::SetInstance(mgWxApp);
67 //=========================================================================
69 //=========================================================================
70 void Wx::DestroyWxAppIfNeeded()
74 bbtkDebugMessage("wx",1," --> Destructing bbtk WxApp"<<std::endl);
81 //=========================================================================
83 //=========================================================================
84 void Wx::SetTopWindowParent(wxWindow* w)
86 if (mgTopWindowParent != 0)
88 bbtkGlobalError("Wx::SetTopWindowParent : top window parent != 0");
90 mgTopWindowParent = w;
92 //=========================================================================
94 //=========================================================================
95 void Wx::CreateTopWindowIfNeeded()
97 if (mgTopWindow!=0) return;
98 bbtkDebugMessage("wx",1," --> Creating bbtk top window"<<std::endl);
100 CreateWxAppIfNeeded();
103 new wxFrame(mgTopWindowParent,
105 _T("TOP BBTK FRAME (YOU SHOULD NOT SEE ME !!)"));
108 Wx::SetTopWindow(top);
110 //=========================================================================
112 //=========================================================================
113 void Wx::DestroyTopWindowIfNeeded()
115 if ( (mgNbWindowsAlive==0) &&
116 (mgAutoDestroyTopWindow) )
118 bbtkDebugMessage("wx",1," --> Destructing bbtk top window"<<std::endl);
119 mgTopWindow->Close();
122 DestroyWxAppIfNeeded();
125 //=========================================================================
127 //=========================================================================
128 void Wx::LoopUntilAllWindowsClose()
131 while (mgTopWindow != 0)
135 bbtkDebugMessage("wx",2,"Wx::Loop "<<i << std::endl);
142 //=========================================================================
144 //=========================================================================
145 wxWindow* Wx::GetTopWindow()
147 Wx::CreateTopWindowIfNeeded();
150 //=========================================================================
152 //=========================================================================
153 bool Wx::TopWindowExists()
155 return (mgTopWindow!=0);
157 //=========================================================================
160 //=========================================================================
161 void Wx::AddSignalObserver(Slot_function_type f)
163 mgWxSignal.connect(f);
165 //=========================================================================
168 //=========================================================================
169 void Wx::SetAutoDestroyTopWindow(bool b)
171 mgAutoDestroyTopWindow = b;
173 //=========================================================================
175 //=========================================================================
176 void Wx::SetTopWindow(wxWindow* w)
180 bbtkGlobalError("wx::SetTopWindow : top window already set !");
184 //=========================================================================
187 //=========================================================================
188 void Wx::IncNbWindowsAlive()
191 bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
197 //=========================================================================
199 //=========================================================================
200 void Wx::DecNbWindowsAlive()
203 bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
206 DestroyTopWindowIfNeeded();
211 //=========================================================================
213 //=========================================================================
214 void Wx::IncNbWindowsShown()
217 bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
223 //=========================================================================
225 //=========================================================================
226 void Wx::DecNbWindowsShown()
229 bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
232 DestroyTopWindowIfNeeded();
238 //=========================================================================
241 //=========================================================================
242 int Wx::GetNbWindowsAlive()
244 return mgNbWindowsAlive;
246 //=========================================================================
248 //=========================================================================
249 bool Wx::IsSomeWindowAlive()
251 return (mgNbWindowsAlive>0);
253 //=========================================================================
256 //=========================================================================
257 int Wx::GetNbWindowsShown()
259 return mgNbWindowsShown;
261 //=========================================================================
263 //=========================================================================
264 bool Wx::IsSomeWindowShown()
266 return (mgNbWindowsShown>0);
268 //=========================================================================
271 //=========================================================================
272 Wx::BusyCursor::BusyCursor()
274 if (TopWindowExists())
276 bbtkDebugMessage("wx",2,
277 "Wx::BusyCursor::BusyCursor()"<<std::endl);
278 ::wxBeginBusyCursor();
281 Wx::BusyCursor::~BusyCursor()
283 if (TopWindowExists())
285 bbtkDebugMessage("wx",2,
286 "Wx::BusyCursor::~BusyCursor()"<<std::endl);
290 //=========================================================================
293 //=========================================================================
294 void Wx::ResetCursor()
296 if (!TopWindowExists()) return;
297 bbtkDebugMessage("wx",9,"Wx::ResetCursor()"<<std::endl);
298 while (wxIsBusy()) ::wxEndBusyCursor();
300 //=========================================================================
301 //=========================================================================
302 void Wx::BeginBusyCursor()
304 if (!TopWindowExists()) return;
305 bbtkDebugMessage("wx",9,"Wx::BeginBusyCursor()"<<std::endl);
306 ::wxBeginBusyCursor();
308 //=========================================================================
309 //=========================================================================
310 void Wx::EndBusyCursor()
312 if (!TopWindowExists()) return;
313 bbtkDebugMessage("wx",9,"Wx::EndBusyCursor()"<<std::endl);
316 //=========================================================================