1 /////////////////////////////////////////////////////////////////////////////
2 // Name:        power.cpp
3 // Purpose:     wxWidgets power management sample
4 // Author:      Vadim Zeitlin
5 // Created:     2006-05-27
6 // RCS-ID:      $Id: power.cpp 39360 2006-05-27 14:29:30Z VZ $
7 // Copyright:   (C) 2006 Vadim Zeitlin <vadim@wxwindows.org>
8 // Licence:     wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
10 
11 // ============================================================================
12 // declarations
13 // ============================================================================
14 
15 // ----------------------------------------------------------------------------
16 // headers
17 // ----------------------------------------------------------------------------
18 
19 #include "wx/wxprec.h"
20 
21 #ifdef __BORLANDC__
22     #pragma hdrstop
23 #endif
24 
25 #ifndef WX_PRECOMP
26     #include "wx/app.h"
27     #include "wx/frame.h"
28 #endif
29 
30 #include "wx/textctrl.h"
31 #include "wx/msgdlg.h"
32 
33 #include "wx/power.h"
34 
35 #if !defined(__WXMSW__) && !defined(__WXPM__)
36     #include "../sample.xpm"
37 #endif
38 
39 // ----------------------------------------------------------------------------
40 // main frame class
41 // ----------------------------------------------------------------------------
42 
43 class MyFrame : public wxFrame
44 {
45 public:
MyFrame()46     MyFrame()
47         : wxFrame(NULL, wxID_ANY, _T("wxWidgets Power Management Sample"),
48                   wxDefaultPosition, wxSize(500, 200))
49     {
50         wxTextCtrl *text = new wxTextCtrl(this, wxID_ANY, _T(""),
51                                           wxDefaultPosition, wxDefaultSize,
52                                           wxTE_MULTILINE | wxTE_READONLY);
53         m_logOld = wxLog::SetActiveTarget(new wxLogTextCtrl(text));
54 
55         CreateStatusBar();
56 
57         SetIcon(wxICON(sample));
58 
59         UpdatePowerSettings(wxPOWER_UNKNOWN, wxBATTERY_UNKNOWN_STATE);
60 
61         Show();
62     }
63 
~MyFrame()64     virtual ~MyFrame()
65     {
66         delete wxLog::SetActiveTarget(m_logOld);
67     }
68 
69 private:
OnIdle(wxIdleEvent & WXUNUSED (event))70     void OnIdle(wxIdleEvent& WXUNUSED(event))
71     {
72         const wxPowerType powerType = wxGetPowerType();
73         const wxBatteryState batteryState = wxGetBatteryState();
74         if ( powerType != m_powerType || batteryState != m_batteryState )
75         {
76             UpdatePowerSettings(powerType, batteryState);
77         }
78     }
79 
80 #ifdef wxHAS_POWER_EVENTS
OnSuspending(wxPowerEvent & event)81     void OnSuspending(wxPowerEvent& event)
82     {
83         wxLogMessage(_T("System suspend starting..."));
84         if ( wxMessageBox(_T("Veto suspend?"), _T("Please answer"),
85                           wxYES_NO, this) == wxYES )
86         {
87             event.Veto();
88             wxLogMessage(_T("Vetoed suspend."));
89         }
90     }
91 
OnSuspended(wxPowerEvent & WXUNUSED (event))92     void OnSuspended(wxPowerEvent& WXUNUSED(event))
93     {
94         wxLogMessage(_T("System is going to suspend."));
95     }
96 
OnSuspendCancel(wxPowerEvent & WXUNUSED (event))97     void OnSuspendCancel(wxPowerEvent& WXUNUSED(event))
98     {
99         wxLogMessage(_T("System suspend was cancelled."));
100     }
101 
OnResume(wxPowerEvent & WXUNUSED (event))102     void OnResume(wxPowerEvent& WXUNUSED(event))
103     {
104         wxLogMessage(_T("System resumed from suspend."));
105     }
106 #endif // wxHAS_POWER_EVENTS
107 
108 
UpdatePowerSettings(wxPowerType powerType,wxBatteryState batteryState)109     void UpdatePowerSettings(wxPowerType powerType, wxBatteryState batteryState)
110     {
111         wxString powerStr;
112         switch ( m_powerType = powerType )
113         {
114             case wxPOWER_SOCKET:
115                 powerStr = _T("wall");
116                 break;
117 
118             case wxPOWER_BATTERY:
119                 powerStr = _T("battery");
120                 break;
121 
122             default:
123                 wxFAIL_MSG(_T("unknown wxPowerType value"));
124                 // fall through
125 
126             case wxPOWER_UNKNOWN:
127                 powerStr = _T("psychic");
128                 break;
129         }
130 
131         wxString batteryStr;
132         switch ( m_batteryState = batteryState )
133         {
134             case wxBATTERY_NORMAL_STATE:
135                 batteryStr = _T("charged");
136                 break;
137 
138             case wxBATTERY_LOW_STATE:
139                 batteryStr = _T("low");
140                 break;
141 
142             case wxBATTERY_CRITICAL_STATE:
143                 batteryStr = _T("critical");
144                 break;
145 
146             case wxBATTERY_SHUTDOWN_STATE:
147                 batteryStr = _T("empty");
148                 break;
149 
150             default:
151                 wxFAIL_MSG(_T("unknown wxBatteryState value"));
152                 // fall through
153 
154             case wxBATTERY_UNKNOWN_STATE:
155                 batteryStr = _T("unknown");
156                 break;
157         }
158 
159         SetStatusText(wxString::Format(
160                         _T("System is on %s power, battery state is %s"),
161                         powerStr.c_str(),
162                         batteryStr.c_str()));
163     }
164 
165     wxPowerType m_powerType;
166     wxBatteryState m_batteryState;
167 
168     wxLog *m_logOld;
169 
170     DECLARE_EVENT_TABLE()
171 };
172 
173 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
174     EVT_IDLE(MyFrame::OnIdle)
175 
176 #ifdef wxHAS_POWER_EVENTS
177     EVT_POWER_SUSPENDING(MyFrame::OnSuspending)
178     EVT_POWER_SUSPENDED(MyFrame::OnSuspended)
179     EVT_POWER_SUSPEND_CANCEL(MyFrame::OnSuspendCancel)
180     EVT_POWER_RESUME(MyFrame::OnResume)
181 #endif // wxHAS_POWER_EVENTS
182 END_EVENT_TABLE()
183 
184 // ----------------------------------------------------------------------------
185 // main application class
186 // ----------------------------------------------------------------------------
187 
188 class MyApp : public wxApp
189 {
190 public:
OnInit()191     virtual bool OnInit()
192     {
193         new MyFrame;
194 
195         return true;
196     }
197 };
198 
199 IMPLEMENT_APP(MyApp)
200