]> git.saurik.com Git - wxWidgets.git/blob - src/mac/carbon/accel.cpp
Workaround for wxUSE_STL
[wxWidgets.git] / src / mac / carbon / accel.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: accel.cpp
3 // Purpose: wxAcceleratorTable
4 // Author: Stefan Csomor
5 // Modified by:
6 // Created: 1998-01-01
7 // RCS-ID: $Id$
8 // Copyright: (c) Stefan Csomor
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
13 #pragma implementation "accel.h"
14 #endif
15
16 #include "wx/wxprec.h"
17
18 #include "wx/accel.h"
19 #include "wx/string.h"
20
21 #if !USE_SHARED_LIBRARIES
22 IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject)
23 #endif
24
25 // ----------------------------------------------------------------------------
26 // wxAccelList: a list of wxAcceleratorEntries
27 // ----------------------------------------------------------------------------
28
29 WX_DECLARE_LIST(wxAcceleratorEntry, wxAccelList);
30 #include "wx/listimpl.cpp"
31 WX_DEFINE_LIST(wxAccelList);
32
33 // ----------------------------------------------------------------------------
34 // wxAccelRefData: the data used by wxAcceleratorTable
35 // ----------------------------------------------------------------------------
36
37 class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData
38 {
39 friend class WXDLLEXPORT wxAcceleratorTable;
40 public:
41 wxAcceleratorRefData();
42 ~wxAcceleratorRefData();
43
44 wxAccelList m_accels;
45 };
46
47 #define M_ACCELDATA ((wxAcceleratorRefData *)m_refData)
48
49 wxAcceleratorRefData::wxAcceleratorRefData()
50 : m_accels()
51 {
52 }
53
54 wxAcceleratorRefData::~wxAcceleratorRefData()
55 {
56 WX_CLEAR_LIST( wxAccelList, m_accels );
57 }
58
59 wxAcceleratorTable::wxAcceleratorTable()
60 {
61 m_refData = NULL;
62 }
63
64 wxAcceleratorTable::~wxAcceleratorTable()
65 {
66 }
67
68 // Create from an array
69 wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[])
70 {
71 m_refData = new wxAcceleratorRefData;
72
73 for (int i = 0; i < n; i++)
74 {
75 int flag = entries[i].GetFlags();
76 int keycode = entries[i].GetKeyCode();
77 int command = entries[i].GetCommand();
78 if ((keycode >= (int)'a') && (keycode <= (int)'z')) keycode = (int)toupper( (char)keycode );
79 M_ACCELDATA->m_accels.Append( new wxAcceleratorEntry( flag, keycode, command ) );
80 }
81 }
82
83 bool wxAcceleratorTable::Ok() const
84 {
85 return (m_refData != NULL);
86 }
87
88 int wxAcceleratorTable::GetCommand( wxKeyEvent &event )
89 {
90 if (!Ok()) return -1;
91
92 wxAccelList::compatibility_iterator node = M_ACCELDATA->m_accels.GetFirst();
93 while (node)
94 {
95 wxAcceleratorEntry *entry = node->GetData();
96 if ((event.m_keyCode == entry->GetKeyCode()) &&
97 (((entry->GetFlags() & wxACCEL_CTRL) == 0) || event.ControlDown()) &&
98 (((entry->GetFlags() & wxACCEL_SHIFT) == 0) || event.ShiftDown()) &&
99 (((entry->GetFlags() & wxACCEL_ALT) == 0) || event.AltDown() || event.MetaDown()))
100 {
101 return entry->GetCommand();
102 }
103 node = node->GetNext();
104 }
105
106 return -1;
107 }
108
109