Designed for 2d objects, such as a canvas placements, this permits the receipt of touch (mouse click) events to enable the simulation of avionics with a touchscreen.
The coordinates are passed in as arguments to the action; these can be accessed with Nasal via the cmdarg() method.
example:
<animation>
<type>touch</type>
<visible>true</visible>
<object-name>VSDImage</object-name>
<action>
<touch>0</touch>
<repeatable>false</repeatable>
<binding>
<command>nasal</command>
<script>print("touch input
(",cmdarg().getNode("x").getValue(),",",cmdarg().getNode("y").getValue())</script>
</binding>
</action>
</animation>
133 lines
3.4 KiB
C++
133 lines
3.4 KiB
C++
/* -*-c++-*-
|
|
*
|
|
* Copyright (C) 2013 James Turner
|
|
*
|
|
* 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., 51 Franklin Street, Fifth Floor, Boston,
|
|
* MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#ifndef SG_SCENE_PICK_ANIMATION_HXX
|
|
#define SG_SCENE_PICK_ANIMATION_HXX
|
|
|
|
#include <simgear/scene/model/animation.hxx>
|
|
#include <simgear/misc/strutils.hxx>
|
|
|
|
// forward decls
|
|
class SGPickCallback;
|
|
class SGSceneUserData;
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Pick animation
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
class SGPickAnimation : public SGAnimation {
|
|
public:
|
|
SGPickAnimation(simgear::SGTransientModelData &modelData);
|
|
|
|
// override so we can treat object-name specially
|
|
virtual void apply(osg::Group& group);
|
|
|
|
void apply(osg::Node* node);
|
|
protected:
|
|
|
|
|
|
virtual osg::Group* createMainGroup(osg::Group* pr);
|
|
|
|
virtual void setupCallbacks(SGSceneUserData* ud, osg::Group* parent);
|
|
private:
|
|
class PickCallback;
|
|
class VncCallback;
|
|
|
|
string_list _proxyNames;
|
|
};
|
|
|
|
|
|
class SGKnobAnimation : public SGPickAnimation
|
|
{
|
|
public:
|
|
SGKnobAnimation(simgear::SGTransientModelData &modelData);
|
|
|
|
/**
|
|
* by default mouse wheel up corresponds to increment (CW)
|
|
* and mouse-wheel down corresponds to decrement (CCW).
|
|
* Since no one can agree on that, make it a global toggle.
|
|
*/
|
|
static void setAlternateMouseWheelDirection(bool aToggle);
|
|
|
|
/**
|
|
* by default mouse is dragged left-right to change knobs.
|
|
* set this to true to default to up-down. Individual knobs
|
|
* can overrider this,
|
|
*/
|
|
static void setAlternateDragAxis(bool aToggle);
|
|
|
|
|
|
/**
|
|
* Scale the drag sensitivity. This provides a global hook for
|
|
* the user to scale the senstivity of dragging according to
|
|
* personal preference.
|
|
*/
|
|
static void setDragSensitivity(double aFactor);
|
|
|
|
|
|
protected:
|
|
virtual osg::Group* createMainGroup(osg::Group* pr);
|
|
|
|
virtual void setupCallbacks(SGSceneUserData* ud, osg::Group* parent);
|
|
|
|
private:
|
|
class UpdateCallback;
|
|
|
|
SGVec3d _axis;
|
|
SGVec3d _center;
|
|
SGSharedPtr<SGExpressiond const> _animationValue;
|
|
};
|
|
|
|
class SGSliderAnimation : public SGPickAnimation
|
|
{
|
|
public:
|
|
SGSliderAnimation(simgear::SGTransientModelData &modelData);
|
|
|
|
|
|
protected:
|
|
virtual osg::Group* createMainGroup(osg::Group* pr);
|
|
|
|
virtual void setupCallbacks(SGSceneUserData* ud, osg::Group* parent);
|
|
|
|
private:
|
|
class UpdateCallback;
|
|
|
|
SGVec3d _axis;
|
|
SGSharedPtr<SGExpressiond const> _animationValue;
|
|
};
|
|
|
|
class SGTouchAnimation : public SGPickAnimation
|
|
{
|
|
public:
|
|
SGTouchAnimation(simgear::SGTransientModelData &modelData);
|
|
|
|
|
|
protected:
|
|
virtual osg::Group* createMainGroup(osg::Group* pr);
|
|
|
|
virtual void setupCallbacks(SGSceneUserData* ud, osg::Group* parent);
|
|
|
|
private:
|
|
};
|
|
|
|
#endif // of SG_SCENE_PICK_ANIMATION_HXX
|
|
|