*/
SGBinding ();
+ /**
+ * Convenience constructor.
+ *
+ * @param node The binding will be built from this node.
+ */
+ SGBinding(const std::string& commandName);
/**
* Convenience constructor.
*/
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.
* @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; }
/**
*/
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