]> git.saurik.com Git - wxWidgets.git/blob - src/gtk1/accel.cpp
wxWindow::ReParent()
[wxWidgets.git] / src / gtk1 / accel.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: accel.cpp
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 #ifdef __GNUG__
11 #pragma implementation "accel.h"
12 #endif
13
14 #include "wx/accel.h"
15
16 #include <ctype.h>
17
18 //-----------------------------------------------------------------------------
19 // wxAcceleratorTable
20 //-----------------------------------------------------------------------------
21
22 class wxAccelRefData: public wxObjectRefData
23 {
24 public:
25
26 wxAccelRefData(void);
27
28 wxList m_accels;
29 };
30
31 wxAccelRefData::wxAccelRefData(void)
32 {
33 m_accels.DeleteContents( TRUE );
34 }
35
36 //-----------------------------------------------------------------------------
37
38 #define M_ACCELDATA ((wxAccelRefData *)m_refData)
39
40 IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable,wxObject)
41
42 wxAcceleratorTable::wxAcceleratorTable()
43 {
44 }
45
46 wxAcceleratorTable::wxAcceleratorTable( int n, wxAcceleratorEntry entries[] )
47 {
48 m_refData = new wxAccelRefData();
49
50 for (int i = 0; i < n; i++)
51 {
52 int flag = entries[i].GetFlags();
53 int keycode = entries[i].GetKeyCode();
54 int command = entries[i].GetCommand();
55 if ((keycode >= (int)'A') && (keycode <= (int)'Z')) keycode = (int)tolower( (char)keycode );
56 M_ACCELDATA->m_accels.Append( new wxAcceleratorEntry( flag, keycode, command ) );
57 }
58 }
59
60 wxAcceleratorTable::~wxAcceleratorTable()
61 {
62 }
63
64 bool wxAcceleratorTable::Ok() const
65 {
66 return (m_refData != NULL);
67 }
68
69 int wxAcceleratorTable::GetCommand( wxKeyEvent &event )
70 {
71 if (!Ok()) return -1;
72
73 wxNode *node = M_ACCELDATA->m_accels.First();
74 while (node)
75 {
76 wxAcceleratorEntry *entry = (wxAcceleratorEntry*)node->Data();
77 if ((event.m_keyCode == entry->GetKeyCode()) &&
78 (((entry->GetFlags() & wxACCEL_CTRL) == 0) || event.ControlDown()) &&
79 (((entry->GetFlags() & wxACCEL_SHIFT) == 0) || event.ShiftDown()) &&
80 (((entry->GetFlags() & wxACCEL_ALT) == 0) || event.AltDown() || event.MetaDown()))
81 {
82 return entry->GetCommand();
83 }
84 node = node->Next();
85 }
86
87 return -1;
88 }
89