]> 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 bf52078da96df8625bbdad5b3bd9389c2c3e1974..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
@@ -35,15 +37,22 @@ 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:
-    void innerSetupPickGroup(osg::Group* commonGroup, osg::Group& parent);
-    
+
+      
+  virtual osg::Group* createMainGroup(osg::Group* pr);
+  
+  virtual void setupCallbacks(SGSceneUserData* ud, osg::Group* parent);
 private:
   class PickCallback;
   class VncCallback;
+  
+  string_list _proxyNames;
 };
 
 
@@ -52,7 +61,6 @@ class SGKnobAnimation : public SGPickAnimation
 public:
     SGKnobAnimation(const SGPropertyNode* configNode,
                     SGPropertyNode* modelRoot);
-    virtual osg::Group* createAnimationGroup(osg::Group& parent);
 
     /**
      * by default mouse wheel up corresponds to increment (CW)
@@ -60,8 +68,29 @@ public:
      * 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 KnobPickCallback;
     class UpdateCallback;
     
     SGVec3d _axis;
@@ -69,5 +98,24 @@ private:
     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