]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/model/SGPickAnimation.hxx
Work around apparent OSG 3.2.0 normal binding bug.
[simgear.git] / simgear / scene / model / SGPickAnimation.hxx
index c176180900e1852317410aa651e087d603aa2526..9770d2d96cf2b14e7a1d36e0bee7360e54b6cccf 100644 (file)
 #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
@@ -33,10 +37,84 @@ class SGPickAnimation : public SGAnimation {
 public:
   SGPickAnimation(const SGPropertyNode* configNode,
                   SGPropertyNode* modelRoot);
-  virtual osg::Group* createAnimationGroup(osg::Group& parent);
+    
+  // 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(const SGPropertyNode* configNode,
+                    SGPropertyNode* modelRoot);
+
+    /**
+     * 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(const SGPropertyNode* configNode,
+                    SGPropertyNode* modelRoot);
+    
+    
+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;
 };
 
 #endif // of SG_SCENE_PICK_ANIMATION_HXX