1 /////////////////////////////////////////////////////////////////////////////
4 // Author: Robert Roebling
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
11 #pragma implementation "accel.h"
16 //-----------------------------------------------------------------------------
18 //-----------------------------------------------------------------------------
20 class wxAccelRefData
: public wxObjectRefData
29 wxAccelRefData::wxAccelRefData(void)
31 m_accels
.DeleteContents( TRUE
);
34 //-----------------------------------------------------------------------------
36 #define M_ACCELDATA ((wxAccelRefData *)m_refData)
38 IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable
,wxObject
)
40 wxAcceleratorTable::wxAcceleratorTable()
42 m_refData
= new wxAccelRefData();
45 wxAcceleratorTable::wxAcceleratorTable( int n
, wxAcceleratorEntry entries
[] )
47 m_refData
= new wxAccelRefData();
48 for (int i
= 0; i
< n
; i
++)
50 M_ACCELDATA
->m_accels
.Append( (wxObject
*)
51 new wxAcceleratorEntry( entries
[n
].GetFlags(), entries
[n
].GetKeyCode(), entries
[n
].GetCommand() ) );
55 wxAcceleratorTable::~wxAcceleratorTable()
59 bool wxAcceleratorTable::Ok() const
61 return (m_refData
!= NULL
);
64 int wxAcceleratorTable::GetCommand( wxKeyEvent
&event
)
66 wxNode
*node
= M_ACCELDATA
->m_accels
.First();
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();