really implemented operator==(); reformatted a little

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30923 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-12-10 11:23:16 +00:00
parent de4b00500f
commit a21d4ad106
2 changed files with 58 additions and 43 deletions

View File

@@ -24,7 +24,7 @@ class WXDLLEXPORT wxAcceleratorTable : public wxObject
{ {
public: public:
// default ctor // default ctor
wxAcceleratorTable(); wxAcceleratorTable() : wxObject() { }
// copy ctor // copy ctor
wxAcceleratorTable(const wxAcceleratorTable& accel) : wxObject(accel) { Ref(accel); } wxAcceleratorTable(const wxAcceleratorTable& accel) : wxObject(accel) { Ref(accel); }
@@ -35,17 +35,16 @@ public:
// initialize from array // initialize from array
wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]); 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; } bool operator==(const wxAcceleratorTable& accel) const;
// #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); } { return !(*this == accel); }
// #endif
bool Ok() const; bool Ok() const;
void SetHACCEL(WXHACCEL hAccel); void SetHACCEL(WXHACCEL hAccel);

View File

@@ -1,5 +1,5 @@
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Name: accel.cpp // Name: msw/accel.cpp
// Purpose: wxAcceleratorTable // Purpose: wxAcceleratorTable
// Author: Julian Smart // Author: Julian Smart
// Modified by: // Modified by:
@@ -9,29 +9,43 @@
// Licence: wxWindows licence // Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// ============================================================================
// declarations
// ============================================================================
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "accel.h" #pragma implementation "accel.h"
#endif #endif
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h". // For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h" #include "wx/wxprec.h"
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#pragma hdrstop #pragma hdrstop
#endif #endif
#if wxUSE_ACCEL
#ifndef WX_PRECOMP #ifndef WX_PRECOMP
#include "wx/window.h" #include "wx/window.h"
#endif #endif
#include "wx/accel.h" #include "wx/accel.h"
#if wxUSE_ACCEL
#include "wx/msw/private.h" #include "wx/msw/private.h"
extern WXWORD wxCharCodeWXToMSW(int id, bool *isVirtual);
IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject) IMPLEMENT_DYNAMIC_CLASS(wxAcceleratorTable, wxObject)
// ----------------------------------------------------------------------------
// data defining wxAcceleratorTable
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData class WXDLLEXPORT wxAcceleratorRefData: public wxObjectRefData
{ {
friend class WXDLLEXPORT wxAcceleratorTable; friend class WXDLLEXPORT wxAcceleratorTable;
@@ -47,53 +61,44 @@ protected:
DECLARE_NO_COPY_CLASS(wxAcceleratorRefData) DECLARE_NO_COPY_CLASS(wxAcceleratorRefData)
}; };
// ============================================================================
// implementation
// ============================================================================
// ----------------------------------------------------------------------------
// wxAcceleratorRefData
// ----------------------------------------------------------------------------
#define M_ACCELDATA ((wxAcceleratorRefData *)m_refData) #define M_ACCELDATA ((wxAcceleratorRefData *)m_refData)
wxAcceleratorRefData::wxAcceleratorRefData() wxAcceleratorRefData::wxAcceleratorRefData()
{ {
m_ok = false; m_ok = false;
m_hAccel = 0; m_hAccel = 0;
} }
wxAcceleratorRefData::~wxAcceleratorRefData() wxAcceleratorRefData::~wxAcceleratorRefData()
{ {
if (m_hAccel) if (m_hAccel)
{ {
DestroyAcceleratorTable((HACCEL) m_hAccel); DestroyAcceleratorTable((HACCEL) m_hAccel);
} }
m_hAccel = 0 ;
} }
wxAcceleratorTable::wxAcceleratorTable() // ----------------------------------------------------------------------------
{ // wxAcceleratorTable
m_refData = NULL; // ----------------------------------------------------------------------------
}
wxAcceleratorTable::~wxAcceleratorTable()
{
}
// Load from .rc resource // Load from .rc resource
wxAcceleratorTable::wxAcceleratorTable(const wxString& resource) wxAcceleratorTable::wxAcceleratorTable(const wxString& resource)
{ {
m_refData = new wxAcceleratorRefData; m_refData = new wxAcceleratorRefData;
HACCEL hAccel = HACCEL hAccel = ::LoadAccelerators(wxGetInstance(), resource);
#if defined(__WIN32__)
#ifdef UNICODE
::LoadAcceleratorsW(wxGetInstance(), (const wxChar *)resource);
#else
::LoadAcceleratorsA(wxGetInstance(), (const char *)resource);
#endif
#else
::LoadAccelerators(wxGetInstance(), (const wxChar *)resource);
#endif
M_ACCELDATA->m_hAccel = hAccel; 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 // Create from an array
wxAcceleratorTable::wxAcceleratorTable(int n, const wxAcceleratorEntry entries[]) 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); 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 bool wxAcceleratorTable::Ok() const
{ {
return (M_ACCELDATA && (M_ACCELDATA->m_ok)); 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); return Ok() && ::TranslateAccelerator(GetHwndOf(window), GetHaccel(), msg);
} }
#endif #endif // wxUSE_ACCEL