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);
65 //=========================================================================
67 //=========================================================================
68 void Wx::DestroyWxAppIfNeeded()
72 bbtkDebugMessage("wx",1," --> Destructing bbtk WxApp"<<std::endl);
79 //=========================================================================
81 //=========================================================================
82 void Wx::SetTopWindowParent(wxWindow* w)
84 if (mgTopWindowParent != 0)
86 bbtkGlobalError("Wx::SetTopWindowParent : top window parent != 0");
88 mgTopWindowParent = w;
90 //=========================================================================
92 //=========================================================================
93 void Wx::CreateTopWindowIfNeeded()
95 if (mgTopWindow!=0) return;
96 bbtkDebugMessage("wx",1," --> Creating bbtk top window"<<std::endl);
98 CreateWxAppIfNeeded();
101 new wxFrame(mgTopWindowParent,
103 _T("TOP BBTK FRAME (YOU SHOULD NOT SEE ME !!)"));
106 Wx::SetTopWindow(top);
108 //=========================================================================
110 //=========================================================================
111 void Wx::DestroyTopWindowIfNeeded()
113 if ( (mgNbWindowsAlive==0) &&
114 (mgAutoDestroyTopWindow) )
116 bbtkDebugMessage("wx",1," --> Destructing bbtk top window"<<std::endl);
117 mgTopWindow->Close();
120 DestroyWxAppIfNeeded();
123 //=========================================================================
125 //=========================================================================
126 void Wx::LoopUntilAllWindowsClose()
129 while (mgTopWindow != 0)
133 bbtkDebugMessage("wx",2,"Wx::Loop "<<i << std::endl);
140 //=========================================================================
142 //=========================================================================
143 wxWindow* Wx::GetTopWindow()
145 Wx::CreateTopWindowIfNeeded();
148 //=========================================================================
150 //=========================================================================
151 bool Wx::TopWindowExists()
153 return (mgTopWindow!=0);
155 //=========================================================================
158 //=========================================================================
159 void Wx::AddSignalObserver(Slot_function_type f)
161 mgWxSignal.connect(f);
163 //=========================================================================
166 //=========================================================================
167 void Wx::SetAutoDestroyTopWindow(bool b)
169 mgAutoDestroyTopWindow = b;
171 //=========================================================================
173 //=========================================================================
174 void Wx::SetTopWindow(wxWindow* w)
178 bbtkGlobalError("wx::SetTopWindow : top window already set !");
182 //=========================================================================
185 //=========================================================================
186 void Wx::IncNbWindowsAlive()
189 bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
195 //=========================================================================
197 //=========================================================================
198 void Wx::DecNbWindowsAlive()
201 bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
204 DestroyTopWindowIfNeeded();
209 //=========================================================================
211 //=========================================================================
212 void Wx::IncNbWindowsShown()
215 bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
221 //=========================================================================
223 //=========================================================================
224 void Wx::DecNbWindowsShown()
227 bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
230 DestroyTopWindowIfNeeded();
236 //=========================================================================
239 //=========================================================================
240 int Wx::GetNbWindowsAlive()
242 return mgNbWindowsAlive;
244 //=========================================================================
246 //=========================================================================
247 bool Wx::IsSomeWindowAlive()
249 return (mgNbWindowsAlive>0);
251 //=========================================================================
254 //=========================================================================
255 int Wx::GetNbWindowsShown()
257 return mgNbWindowsShown;
259 //=========================================================================
261 //=========================================================================
262 bool Wx::IsSomeWindowShown()
264 return (mgNbWindowsShown>0);
266 //=========================================================================
269 //=========================================================================
270 Wx::BusyCursor::BusyCursor()
272 if (TopWindowExists())
274 bbtkDebugMessage("wx",2,
275 "Wx::BusyCursor::BusyCursor()"<<std::endl);
276 ::wxBeginBusyCursor();
279 Wx::BusyCursor::~BusyCursor()
281 if (TopWindowExists())
283 bbtkDebugMessage("wx",2,
284 "Wx::BusyCursor::~BusyCursor()"<<std::endl);
288 //=========================================================================
291 //=========================================================================
292 void Wx::ResetCursor()
294 if (!TopWindowExists()) return;
295 bbtkDebugMessage("wx",9,"Wx::ResetCursor()"<<std::endl);
296 while (wxIsBusy()) ::wxEndBusyCursor();
298 //=========================================================================
299 //=========================================================================
300 void Wx::BeginBusyCursor()
302 if (!TopWindowExists()) return;
303 bbtkDebugMessage("wx",9,"Wx::BeginBusyCursor()"<<std::endl);
304 ::wxBeginBusyCursor();
306 //=========================================================================
307 //=========================================================================
308 void Wx::EndBusyCursor()
310 if (!TopWindowExists()) return;
311 bbtkDebugMessage("wx",9,"Wx::EndBusyCursor()"<<std::endl);
314 //=========================================================================