From a21d4ad10620573d2089fd3120793113c0687c9d Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 10 Dec 2004 11:23:16 +0000 Subject: [PATCH] really implemented operator==(); reformatted a little git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30923 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/msw/accel.h | 17 ++++----- src/msw/accel.cpp | 84 +++++++++++++++++++++++++----------------- 2 files changed, 58 insertions(+), 43 deletions(-) diff --git a/include/wx/msw/accel.h b/include/wx/msw/accel.h index 26831188f4..a2c82dea1e 100644 --- a/include/wx/msw/accel.h +++ b/include/wx/msw/accel.h @@ -24,7 +24,7 @@ class WXDLLEXPORT wxAcceleratorTable : public wxObject { public: // default ctor - wxAcceleratorTable(); + wxAcceleratorTable() : wxObject() { } // copy ctor wxAcceleratorTable(const wxAcceleratorTable& accel) : wxObject(accel) { Ref(accel); } @@ -35,17 +35,16 @@ public: // initialize from array wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]); - virtual ~wxAcceleratorTable(); + wxAcceleratorTable& operator=(const wxAcceleratorTable& accel) + { + if ( *this != accel ) + Ref(accel); + return *this; + } - wxAcceleratorTable& operator = (const wxAcceleratorTable& accel) { if ( *this != accel ) Ref(accel); return *this; } - -// #if WXWIN_COMPATIBILITY_2_4 -// fixme: it is still used in 'operator =' above - bool operator==(const wxAcceleratorTable& accel) const - { return m_refData == accel.m_refData; } + bool operator==(const wxAcceleratorTable& accel) const; bool operator!=(const wxAcceleratorTable& accel) const { return !(*this == accel); } -// #endif bool Ok() const; void SetHACCEL(WXHACCEL hAccel); diff --git a/src/msw/accel.cpp b/src/msw/accel.cpp index a5feca7c4b..02bdacf289 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,43 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// +// ============================================================================ +// declarations +// ============================================================================ + #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "accel.h" + #pragma implementation "accel.h" #endif +// ---------------------------------------------------------------------------- +// 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,53 +61,44 @@ 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) - { - 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 = -#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 WXWORD wxCharCodeWXToMSW(int id, bool *isVirtual); - // Create from an array wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) { @@ -129,6 +134,16 @@ wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[] M_ACCELDATA->m_ok = (M_ACCELDATA->m_hAccel != 0); } +bool wxAcceleratorTable::operator==(const wxAcceleratorTable& accel) const +{ + const wxAcceleratorRefData * + accelData = (wxAcceleratorRefData *)accel.m_refData; + + return m_refData ? (accelData && + M_ACCELDATA->m_hAccel == accelData->m_hAccel) + : !accelData; +} + bool wxAcceleratorTable::Ok() const { return (M_ACCELDATA && (M_ACCELDATA->m_ok)); @@ -155,4 +170,5 @@ bool wxAcceleratorTable::Translate(wxWindow *window, WXMSG *wxmsg) const return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg); } -#endif +#endif // wxUSE_ACCEL + -- 2.45.2