racket/src/mred/wxme/wx_keym.h
2007-04-16 09:18:34 +00:00

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