X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/252eb8fd71f9c118efdcea5e77a6395654757411..43f4e852a1b2ac37c3db6a2b87315192ac549191:/src/msw/accel.cpp diff --git a/src/msw/accel.cpp b/src/msw/accel.cpp index 86a28418e4..1dc9e4efc8 100644 --- a/src/msw/accel.cpp +++ b/src/msw/accel.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: accel.cpp +// Name: src/msw/accel.cpp // Purpose: wxAcceleratorTable // Author: Julian Smart // Modified by: @@ -9,119 +9,114 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#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 -#include "wx/setup.h" + #include "wx/window.h" #endif -#include "wx/msw/private.h" -#include "wx/msw/accel.h" +#include "wx/accel.h" -#ifdef LoadAccelerators -#undef LoadAccelerators -#endif +#include "wx/msw/private.h" +#include "wx/msw/private/keyboard.h" -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject) -#endif + +// ---------------------------------------------------------------------------- +// data defining wxAcceleratorTable +// ---------------------------------------------------------------------------- class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData { - friend class WXDLLEXPORT wxAcceleratorTable; + friend class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable; public: - wxAcceleratorRefData(void); - ~wxAcceleratorRefData(void); + wxAcceleratorRefData(); + virtual ~wxAcceleratorRefData(); inline HACCEL GetHACCEL() const { return m_hAccel; } protected: HACCEL m_hAccel; bool m_ok; + + wxDECLARE_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) - { - DestroyAcceleratorTable((HACCEL) m_hAccel); - } - 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 = -#ifdef __WIN32__ -#ifdef UNICODE - ::LoadAcceleratorsW(wxGetInstance(), (const char *)resource); -#else - ::LoadAcceleratorsA(wxGetInstance(), (const char *)resource); -#endif -#else - ::LoadAccelerators(wxGetInstance(), (const char *)resource); -#endif + HACCEL hAccel = ::LoadAccelerators(wxGetInstance(), resource.t_str()); 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 wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) { m_refData = new wxAcceleratorRefData; ACCEL* arr = new ACCEL[n]; - int i; - for (i = 0; i < n; i++) + for ( int i = 0; i < n; i++ ) { - BYTE fVirt = 0; - if (entries[i].m_flags & wxACCEL_ALT) + int flags = entries[i].GetFlags(); + + BYTE fVirt = FVIRTKEY; + if ( flags & wxACCEL_ALT ) fVirt |= FALT; - if (entries[i].m_flags & wxACCEL_SHIFT) + if ( flags & wxACCEL_SHIFT ) fVirt |= FSHIFT; - if (entries[i].m_flags & wxACCEL_CTRL) + if ( flags & wxACCEL_CTRL ) fVirt |= FCONTROL; - bool isVirtual; - WORD key = wxCharCodeWXToMSW(entries[i].m_keyCode, & isVirtual); - fVirt |= FVIRTKEY; - - WORD cmd = entries[i].m_command; + WORD key = wxMSWKeyboard::WXToVK(entries[i].GetKeyCode()); arr[i].fVirt = fVirt; arr[i].key = key; - arr[i].cmd = cmd; + arr[i].cmd = (WORD)entries[i].GetCommand(); } M_ACCELDATA->m_hAccel = ::CreateAcceleratorTable(arr, n); @@ -130,7 +125,7 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] M_ACCELDATA->m_ok = (M_ACCELDATA->m_hAccel != 0); } -bool wxAcceleratorTable::Ok(void) const +bool wxAcceleratorTable::IsOk() const { return (M_ACCELDATA && (M_ACCELDATA->m_ok)); } @@ -150,3 +145,11 @@ WXHACCEL wxAcceleratorTable::GetHACCEL() const return (WXHACCEL) M_ACCELDATA->m_hAccel; } +bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const +{ + MSG *msg = (MSG *)wxmsg; + return IsOk() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); +} + +#endif // wxUSE_ACCEL +