]> git.saurik.com Git - wxWidgets.git/blob - src/gtk/accel.cpp
Added wxAccelerators (sort of)
[wxWidgets.git] / src / gtk / accel.cpp
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: accel.cpp
3 // Purpose:
4 // Author: Robert Roebling
5 // 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 //-----------------------------------------------------------------------------
17 // wxAcceleratorTable
18 //-----------------------------------------------------------------------------
19
20 class wxAccelRefData: public wxObjectRefData
21 {
22 public:
23
24 wxAccelRefData(void);
25
26 wxList m_accels;
27 };
28
29 wxAccelRefData::wxAccelRefData(void)
30 {
31 m_accels.DeleteContents( TRUE );
32 }
33
34 //-----------------------------------------------------------------------------
35
36 #define M_ACCELDATA ((wxAccelRefData *)m_refData)
37
38 IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable,wxObject)
39
40 wxAcceleratorTable::wxAcceleratorTable()
41 {
42 m_refData = new wxAccelRefData();
43 }
44
45 wxAcceleratorTable::wxAcceleratorTable( int n, wxAcceleratorEntry entries[] )
46 {
47 m_refData = new wxAccelRefData();
48 for (int i = 0; i < n; i++)
49 {
50 M_ACCELDATA->m_accels.Append( (wxObject*)
51 new wxAcceleratorEntry( entries[n].GetFlags(), entries[n].GetKeyCode(), entries[n].GetCommand() ) );
52 }
53 }
54
55 wxAcceleratorTable::~wxAcceleratorTable()
56 {
57 }
58
59 bool wxAcceleratorTable::Ok() const
60 {
61 return (m_refData != NULL);
62 }
63
64 int wxAcceleratorTable::GetCommand( wxKeyEvent &event )
65 {
66 wxNode *node = M_ACCELDATA->m_accels.First();
67 while (node)
68 {
69 wxAcceleratorEntry *entry = (wxAcceleratorEntry*)node->Data();
70 if ((event.m_keyCode == entry->GetKeyCode()) &&
71 (((entry->GetFlags() & wxACCEL_CTRL) == 0) || event.ControlDown()) &&
72 (((entry->GetFlags() & wxACCEL_SHIFT) == 0) || event.ShiftDown()) &&
73 (((entry->GetFlags() & wxACCEL_ALT) == 0) || event.AltDown() || event.MetaDown()))
74 return entry->GetCommand();
75 node = node->Next();
76 }
77
78 return -1;
79 }
80