#ifndef _COMMAND_ACTUATORS_H
#define _COMMAND_ACTUATORS_H
#include <Message.h>
#include <String.h>
#include <Archivable.h>
#include <List.h>
#include <InputServerFilter.h>
struct key_map;
class CommandActuator;
extern CommandActuator* CreateCommandActuator(const char* command);
class _EXPORT CommandActuator;
class CommandActuator : public BArchivable {
public:
CommandActuator(int32 argc, char** argv);
CommandActuator(BMessage* from);
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** asyncData,
BMessage* mouseMessage)
{ return B_SKIP_MESSAGE; }
virtual void KeyEventAsync(const BMessage* keyupMessage,
void* asyncData) {}
virtual status_t Archive(BMessage* into, bool deep = true)
const;
};
class _EXPORT LaunchCommandActuator;
class LaunchCommandActuator : public CommandActuator {
public:
LaunchCommandActuator(int32 argc, char** argv);
LaunchCommandActuator(BMessage* from);
~LaunchCommandActuator();
virtual status_t Archive(BMessage* into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage* from);
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual void KeyEventAsync(const BMessage* keyMessage,
void* asyncData);
private:
bool _GetNextWord(char** setBegin,
char** setEnd) const;
char** fArgv;
int32 fArgc;
};
class _EXPORT BeepCommandActuator;
class BeepCommandActuator : public CommandActuator {
public:
BeepCommandActuator(int32 argc, char** argv);
BeepCommandActuator(BMessage* from);
~BeepCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage* into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage* from);
};
class _EXPORT KeyStrokeSequenceCommandActuator;
class KeyStrokeSequenceCommandActuator : public CommandActuator {
public:
KeyStrokeSequenceCommandActuator(int32 argc,
char** argv);
KeyStrokeSequenceCommandActuator(
BMessage* from);
~KeyStrokeSequenceCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage* into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage * from);
private:
void _GenerateKeyCodes();
int32 _LookupKeyCode(key_map* map, char* keys,
int32 offsets[128], char key,
uint8* setStates, int32& setModifier,
int32 setTo) const;
void _SetStateBit(uint8* setStates, uint32 key,
bool on = true) const;
uint8* fStates;
int32* fKeyCodes;
int32* fModCodes;
BString fSequence;
BList fOverrides;
BList fOverrideOffsets;
BList fOverrideModifiers;
BList fOverrideKeyCodes;
};
class _EXPORT MIMEHandlerCommandActuator;
class MIMEHandlerCommandActuator : public CommandActuator {
public:
MIMEHandlerCommandActuator(int32 argc,
char** argv);
MIMEHandlerCommandActuator(BMessage* from);
~MIMEHandlerCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual void KeyEventAsync(const BMessage* keyupMessage,
void* asyncData);
virtual status_t Archive(BMessage * into,
bool deep = true) const;
static BArchivable* Instantiate(BMessage* from);
private:
BString fMimeType;
};
class _EXPORT MouseCommandActuator;
class MouseCommandActuator : public CommandActuator {
public:
MouseCommandActuator(int32 argc, char** argv);
MouseCommandActuator(BMessage* from);
~MouseCommandActuator();
virtual status_t Archive(BMessage* into, bool deep = true)
const;
protected:
int32 _GetWhichButtons() const;
void _GenerateMouseButtonEvent(bool mouseDown,
const BMessage* keyMessage, BList* outList,
BMessage* mouseMessage);
private:
int32 fWhichButtons;
};
class _EXPORT MouseDownCommandActuator;
class MouseDownCommandActuator : public MouseCommandActuator {
public:
MouseDownCommandActuator(int32 argc,
char** argv);
MouseDownCommandActuator(BMessage* from);
~MouseDownCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage* into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage* from);
};
class _EXPORT MouseUpCommandActuator;
class MouseUpCommandActuator : public MouseCommandActuator {
public:
MouseUpCommandActuator(int32 argc,
char** argv);
MouseUpCommandActuator(BMessage* from);
~MouseUpCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage* into,
bool deep = true) const;
static BArchivable* Instantiate(BMessage* from);
};
class _EXPORT MouseButtonCommandActuator;
class MouseButtonCommandActuator : public MouseCommandActuator {
public:
MouseButtonCommandActuator(int32 argc,
char** argv);
MouseButtonCommandActuator(BMessage* from);
~MouseButtonCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage* into,
bool deep = true) const;
static BArchivable* Instantiate(BMessage* from);
private:
bool fKeyDown ;
};
class _EXPORT MoveMouseCommandActuator;
class MoveMouseCommandActuator : public CommandActuator {
public:
MoveMouseCommandActuator(int32 argc,
char** argv);
MoveMouseCommandActuator(BMessage* from);
~MoveMouseCommandActuator();
virtual status_t Archive(BMessage* into, bool deep) const;
protected:
void CalculateCoords(float& setX, float& setY)
const;
BMessage* CreateMouseMessage(const BMessage* original,
BPoint where, BList* outList) const;
private:
void _ParseArg(const char* arg, float& setPercent,
float& setPixels) const;
float fXPercent;
float fYPercent;
float fXPixels;
float fYPixels;
};
class _EXPORT MultiCommandActuator;
class MultiCommandActuator : public CommandActuator {
public:
MultiCommandActuator(int32 argc, char** argv);
MultiCommandActuator(BMessage* from);
~MultiCommandActuator();
virtual status_t Archive(BMessage* into, bool deep) const;
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** asyncData,
BMessage* mouseMessage);
virtual void KeyEventAsync(const BMessage* keyupMessage,
void * asyncData);
static BArchivable* Instantiate(BMessage* from);
private:
BList fSubActuators;
};
class _EXPORT MoveMouseToCommandActuator;
class MoveMouseToCommandActuator : public MoveMouseCommandActuator {
public:
MoveMouseToCommandActuator(int32 argc,
char** argv);
MoveMouseToCommandActuator(BMessage* from);
~MoveMouseToCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage, BList* outList
, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage* into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage* from);
};
class _EXPORT MoveMouseByCommandActuator;
class MoveMouseByCommandActuator : public MoveMouseCommandActuator {
public:
MoveMouseByCommandActuator(int32 argc,
char** argv);
MoveMouseByCommandActuator(BMessage* from);
~MoveMouseByCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual status_t Archive(BMessage * into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage * from);
};
class _EXPORT SendMessageCommandActuator;
class SendMessageCommandActuator : public CommandActuator {
public:
SendMessageCommandActuator(int32 argc,
char** argv);
SendMessageCommandActuator(BMessage* from);
~SendMessageCommandActuator();
virtual filter_result KeyEvent(const BMessage* keyMessage,
BList* outList, void** setAsyncData,
BMessage* mouseMessage);
virtual void KeyEventAsync(const BMessage* keyupMessage,
void* asyncData);
virtual status_t Archive(BMessage* into, bool deep = true)
const;
static BArchivable* Instantiate(BMessage * from);
private:
void _ParseFloatArgs(float* outArgs, int maxArgs
, const char* str) const;
BString fSignature;
BMessage fSendMessage;
};
#endif