X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8870c26ecb03e87065fdb3617b8c47ca3c923a53..6d3b231a02b761671d042c2f8989048ba49125e8:/src/msw/accel.cpp?ds=sidebyside diff --git a/src/msw/accel.cpp b/src/msw/accel.cpp index 06aef88b60..a5feca7c4b 100644 --- a/src/msw/accel.cpp +++ b/src/msw/accel.cpp @@ -9,7 +9,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "accel.h" #endif @@ -21,41 +21,37 @@ #endif #ifndef WX_PRECOMP -#include -#include "wx/setup.h" -#include "wx/window.h" + #include "wx/window.h" #endif -#include "wx/msw/accel.h" +#include "wx/accel.h" -#include "wx/msw/private.h" +#if wxUSE_ACCEL -#ifdef LoadAccelerators -#undef LoadAccelerators -#endif +#include "wx/msw/private.h" -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject) -#endif class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData { friend class WXDLLEXPORT wxAcceleratorTable; public: - wxAcceleratorRefData(void); - ~wxAcceleratorRefData(void); + wxAcceleratorRefData(); + ~wxAcceleratorRefData(); inline HACCEL GetHACCEL() const { return m_hAccel; } protected: HACCEL m_hAccel; bool m_ok; + + DECLARE_NO_COPY_CLASS(wxAcceleratorRefData) }; #define M_ACCELDATA ((wxAcceleratorRefData *)m_refData) wxAcceleratorRefData::wxAcceleratorRefData() { - m_ok = FALSE; + m_ok = false; m_hAccel = 0; } @@ -63,10 +59,7 @@ wxAcceleratorRefData::~wxAcceleratorRefData() { if (m_hAccel) { - // This function not available in WIN16 -#if !defined(__WIN16__) && !defined(__TWIN32__) DestroyAcceleratorTable((HACCEL) m_hAccel); -#endif } m_hAccel = 0 ; } @@ -86,49 +79,48 @@ wxAcceleratorTable::wxAcceleratorTable(const wxString& resource) m_refData = new wxAcceleratorRefData; HACCEL hAccel = -#if defined(__WIN32__) && !defined(__TWIN32__) +#if defined(__WIN32__) #ifdef UNICODE - ::LoadAcceleratorsW(wxGetInstance(), (const char *)resource); + ::LoadAcceleratorsW(wxGetInstance(), (const wxChar *)resource); #else ::LoadAcceleratorsA(wxGetInstance(), (const char *)resource); #endif #else - ::LoadAccelerators(wxGetInstance(), (const char *)resource); + ::LoadAccelerators(wxGetInstance(), (const wxChar *)resource); #endif M_ACCELDATA->m_hAccel = hAccel; M_ACCELDATA->m_ok = (hAccel != 0); } -extern int wxCharCodeWXToMSW(int id, bool *isVirtual); +extern WXWORD wxCharCodeWXToMSW(int id, bool *isVirtual); // Create from an array -#if !defined(__WIN16__) && !defined(__TWIN32__) wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) { - // Not available in WIN16 m_refData = new wxAcceleratorRefData; ACCEL* arr = new ACCEL[n]; - int i; - for (i = 0; i < n; i++) + for ( int i = 0; i < n; i++ ) { + int flags = entries[i].GetFlags(); + BYTE fVirt = 0; - if (entries[i].m_flags & wxACCEL_ALT) - fVirt |= FALT; - if (entries[i].m_flags & wxACCEL_SHIFT) - fVirt |= FSHIFT; - if (entries[i].m_flags & wxACCEL_CTRL) - fVirt |= FCONTROL; + if ( flags & wxACCEL_ALT ) + fVirt |= FALT | FVIRTKEY; + if ( flags & wxACCEL_SHIFT ) + fVirt |= FSHIFT | FVIRTKEY; + if ( flags & wxACCEL_CTRL ) + fVirt |= FCONTROL | FVIRTKEY; bool isVirtual; - WORD key = wxCharCodeWXToMSW(entries[i].m_keyCode, & isVirtual); - fVirt |= FVIRTKEY; - WORD cmd = entries[i].m_command; + WORD key = wxCharCodeWXToMSW(entries[i].GetKeyCode(), &isVirtual); + if (isVirtual) + fVirt |= FVIRTKEY; 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); @@ -136,13 +128,8 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] M_ACCELDATA->m_ok = (M_ACCELDATA->m_hAccel != 0); } -#else -wxAcceleratorTable::wxAcceleratorTable(int WXUNUSED(n), const wxAcceleratorEntry WXUNUSED(entries)[]) -{ -} -#endif -bool wxAcceleratorTable::Ok(void) const +bool wxAcceleratorTable::Ok() const { return (M_ACCELDATA && (M_ACCELDATA->m_ok)); } @@ -162,3 +149,10 @@ WXHACCEL wxAcceleratorTable::GetHACCEL() const return (WXHACCEL) M_ACCELDATA->m_hAccel; } +bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const +{ + MSG *msg = (MSG *)wxmsg; + return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); +} + +#endif