X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/461dae941dac51a523a4280d3e1800143b720305..88a01064f05bea04682cfde8d82b110d4c80299b:/src/msw/accel.cpp diff --git a/src/msw/accel.cpp b/src/msw/accel.cpp index b25c03c146..40924c0528 100644 --- a/src/msw/accel.cpp +++ b/src/msw/accel.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: accel.cpp +// Name: msw/accel.cpp // Purpose: wxAcceleratorTable // Author: Julian Smart // Modified by: @@ -9,29 +9,39 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "accel.h" -#endif +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ -#pragma hdrstop + #pragma hdrstop #endif +#if wxUSE_ACCEL + #ifndef WX_PRECOMP #include "wx/window.h" #endif #include "wx/accel.h" -#if wxUSE_ACCEL - #include "wx/msw/private.h" +extern WXWORD wxCharCodeWXToMSW(int id, bool *isVirtual); + IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject) +// ---------------------------------------------------------------------------- +// data defining wxAcceleratorTable +// ---------------------------------------------------------------------------- + class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData { friend class WXDLLEXPORT wxAcceleratorTable; @@ -47,61 +57,47 @@ protected: DECLARE_NO_COPY_CLASS(wxAcceleratorRefData) }; +// ============================================================================ +// implementation +// ============================================================================ + +// ---------------------------------------------------------------------------- +// wxAcceleratorRefData +// ---------------------------------------------------------------------------- + #define M_ACCELDATA ((wxAcceleratorRefData *)m_refData) wxAcceleratorRefData::wxAcceleratorRefData() { - m_ok = FALSE; - m_hAccel = 0; + m_ok = false; + m_hAccel = 0; } wxAcceleratorRefData::~wxAcceleratorRefData() { - if (m_hAccel) - { - // This function not available in WIN16 -#if !defined(__WIN16__) - DestroyAcceleratorTable((HACCEL) m_hAccel); -#endif - } - m_hAccel = 0 ; -} - -wxAcceleratorTable::wxAcceleratorTable() -{ - m_refData = NULL; + if (m_hAccel) + { + DestroyAcceleratorTable((HACCEL) m_hAccel); + } } -wxAcceleratorTable::~wxAcceleratorTable() -{ -} +// ---------------------------------------------------------------------------- +// wxAcceleratorTable +// ---------------------------------------------------------------------------- // Load from .rc resource wxAcceleratorTable::wxAcceleratorTable(const wxString& resource) { m_refData = new wxAcceleratorRefData; - HACCEL hAccel = -#if defined(__WIN32__) -#ifdef UNICODE - ::LoadAcceleratorsW(wxGetInstance(), (const wxChar *)resource); -#else - ::LoadAcceleratorsA(wxGetInstance(), (const char *)resource); -#endif -#else - ::LoadAccelerators(wxGetInstance(), (const wxChar *)resource); -#endif + HACCEL hAccel = ::LoadAccelerators(wxGetInstance(), resource); M_ACCELDATA->m_hAccel = hAccel; - M_ACCELDATA->m_ok = (hAccel != 0); + M_ACCELDATA->m_ok = hAccel != 0; } -extern int wxCharCodeWXToMSW(int id, bool *isVirtual); - // Create from an array -#if !defined(__WIN16__) wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) { - // Not available in WIN16 m_refData = new wxAcceleratorRefData; ACCEL* arr = new ACCEL[n]; @@ -125,7 +121,7 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] arr[i].fVirt = fVirt; arr[i].key = key; - arr[i].cmd = entries[i].GetCommand(); + arr[i].cmd = (WORD)entries[i].GetCommand(); } M_ACCELDATA->m_hAccel = ::CreateAcceleratorTable(arr, n); @@ -133,14 +129,16 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] M_ACCELDATA->m_ok = (M_ACCELDATA->m_hAccel != 0); } -#else // Win16 -wxAcceleratorTable::wxAcceleratorTable(int WXUNUSED(n), const wxAcceleratorEntry WXUNUSED(entries)[]) + +bool wxAcceleratorTable::operator==(const wxAcceleratorTable& accel) const { - // No, we simply gracefully degrade; we don't expect the - // developer to pepper their code with #ifdefs just for this. - // wxFAIL_MSG("not implemented"); + const wxAcceleratorRefData * + accelData = (wxAcceleratorRefData *)accel.m_refData; + + return m_refData ? (accelData && + M_ACCELDATA->m_hAccel == accelData->m_hAccel) + : !accelData; } -#endif // Win32/16 bool wxAcceleratorTable::Ok() const { @@ -168,4 +166,5 @@ bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); } -#endif +#endif // wxUSE_ACCEL +