1///////////////////////////////////////////////////////////////////////////////
2// Name:        wx/power.h
3// Purpose:     functions and classes for system power management
4// Author:      Vadim Zeitlin
5// Modified by:
6// Created:     2006-05-27
7// RCS-ID:      $Id: power.h 48811 2007-09-19 23:11:28Z RD $
8// Copyright:   (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
9// Licence:     wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_POWER_H_
13#define _WX_POWER_H_
14
15#include "wx/event.h"
16
17// ----------------------------------------------------------------------------
18// power management constants
19// ----------------------------------------------------------------------------
20
21enum wxPowerType
22{
23    wxPOWER_SOCKET,
24    wxPOWER_BATTERY,
25    wxPOWER_UNKNOWN
26};
27
28enum wxBatteryState
29{
30    wxBATTERY_NORMAL_STATE,    // system is fully usable
31    wxBATTERY_LOW_STATE,       // start to worry
32    wxBATTERY_CRITICAL_STATE,  // save quickly
33    wxBATTERY_SHUTDOWN_STATE,  // too late
34    wxBATTERY_UNKNOWN_STATE
35};
36
37// ----------------------------------------------------------------------------
38// wxPowerEvent is generated when the system online status changes
39// ----------------------------------------------------------------------------
40
41// currently the power events are only available under Windows, to avoid
42// compiling in the code for handling them which is never going to be invoked
43// under the other platforms, we define wxHAS_POWER_EVENTS symbol if this event
44// is available, it should be used to guard all code using wxPowerEvent
45#ifdef __WXMSW__
46
47#define wxHAS_POWER_EVENTS
48
49class WXDLLIMPEXP_BASE wxPowerEvent : public wxEvent
50{
51public:
52    wxPowerEvent(wxEventType evtType) : wxEvent(wxID_NONE, evtType)
53    {
54        m_veto = false;
55    }
56
57    // Veto the operation (only makes sense with EVT_POWER_SUSPENDING)
58    void Veto() { m_veto = true; }
59
60    bool IsVetoed() const { return m_veto; }
61
62
63    // default copy ctor, assignment operator and dtor are ok
64
65    virtual wxEvent *Clone() const { return new wxPowerEvent(*this); }
66
67private:
68    bool m_veto;
69
70#if wxABI_VERSION >= 20806
71    DECLARE_ABSTRACT_CLASS(wxPowerEvent)
72#endif
73};
74
75BEGIN_DECLARE_EVENT_TYPES()
76    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_SUSPENDING, 406)
77    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_SUSPENDED, 407)
78    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_SUSPEND_CANCEL, 408)
79    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_BASE, wxEVT_POWER_RESUME, 444)
80END_DECLARE_EVENT_TYPES()
81
82typedef void (wxEvtHandler::*wxPowerEventFunction)(wxPowerEvent&);
83
84#define wxPowerEventHandler(func) \
85    (wxObjectEventFunction)(wxEventFunction) \
86        wxStaticCastEvent(wxPowerEventFunction, &func)
87
88#define EVT_POWER_SUSPENDING(func) \
89    wx__DECLARE_EVT0(wxEVT_POWER_SUSPENDING, wxPowerEventHandler(func))
90#define EVT_POWER_SUSPENDED(func) \
91    wx__DECLARE_EVT0(wxEVT_POWER_SUSPENDED, wxPowerEventHandler(func))
92#define EVT_POWER_SUSPEND_CANCEL(func) \
93    wx__DECLARE_EVT0(wxEVT_POWER_SUSPEND_CANCEL, wxPowerEventHandler(func))
94#define EVT_POWER_RESUME(func) \
95    wx__DECLARE_EVT0(wxEVT_POWER_RESUME, wxPowerEventHandler(func))
96
97#else // no support for power events
98    #undef wxHAS_POWER_EVENTS
99#endif // support for power events/no support
100
101// ----------------------------------------------------------------------------
102// power management functions
103// ----------------------------------------------------------------------------
104
105// return the current system power state: online or offline
106WXDLLIMPEXP_BASE wxPowerType wxGetPowerType();
107
108// return approximate battery state
109WXDLLIMPEXP_BASE wxBatteryState wxGetBatteryState();
110
111#endif // _WX_POWER_H_
112