1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxAcceleratorTable
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
13 #pragma implementation "accel.h"
18 #include "wx/string.h"
22 IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable
, wxObject
)
24 class WXDLLEXPORT wxAcceleratorRefData
: public wxObjectRefData
26 friend class WXDLLEXPORT wxAcceleratorTable
;
28 wxAcceleratorRefData();
29 ~wxAcceleratorRefData();
33 wxAcceleratorEntry
* m_entries
;
36 #define M_ACCELDATA ((wxAcceleratorRefData *)m_refData)
38 wxAcceleratorRefData::wxAcceleratorRefData()
41 m_entries
= (wxAcceleratorEntry
*) NULL
;
44 wxAcceleratorRefData::~wxAcceleratorRefData()
47 m_entries
= (wxAcceleratorEntry
*) NULL
;
51 wxAcceleratorTable::wxAcceleratorTable()
53 m_refData
= (wxAcceleratorRefData
*) NULL
;
56 wxAcceleratorTable::~wxAcceleratorTable()
58 // Data deleted in ~wxObject
61 // Load from .rc resource
62 wxAcceleratorTable::wxAcceleratorTable(const wxString
& WXUNUSED(resource
))
64 m_refData
= new wxAcceleratorRefData
;
67 // Create from an array
68 wxAcceleratorTable::wxAcceleratorTable(int n
, const wxAcceleratorEntry entries
[])
70 wxAcceleratorRefData
* data
= new wxAcceleratorRefData
;
74 data
->m_entries
= new wxAcceleratorEntry
[n
];
76 for (i
= 0; i
< n
; i
++)
77 data
->m_entries
[i
] = entries
[i
];
81 bool wxAcceleratorTable::Ok() const
83 return (m_refData
!= (wxAcceleratorRefData
*) NULL
);
86 int wxAcceleratorTable::GetCount() const
88 return M_ACCELDATA
->m_count
;
91 wxAcceleratorEntry
* wxAcceleratorTable::GetEntries() const
93 return M_ACCELDATA
->m_entries
;
96 // Implementation use only
97 bool wxAcceleratorEntry::MatchesEvent(const wxKeyEvent
& event
) const
99 bool eventAltDown
= event
.AltDown();
100 bool eventCtrlDown
= event
.ControlDown();
101 bool eventShiftDown
= event
.ShiftDown();
102 int eventKeyCode
= event
.GetKeyCode();
104 bool accAltDown
= ((GetFlags() & wxACCEL_ALT
) == wxACCEL_ALT
);
105 bool accCtrlDown
= ((GetFlags() & wxACCEL_CTRL
) == wxACCEL_CTRL
);
106 bool accShiftDown
= ((GetFlags() & wxACCEL_SHIFT
) == wxACCEL_SHIFT
);
107 int accKeyCode
= GetKeyCode();
108 int accKeyCode2
= GetKeyCode();
109 if (isascii(accKeyCode2
))
110 accKeyCode2
= tolower(accKeyCode2
);
112 return ((eventAltDown
== accAltDown
) && (eventCtrlDown
== accCtrlDown
) &&
113 (eventShiftDown
== accShiftDown
) &&
114 ((eventKeyCode
== accKeyCode
|| eventKeyCode
== accKeyCode2
))) ;