X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6bcfd974ef26faf6f91a62cac09827e09463fd1..abd474ea63667f727940a009cc3e0b23ba9f418f:/src/os2/accel.cpp?ds=sidebyside diff --git a/src/os2/accel.cpp b/src/os2/accel.cpp index 1fdc45861f..c65092363e 100644 --- a/src/os2/accel.cpp +++ b/src/os2/accel.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: accel.cpp +// Name: src/os2/accel.cpp // Purpose: wxAcceleratorTable // Author: David Webster // Modified by: @@ -12,16 +12,15 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/accel.h" + #ifndef WX_PRECOMP -#include -#include "wx/setup.h" -#include "wx/window.h" -#include "wx/app.h" -#include "wx/frame.h" + #include + #include "wx/window.h" + #include "wx/app.h" + #include "wx/frame.h" #endif -#include "wx/os2/accel.h" - #include "wx/os2/private.h" @@ -32,7 +31,7 @@ class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData friend class WXDLLEXPORT wxAcceleratorTable; public: wxAcceleratorRefData(); - ~wxAcceleratorRefData(); + virtual ~wxAcceleratorRefData(); inline HACCEL GetHACCEL() const { return m_hAccel; } protected: @@ -44,7 +43,7 @@ protected: wxAcceleratorRefData::wxAcceleratorRefData() { - m_ok = FALSE; + m_ok = false; m_hAccel = 0; } // end of wxAcceleratorRefData::wxAcceleratorRefData @@ -76,7 +75,7 @@ wxAcceleratorTable::wxAcceleratorTable( m_refData = new wxAcceleratorRefData; - ulId = atol((char*)rResource.c_str()); + ulId = atol(rResource.c_str()); hAccel = ::WinLoadAccelTable( vHabmain ,NULL // resources always in .exe ,(ULONG)ulId @@ -89,8 +88,8 @@ wxAcceleratorTable::wxAcceleratorTable( wxFrame* pFrame = (wxFrame*)wxTheApp->GetTopWindow(); ::WinSetAccelTable( vHabmain - ,(HWND)pFrame->GetFrame() ,hAccel + ,(HWND)pFrame->GetFrame() ); } M_ACCELDATA->m_hAccel = hAccel; @@ -105,7 +104,7 @@ extern int wxCharCodeWXToOS2( // Create from an array wxAcceleratorTable::wxAcceleratorTable( int n -, wxAcceleratorEntry vaEntries[] +, const wxAcceleratorEntry vaEntries[] ) { int nAccelLength = ((sizeof(ACCEL) * n) + sizeof(ACCELTABLE)); @@ -120,26 +119,34 @@ wxAcceleratorTable::wxAcceleratorTable( USHORT uVirt = AF_CHAR; if (vaEntries[i].GetFlags() & wxACCEL_ALT) + { uVirt |= AF_ALT; + uVirt |= AF_VIRTUALKEY; + } if (vaEntries[i].GetFlags() & wxACCEL_SHIFT) + { uVirt |= AF_SHIFT; + uVirt |= AF_VIRTUALKEY; + } if (vaEntries[i].GetFlags() & wxACCEL_CTRL) + { uVirt |= AF_CONTROL; + uVirt |= AF_VIRTUALKEY; + } - bool bIsVirtual; - USHORT uKey = wxCharCodeWXToOS2( vaEntries[i].GetKeyCode() - ,&bIsVirtual - ); + bool bIsVirtual; + USHORT uKey = (USHORT)wxCharCodeWXToOS2( vaEntries[i].GetKeyCode(), + &bIsVirtual); if (bIsVirtual) uVirt = AF_CHAR | AF_VIRTUALKEY; - USHORT uCmd = vaEntries[i].GetCommand(); + USHORT uCmd = (USHORT)vaEntries[i].GetCommand(); pArr->aaccel[i].fs = uVirt; pArr->aaccel[i].key = uKey; pArr->aaccel[i].cmd = uCmd; } - pArr->codepage = 437; // default to english Fix??? + pArr->codepage = (USHORT)::WinQueryCp(wxTheApp->m_hMq); pArr->cAccel = (USHORT)n; M_ACCELDATA->m_hAccel = ::WinCreateAccelTable( vHabmain ,pArr @@ -149,11 +156,11 @@ wxAcceleratorTable::wxAcceleratorTable( // // If we have accelerators the top window is the frame // - wxFrame* pFrame = (wxFrame*)wxTheApp->GetTopWindow(); + wxFrame* pFrame = (wxFrame*)wxTheApp->GetTopWindow(); ::WinSetAccelTable( vHabmain - ,(HWND)pFrame->GetFrame() ,M_ACCELDATA->m_hAccel + ,(HWND)pFrame->GetFrame() ); } @@ -161,10 +168,10 @@ wxAcceleratorTable::wxAcceleratorTable( M_ACCELDATA->m_ok = (M_ACCELDATA->m_hAccel != 0); } // end of wxAcceleratorTable::wxAcceleratorTable -bool wxAcceleratorTable::Ok() const +bool wxAcceleratorTable::IsOk() const { return(M_ACCELDATA && (M_ACCELDATA->m_ok)); -} // end of wxAcceleratorTable::Ok +} // end of wxAcceleratorTable::IsOk void wxAcceleratorTable::SetHACCEL(WXHACCEL hAccel) { @@ -181,17 +188,56 @@ WXHACCEL wxAcceleratorTable::GetHACCEL() const return (WXHACCEL) M_ACCELDATA->m_hAccel; } -bool wxAcceleratorTable::Translate( - WXHWND hWnd -, WXMSG* pWxmsg -) const +bool wxAcceleratorTable::Translate( WXHWND hWnd, + WXMSG* pWxmsg ) const { - PQMSG pMsg = (PQMSG)pWxmsg; - - return Ok() && ::WinTranslateAccel( vHabmain - ,(HWND)hWnd - ,GetHaccel() - ,pMsg - ); + PQMSG pMsg = (PQMSG)pWxmsg; + BOOL rc = FALSE; + + rc = ::WinTranslateAccel( vHabmain + ,(HWND)hWnd + ,GetHaccel() + ,pMsg + ); + return (IsOk() && rc); } // end of wxAcceleratorTable::Translate +// --------------------------------------------------------------------------- +// function for translating labels +// --------------------------------------------------------------------------- + +wxString wxPMTextToLabel( const wxString& rsTitle ) +{ + wxString sTitle; + const wxChar* zPc; + + if (rsTitle.empty()) + return(sTitle); + + for (zPc = rsTitle.c_str(); *zPc != wxT('\0'); zPc++) + { + if (*zPc == wxT('&')) + { + if (*(zPc + 1) == wxT('&')) + { + zPc++; + sTitle << wxT('&'); + } + else + sTitle << wxT('~'); + } + else + { + if ( *zPc == wxT('~')) + { + // + // Tildes must be doubled to prevent them from being + // interpreted as accelerator character prefix by PM ??? + // + sTitle << *zPc; + } + sTitle << *zPc; + } + } + return(sTitle); +} // end of wxPMTextToLabel