#ifndef QMPPLUGIN_H #define QMPPLUGIN_H #define QMP_MAIN #include #include #define QMP_MAIN #include "../include/qmpcorepublic.hpp" struct qmpPlugin { std::string name, version, path; qmpPluginIntf *pinterface; bool enabled, initialized; qmpPlugin(std::string _n, std::string _v, std::string _p, qmpPluginIntf *_i) { name = _n; version = _v; path = _p; pinterface = _i; enabled = initialized = false; } }; class qmpMainWindow; class qmpSettings; class qmpPluginAPIImpl: public qmpPluginAPI { public: qmpPluginAPIImpl(); ~qmpPluginAPIImpl(); uint32_t getDivision(); uint32_t getRawTempo(); double getRealTempo(); uint32_t getTimeSig(); int getKeySig(); uint32_t getNoteCount(); uint32_t getMaxTick(); uint32_t getCurrentPolyphone(); uint32_t getMaxPolyphone(); uint32_t getCurrentTimeStamp(); uint32_t getCurrentPlaybackPercentage(); PlaybackStatus getPlaybackStatus(); int getChannelCC(int ch, int cc); int getChannelPreset(int ch); void playerSeek(uint32_t percentage); double getPitchBend(int ch); void getPitchBendRaw(int ch, uint32_t *pb, uint32_t *pbr); bool getChannelMask(int ch); std::string getTitle(); std::wstring getWTitle(); std::string getChannelPresetString(int ch); bool isDarkTheme(); void *getMainWindow(); void discardCurrentEvent(); void commitEventChange(SEvent d); void callEventReaderCB(SEvent d); void setFuncState(std::string name, bool state); void setFuncEnabled(std::string name, bool enable); void registerFunctionality(qmpFuncBaseIntf *i, std::string name, std::string desc, const char *icon, int iconlen, bool checkable); void unregisterFunctionality(std::string name); int registerUIHook(std::string e, ICallBack *cb, void *userdat); int registerUIHook(std::string e, callback_t cb, void *userdat); void unregisterUIHook(std::string e, int hook); void registerMidiOutDevice(qmpMidiOutDevice *dev, std::string name); void unregisterMidiOutDevice(std::string name); int registerEventReaderIntf(ICallBack *cb, void *userdata); void unregisterEventReaderIntf(int intfhandle); int registerEventHandlerIntf(ICallBack *cb, void *userdata); void unregisterEventHandlerIntf(int intfhandle); int registerFileReadFinishedHandlerIntf(ICallBack *cb, void *userdata); void unregisterFileReadFinishedHandlerIntf(int intfhandle); int registerEventHandler(callback_t cb, void *userdata, bool post = false); void unregisterEventHandler(int id); int registerEventReadHandler(callback_t cb, void *userdata); void unregisterEventReadHandler(int id); int registerFileReadFinishHook(callback_t cb, void *userdata); void unregisterFileReadFinishHook(int id); void registerFileReader(qmpFileReader *reader, std::string name); void unregisterFileReader(std::string name); void registerOptionInt(std::string tab, std::string desc, std::string key, int min, int max, int defaultval); int getOptionInt(std::string key); void setOptionInt(std::string key, int val); void registerOptionUint(std::string tab, std::string desc, std::string key, unsigned min, unsigned max, unsigned defaultval); unsigned getOptionUint(std::string key); void setOptionUint(std::string key, unsigned val); void registerOptionBool(std::string tab, std::string desc, std::string key, bool defaultval); bool getOptionBool(std::string key); void setOptionBool(std::string key, bool val); void registerOptionDouble(std::string tab, std::string desc, std::string key, double min, double max, double defaultval); double getOptionDouble(std::string key); void setOptionDouble(std::string key, double val); void registerOptionString(std::string tab, std::string desc, std::string key, std::string defaultval, bool ispath = false); std::string getOptionString(std::string key); void setOptionString(std::string key, std::string val); void registerOptionEnumInt(std::string tab, std::string desc, std::string key, std::vector options, int defaultval); int getOptionEnumInt(std::string key); void setOptionEnumInt(std::string key, int val); }; class qmpPluginManager { private: std::vector plugins; static qmpPluginAPIImpl *pluginAPI; static qmpMainWindow *mainwindow; static qmpSettings *settings; public: qmpPluginManager(); ~qmpPluginManager(); std::vector *getPlugins(); void scanPlugins(const std::vector &pp); void initPlugins(); void deinitPlugins(); friend class qmpPluginAPIImpl; friend class qmpMainWindow; }; #endif // QMPPLUGIN_H