2001-05-23 22:59:40 +00:00
|
|
|
|
// input.cxx -- handle user input from various sources.
|
|
|
|
|
//
|
|
|
|
|
// Written by David Megginson, started May 2001.
|
|
|
|
|
//
|
|
|
|
|
// Copyright (C) 2001 David Megginson, david@megginson.com
|
|
|
|
|
//
|
|
|
|
|
// This program is free software; you can redistribute it and/or
|
|
|
|
|
// modify it under the terms of the GNU General Public License as
|
|
|
|
|
// published by the Free Software Foundation; either version 2 of the
|
|
|
|
|
// License, or (at your option) any later version.
|
|
|
|
|
//
|
|
|
|
|
// This program is distributed in the hope that it will be useful, but
|
|
|
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
|
// General Public License for more details.
|
|
|
|
|
//
|
|
|
|
|
// 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.
|
|
|
|
|
//
|
|
|
|
|
// $Id$
|
|
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
|
# include <config.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
#ifdef HAVE_WINDOWS_H
|
|
|
|
|
# include <windows.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
#include <simgear/compiler.h>
|
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
#include <math.h>
|
2001-05-29 22:06:14 +00:00
|
|
|
|
#include <ctype.h>
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
#include STL_FSTREAM
|
|
|
|
|
#include STL_STRING
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
#include <vector>
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2003-08-21 09:12:12 +00:00
|
|
|
|
#include FG_GLUT_H
|
2001-06-05 22:11:16 +00:00
|
|
|
|
|
|
|
|
|
#include <plib/pu.h>
|
|
|
|
|
|
|
|
|
|
#include <simgear/compiler.h>
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
#include <simgear/constants.h>
|
|
|
|
|
#include <simgear/debug/logstream.hxx>
|
2003-05-06 23:46:24 +00:00
|
|
|
|
#include <simgear/props/props.hxx>
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
#include <Aircraft/aircraft.hxx>
|
|
|
|
|
#include <Autopilot/auto_gui.hxx>
|
|
|
|
|
#include <Autopilot/newauto.hxx>
|
|
|
|
|
#include <Cockpit/hud.hxx>
|
|
|
|
|
#include <Cockpit/panel.hxx>
|
|
|
|
|
#include <Cockpit/panel_io.hxx>
|
|
|
|
|
#include <GUI/gui.h>
|
Andy Ross:
The biggest and coolest patch adds mouse sensitivity to the 3D
cockpits, so we can finally work the radios. This ended up requiring
significant modifications outside of the 3D cockpit code. Stuff folks
will want to look at:
+ The list of all "3D" cockpits is stored statically in the
panelnode.cxx file. This is clumsy, and won't migrate well to a
multiple-aircraft feature. Really, there should be a per-model list
of 3D panels, but I couldn't find a clean place to put this. The
only handle you get back after parsing a model is a generic ssg
node, to which I obviously can't add panel-specific methods.
+ The aircraft model is parsed *very* early in the initialization
order. Earlier, in fact, than the static list of allowable command
bindings is built in fgInitCommands(). This is bad, as it means
that mouse bindings on the instruments can't work yet. I moved the
call to fgInitCommands, but someone should look carefully to see
that I picked the right place. There's a lot of initialization
code, and I got a little lost in there... :)
+ I added yet another "update" hook to the fgRenderFrame routine to
hook the updates for the 3D panels. This is only required for
"mouse press delay", and it's a fairly clumsy mechanism based on
frame rate instead of real time. There appears to be delay handling
already in place in the Input stuff, and there's a discussion going
on about different mouse behavior right now. Maybe this is a good
time to unify these two (now three) approaches?
2002-10-29 19:44:03 +00:00
|
|
|
|
#include <Model/panelnode.hxx>
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
#include <Main/globals.hxx>
|
|
|
|
|
#include <Main/fg_props.hxx>
|
|
|
|
|
|
|
|
|
|
#include "input.hxx"
|
|
|
|
|
|
|
|
|
|
SG_USING_STD(ifstream);
|
|
|
|
|
SG_USING_STD(string);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
SG_USING_STD(vector);
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
2002-10-04 13:20:53 +00:00
|
|
|
|
// Local variables.
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
2002-10-04 13:20:53 +00:00
|
|
|
|
static FGInput * default_input = 0;
|
|
|
|
|
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGBinding.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FGBinding::FGBinding ()
|
2001-06-29 03:47:07 +00:00
|
|
|
|
: _command(0),
|
|
|
|
|
_arg(new SGPropertyNode),
|
2002-10-26 01:19:23 +00:00
|
|
|
|
_setting(0)
|
2001-05-23 22:59:40 +00:00
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGBinding::FGBinding (const SGPropertyNode * node)
|
2002-12-23 19:16:58 +00:00
|
|
|
|
: _command(0),
|
|
|
|
|
_arg(0),
|
|
|
|
|
_setting(0)
|
2001-05-23 22:59:40 +00:00
|
|
|
|
{
|
2001-05-29 22:31:04 +00:00
|
|
|
|
read(node);
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
FGBinding::read (const SGPropertyNode * node)
|
|
|
|
|
{
|
2001-08-03 00:19:03 +00:00
|
|
|
|
const SGPropertyNode * conditionNode = node->getChild("condition");
|
2002-12-22 19:57:09 +00:00
|
|
|
|
if (conditionNode != 0)
|
2003-05-13 03:18:42 +00:00
|
|
|
|
setCondition(sgReadCondition(globals->get_props(), conditionNode));
|
2001-08-03 00:19:03 +00:00
|
|
|
|
|
2001-06-01 17:50:59 +00:00
|
|
|
|
_command_name = node->getStringValue("command", "");
|
2002-03-20 19:16:13 +00:00
|
|
|
|
if (_command_name.empty()) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_WARN, "No command supplied for binding.");
|
2001-06-01 17:50:59 +00:00
|
|
|
|
_command = 0;
|
|
|
|
|
return;
|
2001-05-29 22:31:04 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-12-23 19:16:58 +00:00
|
|
|
|
_arg = new SGPropertyNode;
|
|
|
|
|
_setting = 0;
|
|
|
|
|
copyProperties(node, _arg); // FIXME: don't use whole node!!!
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
FGBinding::fire () const
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
{
|
2001-08-03 00:19:03 +00:00
|
|
|
|
if (test()) {
|
2003-01-18 16:25:50 +00:00
|
|
|
|
if (_command == 0)
|
|
|
|
|
_command = globals->get_commands()->getCommand(_command_name);
|
2001-08-03 00:19:03 +00:00
|
|
|
|
if (_command == 0) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_WARN, "No command attached to binding");
|
2002-10-26 01:19:23 +00:00
|
|
|
|
} else if (!(*_command)(_arg)) {
|
2001-08-03 00:19:03 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_ALERT, "Failed to execute command "
|
2002-11-05 02:28:07 +00:00
|
|
|
|
<< _command_name);
|
2001-08-03 00:19:03 +00:00
|
|
|
|
}
|
2001-06-29 03:47:07 +00:00
|
|
|
|
}
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
2002-03-26 13:45:44 +00:00
|
|
|
|
FGBinding::fire (double offset, double max) const
|
2002-03-23 23:16:13 +00:00
|
|
|
|
{
|
|
|
|
|
if (test()) {
|
2002-03-26 13:45:44 +00:00
|
|
|
|
_arg->setDoubleValue("offset", offset/max);
|
2002-03-23 23:16:13 +00:00
|
|
|
|
fire();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
void
|
|
|
|
|
FGBinding::fire (double setting) const
|
|
|
|
|
{
|
2001-08-03 00:19:03 +00:00
|
|
|
|
if (test()) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// A value is automatically added to
|
|
|
|
|
// the args
|
|
|
|
|
if (_setting == 0) // save the setting node for efficiency
|
2001-08-03 00:19:03 +00:00
|
|
|
|
_setting = _arg->getChild("setting", 0, true);
|
|
|
|
|
_setting->setDoubleValue(setting);
|
|
|
|
|
fire();
|
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGInput.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FGInput::FGInput ()
|
|
|
|
|
{
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (default_input == 0)
|
|
|
|
|
default_input = this;
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGInput::~FGInput ()
|
|
|
|
|
{
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (default_input == this)
|
|
|
|
|
default_input = 0;
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
FGInput::init ()
|
|
|
|
|
{
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
_init_keyboard();
|
|
|
|
|
_init_joystick();
|
2002-03-23 23:16:13 +00:00
|
|
|
|
_init_mouse();
|
2002-03-26 13:45:44 +00:00
|
|
|
|
|
|
|
|
|
glutKeyboardFunc(GLUTkey);
|
|
|
|
|
glutKeyboardUpFunc(GLUTkeyup);
|
|
|
|
|
glutSpecialFunc(GLUTspecialkey);
|
|
|
|
|
glutSpecialUpFunc(GLUTspecialkeyup);
|
|
|
|
|
glutMouseFunc (GLUTmouse);
|
|
|
|
|
glutMotionFunc (GLUTmotion);
|
|
|
|
|
glutPassiveMotionFunc (GLUTmotion);
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2003-03-01 21:29:31 +00:00
|
|
|
|
void
|
|
|
|
|
FGInput::update (double dt)
|
|
|
|
|
{
|
2003-06-04 14:22:51 +00:00
|
|
|
|
_update_keyboard();
|
2003-07-01 16:32:00 +00:00
|
|
|
|
_update_joystick(dt);
|
2003-06-04 14:22:51 +00:00
|
|
|
|
_update_mouse();
|
2003-03-01 21:29:31 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
void
|
2003-03-01 21:29:31 +00:00
|
|
|
|
FGInput::suspend ()
|
2001-05-23 22:59:40 +00:00
|
|
|
|
{
|
2003-03-01 21:29:31 +00:00
|
|
|
|
// NO-OP
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
2003-03-01 21:29:31 +00:00
|
|
|
|
FGInput::resume ()
|
2001-05-23 22:59:40 +00:00
|
|
|
|
{
|
2003-03-01 21:29:31 +00:00
|
|
|
|
// NO-OP
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2003-03-01 21:29:31 +00:00
|
|
|
|
bool
|
|
|
|
|
FGInput::is_suspended () const
|
2001-05-23 22:59:40 +00:00
|
|
|
|
{
|
2003-03-01 21:29:31 +00:00
|
|
|
|
return false;
|
2001-05-23 22:59:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-10-04 13:20:53 +00:00
|
|
|
|
void
|
|
|
|
|
FGInput::makeDefault (bool status)
|
|
|
|
|
{
|
|
|
|
|
if (status)
|
|
|
|
|
default_input = this;
|
|
|
|
|
else if (default_input == this)
|
|
|
|
|
default_input = 0;
|
|
|
|
|
}
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
void
|
|
|
|
|
FGInput::doKey (int k, int modifiers, int x, int y)
|
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Sanity check.
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (k < 0 || k >= MAX_KEYS) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_WARN, "Key value " << k << " out of range");
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
button &b = _key_bindings[k];
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Key pressed.
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (modifiers&FG_MOD_UP == 0) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG( SG_INPUT, SG_DEBUG, "User pressed key " << k
|
2002-11-05 02:28:07 +00:00
|
|
|
|
<< " with modifiers " << modifiers );
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (!b.last_state || b.is_repeatable) {
|
|
|
|
|
const binding_list_t &bindings =
|
2002-11-05 02:28:07 +00:00
|
|
|
|
_find_key_bindings(k, modifiers);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
int max = bindings.size();
|
|
|
|
|
if (max > 0) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
for (int i = 0; i < max; i++)
|
|
|
|
|
bindings[i]->fire();
|
|
|
|
|
return;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Key released.
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
else {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "User released key " << k
|
2002-11-05 02:28:07 +00:00
|
|
|
|
<< " with modifiers " << modifiers);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (b.last_state) {
|
|
|
|
|
const binding_list_t &bindings =
|
2002-11-05 02:28:07 +00:00
|
|
|
|
_find_key_bindings(k, modifiers);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
int max = bindings.size();
|
|
|
|
|
if (max > 0) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
for (int i = 0; i < max; i++)
|
|
|
|
|
bindings[i]->fire();
|
|
|
|
|
return;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2001-05-29 22:31:04 +00:00
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Use the old, default actions.
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG( SG_INPUT, SG_DEBUG, "(No user binding.)" );
|
2001-06-04 21:40:38 +00:00
|
|
|
|
if (modifiers&FG_MOD_UP)
|
|
|
|
|
return;
|
|
|
|
|
|
2001-05-29 22:31:04 +00:00
|
|
|
|
// everything after here will be removed sooner or later...
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2001-05-29 22:31:04 +00:00
|
|
|
|
if (modifiers & FG_MOD_SHIFT) {
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
switch (k) {
|
|
|
|
|
case 72: // H key
|
|
|
|
|
HUD_brightkey( true );
|
|
|
|
|
return;
|
|
|
|
|
case 73: // I key
|
|
|
|
|
// Minimal Hud
|
|
|
|
|
fgHUDInit2(¤t_aircraft);
|
|
|
|
|
return;
|
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
SG_LOG( SG_INPUT, SG_DEBUG, "" );
|
|
|
|
|
switch (k) {
|
|
|
|
|
case 104: // h key
|
|
|
|
|
HUD_masterswitch( true );
|
|
|
|
|
return;
|
|
|
|
|
case 105: // i key
|
|
|
|
|
fgHUDInit(¤t_aircraft); // normal HUD
|
|
|
|
|
return;
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2001-05-29 22:31:04 +00:00
|
|
|
|
// START SPECIALS
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
case 256+GLUT_KEY_F6: // F6 toggles Autopilot target location
|
2002-11-05 02:28:07 +00:00
|
|
|
|
if ( globals->get_autopilot()->get_HeadingMode() !=
|
|
|
|
|
FGAutopilot::FG_HEADING_WAYPOINT ) {
|
|
|
|
|
globals->get_autopilot()->set_HeadingMode(
|
|
|
|
|
FGAutopilot::FG_HEADING_WAYPOINT );
|
|
|
|
|
globals->get_autopilot()->set_HeadingEnabled( true );
|
|
|
|
|
} else {
|
|
|
|
|
globals->get_autopilot()->set_HeadingMode(
|
|
|
|
|
FGAutopilot::FG_TC_HEADING_LOCK );
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2001-05-29 22:31:04 +00:00
|
|
|
|
// END SPECIALS
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
|
|
|
|
FGInput::doMouseClick (int b, int updown, int x, int y)
|
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
int modifiers = FG_MOD_NONE; // FIXME: any way to get the real ones?
|
2002-03-23 23:16:13 +00:00
|
|
|
|
|
2002-03-26 13:45:44 +00:00
|
|
|
|
mouse &m = _mouse_bindings[0];
|
2002-03-26 17:14:48 +00:00
|
|
|
|
mouse_mode &mode = m.modes[m.current_mode];
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Let the property manager know.
|
2002-03-27 23:45:11 +00:00
|
|
|
|
if (b >= 0 && b < MAX_MOUSE_BUTTONS)
|
|
|
|
|
m.mouse_button_nodes[b]->setBoolValue(updown == GLUT_DOWN);
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Pass on to PUI and the panel if
|
|
|
|
|
// requested, and return if one of
|
|
|
|
|
// them consumes the event.
|
2002-03-26 17:14:48 +00:00
|
|
|
|
if (mode.pass_through) {
|
|
|
|
|
if (puMouse(b, updown, x, y))
|
|
|
|
|
return;
|
2003-03-30 12:46:08 +00:00
|
|
|
|
else if ((globals->get_current_panel() != 0) &&
|
|
|
|
|
globals->get_current_panel()->getVisibility() &&
|
|
|
|
|
globals->get_current_panel()->doMouseAction(b, updown, x, y))
|
Andy Ross:
The biggest and coolest patch adds mouse sensitivity to the 3D
cockpits, so we can finally work the radios. This ended up requiring
significant modifications outside of the 3D cockpit code. Stuff folks
will want to look at:
+ The list of all "3D" cockpits is stored statically in the
panelnode.cxx file. This is clumsy, and won't migrate well to a
multiple-aircraft feature. Really, there should be a per-model list
of 3D panels, but I couldn't find a clean place to put this. The
only handle you get back after parsing a model is a generic ssg
node, to which I obviously can't add panel-specific methods.
+ The aircraft model is parsed *very* early in the initialization
order. Earlier, in fact, than the static list of allowable command
bindings is built in fgInitCommands(). This is bad, as it means
that mouse bindings on the instruments can't work yet. I moved the
call to fgInitCommands, but someone should look carefully to see
that I picked the right place. There's a lot of initialization
code, and I got a little lost in there... :)
+ I added yet another "update" hook to the fgRenderFrame routine to
hook the updates for the 3D panels. This is only required for
"mouse press delay", and it's a fairly clumsy mechanism based on
frame rate instead of real time. There appears to be delay handling
already in place in the Input stuff, and there's a discussion going
on about different mouse behavior right now. Maybe this is a good
time to unify these two (now three) approaches?
2002-10-29 19:44:03 +00:00
|
|
|
|
return;
|
|
|
|
|
else if (fgHandle3DPanelMouseEvent(b, updown, x, y))
|
2002-03-26 17:14:48 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2002-03-26 13:45:44 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// OK, PUI and the panel didn't want the click
|
2002-03-25 12:58:26 +00:00
|
|
|
|
if (b >= MAX_MOUSE_BUTTONS) {
|
|
|
|
|
SG_LOG(SG_INPUT, SG_ALERT, "Mouse button " << b
|
2002-11-05 02:28:07 +00:00
|
|
|
|
<< " where only " << MAX_MOUSE_BUTTONS << " expected");
|
2002-03-25 12:58:26 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2002-05-10 23:35:06 +00:00
|
|
|
|
_update_button(m.modes[m.current_mode].buttons[b], modifiers, 0 != updown, x, y);
|
2002-03-23 23:16:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
FGInput::doMouseMotion (int x, int y)
|
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
int modifiers = FG_MOD_NONE; // FIXME: any way to get the real ones?
|
2002-03-26 13:45:44 +00:00
|
|
|
|
|
|
|
|
|
int xsize = fgGetInt("/sim/startup/xsize", 800);
|
|
|
|
|
int ysize = fgGetInt("/sim/startup/ysize", 600);
|
|
|
|
|
mouse &m = _mouse_bindings[0];
|
|
|
|
|
if (m.current_mode < 0 || m.current_mode >= m.nModes)
|
|
|
|
|
return;
|
|
|
|
|
mouse_mode &mode = m.modes[m.current_mode];
|
2002-03-26 17:14:48 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Pass on to PUI if requested, and return
|
|
|
|
|
// if PUI consumed the event.
|
2002-03-26 17:14:48 +00:00
|
|
|
|
if (mode.pass_through && puMouse(x, y))
|
|
|
|
|
return;
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// OK, PUI didn't want the event,
|
|
|
|
|
// so we can play with it.
|
2002-03-26 13:45:44 +00:00
|
|
|
|
if (x != m.x) {
|
|
|
|
|
int delta = x - m.x;
|
2002-07-18 22:32:12 +00:00
|
|
|
|
for (unsigned int i = 0; i < mode.x_bindings[modifiers].size(); i++)
|
2002-03-26 13:45:44 +00:00
|
|
|
|
mode.x_bindings[modifiers][i]->fire(double(delta), double(xsize));
|
|
|
|
|
}
|
|
|
|
|
if (y != m.y) {
|
|
|
|
|
int delta = y - m.y;
|
2002-07-18 22:32:12 +00:00
|
|
|
|
for (unsigned int i = 0; i < mode.y_bindings[modifiers].size(); i++)
|
2002-03-26 13:45:44 +00:00
|
|
|
|
mode.y_bindings[modifiers][i]->fire(double(delta), double(ysize));
|
|
|
|
|
}
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Constrain the mouse if requested
|
2002-03-26 13:45:44 +00:00
|
|
|
|
if (mode.constrained) {
|
|
|
|
|
bool need_warp = false;
|
2002-03-28 15:57:02 +00:00
|
|
|
|
if (x <= 0) {
|
|
|
|
|
x = xsize - 2;
|
2002-03-26 13:45:44 +00:00
|
|
|
|
need_warp = true;
|
2002-03-28 15:57:02 +00:00
|
|
|
|
} else if (x >= (xsize-1)) {
|
|
|
|
|
x = 1;
|
2002-03-26 13:45:44 +00:00
|
|
|
|
need_warp = true;
|
|
|
|
|
}
|
|
|
|
|
|
2002-03-28 15:57:02 +00:00
|
|
|
|
if (y <= 0) {
|
|
|
|
|
y = ysize - 2;
|
2002-03-26 13:45:44 +00:00
|
|
|
|
need_warp = true;
|
2002-03-28 15:57:02 +00:00
|
|
|
|
} else if (y >= (ysize-1)) {
|
|
|
|
|
y = 1;
|
2002-03-26 13:45:44 +00:00
|
|
|
|
need_warp = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (need_warp)
|
|
|
|
|
glutWarpPointer(x, y);
|
|
|
|
|
}
|
|
|
|
|
m.x = x;
|
|
|
|
|
m.y = y;
|
2002-03-23 23:16:13 +00:00
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
void
|
|
|
|
|
FGInput::_init_keyboard ()
|
|
|
|
|
{
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Initializing key bindings");
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
SGPropertyNode * key_nodes = fgGetNode("/input/keyboard");
|
|
|
|
|
if (key_nodes == 0) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_WARN, "No key bindings (/input/keyboard)!!");
|
|
|
|
|
key_nodes = fgGetNode("/input/keyboard", true);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-05-11 00:59:26 +00:00
|
|
|
|
vector<SGPropertyNode_ptr> keys = key_nodes->getChildren("key");
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
for (unsigned int i = 0; i < keys.size(); i++) {
|
|
|
|
|
int index = keys[i]->getIndex();
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Binding key " << index);
|
2003-09-25 12:07:42 +00:00
|
|
|
|
|
|
|
|
|
_key_bindings[index].bindings->clear();
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
_key_bindings[index].is_repeatable = keys[i]->getBoolValue("repeatable");
|
|
|
|
|
_read_bindings(keys[i], _key_bindings[index].bindings, FG_MOD_NONE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
FGInput::_init_joystick ()
|
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// TODO: zero the old bindings first.
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Initializing joystick bindings");
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
SGPropertyNode * js_nodes = fgGetNode("/input/joysticks");
|
|
|
|
|
if (js_nodes == 0) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_WARN, "No joystick bindings (/input/joysticks)!!");
|
|
|
|
|
js_nodes = fgGetNode("/input/joysticks", true);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < MAX_JOYSTICKS; i++) {
|
2002-07-04 17:38:18 +00:00
|
|
|
|
SGPropertyNode_ptr js_node = js_nodes->getChild("js", i);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (js_node == 0) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "No bindings for joystick " << i);
|
|
|
|
|
js_node = js_nodes->getChild("js", i, true);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
jsJoystick * js = new jsJoystick(i);
|
|
|
|
|
_joystick_bindings[i].js = js;
|
|
|
|
|
if (js->notWorking()) {
|
2003-11-24 17:45:35 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Joystick " << i << " not found");
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
continue;
|
2002-04-18 20:18:33 +00:00
|
|
|
|
} else {
|
2002-07-31 17:32:16 +00:00
|
|
|
|
bool found_js = false;
|
2002-07-04 17:38:18 +00:00
|
|
|
|
const char * name = js->getName();
|
2002-07-18 22:38:46 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_INFO, "Looking for bindings for joystick \""
|
2002-11-05 02:28:07 +00:00
|
|
|
|
<< name << '"');
|
2002-07-04 17:38:18 +00:00
|
|
|
|
vector<SGPropertyNode_ptr> nodes = js_nodes->getChildren("js-named");
|
2002-07-18 22:32:12 +00:00
|
|
|
|
for (unsigned int i = 0; i < nodes.size(); i++) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
SGPropertyNode_ptr node = nodes[i];
|
2002-07-31 17:32:16 +00:00
|
|
|
|
vector<SGPropertyNode_ptr> name_nodes = node->getChildren("name");
|
|
|
|
|
for (unsigned int j = 0; j < name_nodes.size(); j++) {
|
|
|
|
|
const char * js_name = name_nodes[j]->getStringValue();
|
|
|
|
|
SG_LOG(SG_INPUT, SG_INFO, " Trying \"" << js_name << '"');
|
|
|
|
|
if (!strcmp(js_name, name)) {
|
|
|
|
|
SG_LOG(SG_INPUT, SG_INFO, " Found bindings");
|
|
|
|
|
js_node = node;
|
|
|
|
|
found_js = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (found_js)
|
|
|
|
|
break;
|
2002-07-04 17:38:18 +00:00
|
|
|
|
}
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
#ifdef WIN32
|
|
|
|
|
JOYCAPS jsCaps ;
|
|
|
|
|
joyGetDevCaps( i, &jsCaps, sizeof(jsCaps) );
|
|
|
|
|
int nbuttons = jsCaps.wNumButtons;
|
2002-03-23 23:16:13 +00:00
|
|
|
|
if (nbuttons > MAX_JOYSTICK_BUTTONS) nbuttons = MAX_JOYSTICK_BUTTONS;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
#else
|
2002-03-23 23:16:13 +00:00
|
|
|
|
int nbuttons = MAX_JOYSTICK_BUTTONS;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
#endif
|
2002-11-05 02:28:07 +00:00
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
int naxes = js->getNumAxes();
|
2002-03-23 23:16:13 +00:00
|
|
|
|
if (naxes > MAX_JOYSTICK_AXES) naxes = MAX_JOYSTICK_AXES;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
_joystick_bindings[i].naxes = naxes;
|
|
|
|
|
_joystick_bindings[i].nbuttons = nbuttons;
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Initializing joystick " << i);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Set up range arrays
|
2002-03-23 23:16:13 +00:00
|
|
|
|
float minRange[MAX_JOYSTICK_AXES];
|
|
|
|
|
float maxRange[MAX_JOYSTICK_AXES];
|
|
|
|
|
float center[MAX_JOYSTICK_AXES];
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Initialize with default values
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
js->getMinRange(minRange);
|
|
|
|
|
js->getMaxRange(maxRange);
|
|
|
|
|
js->getCenter(center);
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Allocate axes and buttons
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
_joystick_bindings[i].axes = new axis[naxes];
|
|
|
|
|
_joystick_bindings[i].buttons = new button[nbuttons];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Initialize the axes.
|
|
|
|
|
//
|
2001-06-06 23:31:48 +00:00
|
|
|
|
int j;
|
|
|
|
|
for (j = 0; j < naxes; j++) {
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
const SGPropertyNode * axis_node = js_node->getChild("axis", j);
|
|
|
|
|
if (axis_node == 0) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "No bindings for axis " << j);
|
|
|
|
|
axis_node = js_node->getChild("axis", j, true);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
axis &a = _joystick_bindings[i].axes[j];
|
|
|
|
|
|
|
|
|
|
js->setDeadBand(j, axis_node->getDoubleValue("dead-band", 0.0));
|
|
|
|
|
|
|
|
|
|
a.tolerance = axis_node->getDoubleValue("tolerance", 0.002);
|
|
|
|
|
minRange[j] = axis_node->getDoubleValue("min-range", minRange[j]);
|
|
|
|
|
maxRange[j] = axis_node->getDoubleValue("max-range", maxRange[j]);
|
|
|
|
|
center[j] = axis_node->getDoubleValue("center", center[j]);
|
|
|
|
|
|
|
|
|
|
_read_bindings(axis_node, a.bindings, FG_MOD_NONE);
|
2001-06-20 20:51:15 +00:00
|
|
|
|
|
|
|
|
|
// Initialize the virtual axis buttons.
|
|
|
|
|
_init_button(axis_node->getChild("low"), a.low, "low");
|
|
|
|
|
a.low_threshold = axis_node->getDoubleValue("low-threshold", -0.9);
|
|
|
|
|
|
|
|
|
|
_init_button(axis_node->getChild("high"), a.high, "high");
|
|
|
|
|
a.high_threshold = axis_node->getDoubleValue("high-threshold", 0.9);
|
2003-07-01 16:32:00 +00:00
|
|
|
|
a.interval_sec = axis_node->getDoubleValue("interval-sec",0.0);
|
|
|
|
|
a.last_dt = 0.0;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
// Initialize the buttons.
|
|
|
|
|
//
|
2002-03-27 12:49:07 +00:00
|
|
|
|
char buf[32];
|
2001-06-06 23:31:48 +00:00
|
|
|
|
for (j = 0; j < nbuttons; j++) {
|
2001-06-20 20:51:15 +00:00
|
|
|
|
sprintf(buf, "%d", j);
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Initializing button " << j);
|
2001-06-20 20:51:15 +00:00
|
|
|
|
_init_button(js_node->getChild("button", j),
|
2002-11-05 02:28:07 +00:00
|
|
|
|
_joystick_bindings[i].buttons[j],
|
|
|
|
|
buf);
|
2003-07-02 19:21:11 +00:00
|
|
|
|
|
|
|
|
|
// get interval-sec property
|
|
|
|
|
button &b = _joystick_bindings[i].buttons[j];
|
|
|
|
|
const SGPropertyNode * button_node = js_node->getChild("button", j);
|
|
|
|
|
if (button_node != 0) {
|
|
|
|
|
b.interval_sec = button_node->getDoubleValue("interval-sec",0.0);
|
|
|
|
|
b.last_dt = 0.0;
|
|
|
|
|
}
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
js->setMinRange(minRange);
|
|
|
|
|
js->setMaxRange(maxRange);
|
|
|
|
|
js->setCenter(center);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2002-03-25 12:58:26 +00:00
|
|
|
|
//
|
|
|
|
|
// Map of all known GLUT cursor names
|
|
|
|
|
//
|
|
|
|
|
struct {
|
|
|
|
|
const char * name;
|
|
|
|
|
int cursor;
|
|
|
|
|
} mouse_cursor_map[] = {
|
|
|
|
|
{ "right-arrow", GLUT_CURSOR_RIGHT_ARROW },
|
|
|
|
|
{ "left-arrow", GLUT_CURSOR_LEFT_ARROW },
|
|
|
|
|
{ "info", GLUT_CURSOR_INFO },
|
|
|
|
|
{ "destroy", GLUT_CURSOR_DESTROY },
|
|
|
|
|
{ "help", GLUT_CURSOR_HELP },
|
|
|
|
|
{ "cycle", GLUT_CURSOR_CYCLE },
|
|
|
|
|
{ "spray", GLUT_CURSOR_SPRAY },
|
|
|
|
|
{ "wait", GLUT_CURSOR_WAIT },
|
|
|
|
|
{ "text", GLUT_CURSOR_TEXT },
|
|
|
|
|
{ "crosshair", GLUT_CURSOR_CROSSHAIR },
|
|
|
|
|
{ "up-down", GLUT_CURSOR_UP_DOWN },
|
|
|
|
|
{ "left-right", GLUT_CURSOR_LEFT_RIGHT },
|
|
|
|
|
{ "top-side", GLUT_CURSOR_TOP_SIDE },
|
|
|
|
|
{ "bottom-side", GLUT_CURSOR_BOTTOM_SIDE },
|
|
|
|
|
{ "left-side", GLUT_CURSOR_LEFT_SIDE },
|
|
|
|
|
{ "right-side", GLUT_CURSOR_RIGHT_SIDE },
|
|
|
|
|
{ "top-left-corner", GLUT_CURSOR_TOP_LEFT_CORNER },
|
|
|
|
|
{ "top-right-corner", GLUT_CURSOR_TOP_RIGHT_CORNER },
|
|
|
|
|
{ "bottom-right-corner", GLUT_CURSOR_BOTTOM_RIGHT_CORNER },
|
|
|
|
|
{ "bottom-left-corner", GLUT_CURSOR_BOTTOM_LEFT_CORNER },
|
|
|
|
|
{ "inherit", GLUT_CURSOR_INHERIT },
|
|
|
|
|
{ "none", GLUT_CURSOR_NONE },
|
|
|
|
|
{ "full-crosshair", GLUT_CURSOR_FULL_CROSSHAIR },
|
|
|
|
|
{ 0, 0 }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
|
|
|
|
FGInput::_init_mouse ()
|
|
|
|
|
{
|
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Initializing mouse bindings");
|
|
|
|
|
|
|
|
|
|
SGPropertyNode * mouse_nodes = fgGetNode("/input/mice");
|
|
|
|
|
if (mouse_nodes == 0) {
|
|
|
|
|
SG_LOG(SG_INPUT, SG_WARN, "No mouse bindings (/input/mice)!!");
|
|
|
|
|
mouse_nodes = fgGetNode("/input/mice", true);
|
|
|
|
|
}
|
|
|
|
|
|
2002-03-25 12:58:26 +00:00
|
|
|
|
int j;
|
2002-03-23 23:16:13 +00:00
|
|
|
|
for (int i = 0; i < MAX_MICE; i++) {
|
2002-03-26 13:45:44 +00:00
|
|
|
|
SGPropertyNode * mouse_node = mouse_nodes->getChild("mouse", i, true);
|
|
|
|
|
mouse &m = _mouse_bindings[i];
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Grab node pointers
|
2002-03-27 23:45:11 +00:00
|
|
|
|
char buf[64];
|
|
|
|
|
sprintf(buf, "/devices/status/mice/mouse[%d]/mode", i);
|
2003-12-28 17:42:26 +00:00
|
|
|
|
m.mode_node = fgGetNode(buf);
|
|
|
|
|
if (m.mode_node == NULL) {
|
|
|
|
|
m.mode_node = fgGetNode(buf, true);
|
|
|
|
|
m.mode_node->setIntValue(0);
|
|
|
|
|
}
|
2002-03-27 23:45:11 +00:00
|
|
|
|
for (j = 0; j < MAX_MOUSE_BUTTONS; j++) {
|
|
|
|
|
sprintf(buf, "/devices/status/mice/mouse[%d]/button[%d]", i, j);
|
|
|
|
|
m.mouse_button_nodes[j] = fgGetNode(buf, true);
|
|
|
|
|
m.mouse_button_nodes[j]->setBoolValue(false);
|
|
|
|
|
}
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Read all the modes
|
2002-03-26 13:45:44 +00:00
|
|
|
|
m.nModes = mouse_node->getIntValue("mode-count", 1);
|
|
|
|
|
m.modes = new mouse_mode[m.nModes];
|
|
|
|
|
|
|
|
|
|
for (int j = 0; j < m.nModes; j++) {
|
|
|
|
|
int k;
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Read the mouse cursor for this mode
|
2002-03-26 13:45:44 +00:00
|
|
|
|
SGPropertyNode * mode_node = mouse_node->getChild("mode", j, true);
|
|
|
|
|
const char * cursor_name =
|
2002-11-05 02:28:07 +00:00
|
|
|
|
mode_node->getStringValue("cursor", "inherit");
|
2002-03-26 13:45:44 +00:00
|
|
|
|
m.modes[j].cursor = GLUT_CURSOR_INHERIT;
|
|
|
|
|
for (k = 0; mouse_cursor_map[k].name != 0; k++) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
if (!strcmp(mouse_cursor_map[k].name, cursor_name)) {
|
|
|
|
|
m.modes[j].cursor = mouse_cursor_map[k].cursor;
|
|
|
|
|
break;
|
|
|
|
|
}
|
2002-03-25 12:58:26 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Read other properties for this mode
|
2002-03-26 13:45:44 +00:00
|
|
|
|
m.modes[j].constrained = mode_node->getBoolValue("constrained", false);
|
2002-03-26 17:14:48 +00:00
|
|
|
|
m.modes[j].pass_through = mode_node->getBoolValue("pass-through", false);
|
2002-03-26 13:45:44 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Read the button bindings for this mode
|
2002-03-26 13:45:44 +00:00
|
|
|
|
m.modes[j].buttons = new button[MAX_MOUSE_BUTTONS];
|
2002-03-28 17:16:37 +00:00
|
|
|
|
char buf[32];
|
2002-03-26 13:45:44 +00:00
|
|
|
|
for (k = 0; k < MAX_MOUSE_BUTTONS; k++) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
sprintf(buf, "mouse button %d", k);
|
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Initializing mouse button " << k);
|
|
|
|
|
_init_button(mode_node->getChild("button", k),
|
|
|
|
|
m.modes[j].buttons[k],
|
|
|
|
|
buf);
|
2002-03-26 13:45:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Read the axis bindings for this mode
|
2002-03-26 13:45:44 +00:00
|
|
|
|
_read_bindings(mode_node->getChild("x-axis", 0, true),
|
2002-11-05 02:28:07 +00:00
|
|
|
|
m.modes[j].x_bindings,
|
|
|
|
|
FG_MOD_NONE);
|
2002-03-26 13:45:44 +00:00
|
|
|
|
_read_bindings(mode_node->getChild("y-axis", 0, true),
|
2002-11-05 02:28:07 +00:00
|
|
|
|
m.modes[j].y_bindings,
|
|
|
|
|
FG_MOD_NONE);
|
2002-03-23 23:16:13 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
2001-06-20 20:51:15 +00:00
|
|
|
|
FGInput::_init_button (const SGPropertyNode * node,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
button &b,
|
|
|
|
|
const string name)
|
|
|
|
|
{
|
2002-03-23 23:16:13 +00:00
|
|
|
|
if (node == 0) {
|
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "No bindings for button " << name);
|
|
|
|
|
} else {
|
2001-06-20 20:51:15 +00:00
|
|
|
|
b.is_repeatable = node->getBoolValue("repeatable", b.is_repeatable);
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Get the bindings for the button
|
2001-06-20 20:51:15 +00:00
|
|
|
|
_read_bindings(node, b.bindings, FG_MOD_NONE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
void
|
2003-06-04 14:22:51 +00:00
|
|
|
|
FGInput::_update_keyboard ()
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
{
|
|
|
|
|
// no-op
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
2003-07-01 16:32:00 +00:00
|
|
|
|
FGInput::_update_joystick (double dt)
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
int modifiers = FG_MOD_NONE; // FIXME: any way to get the real ones?
|
2003-06-04 14:22:51 +00:00
|
|
|
|
int buttons;
|
2001-06-14 22:07:19 +00:00
|
|
|
|
// float js_val, diff;
|
2002-03-23 23:16:13 +00:00
|
|
|
|
float axis_values[MAX_JOYSTICK_AXES];
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
2003-06-04 14:22:51 +00:00
|
|
|
|
int i;
|
|
|
|
|
int j;
|
2001-06-06 23:31:48 +00:00
|
|
|
|
|
|
|
|
|
for ( i = 0; i < MAX_JOYSTICKS; i++) {
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
|
|
|
|
jsJoystick * js = _joystick_bindings[i].js;
|
|
|
|
|
if (js == 0 || js->notWorking())
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
js->read(&buttons, axis_values);
|
|
|
|
|
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Fire bindings for the axes.
|
2001-06-06 23:31:48 +00:00
|
|
|
|
for ( j = 0; j < _joystick_bindings[i].naxes; j++) {
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
axis &a = _joystick_bindings[i].axes[j];
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Do nothing if the axis position
|
|
|
|
|
// is unchanged; only a change in
|
|
|
|
|
// position fires the bindings.
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (fabs(axis_values[j] - a.last_value) > a.tolerance) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// SG_LOG(SG_INPUT, SG_DEBUG, "Axis " << j << " has moved");
|
|
|
|
|
SGPropertyNode node;
|
|
|
|
|
a.last_value = axis_values[j];
|
|
|
|
|
// SG_LOG(SG_INPUT, SG_DEBUG, "There are "
|
|
|
|
|
// << a.bindings[modifiers].size() << " bindings");
|
|
|
|
|
for (unsigned int k = 0; k < a.bindings[modifiers].size(); k++)
|
|
|
|
|
a.bindings[modifiers][k]->fire(axis_values[j]);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
2001-06-20 20:51:15 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// do we have to emulate axis buttons?
|
2003-07-01 16:32:00 +00:00
|
|
|
|
a.last_dt += dt;
|
|
|
|
|
if(a.last_dt >= a.interval_sec) {
|
|
|
|
|
if (a.low.bindings[modifiers].size())
|
|
|
|
|
_update_button(_joystick_bindings[i].axes[j].low,
|
|
|
|
|
modifiers,
|
|
|
|
|
axis_values[j] < a.low_threshold,
|
|
|
|
|
-1, -1);
|
2003-06-04 14:22:51 +00:00
|
|
|
|
|
2003-07-01 16:32:00 +00:00
|
|
|
|
if (a.high.bindings[modifiers].size())
|
|
|
|
|
_update_button(_joystick_bindings[i].axes[j].high,
|
|
|
|
|
modifiers,
|
|
|
|
|
axis_values[j] > a.high_threshold,
|
|
|
|
|
-1, -1);
|
|
|
|
|
a.last_dt -= a.interval_sec;
|
|
|
|
|
}
|
2001-07-02 22:26:19 +00:00
|
|
|
|
}
|
2003-06-04 12:46:49 +00:00
|
|
|
|
|
2003-06-04 14:22:51 +00:00
|
|
|
|
// Fire bindings for the buttons.
|
|
|
|
|
for (j = 0; j < _joystick_bindings[i].nbuttons; j++) {
|
2003-07-02 19:21:11 +00:00
|
|
|
|
button &b = _joystick_bindings[i].buttons[j];
|
|
|
|
|
b.last_dt += dt;
|
|
|
|
|
if(b.last_dt >= b.interval_sec) {
|
|
|
|
|
_update_button(_joystick_bindings[i].buttons[j],
|
|
|
|
|
modifiers,
|
|
|
|
|
(buttons & (1 << j)) > 0,
|
|
|
|
|
-1, -1);
|
|
|
|
|
b.last_dt -= b.interval_sec;
|
|
|
|
|
}
|
2003-06-04 14:22:51 +00:00
|
|
|
|
}
|
2003-06-04 12:46:49 +00:00
|
|
|
|
}
|
2001-06-20 20:51:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
2003-06-04 14:22:51 +00:00
|
|
|
|
FGInput::_update_mouse ()
|
2002-03-23 23:16:13 +00:00
|
|
|
|
{
|
2002-03-26 13:45:44 +00:00
|
|
|
|
mouse &m = _mouse_bindings[0];
|
2002-03-27 23:45:11 +00:00
|
|
|
|
int mode = m.mode_node->getIntValue();
|
2002-03-26 13:45:44 +00:00
|
|
|
|
if (mode != m.current_mode) {
|
|
|
|
|
m.current_mode = mode;
|
|
|
|
|
if (mode >= 0 && mode < m.nModes) {
|
|
|
|
|
glutSetCursor(m.modes[mode].cursor);
|
2002-03-28 16:12:26 +00:00
|
|
|
|
m.x = fgGetInt("/sim/startup/xsize", 800) / 2;
|
|
|
|
|
m.y = fgGetInt("/sim/startup/ysize", 600) / 2;
|
|
|
|
|
glutWarpPointer(m.x, m.y);
|
2002-03-25 12:58:26 +00:00
|
|
|
|
} else {
|
2002-03-26 13:45:44 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Mouse mode " << mode << " out of range");
|
2002-03-25 12:58:26 +00:00
|
|
|
|
glutSetCursor(GLUT_CURSOR_INHERIT);
|
|
|
|
|
}
|
|
|
|
|
}
|
2002-03-23 23:16:13 +00:00
|
|
|
|
}
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
2001-07-02 22:26:19 +00:00
|
|
|
|
void
|
2002-03-23 23:16:13 +00:00
|
|
|
|
FGInput::_update_button (button &b, int modifiers, bool pressed,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
int x, int y)
|
2001-06-20 20:51:15 +00:00
|
|
|
|
{
|
|
|
|
|
if (pressed) {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// The press event may be repeated.
|
2001-06-20 20:51:15 +00:00
|
|
|
|
if (!b.last_state || b.is_repeatable) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG( SG_INPUT, SG_DEBUG, "Button has been pressed" );
|
2001-06-20 20:51:15 +00:00
|
|
|
|
for (unsigned int k = 0; k < b.bindings[modifiers].size(); k++)
|
2002-11-05 02:28:07 +00:00
|
|
|
|
b.bindings[modifiers][k]->fire(x, y);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
2001-06-20 20:51:15 +00:00
|
|
|
|
} else {
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// The release event is never repeated.
|
2001-07-02 22:26:19 +00:00
|
|
|
|
if (b.last_state) {
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG( SG_INPUT, SG_DEBUG, "Button has been released" );
|
2001-06-20 20:51:15 +00:00
|
|
|
|
for (unsigned int k = 0; k < b.bindings[modifiers|FG_MOD_UP].size(); k++)
|
2002-11-05 02:28:07 +00:00
|
|
|
|
b.bindings[modifiers|FG_MOD_UP][k]->fire(x, y);
|
2001-07-02 22:26:19 +00:00
|
|
|
|
}
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
2002-11-05 02:28:07 +00:00
|
|
|
|
|
2001-06-20 20:51:15 +00:00
|
|
|
|
b.last_state = pressed;
|
|
|
|
|
}
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
FGInput::_read_bindings (const SGPropertyNode * node,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
binding_list_t * binding_list,
|
|
|
|
|
int modifiers)
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
{
|
2002-03-23 23:16:13 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Reading all bindings");
|
2002-05-11 00:59:26 +00:00
|
|
|
|
vector<SGPropertyNode_ptr> bindings = node->getChildren("binding");
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
for (unsigned int i = 0; i < bindings.size(); i++) {
|
2003-06-04 14:22:51 +00:00
|
|
|
|
SG_LOG(SG_INPUT, SG_DEBUG, "Reading binding "
|
|
|
|
|
<< bindings[i]->getStringValue("command"));
|
|
|
|
|
binding_list[modifiers].push_back(new FGBinding(bindings[i]));
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Read nested bindings for modifiers
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (node->getChild("mod-up") != 0)
|
|
|
|
|
_read_bindings(node->getChild("mod-up"), binding_list,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
modifiers|FG_MOD_UP);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
|
|
|
|
if (node->getChild("mod-shift") != 0)
|
|
|
|
|
_read_bindings(node->getChild("mod-shift"), binding_list,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
modifiers|FG_MOD_SHIFT);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
|
|
|
|
if (node->getChild("mod-ctrl") != 0)
|
|
|
|
|
_read_bindings(node->getChild("mod-ctrl"), binding_list,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
modifiers|FG_MOD_CTRL);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
|
|
|
|
|
if (node->getChild("mod-alt") != 0)
|
|
|
|
|
_read_bindings(node->getChild("mod-alt"), binding_list,
|
2002-11-05 02:28:07 +00:00
|
|
|
|
modifiers|FG_MOD_ALT);
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2001-08-03 00:19:03 +00:00
|
|
|
|
const vector<FGBinding *> &
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
FGInput::_find_key_bindings (unsigned int k, int modifiers)
|
2001-05-29 22:31:04 +00:00
|
|
|
|
{
|
2003-09-27 09:44:41 +00:00
|
|
|
|
unsigned char kc = (unsigned char)k;
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
button &b = _key_bindings[k];
|
2001-05-29 22:31:04 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Try it straight, first.
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
if (b.bindings[modifiers].size() > 0)
|
|
|
|
|
return b.bindings[modifiers];
|
2001-05-29 22:31:04 +00:00
|
|
|
|
|
2003-09-27 09:44:41 +00:00
|
|
|
|
// Alt-Gr is CTRL+ALT
|
|
|
|
|
else if (modifiers&(FG_MOD_CTRL|FG_MOD_ALT))
|
|
|
|
|
return _find_key_bindings(k, modifiers&~(FG_MOD_CTRL|FG_MOD_ALT));
|
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Try removing the control modifier
|
|
|
|
|
// for control keys.
|
2003-09-27 09:44:41 +00:00
|
|
|
|
else if ((modifiers&FG_MOD_CTRL) && iscntrl(kc))
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
return _find_key_bindings(k, modifiers&~FG_MOD_CTRL);
|
2001-05-29 22:31:04 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Try removing shift modifier
|
|
|
|
|
// for upper case or any punctuation
|
|
|
|
|
// (since different keyboards will
|
|
|
|
|
// shift different punctuation types)
|
2003-09-27 09:44:41 +00:00
|
|
|
|
else if ((modifiers&FG_MOD_SHIFT) && (isupper(kc) || ispunct(kc)))
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
return _find_key_bindings(k, modifiers&~FG_MOD_SHIFT);
|
2001-05-29 22:31:04 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Try removing alt modifier for
|
|
|
|
|
// high-bit characters.
|
2001-05-29 22:31:04 +00:00
|
|
|
|
else if ((modifiers&FG_MOD_ALT) && k >= 128 && k < 256)
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
return _find_key_bindings(k, modifiers&~FG_MOD_ALT);
|
2001-05-29 22:31:04 +00:00
|
|
|
|
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Give up and return the empty vector.
|
2001-05-29 22:31:04 +00:00
|
|
|
|
else
|
- added FGBinding::fire(double) - added support for "mod-up" property
- go back to using index as key code (otherwise, we'll get nasty
surprises when users try to override bindings)
- XML config file now nests bindings inside modifiers
- allow user to specify whether key is repeatable
- removed hard-coded bindings for 'b', ',', and '.'
- added code from joystick.cxx, with the following major changes:
- changed from js0, axis0, button0 to js[0], axis[0], button[0], etc.
- removed factor, offset, etc. since they will be args to command in
binding
- allow multiple bindings, as with key mappings
- allow access to keyboard modifier keys for bindings
- include infrastructure for modifiers (only FG_MOD_UP is used so far)
- removed unused 'saturation' property
- temporarily removed capture property and trim code; it will have to
be rewritten to be more generic
- allow modifiers for joystick buttons
2001-06-04 21:06:48 +00:00
|
|
|
|
return b.bindings[modifiers];
|
2001-05-29 22:31:04 +00:00
|
|
|
|
}
|
2001-05-23 22:59:40 +00:00
|
|
|
|
|
2001-06-05 22:11:16 +00:00
|
|
|
|
|
2001-08-10 05:17:40 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGInput::button.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FGInput::button::button ()
|
|
|
|
|
: is_repeatable(false),
|
|
|
|
|
last_state(-1)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGInput::button::~button ()
|
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// FIXME: memory leak
|
2001-08-10 05:17:40 +00:00
|
|
|
|
// for (int i = 0; i < FG_MOD_MAX; i++)
|
|
|
|
|
// for (int j = 0; i < bindings[i].size(); j++)
|
|
|
|
|
// delete bindings[i][j];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGInput::axis.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FGInput::axis::axis ()
|
|
|
|
|
: last_value(9999999),
|
|
|
|
|
tolerance(0.002),
|
|
|
|
|
low_threshold(-0.9),
|
|
|
|
|
high_threshold(0.9)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGInput::axis::~axis ()
|
|
|
|
|
{
|
2001-08-16 16:06:55 +00:00
|
|
|
|
// for (int i = 0; i < FG_MOD_MAX; i++)
|
|
|
|
|
// for (int j = 0; i < bindings[i].size(); j++)
|
|
|
|
|
// delete bindings[i][j];
|
2001-08-10 05:17:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGInput::joystick.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FGInput::joystick::joystick ()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGInput::joystick::~joystick ()
|
|
|
|
|
{
|
2001-08-16 16:06:55 +00:00
|
|
|
|
// delete js;
|
2002-03-23 23:16:13 +00:00
|
|
|
|
delete[] axes;
|
|
|
|
|
delete[] buttons;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2002-03-26 13:45:44 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGInput::mouse_mode
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FGInput::mouse_mode::mouse_mode ()
|
|
|
|
|
: cursor(GLUT_CURSOR_INHERIT),
|
|
|
|
|
constrained(false),
|
2002-03-26 17:14:48 +00:00
|
|
|
|
pass_through(false),
|
2002-03-26 13:45:44 +00:00
|
|
|
|
buttons(0)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGInput::mouse_mode::~mouse_mode ()
|
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// FIXME: memory leak
|
2002-03-26 13:45:44 +00:00
|
|
|
|
// for (int i = 0; i < FG_MOD_MAX; i++) {
|
|
|
|
|
// int j;
|
|
|
|
|
// for (j = 0; i < x_bindings[i].size(); j++)
|
|
|
|
|
// delete bindings[i][j];
|
|
|
|
|
// for (j = 0; j < y_bindings[i].size(); j++)
|
|
|
|
|
// delete bindings[i][j];
|
|
|
|
|
// }
|
|
|
|
|
delete [] buttons;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of FGInput::mouse
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
FGInput::mouse::mouse ()
|
2002-07-18 22:32:12 +00:00
|
|
|
|
: x(-1),
|
2002-03-26 13:45:44 +00:00
|
|
|
|
y(-1),
|
2002-07-18 22:32:12 +00:00
|
|
|
|
nModes(1),
|
|
|
|
|
current_mode(0),
|
2002-03-26 13:45:44 +00:00
|
|
|
|
modes(0)
|
2002-03-23 23:16:13 +00:00
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FGInput::mouse::~mouse ()
|
|
|
|
|
{
|
2002-03-26 13:45:44 +00:00
|
|
|
|
delete [] modes;
|
2001-08-10 05:17:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// Implementation of GLUT callbacks.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
2001-06-05 22:11:16 +00:00
|
|
|
|
/**
|
|
|
|
|
* Construct the modifiers.
|
|
|
|
|
*/
|
|
|
|
|
static inline int get_mods ()
|
|
|
|
|
{
|
|
|
|
|
int glut_modifiers = glutGetModifiers();
|
|
|
|
|
int modifiers = 0;
|
|
|
|
|
|
|
|
|
|
if (glut_modifiers & GLUT_ACTIVE_SHIFT)
|
|
|
|
|
modifiers |= FGInput::FG_MOD_SHIFT;
|
|
|
|
|
if (glut_modifiers & GLUT_ACTIVE_CTRL)
|
|
|
|
|
modifiers |= FGInput::FG_MOD_CTRL;
|
|
|
|
|
if (glut_modifiers & GLUT_ACTIVE_ALT)
|
|
|
|
|
modifiers |= FGInput::FG_MOD_ALT;
|
|
|
|
|
|
|
|
|
|
return modifiers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// GLUT C callbacks.
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
GLUTkey(unsigned char k, int x, int y)
|
2001-06-05 22:11:16 +00:00
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Give PUI a chance to grab it first.
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (!puKeyboard(k, PU_DOWN)) {
|
|
|
|
|
if (default_input != 0)
|
|
|
|
|
default_input->doKey(k, get_mods(), x, y);
|
|
|
|
|
}
|
2001-06-05 22:11:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
|
|
|
|
GLUTkeyup(unsigned char k, int x, int y)
|
2001-06-05 22:11:16 +00:00
|
|
|
|
{
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (default_input != 0)
|
|
|
|
|
default_input->doKey(k, get_mods()|FGInput::FG_MOD_UP, x, y);
|
2001-06-05 22:11:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
|
|
|
|
GLUTspecialkey(int k, int x, int y)
|
2001-06-05 22:11:16 +00:00
|
|
|
|
{
|
2002-11-05 02:28:07 +00:00
|
|
|
|
// Give PUI a chance to grab it first.
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (!puKeyboard(k + PU_KEY_GLUT_SPECIAL_OFFSET, PU_DOWN)) {
|
|
|
|
|
if (default_input != 0)
|
|
|
|
|
default_input->doKey(k + 256, get_mods(), x, y);
|
|
|
|
|
}
|
2001-06-05 22:11:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
|
|
|
|
GLUTspecialkeyup(int k, int x, int y)
|
2001-06-05 22:11:16 +00:00
|
|
|
|
{
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (default_input != 0)
|
|
|
|
|
default_input->doKey(k + 256, get_mods()|FGInput::FG_MOD_UP, x, y);
|
2001-06-05 22:11:16 +00:00
|
|
|
|
}
|
|
|
|
|
|
2002-03-23 23:16:13 +00:00
|
|
|
|
void
|
|
|
|
|
GLUTmouse (int button, int updown, int x, int y)
|
|
|
|
|
{
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (default_input != 0)
|
|
|
|
|
default_input->doMouseClick(button, updown, x, y);
|
2002-03-23 23:16:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
GLUTmotion (int x, int y)
|
|
|
|
|
{
|
2002-10-04 13:20:53 +00:00
|
|
|
|
if (default_input != 0)
|
|
|
|
|
default_input->doMouseMotion(x, y);
|
2002-03-23 23:16:13 +00:00
|
|
|
|
}
|
|
|
|
|
|
2001-05-23 22:59:40 +00:00
|
|
|
|
// end of input.cxx
|