X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d84afea9d1ec41ee4e2ebb3bf6b87926cf5f04d1..07aaf32633ecf18ec3edfbb41793a112914792d0:/src/generic/accel.cpp diff --git a/src/generic/accel.cpp b/src/generic/accel.cpp index ff0483376b..0185018d42 100644 --- a/src/generic/accel.cpp +++ b/src/generic/accel.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: generic/accel.cpp +// Name: src/generic/accel.cpp // Purpose: generic implementation of wxAcceleratorTable class // Author: Robert Roebling // Modified: VZ pn 31.05.01: use typed lists, Unicode cleanup, Add/Remove @@ -16,10 +16,6 @@ // headers // ---------------------------------------------------------------------------- -#ifdef __GNUG__ - #pragma implementation "accel.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -30,8 +26,8 @@ #if wxUSE_ACCEL #ifndef WX_PRECOMP - #include "wx/event.h" #include "wx/list.h" + #include "wx/event.h" #endif // WX_PRECOMP #include "wx/accel.h" @@ -44,7 +40,7 @@ WX_DECLARE_LIST(wxAcceleratorEntry, wxAccelList); #include "wx/listimpl.cpp" -WX_DEFINE_LIST(wxAccelList); +WX_DEFINE_LIST(wxAccelList) // ---------------------------------------------------------------------------- // wxAccelRefData: the data used by wxAcceleratorTable @@ -55,16 +51,19 @@ class wxAccelRefData : public wxObjectRefData public: wxAccelRefData() { - m_accels.DeleteContents(TRUE); } wxAccelRefData(const wxAccelRefData& data) : wxObjectRefData() { - m_accels.DeleteContents(TRUE); m_accels = data.m_accels; } + virtual ~wxAccelRefData() + { + WX_CLEAR_LIST(wxAccelList, m_accels); + } + wxAccelList m_accels; }; @@ -86,7 +85,7 @@ wxAcceleratorTable::wxAcceleratorTable() { } -wxAcceleratorTable::wxAcceleratorTable(int n, wxAcceleratorEntry entries[]) +wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) { m_refData = new wxAccelRefData; @@ -95,7 +94,7 @@ wxAcceleratorTable::wxAcceleratorTable(int n, wxAcceleratorEntry entries[]) const wxAcceleratorEntry& entry = entries[i]; int keycode = entry.GetKeyCode(); - if ( wxIslower(keycode) ) + if ( wxIsascii(keycode) ) keycode = wxToupper(keycode); M_ACCELDATA->m_accels.Append(new wxAcceleratorEntry(entry.GetFlags(), @@ -108,7 +107,7 @@ wxAcceleratorTable::~wxAcceleratorTable() { } -bool wxAcceleratorTable::Ok() const +bool wxAcceleratorTable::IsOk() const { return m_refData != NULL; } @@ -133,14 +132,19 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry) { AllocExclusive(); - wxAccelList::Node *node = M_ACCELDATA->m_accels.GetFirst(); + wxAccelList::compatibility_iterator node = M_ACCELDATA->m_accels.GetFirst(); while ( node ) { const wxAcceleratorEntry *entryCur = node->GetData(); - if ( *entryCur == entry ) + // given entry contains only the information of the accelerator key + // because it was set that way during creation so do not use the + // comparison operator which also checks the command field + if ((entryCur->GetKeyCode() == entry.GetKeyCode()) && + (entryCur->GetFlags() == entry.GetFlags())) { - M_ACCELDATA->m_accels.DeleteNode(node); + delete node->GetData(); + M_ACCELDATA->m_accels.Erase(node); return; } @@ -148,7 +152,7 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry) node = node->GetNext(); } - wxFAIL_MSG(_T("deleting inexistent accel from wxAcceleratorTable")); + wxFAIL_MSG(wxT("deleting inexistent accel from wxAcceleratorTable")); } // ---------------------------------------------------------------------------- @@ -158,13 +162,13 @@ void wxAcceleratorTable::Remove(const wxAcceleratorEntry& entry) const wxAcceleratorEntry * wxAcceleratorTable::GetEntry(const wxKeyEvent& event) const { - if ( !Ok() ) + if ( !IsOk() ) { // not an error, the accel table is just empty return NULL; } - wxAccelList::Node *node = M_ACCELDATA->m_accels.GetFirst(); + wxAccelList::compatibility_iterator node = M_ACCELDATA->m_accels.GetFirst(); while ( node ) { const wxAcceleratorEntry *entry = node->GetData(); @@ -177,8 +181,7 @@ wxAcceleratorTable::GetEntry(const wxKeyEvent& event) const // now check flags if ( (((flags & wxACCEL_CTRL) != 0) == event.ControlDown()) && (((flags & wxACCEL_SHIFT) != 0) == event.ShiftDown()) && - (((flags & wxACCEL_ALT) != 0) == - (event.AltDown() || event.MetaDown())) ) + (((flags & wxACCEL_ALT) != 0) == event.AltDown()) ) { return entry; } @@ -215,4 +218,3 @@ wxObjectRefData *wxAcceleratorTable::CloneRefData(const wxObjectRefData *data) c } #endif // wxUSE_ACCEL -