X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInput%2FFGEventInput.hxx;h=c62a77aae0bad8deed54593c6b23107b6302508d;hb=81cd33e2fa9b5930784d3aed920eea0e3038e7f7;hp=72ded7847a47e216f7f185e5bc845c43757d60e8;hpb=b772e5872a042badd6022405bc6de0355810082c;p=flightgear.git diff --git a/src/Input/FGEventInput.hxx b/src/Input/FGEventInput.hxx index 72ded7847..c62a77aae 100644 --- a/src/Input/FGEventInput.hxx +++ b/src/Input/FGEventInput.hxx @@ -24,6 +24,9 @@ #define __FGEVENTINPUT_HXX #include "FGCommonInput.hxx" + +#include + #include "FGButton.hxx" #include "FGDeviceConfigurationMap.hxx" #include @@ -57,7 +60,7 @@ protected: }; typedef SGSharedPtr FGEventSetting_ptr; -typedef vector setting_list_t; +typedef std::vector setting_list_t; /* * A wrapper class for a configured event. @@ -83,6 +86,7 @@ typedef vector setting_list_t; class FGInputDevice; class FGInputEvent : public SGReferenced,FGCommonInput { public: + /* * Constructor for the class. The arg node shall point * to the property corresponding to the node @@ -98,23 +102,24 @@ public: /* * access for the name property */ - string GetName() const { return name; } + std::string GetName() const { return name; } /* * access for the description property */ - string GetDescription() const { return desc; } + std::string GetDescription() const { return desc; } virtual void update( double dt ); static FGInputEvent * NewObject( FGInputDevice * device, SGPropertyNode_ptr node ); protected: + virtual void fire( SGBinding * binding, FGEventData & eventData ); /* A more or less meaningfull description of the event */ - string desc; + std::string desc; /* One of the predefined names of the event */ - string name; + std::string name; /* A list of SGBinding objects */ binding_list_t bindings[KEYMOD_MAX]; @@ -143,6 +148,9 @@ protected: class FGAxisEvent : public FGInputEvent { public: FGAxisEvent( FGInputDevice * device, SGPropertyNode_ptr node ); + void SetMaxRange( double value ) { maxRange = value; } + void SetMinRange( double value ) { minRange = value; } + void SetRange( double min, double max ) { minRange = min; maxRange = max; } protected: virtual void fire( FGEventData & eventData ); double tolerance; @@ -155,6 +163,20 @@ protected: double lastValue; }; +class FGRelAxisEvent : public FGAxisEvent { +public: + FGRelAxisEvent( FGInputDevice * device, SGPropertyNode_ptr node ); +protected: + virtual void fire( SGBinding * binding, FGEventData & eventData ); +}; + +class FGAbsAxisEvent : public FGAxisEvent { +public: + FGAbsAxisEvent( FGInputDevice * device, SGPropertyNode_ptr node ) : FGAxisEvent( device, node ) {} +protected: + virtual void fire( SGBinding * binding, FGEventData & eventData ); +}; + typedef class SGSharedPtr FGInputEvent_ptr; /* @@ -165,7 +187,7 @@ typedef class SGSharedPtr FGInputEvent_ptr; class FGInputDevice : public SGReferenced { public: FGInputDevice() : debugEvents(false), grab(false) {} - FGInputDevice( string aName ) : name(aName) {} + FGInputDevice( std::string aName ) : name(aName), debugEvents(false), grab(false) {} virtual ~FGInputDevice(); @@ -174,15 +196,15 @@ public: virtual void Send( const char * eventName, double value ) = 0; - inline void Send( const string & eventName, double value ) { + inline void Send( const std::string & eventName, double value ) { Send( eventName.c_str(), value ); } virtual const char * TranslateEventName( FGEventData & eventData ) = 0; - void SetName( string name ); - string & GetName() { return name; } + void SetName( std::string name ); + std::string & GetName() { return name; } void HandleEvent( FGEventData & eventData ); @@ -191,20 +213,22 @@ public: handledEvents[handledEvent->GetName()] = handledEvent; } + virtual void Configure( SGPropertyNode_ptr deviceNode ); + virtual void update( double dt ); bool GetDebugEvents () const { return debugEvents; } - void SetDebugEvents( bool value ) { debugEvents = value; } bool GetGrab() const { return grab; } - void SetGrab( bool value ) { grab = value; } + + const std::string & GetNasalModule() const { return nasalModule; } private: // A map of events, this device handles - map handledEvents; + std::map handledEvents; // the device has a name to be recognized - string name; + std::string name; // print out events comming in from the device // if true @@ -213,6 +237,9 @@ private: // grab the device exclusively, if O/S supports this // so events are not sent to other applications bool grab; + + SGPropertyNode_ptr deviceNode; + std::string nasalModule; }; typedef SGSharedPtr FGInputDevice_ptr; @@ -229,12 +256,18 @@ public: virtual void postinit(); virtual void update( double dt ); + const static unsigned MAX_DEVICES = 1000; + const static unsigned INVALID_DEVICE_INDEX = MAX_DEVICES + 1; protected: static const char * PROPERTY_ROOT; - void AddDevice( FGInputDevice * inputDevice ); - map input_devices; + unsigned AddDevice( FGInputDevice * inputDevice ); + void RemoveDevice( unsigned index ); + + std::map input_devices; FGDeviceConfigurationMap configMap; + + SGPropertyNode_ptr nasalClose; }; #endif