X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4bb6408c2631988fab9925014c6619358bf867de..606b005fb2b535b34d1ca45d2d06ee86718e8b1c:/src/motif/accel.cpp?ds=inline diff --git a/src/motif/accel.cpp b/src/motif/accel.cpp index 463102260b..d90a47b958 100644 --- a/src/motif/accel.cpp +++ b/src/motif/accel.cpp @@ -16,10 +16,10 @@ #include "wx/setup.h" #include "wx/accel.h" #include "wx/string.h" +#include "wx/utils.h" +#include -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject) -#endif class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData { @@ -28,66 +28,89 @@ public: wxAcceleratorRefData(); ~wxAcceleratorRefData(); -/* TODO: implementation - inline HACCEL GetHACCEL() const { return m_hAccel; } -protected: - HACCEL m_hAccel; -*/ +public: + int m_count; + wxAcceleratorEntry* m_entries; }; #define M_ACCELDATA ((wxAcceleratorRefData *)m_refData) wxAcceleratorRefData::wxAcceleratorRefData() { - // TODO -/* - HACCEL m_hAccel; -*/ + m_count = 0; + m_entries = (wxAcceleratorEntry*) NULL; } wxAcceleratorRefData::~wxAcceleratorRefData() { -/* - if (m_hAccel) - { - DestroyAcceleratorTable((HACCEL) m_hAccel); - } - m_hAccel = 0 ; -*/ + delete[] m_entries; + m_entries = (wxAcceleratorEntry*) NULL; + m_count = 0; } wxAcceleratorTable::wxAcceleratorTable() { - m_refData = NULL; + m_refData = (wxAcceleratorRefData*) NULL; } wxAcceleratorTable::~wxAcceleratorTable() { + // Data deleted in ~wxObject } // Load from .rc resource -wxAcceleratorTable::wxAcceleratorTable(const wxString& resource) +wxAcceleratorTable::wxAcceleratorTable(const wxString& WXUNUSED(resource)) { m_refData = new wxAcceleratorRefData; - -/* TODO: load acelerator from resource, if appropriate for your platform - M_ACCELDATA->m_hAccel = hAccel; - M_ACCELDATA->m_ok = (hAccel != 0); -*/ } // Create from an array wxAcceleratorTable::wxAcceleratorTable(int n, wxAcceleratorEntry entries[]) { - m_refData = new wxAcceleratorRefData; + wxAcceleratorRefData* data = new wxAcceleratorRefData; + m_refData = data; + + data->m_count = n; + data->m_entries = new wxAcceleratorEntry[n]; + int i; + for (i = 0; i < n; i++) + data->m_entries[i] = entries[i]; -/* TODO: create table from entries - */ } bool wxAcceleratorTable::Ok() const { - // TODO - return FALSE; + return (m_refData != (wxAcceleratorRefData*) NULL); +} + +int wxAcceleratorTable::GetCount() const +{ + return M_ACCELDATA->m_count; +} + +wxAcceleratorEntry* wxAcceleratorTable::GetEntries() const +{ + return M_ACCELDATA->m_entries; +} + +// Implementation use only +bool wxAcceleratorEntry::MatchesEvent(const wxKeyEvent& event) const +{ + bool eventAltDown = event.AltDown(); + bool eventCtrlDown = event.ControlDown(); + bool eventShiftDown = event.ShiftDown(); + int eventKeyCode = event.KeyCode(); + + bool accAltDown = ((GetFlags() & wxACCEL_ALT) == wxACCEL_ALT); + bool accCtrlDown = ((GetFlags() & wxACCEL_CTRL) == wxACCEL_CTRL); + bool accShiftDown = ((GetFlags() & wxACCEL_SHIFT) == wxACCEL_SHIFT); + int accKeyCode = GetKeyCode(); + int accKeyCode2 = GetKeyCode(); + if (isascii(accKeyCode2)) + accKeyCode2 = tolower(accKeyCode2); + + return ((eventAltDown == accAltDown) && (eventCtrlDown == accCtrlDown) && + (eventShiftDown == accShiftDown) && + ((eventKeyCode == accKeyCode || eventKeyCode == accKeyCode2))) ; }