#ifndef __lib_driver_action_h #define __lib_driver_action_h #include /* avoid warnigs :) */ #include #undef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 200112L #include #include #include class eWidget; SWIG_IGNORE(eActionMap); class eActionMap: public iObject { DECLARE_REF(eActionMap); #ifdef SWIG eActionMap(); ~eActionMap(); #endif public: #ifndef SWIG eActionMap(); ~eActionMap(); void bindAction(const std::string &context, int priority, int id, eWidget *widget); void unbindAction(eWidget *widget, int id); #endif void bindAction(const std::string &context, int priority, SWIG_PYOBJECT(ePyObject) function); void unbindAction(const std::string &context, SWIG_PYOBJECT(ePyObject) function); void bindKey(const std::string &domain, const std::string &device, int key, int flags, const std::string &context, const std::string &action); void unbindKeyDomain(const std::string &domain); void keyPressed(const std::string &device, int key, int flags); #ifndef SWIG static RESULT getInstance(ePtr &); private: static eActionMap *instance; struct eActionBinding { eActionBinding() :m_prev_seen_make_key(-1) {} // eActionContext *m_context; std::string m_context; // FIXME std::string m_domain; ePyObject m_fnc; eWidget *m_widget; int m_id; int m_prev_seen_make_key; }; std::multimap m_bindings; friend struct compare_string_keybind_native; struct eNativeKeyBinding { std::string m_device; std::string m_domain; int m_key; int m_flags; // eActionContext *m_context; int m_action; }; std::multimap m_native_keys; friend struct compare_string_keybind_python; struct ePythonKeyBinding { std::string m_device; std::string m_domain; int m_key; int m_flags; std::string m_action; }; std::multimap m_python_keys; #endif }; SWIG_TEMPLATE_TYPEDEF(ePtr, eActionMap); SWIG_EXTEND(ePtr, static ePtr getInstance() { extern ePtr NewActionMapPtr(void); return NewActionMapPtr(); } ); #endif