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 43class MyFrame : public wxFrame 44{ 45public: 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 64 virtual ~MyFrame() 65 { 66 delete wxLog::SetActiveTarget(m_logOld); 67 } 68 69private: 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 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 92 void OnSuspended(wxPowerEvent& WXUNUSED(event)) 93 { 94 wxLogMessage(_T("System is going to suspend.")); 95 } 96 97 void OnSuspendCancel(wxPowerEvent& WXUNUSED(event)) 98 { 99 wxLogMessage(_T("System suspend was cancelled.")); 100 } 101 102 void OnResume(wxPowerEvent& WXUNUSED(event)) 103 { 104 wxLogMessage(_T("System resumed from suspend.")); 105 } 106#endif // wxHAS_POWER_EVENTS 107 108 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 173BEGIN_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 182END_EVENT_TABLE() 183 184// ---------------------------------------------------------------------------- 185// main application class 186// ---------------------------------------------------------------------------- 187 188class MyApp : public wxApp 189{ 190public: 191 virtual bool OnInit() 192 { 193 new MyFrame; 194 195 return true; 196 } 197}; 198 199IMPLEMENT_APP(MyApp) 200