]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/motif/accel.cpp
Fixed wxMessageBox with only an OK button returning wxCANCEL under MSW.
[wxWidgets.git] / src / motif / accel.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/motif/accel.cpp
3// Purpose: wxAcceleratorTable
4// Author: Julian Smart
5// Modified by:
6// Created: 17/09/98
7// RCS-ID: $Id$
8// Copyright: (c) Julian Smart
9// Licence: wxWindows licence
10/////////////////////////////////////////////////////////////////////////////
11
12// For compilers that support precompilation, includes "wx.h".
13#include "wx/wxprec.h"
14
15#include "wx/accel.h"
16
17#ifndef WX_PRECOMP
18 #include "wx/string.h"
19 #include "wx/utils.h"
20#endif
21
22#include <ctype.h>
23
24IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject)
25
26class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData
27{
28 friend class wxAcceleratorTable;
29public:
30 wxAcceleratorRefData();
31 virtual ~wxAcceleratorRefData();
32
33public:
34 int m_count;
35 wxAcceleratorEntry* m_entries;
36};
37
38#define M_ACCELDATA ((wxAcceleratorRefData *)m_refData)
39
40wxAcceleratorRefData::wxAcceleratorRefData()
41{
42 m_count = 0;
43 m_entries = NULL;
44}
45
46wxAcceleratorRefData::~wxAcceleratorRefData()
47{
48 wxDELETEA(m_entries);
49 m_count = 0;
50}
51
52wxAcceleratorTable::wxAcceleratorTable()
53{
54 m_refData = NULL;
55}
56
57wxAcceleratorTable::~wxAcceleratorTable()
58{
59 // Data deleted in ~wxObject
60}
61
62// Load from .rc resource
63wxAcceleratorTable::wxAcceleratorTable(const wxString& WXUNUSED(resource))
64{
65 m_refData = new wxAcceleratorRefData;
66}
67
68// Create from an array
69wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[])
70{
71 wxAcceleratorRefData* data = new wxAcceleratorRefData;
72 m_refData = data;
73
74 data->m_count = n;
75 data->m_entries = new wxAcceleratorEntry[n];
76 int i;
77 for (i = 0; i < n; i++)
78 data->m_entries[i] = entries[i];
79
80}
81
82bool wxAcceleratorTable::IsOk() const
83{
84 return (m_refData != NULL);
85}
86
87int wxAcceleratorTable::GetCount() const
88{
89 return M_ACCELDATA->m_count;
90}
91
92wxAcceleratorEntry* wxAcceleratorTable::GetEntries() const
93{
94 return M_ACCELDATA->m_entries;
95}
96
97// Implementation use only
98bool wxAcceleratorEntry::MatchesEvent(const wxKeyEvent& event) const
99{
100 bool eventAltDown = event.AltDown();
101 bool eventCtrlDown = event.ControlDown();
102 bool eventShiftDown = event.ShiftDown();
103 int eventKeyCode = event.GetKeyCode();
104
105 bool accAltDown = ((GetFlags() & wxACCEL_ALT) == wxACCEL_ALT);
106 bool accCtrlDown = ((GetFlags() & wxACCEL_CTRL) == wxACCEL_CTRL);
107 bool accShiftDown = ((GetFlags() & wxACCEL_SHIFT) == wxACCEL_SHIFT);
108 int accKeyCode = GetKeyCode();
109 int accKeyCode2 = GetKeyCode();
110 if (wxIsascii(accKeyCode2))
111 accKeyCode2 = wxTolower(accKeyCode2);
112
113 return ((eventAltDown == accAltDown) && (eventCtrlDown == accCtrlDown) &&
114 (eventShiftDown == accShiftDown) &&
115 ((eventKeyCode == accKeyCode || eventKeyCode == accKeyCode2))) ;
116}