]> Creatis software - bbtk.git/blob - kernel/src/bbtkWx.cxx
aa05db7b0633e969f12352490573b3335a180011
[bbtk.git] / kernel / src / bbtkWx.cxx
1 #ifdef _USE_WXWIDGETS_
2
3 #include "bbtkWx.h"
4 #include "bbtkMessageManager.h"
5 #include <boost/signal.hpp>
6 //#include <boost/bind.hpp>
7
8 namespace bbtk
9 {
10
11   static wxWindow* mgTopWindow = 0;
12   static int mgNbWindowsAlive  = 0;
13   static int mgNbWindowsShown  = 0;
14   static bool mgAutoDestroyTopWindow = true;
15
16   // BBTKWXSIG
17   static Wx::Signal_type mgWxSignal;
18   // \BBTKWXSIG
19
20
21   //=========================================================================
22   void Wx::CreateTopWindow(wxWindow* parent, bool autodestroy)
23   {
24     wxWindow* top = 
25       new wxFrame(parent,
26                   -1,
27                   _T("TOP BBTK FRAME (YOU SHOULD NOT SEE ME !!)"));
28     top->Hide();
29     Wx::SetTopWindow(top);
30     mgAutoDestroyTopWindow = autodestroy;
31   }
32   //=========================================================================
33   
34   //=========================================================================
35   wxWindow* Wx::GetTopWindow() 
36   { 
37     if (mgTopWindow==0) Wx::CreateTopWindow(0);
38     return mgTopWindow; 
39   }
40   //=========================================================================
41   
42   //=========================================================================
43   bool Wx::TopWindowExists()
44   {
45     return (mgTopWindow!=0);
46   }
47   //=========================================================================
48
49   // BBTKWXSIG
50   //=========================================================================
51   void Wx::AddSignalObserver(Slot_function_type f)
52   {
53     mgWxSignal.connect(f);
54   }
55   //=========================================================================
56   // \BBTKWXSIG
57
58   //=========================================================================
59   void Wx::AutoDestroyTopWindow(bool b)
60   {
61     mgAutoDestroyTopWindow = b;
62   }
63   //=========================================================================
64   
65   //=========================================================================
66   void Wx::SetTopWindow(wxWindow* w) 
67   {
68     if ( mgTopWindow ) 
69       {
70         bbtkGlobalError("wx::SetTopWindow : top window already set !");
71       } 
72     mgTopWindow = w;
73   }
74   //=========================================================================
75
76
77   //=========================================================================
78   void Wx::IncNbWindowsAlive() 
79   { 
80     mgNbWindowsAlive++; 
81     bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
82                      <<std::endl);
83     // BBTKWXSIG
84     mgWxSignal();
85     // \BBTKWXSIG
86   }
87   //=========================================================================
88
89   //=========================================================================
90   void Wx::DecNbWindowsAlive()
91   { 
92     mgNbWindowsAlive--; 
93     bbtkDebugMessage("wx",2,"* Number of windows alive = "<<mgNbWindowsAlive
94                      <<std::endl);
95     if ( (mgNbWindowsAlive==0) && 
96          (mgAutoDestroyTopWindow) )
97       {
98     bbtkDebugMessage("wx",2,"  --> Destructing top window"<<std::endl);
99         mgTopWindow->Close();
100         mgTopWindow = 0;
101       }
102     // BBTKWXSIG
103     mgWxSignal();
104     // \BBTKWXSIG
105   }
106   //=========================================================================
107   
108   //=========================================================================
109   void Wx::IncNbWindowsShown() 
110   { 
111     mgNbWindowsShown++; 
112     bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
113                      <<std::endl);
114     // BBTKWXSIG
115     mgWxSignal();
116     // \BBTKWXSIG
117   }
118   //=========================================================================
119
120   //=========================================================================
121   void Wx::DecNbWindowsShown()
122   { 
123     mgNbWindowsShown--; 
124     bbtkDebugMessage("wx",2,"* Number of windows shown = "<<mgNbWindowsShown
125                      <<std::endl);
126     if ( (mgNbWindowsAlive==0) && 
127          (mgAutoDestroyTopWindow) )
128       {
129         bbtkDebugMessage("wx",2,"  --> Destructing top window"<<std::endl);
130         mgTopWindow->Close();
131         mgTopWindow = 0;
132       }
133     // BBTKWXSIG
134     mgWxSignal();
135     // \BBTKWXSIG
136   }
137   //=========================================================================
138
139
140   //=========================================================================
141   int  Wx::GetNbWindowsAlive() 
142   { 
143     return mgNbWindowsAlive; 
144   }
145   //=========================================================================
146   
147   //=========================================================================
148   bool Wx::IsSomeWindowAlive() 
149   { 
150     return (mgNbWindowsAlive>0);
151   }
152   //=========================================================================
153   
154   
155   //=========================================================================
156   int  Wx::GetNbWindowsShown() 
157   { 
158     return mgNbWindowsShown; 
159   }
160   //=========================================================================
161   
162   //=========================================================================
163   bool Wx::IsSomeWindowShown() 
164   { 
165     return (mgNbWindowsShown>0);
166   }
167   //=========================================================================
168   
169   //=========================================================================
170   void Wx::ResetCursor() 
171   {
172     if (!TopWindowExists()) return;
173     bbtkDebugMessage("wx",9,"Wx::ResetCursor()"<<std::endl);
174     while (wxIsBusy()) ::wxEndBusyCursor();
175   }
176   //=========================================================================
177   //=========================================================================
178   void Wx::BeginBusyCursor() 
179   {
180     if (!TopWindowExists()) return;
181     bbtkDebugMessage("wx",9,"Wx::BeginBusyCursor()"<<std::endl);
182     ::wxBeginBusyCursor();
183   }
184   //=========================================================================
185   //=========================================================================
186   void Wx::EndBusyCursor()
187   {
188     if (!TopWindowExists()) return;
189     bbtkDebugMessage("wx",9,"Wx::EndBusyCursor()"<<std::endl);
190     ::wxEndBusyCursor();
191   }
192   //=========================================================================
193
194
195 }
196
197 #endif