00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_CSBE_H__
00020 #define __CS_CSBE_H__
00021
00022 #include "csutil/scf.h"
00023 #include "csutil/csinput.h"
00024 #include "cssys/system.h"
00025 #include "iutil/event.h"
00026 #include "iutil/eventh.h"
00027 #include "ivideo/graph2d.h"
00028 #include <Handler.h>
00029 #include <MessageQueue.h>
00030 #include "cssys/be/behelp.h"
00031
00032
00033 SCF_VERSION (iBeAssistant, 0, 0, 1);
00034
00035 struct iBeAssistant : public iBase {
00042 virtual bool UserAction (BMessage*) = 0;
00043
00048 virtual bool SetCursor(csMouseCursorID) = 0;
00049
00059
00060
00064 virtual bool Quit() = 0;
00065
00069 virtual bool ContextClose(iGraphics2D*) = 0;
00070 };
00071
00072 class BeAssistant : public iBeAssistant, public BHandler {
00073
00074 protected:
00075 enum { CSBE_MOUSE_BUTTON_COUNT = 3 };
00076
00077 bool running;
00078 BMessageQueue message_queue;
00079 iEventOutlet* event_outlet;
00080 bool shift_down;
00081 bool alt_down;
00082 bool ctrl_down;
00083 bool button_state[CSBE_MOUSE_BUTTON_COUNT];
00084 bool real_mouse;
00085 bool mouse_moved;
00086 BPoint mouse_point;
00087 iObjectRegistry *object_reg;
00088 iEventQueue *event_queue;
00089
00090 static int32 ThreadEntry(void*);
00091 void HideMouse();
00092 void ShowMouse();
00093 void DispatchMessage(BMessage*);
00094 void CheckMouseMoved();
00095 void DoContextClose(BMessage*);
00096 void DoMouseMotion(BMessage*);
00097 void DoMouseAction(BMessage*);
00098 void DoKeyAction(BMessage*);
00099 void QueueMouseEvent(int button, bool down, BPoint);
00100 void CheckButton(int button, int32 buttons, int32 mask, BPoint);
00101 void CheckButtons(BMessage*);
00102 void CheckModifiers(BMessage*);
00103 void CheckModifier(long flags, long mask, int tag, bool& state) const;
00104 void ClassifyFunctionKey(BMessage*, int& cs_key, int& cs_char) const;
00105 void ClassifyNormalKey(int, BMessage*, int& cs_key, int& cs_char) const;
00106 int ClassifyUnicodeKey(BMessage*) const;
00107 virtual void MessageReceived(BMessage*);
00108
00109 public:
00110 BeAssistant(iObjectRegistry*);
00111 virtual ~BeAssistant();
00112
00113 bool HandleEvent(iEvent& e);
00114 virtual bool UserAction (BMessage*);
00115 virtual bool SetCursor(csMouseCursorID);
00116 virtual bool Quit();
00117 virtual bool ContextClose(iGraphics2D*);
00118
00119 bool SetMouse(csMouseCursorID shape);
00120 bool RunBeApp();
00121 bool QueueMessage(BMessage*);
00122 bool QueueMessage(uint32, void const* = 0);
00123
00124 struct eiEventPlug : public iEventPlug
00125 {
00126 SCF_DECLARE_EMBEDDED_IBASE(BeAssistant);
00127 virtual uint GetPotentiallyConflictingEvents();
00128 virtual uint QueryEventPriority(uint type);
00129 } scfiEventPlug;
00130
00131 struct eiEventHandler : public iEventHandler
00132 {
00133 SCF_DECLARE_EMBEDDED_IBASE (BeAssistant);
00134 virtual bool HandleEvent (iEvent& e) { return scfParent->HandleEvent(e); }
00135 } scfiEventHandler;
00136
00137 SCF_DECLARE_IBASE;
00138 };
00139
00140 class SysSystemDriver : public csSystemDriver
00141 {
00142 public:
00143 SysSystemDriver(iObjectRegistry* r) : csSystemDriver(r) {}
00144 };
00145
00146 #endif // __CS_CSBE_H__