X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FInput%2Finput.hxx;h=f26f21a9333796adc6dba60521c8b45a8f6dc207;hb=5151f7f5e0ba7c7e6688bdfbc4cea365196e1ed3;hp=d3bae03b45df6cf1736dc6722b6f9bde7c5a29b9;hpb=7208b95d36b1db89829187225bd1ae832794af1f;p=flightgear.git diff --git a/src/Input/input.hxx b/src/Input/input.hxx index d3bae03b4..f26f21a93 100644 --- a/src/Input/input.hxx +++ b/src/Input/input.hxx @@ -1,8 +1,10 @@ // input.hxx -- handle user input from various sources. // // Written by David Megginson, started May 2001. +// Major redesign by Torsten Dreyer, started August 2009 // // Copyright (C) 2001 David Megginson, david@megginson.com +// Copyright (C) 2009 Torsten Dreyer, Torsten (at) t3r _dot_ de // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as @@ -16,7 +18,7 @@ // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // // $Id$ @@ -28,64 +30,15 @@ # error This library requires C++ #endif -#include +#include -#include + -#include
-#include
-#include -#include - -SG_USING_STD(map); -SG_USING_STD(vector); - -/** - * An input binding of some sort. - * - *

This class represents a binding that can be assigned to a - * keyboard key, a joystick button or axis, or even a panel - * instrument.

- */ -class FGBinding -{ -public: - - enum Action { - ACTION_NONE, - ACTION_SWITCH, - ACTION_ADJUST, - ACTION_ASSIGN - }; - - FGBinding (); - FGBinding (const SGPropertyNode * node); - virtual ~FGBinding (); - - virtual Action getAction () const { return _action; } - virtual SGPropertyNode * getProperty () { return _node; } - virtual const SGPropertyNode * getProperty () const { return _node; } - virtual const SGValue * getAdjustStep () const { return _adjust_step; } - virtual const SGValue * getAssignValue () const { return _assign_value; } - - virtual void setAction (Action action); - virtual void setProperty (SGPropertyNode * node); - virtual void setAdjustStep (const SGValue * step); - virtual void setAssignValue (const SGValue * value); - - virtual void read (const SGPropertyNode * node); - - virtual void fire () const; -// virtual void fire (double value); -// virtual void fire (int xdelta, int ydelta); - -private: - Action _action; - SGPropertyNode * _node; - const SGValue * _adjust_step; - const SGValue * _assign_value; -}; + +//////////////////////////////////////////////////////////////////////// +// General input mapping support. +//////////////////////////////////////////////////////////////////////// /** @@ -95,90 +48,19 @@ private: * keyboard, joystick, mouse, or even panel switches -- in a consistent * way, and to allow users to rebind any of the actions at runtime.

*/ -class FGInput : public FGSubsystem +class FGInput : public SGSubsystemGroup { public: - - enum { - MOD_NONE = 0, - MOD_SHIFT = 1, - MOD_CTRL = 2, - MOD_ALT = 4, - MOD_MAX = 8 // one past all modifiers - }; - - FGInput(); - virtual ~FGInput(); - - // - // Implementation of FGSubsystem. - // - virtual void init (); - virtual void bind (); - virtual void unbind (); - virtual void update (); - - - /** - * Handle a single keystroke. - * - *

Note: for special keys, the integer key code will be the Glut - * code + 256.

- * - * @param k The integer key code, as returned by glut. - * @param modifiers Modifier keys pressed (bitfield). - * @param x The mouse x position at the time of keypress. - * @param y The mouse y position at the time of keypress. - * @see #MOD_SHIFT - * @see #MOD_CTRL - * @see #MOD_ALT - */ - virtual void doKey (int k, int modifiers, int x, int y); - - - /** - * Fire off a single-trigger action. - * - *

This method fires an action triggered by a key or button - * press, with no additional quantity information.

- * - * @param binding The property node with the binding. - */ - virtual void action (const SGPropertyNode * binding); - - /** - * Fire off a quantity action. - * - *

This method fires an action triggered by a change in value, - * such as a slider or axis.

- * - * @param action The property node with the binding. - * @param value The new value. + * Default constructor. */ -// virtual void action (const SGPropertyNode * binding, double value); - + FGInput (); /** - * Fire off a movement action. - * - *

This method fires an action triggered by relative movement - * rather than an absolute value; it is especially applicable to - * mouse-movement bindings.

- * - * @param binding The property node containing the binding. - * @param xdelta The amount of X movement. - * @param ydelta The amount of Y movement. + * Destructor. */ -// virtual void action (const SGPropertyNode * binding, int xdelta, int ydelta); - -private: - - typedef map > keyboard_map; - keyboard_map _key_bindings[MOD_MAX]; + virtual ~FGInput(); }; -extern FGInput current_input; - -#endif // _CONTROLS_HXX +#endif // _INPUT_HXX