1 ///////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxAcceleratorEntry and wxAcceleratorTable classes
4 // Author: Julian Smart, Robert Roebling, Vadim Zeitlin
6 // Created: 31.05.01 (extracted from other files)
7 // Copyright: (c) wxWidgets team
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_ACCEL_H_BASE_
12 #define _WX_ACCEL_H_BASE_
18 #include "wx/object.h"
20 class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable
;
21 class WXDLLIMPEXP_FWD_CORE wxMenuItem
;
22 class WXDLLIMPEXP_FWD_CORE wxKeyEvent
;
24 // ----------------------------------------------------------------------------
26 // ----------------------------------------------------------------------------
28 // wxAcceleratorEntry flags
29 enum wxAcceleratorEntryFlags
31 wxACCEL_NORMAL
= 0x0000, // no modifiers
32 wxACCEL_ALT
= 0x0001, // hold Alt key down
33 wxACCEL_CTRL
= 0x0002, // hold Ctrl key down
34 wxACCEL_SHIFT
= 0x0004, // hold Shift key down
35 #if defined(__WXMAC__) || defined(__WXCOCOA__)
36 wxACCEL_RAW_CTRL
= 0x0008, //
38 wxACCEL_RAW_CTRL
= wxACCEL_CTRL
,
40 wxACCEL_CMD
= wxACCEL_CTRL
43 // ----------------------------------------------------------------------------
44 // an entry in wxAcceleratorTable corresponds to one accelerator
45 // ----------------------------------------------------------------------------
47 class WXDLLIMPEXP_CORE wxAcceleratorEntry
50 wxAcceleratorEntry(int flags
= 0, int keyCode
= 0, int cmd
= 0,
51 wxMenuItem
*item
= NULL
)
58 wxAcceleratorEntry(const wxAcceleratorEntry
& entry
)
59 : m_flags(entry
.m_flags
)
60 , m_keyCode(entry
.m_keyCode
)
61 , m_command(entry
.m_command
)
62 , m_item(entry
.m_item
)
65 // create accelerator corresponding to the specified string, return NULL if
66 // string couldn't be parsed or a pointer to be deleted by the caller
67 static wxAcceleratorEntry
*Create(const wxString
& str
);
69 wxAcceleratorEntry
& operator=(const wxAcceleratorEntry
& entry
)
72 Set(entry
.m_flags
, entry
.m_keyCode
, entry
.m_command
, entry
.m_item
);
76 void Set(int flags
, int keyCode
, int cmd
, wxMenuItem
*item
= NULL
)
84 void SetMenuItem(wxMenuItem
*item
) { m_item
= item
; }
86 int GetFlags() const { return m_flags
; }
87 int GetKeyCode() const { return m_keyCode
; }
88 int GetCommand() const { return m_command
; }
90 wxMenuItem
*GetMenuItem() const { return m_item
; }
92 bool operator==(const wxAcceleratorEntry
& entry
) const
94 return m_flags
== entry
.m_flags
&&
95 m_keyCode
== entry
.m_keyCode
&&
96 m_command
== entry
.m_command
&&
97 m_item
== entry
.m_item
;
100 bool operator!=(const wxAcceleratorEntry
& entry
) const
101 { return !(*this == entry
); }
103 #if defined(__WXMOTIF__)
104 // Implementation use only
105 bool MatchesEvent(const wxKeyEvent
& event
) const;
110 return m_keyCode
!= 0;
114 // string <-> wxAcceleratorEntry conversion
115 // ----------------------------------------
117 // returns a wxString for the this accelerator.
118 // this function formats it using the <flags>-<keycode> format
119 // where <flags> maybe a hyphen-separated list of "shift|alt|ctrl"
120 wxString
ToString() const { return AsPossiblyLocalizedString(true); }
122 // same as above but without translating, useful if the string is meant to
123 // be stored in a file or otherwise stored, instead of being shown to the
125 wxString
ToRawString() const { return AsPossiblyLocalizedString(false); }
127 // returns true if the given string correctly initialized this object
128 // (i.e. if IsOk() returns true after this call)
129 bool FromString(const wxString
& str
);
133 wxString
AsPossiblyLocalizedString(bool localized
) const;
135 // common part of Create() and FromString()
136 static bool ParseAccel(const wxString
& str
, int *flags
, int *keycode
);
139 int m_flags
; // combination of wxACCEL_XXX constants
140 int m_keyCode
; // ASCII or virtual keycode
141 int m_command
; // Command id to generate
143 // the menu item this entry corresponds to, may be NULL
146 // for compatibility with old code, use accessors now!
147 friend class WXDLLIMPEXP_FWD_CORE wxMenu
;
150 // ----------------------------------------------------------------------------
151 // include wxAcceleratorTable class declaration, it is only used by the library
152 // and so doesn't have any published user visible interface
153 // ----------------------------------------------------------------------------
155 #if defined(__WXUNIVERSAL__)
156 #include "wx/generic/accel.h"
157 #elif defined(__WXMSW__)
158 #include "wx/msw/accel.h"
159 #elif defined(__WXMOTIF__)
160 #include "wx/motif/accel.h"
161 #elif defined(__WXGTK20__)
162 #include "wx/gtk/accel.h"
163 #elif defined(__WXGTK__)
164 #include "wx/gtk1/accel.h"
165 #elif defined(__WXMAC__)
166 #include "wx/osx/accel.h"
167 #elif defined(__WXCOCOA__)
168 #include "wx/generic/accel.h"
169 #elif defined(__WXPM__)
170 #include "wx/os2/accel.h"
173 extern WXDLLIMPEXP_DATA_CORE(wxAcceleratorTable
) wxNullAcceleratorTable
;
175 #endif // wxUSE_ACCEL