131 lines
3.7 KiB
C++
131 lines
3.7 KiB
C++
|
|
#ifndef wx_keym
|
|
#define wx_keym
|
|
|
|
#include "wx_stdev.h"
|
|
#include "wx_hash.h"
|
|
|
|
typedef unsigned int wxchar;
|
|
extern int wxstrlen(wxchar *s);
|
|
void wxme_utf8_decode(char *str, long len, wxchar **us, long *ulen);
|
|
void wxme_utf8_encode(wxchar *us, long ulen, char **s, long *len);
|
|
|
|
#define UNKNOWN_OBJ void*
|
|
|
|
typedef Bool (*wxKMFunction)(UNKNOWN_OBJ media, wxEvent *event, void *data);
|
|
|
|
typedef Bool (*wxGrabKeyFunction)(char *str, class wxKeymap *km,
|
|
UNKNOWN_OBJ media, wxKeyEvent *event,
|
|
void *data);
|
|
typedef Bool (*wxGrabMouseFunction)(char *str, class wxKeymap *km,
|
|
UNKNOWN_OBJ media, wxMouseEvent *event,
|
|
void *data);
|
|
|
|
typedef void (*wxBreakSequenceFunction)(void *data);
|
|
|
|
enum {
|
|
wxKEY_FINAL = 0,
|
|
wxKEY_PREFIX
|
|
};
|
|
|
|
#define WXK_MOUSE_RIGHT (-1)
|
|
#define WXK_MOUSE_LEFT (-2)
|
|
#define WXK_MOUSE_MIDDLE (-3)
|
|
#define WXK_MOUSE_RIGHT_DOUBLE (-4)
|
|
#define WXK_MOUSE_LEFT_DOUBLE (-5)
|
|
#define WXK_MOUSE_MIDDLE_DOUBLE (-6)
|
|
#define WXK_MOUSE_RIGHT_TRIPLE (-7)
|
|
#define WXK_MOUSE_LEFT_TRIPLE (-8)
|
|
#define WXK_MOUSE_MIDDLE_TRIPLE (-9)
|
|
|
|
#define WXK_CLICK_ADDER (-3)
|
|
|
|
class wxKeymap : public wxObject
|
|
{
|
|
wxHashTable *functions;
|
|
wxHashTable *keys;
|
|
|
|
int chainCount;
|
|
wxKeymap **chainTo;
|
|
|
|
long doubleInterval;
|
|
|
|
int lastButton;
|
|
int clickCount;
|
|
long lastTime;
|
|
double lastX, lastY;
|
|
|
|
class wxKeycode *prefix;
|
|
|
|
char *active_mouse_function;
|
|
|
|
wxGrabKeyFunction grabKeyFunction;
|
|
void *grabKeyData;
|
|
wxGrabMouseFunction grabMouseFunction;
|
|
void *grabMouseData;
|
|
|
|
wxBreakSequenceFunction onBreak;
|
|
void *onBreakData;
|
|
|
|
class wxKeycode *FindKey(long, long, long, long, Bool, Bool, Bool, Bool, class wxKeycode *, int *_score);
|
|
int HandleEvent(long code, long, long, long,
|
|
Bool shift, Bool ctrl, Bool alt, Bool meta,
|
|
int score, char **fname, int *fullset);
|
|
int GetBestScore(long code, long, long, long, Bool shift, Bool ctrl, Bool alt, Bool meta);
|
|
|
|
Bool CycleCheck(wxKeymap *km);
|
|
|
|
int ChainHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event,
|
|
wxGrabKeyFunction grab, void *grabData,
|
|
int try_state, int score);
|
|
int ChainHandleMouseEvent(UNKNOWN_OBJ media, wxMouseEvent *event,
|
|
wxGrabMouseFunction grab, void *grabData,
|
|
int try_state, int score);
|
|
|
|
int OtherHandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event,
|
|
wxGrabKeyFunction grab, void *grabData,
|
|
int try_state, int score);
|
|
int OtherHandleMouseEvent(UNKNOWN_OBJ media, wxMouseEvent *event,
|
|
wxGrabMouseFunction grab, void *grabData,
|
|
int try_state, int score);
|
|
|
|
int GetBestScore(wxKeyEvent *event);
|
|
int GetBestScore(wxMouseEvent *event);
|
|
|
|
void Reset(void);
|
|
|
|
public:
|
|
wxKeymap();
|
|
~wxKeymap();
|
|
|
|
virtual Bool HandleKeyEvent(UNKNOWN_OBJ media, wxKeyEvent *event);
|
|
virtual Bool HandleMouseEvent(UNKNOWN_OBJ media, wxMouseEvent *event);
|
|
|
|
void SetGrabKeyFunction(wxGrabKeyFunction grab, void *grabData);
|
|
void RemoveGrabKeyFunction(void);
|
|
void SetGrabMouseFunction(wxGrabMouseFunction grab, void *grabData);
|
|
void RemoveGrabMouseFunction(void);
|
|
|
|
void BreakSequence(void);
|
|
void SetBreakSequenceCallback(wxBreakSequenceFunction f, void *data);
|
|
|
|
class wxKeycode *MapFunction(long code, int shift, int ctrl,
|
|
int alt, int meta, int check_alt,
|
|
char *fname, class wxKeycode *prevkey=NULL,
|
|
int keytype = wxKEY_FINAL);
|
|
void MapFunction(wxchar *keyname, char *fname);
|
|
void MapFunction(char *keyname, char *fname);
|
|
|
|
void AddFunction(char *name, wxKMFunction func, void *data);
|
|
Bool CallFunction(char *name, UNKNOWN_OBJ media, wxEvent *event,
|
|
Bool try_chained = FALSE);
|
|
|
|
void ChainToKeymap(wxKeymap *, Bool prefix);
|
|
void RemoveChainedKeymap(wxKeymap *);
|
|
|
|
long GetDoubleClickInterval();
|
|
void SetDoubleClickInterval(long);
|
|
};
|
|
|
|
#endif
|