]> git.mxchange.org Git - simgear.git/blobdiff - simgear/structure/SGBinding.hxx
Fix #1783: repeated error message on console
[simgear.git] / simgear / structure / SGBinding.hxx
index 25e1601efc4e970bace30afa993b9ebc0fdcd289..ef573a014b01e36b9732ed72b6a0900a29bdd558 100644 (file)
@@ -38,13 +38,21 @@ public:
    */
   SGBinding ();
 
+    /**
+     * Convenience constructor.
+     *
+     * @param commandName TODO
+     */
+    SGBinding(const std::string& commandName);
 
   /**
    * Convenience constructor.
    *
    * @param node The binding will be built from this node.
+   * @param root Property root used while building binding.
    */
-  SGBinding (const SGPropertyNode * node, SGPropertyNode* root);
+  SGBinding( const SGPropertyNode *node,
+             SGPropertyNode *root );
 
 
   /**
@@ -52,6 +60,14 @@ public:
    */
   virtual ~SGBinding ();
 
+  
+  /**
+   * clear internal state of the binding back to empty. This is useful
+   * if you don't want the 'remove on delete' behaviour of the 
+   * destructor.
+   */
+  void clear();
+
 
   /**
    * Get the command name.
@@ -67,7 +83,7 @@ public:
    * @return The command associated with this binding, or 0 if none
    * is present.
    */
-  SGCommandMgr::command_t getCommand () const { return _command; }
+  SGCommandMgr::Command* getCommand () const { return _command; }
 
 
   /**
@@ -83,6 +99,8 @@ public:
    * Read a binding from a property node.
    *
    * @param node The property node containing the binding.
+   * @param root The property root node used while building the binding from
+   *             \a node.
    */
   void read (const SGPropertyNode * node, SGPropertyNode* root);
 
@@ -108,18 +126,49 @@ public:
    */
   void fire (double setting) const;
 
-
+  /**
+   * Fire a binding with a number of additional parameters
+   * 
+   * The children of params will be merged with the fixed arguments.
+   */
+  void fire (SGPropertyNode* params) const;
+  
 private:
+  void innerFire() const;
                                 // just to be safe.
   SGBinding (const SGBinding &binding);
 
   std::string _command_name;
-  mutable SGCommandMgr::command_t _command;
+  mutable SGCommandMgr::Command* _command;
   mutable SGPropertyNode_ptr _arg;
   mutable SGPropertyNode_ptr _setting;
 };
 
-typedef std::vector<SGSharedPtr<SGBinding> > SGBindingList;
+typedef SGSharedPtr<SGBinding> SGBinding_ptr;
+
+typedef std::vector<SGBinding_ptr > SGBindingList;
 typedef std::map<unsigned,SGBindingList> SGBindingMap;
 
+/**
+ * fire every binding in a list, in sequence
+ */
+void fireBindingList(const SGBindingList& aBindings, SGPropertyNode* params = NULL);
+
+/**
+ * fire every binding in a list with a setting value
+ */
+void fireBindingListWithOffset(const SGBindingList& aBindings, double offset, double max);
+
+/**
+ * read multiple bindings from property-list format
+ */
+SGBindingList readBindingList(const simgear::PropertyList& aNodes, SGPropertyNode* aRoot);
+
+/**
+ * call clear() on every binding in a list
+ */
+void clearBindingList(const SGBindingList& aBindings);
+
 #endif