2001-06-26 16:59:19 -04:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: wx/accel.h
|
|
|
|
// Purpose: wxAcceleratorEntry and wxAcceleratorTable classes
|
|
|
|
// Author: Julian Smart, Robert Roebling, Vadim Zeitlin
|
|
|
|
// Modified by:
|
|
|
|
// Created: 31.05.01 (extracted from other files)
|
|
|
|
// RCS-ID: $Id$
|
2004-05-23 10:56:36 -04:00
|
|
|
// Copyright: (c) wxWidgets team
|
2004-05-23 16:53:33 -04:00
|
|
|
// Licence: wxWindows licence
|
2001-06-26 16:59:19 -04:00
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
1998-08-14 20:23:28 -04:00
|
|
|
#ifndef _WX_ACCEL_H_BASE_
|
|
|
|
#define _WX_ACCEL_H_BASE_
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
#include "wx/defs.h"
|
|
|
|
|
|
|
|
#if wxUSE_ACCEL
|
|
|
|
|
|
|
|
#include "wx/object.h"
|
|
|
|
|
2007-07-09 06:09:52 -04:00
|
|
|
class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable;
|
|
|
|
class WXDLLIMPEXP_FWD_CORE wxMenuItem;
|
|
|
|
class WXDLLIMPEXP_FWD_CORE wxKeyEvent;
|
2001-06-26 16:59:19 -04:00
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// constants
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
// wxAcceleratorEntry flags
|
2008-03-09 13:42:07 -04:00
|
|
|
enum wxAcceleratorEntryFlags
|
2001-06-26 16:59:19 -04:00
|
|
|
{
|
|
|
|
wxACCEL_NORMAL = 0x0000, // no modifiers
|
|
|
|
wxACCEL_ALT = 0x0001, // hold Alt key down
|
|
|
|
wxACCEL_CTRL = 0x0002, // hold Ctrl key down
|
2006-08-29 02:23:01 -04:00
|
|
|
wxACCEL_SHIFT = 0x0004, // hold Shift key down
|
|
|
|
#if defined(__WXMAC__) || defined(__WXCOCOA__)
|
|
|
|
wxACCEL_CMD = 0x0008 // Command key on OS X
|
|
|
|
#else
|
|
|
|
wxACCEL_CMD = wxACCEL_CTRL
|
|
|
|
#endif
|
2001-06-26 16:59:19 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// an entry in wxAcceleratorTable corresponds to one accelerator
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
2008-03-26 11:06:00 -04:00
|
|
|
class WXDLLIMPEXP_CORE wxAcceleratorEntry
|
2001-06-26 16:59:19 -04:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
wxAcceleratorEntry(int flags = 0, int keyCode = 0, int cmd = 0,
|
|
|
|
wxMenuItem *item = NULL)
|
2002-05-07 16:40:04 -04:00
|
|
|
: m_flags(flags)
|
|
|
|
, m_keyCode(keyCode)
|
|
|
|
, m_command(cmd)
|
|
|
|
, m_item(item)
|
|
|
|
{ }
|
|
|
|
|
|
|
|
wxAcceleratorEntry(const wxAcceleratorEntry& entry)
|
|
|
|
: m_flags(entry.m_flags)
|
|
|
|
, m_keyCode(entry.m_keyCode)
|
|
|
|
, m_command(entry.m_command)
|
|
|
|
, m_item(entry.m_item)
|
|
|
|
{ }
|
|
|
|
|
2006-09-04 19:56:56 -04:00
|
|
|
// create accelerator corresponding to the specified string, return NULL if
|
|
|
|
// string couldn't be parsed or a pointer to be deleted by the caller
|
|
|
|
static wxAcceleratorEntry *Create(const wxString& str);
|
|
|
|
|
2002-05-07 16:40:04 -04:00
|
|
|
wxAcceleratorEntry& operator=(const wxAcceleratorEntry& entry)
|
2001-06-26 16:59:19 -04:00
|
|
|
{
|
2008-01-08 23:08:33 -05:00
|
|
|
if (&entry != this)
|
|
|
|
Set(entry.m_flags, entry.m_keyCode, entry.m_command, entry.m_item);
|
2002-05-07 16:40:04 -04:00
|
|
|
return *this;
|
2001-06-26 16:59:19 -04:00
|
|
|
}
|
2004-09-08 13:30:19 -04:00
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
void Set(int flags, int keyCode, int cmd, wxMenuItem *item = NULL)
|
|
|
|
{
|
|
|
|
m_flags = flags;
|
|
|
|
m_keyCode = keyCode;
|
|
|
|
m_command = cmd;
|
|
|
|
m_item = item;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetMenuItem(wxMenuItem *item) { m_item = item; }
|
|
|
|
|
|
|
|
int GetFlags() const { return m_flags; }
|
|
|
|
int GetKeyCode() const { return m_keyCode; }
|
|
|
|
int GetCommand() const { return m_command; }
|
|
|
|
|
|
|
|
wxMenuItem *GetMenuItem() const { return m_item; }
|
|
|
|
|
|
|
|
bool operator==(const wxAcceleratorEntry& entry) const
|
|
|
|
{
|
|
|
|
return m_flags == entry.m_flags &&
|
|
|
|
m_keyCode == entry.m_keyCode &&
|
|
|
|
m_command == entry.m_command &&
|
|
|
|
m_item == entry.m_item;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool operator!=(const wxAcceleratorEntry& entry) const
|
|
|
|
{ return !(*this == entry); }
|
|
|
|
|
2002-03-10 18:11:18 -05:00
|
|
|
#if defined(__WXMOTIF__)
|
2001-07-09 07:07:10 -04:00
|
|
|
// Implementation use only
|
2002-03-10 18:11:18 -05:00
|
|
|
bool MatchesEvent(const wxKeyEvent& event) const;
|
2001-07-09 07:07:10 -04:00
|
|
|
#endif
|
2004-09-08 13:30:19 -04:00
|
|
|
|
2006-09-03 08:23:04 -04:00
|
|
|
bool IsOk() const
|
|
|
|
{
|
|
|
|
return m_flags != 0 &&
|
|
|
|
m_keyCode != 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// string <-> wxAcceleratorEntry conversion
|
|
|
|
// ----------------------------------------
|
|
|
|
|
|
|
|
// returns a wxString for the this accelerator.
|
|
|
|
// this function formats it using the <flags>-<keycode> format
|
|
|
|
// where <flags> maybe a hyphen-separed list of "shift|alt|ctrl"
|
|
|
|
wxString ToString() const;
|
|
|
|
|
|
|
|
// returns true if the given string correctly initialized this object
|
|
|
|
// (i.e. if IsOk() returns true after this call)
|
2006-09-04 19:56:56 -04:00
|
|
|
bool FromString(const wxString& str);
|
2006-09-03 08:23:04 -04:00
|
|
|
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
private:
|
2006-09-04 19:56:56 -04:00
|
|
|
// common part of Create() and FromString()
|
|
|
|
static bool ParseAccel(const wxString& str, int *flags, int *keycode);
|
|
|
|
|
|
|
|
|
2001-06-26 16:59:19 -04:00
|
|
|
int m_flags; // combination of wxACCEL_XXX constants
|
|
|
|
int m_keyCode; // ASCII or virtual keycode
|
|
|
|
int m_command; // Command id to generate
|
|
|
|
|
|
|
|
// the menu item this entry corresponds to, may be NULL
|
|
|
|
wxMenuItem *m_item;
|
|
|
|
|
|
|
|
// for compatibility with old code, use accessors now!
|
2007-07-09 06:09:52 -04:00
|
|
|
friend class WXDLLIMPEXP_FWD_CORE wxMenu;
|
2001-06-26 16:59:19 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// include wxAcceleratorTable class declaration, it is only used by the library
|
|
|
|
// and so doesn't have any published user visible interface
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#if defined(__WXUNIVERSAL__)
|
|
|
|
#include "wx/generic/accel.h"
|
|
|
|
#elif defined(__WXMSW__)
|
|
|
|
#include "wx/msw/accel.h"
|
1998-08-14 20:23:28 -04:00
|
|
|
#elif defined(__WXMOTIF__)
|
2001-06-26 16:59:19 -04:00
|
|
|
#include "wx/motif/accel.h"
|
2006-01-22 22:27:34 -05:00
|
|
|
#elif defined(__WXGTK20__)
|
2001-06-26 16:59:19 -04:00
|
|
|
#include "wx/gtk/accel.h"
|
2006-01-22 22:27:34 -05:00
|
|
|
#elif defined(__WXGTK__)
|
|
|
|
#include "wx/gtk1/accel.h"
|
1998-08-14 20:23:28 -04:00
|
|
|
#elif defined(__WXMAC__)
|
2008-06-11 15:17:41 -04:00
|
|
|
#include "wx/osx/accel.h"
|
2003-03-22 01:13:03 -05:00
|
|
|
#elif defined(__WXCOCOA__)
|
|
|
|
#include "wx/generic/accel.h"
|
1999-07-27 23:38:12 -04:00
|
|
|
#elif defined(__WXPM__)
|
2001-06-26 16:59:19 -04:00
|
|
|
#include "wx/os2/accel.h"
|
1998-08-14 20:23:28 -04:00
|
|
|
#endif
|
|
|
|
|
2008-03-26 11:06:00 -04:00
|
|
|
extern WXDLLIMPEXP_DATA_CORE(wxAcceleratorTable) wxNullAcceleratorTable;
|
2001-06-26 16:59:19 -04:00
|
|
|
|
|
|
|
#endif // wxUSE_ACCEL
|
|
|
|
|
1998-08-14 20:23:28 -04:00
|
|
|
#endif
|
|
|
|
// _WX_ACCEL_H_BASE_
|