aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2017-02-08 00:02:14 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2017-02-08 00:02:14 +0800
commit1afedc4cc39c1dcbe49f8c99843a1732bf22fa28 (patch)
tree5ab62319767ef25c9c6cc7eaa248a813b1d665c0 /include
parenta00e60541816a99a348add1a84da662bc1a4122d (diff)
downloadQMidiPlayer-1afedc4cc39c1dcbe49f8c99843a1732bf22fa28.tar.xz
First steps for the file reader API.
API additions and changes. Fixed wrong button shown when started from file.
Diffstat (limited to 'include')
-rw-r--r--include/qmpcorepublic.hpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/include/qmpcorepublic.hpp b/include/qmpcorepublic.hpp
index 850fddd..6e56310 100644
--- a/include/qmpcorepublic.hpp
+++ b/include/qmpcorepublic.hpp
@@ -1,5 +1,6 @@
#ifndef QMPCOREPUBLIC_H
#define QMPCOREPUBLIC_H
+#include <cstring>
#include <cstdint>
#include <vector>
#include <string>
@@ -8,6 +9,20 @@
#else
#define EXPORTSYM __attribute__ ((visibility ("default")))
#endif
+//MIDI Event structure
+struct SEvent
+{
+ uint32_t iid,time,p1,p2;
+ uint8_t type;
+ std::string str;
+ SEvent(){time=p1=p2=0;type=0;str="";}
+ SEvent(uint32_t _iid,uint32_t _t,char _tp,uint32_t _p1,uint32_t _p2,const char* s=NULL)
+ {
+ iid=_iid;time=_t;type=_tp;
+ p1=_p1;p2=_p2;
+ if(s)str=std::string(s);else str="";
+ }
+};
//This struct is used by event reader callbacks and event handler callbacks
//as caller data struct
class SEventCallBackData
@@ -16,6 +31,14 @@ public:
uint32_t time,type,p1,p2;
SEventCallBackData(uint32_t _t,uint32_t _p1,uint32_t _p2,uint32_t _tm){type=_t;p1=_p1;p2=_p2;time=_tm;}
};
+//MIDI File class
+class CMidiFile{
+ public:
+ bool valid;
+ char *title,*copyright;
+ std::vector<SEvent> eventList;
+ uint32_t std,divs;
+};
//Generic callback function that can be used for hooking the core.
//"userdata" is set when you register the callback function.
class IMidiCallBack
@@ -25,6 +48,16 @@ class IMidiCallBack
virtual void callBack(void* callerdata,void* userdata)=0;
virtual ~IMidiCallBack(){}
};
+//MIDI file reader interface. Use this to implement your file importer.
+class IMidiFileReader
+{
+ public:
+ IMidiFileReader(){}
+ virtual ~IMidiFileReader(){}
+ virtual CMidiFile* readFile(const char* fn)=0;
+ virtual void discardCurrentEvent()=0;
+ virtual void commitEventChange(SEventCallBackData d)=0;
+};
//Main plugin interface.
class qmpPluginIntf
{
@@ -82,7 +115,7 @@ class qmpPluginAPI
//WARNING!!: This function should be called from event reader callbacks only and
//it is somehow dangerous -- other plugins might be unaware of the removal of the
//event. The design might be modified afterward.
- virtual void discardLastEvent();
+ virtual void discardCurrentEvent();
//WARNING!!: This function should be called from event reader callbacks only and
//it is somehow dangerous -- other plugins might be unaware of the event change.
//The design might be modified afterward.
@@ -96,6 +129,8 @@ class qmpPluginAPI
virtual void unregisterEventHandlerIntf(int intfhandle);
virtual int registerFileReadFinishedHandlerIntf(IMidiCallBack* cb,void* userdata);
virtual void unregisterFileReadFinishedHandlerIntf(int intfhandle);
+ virtual void registerFileReader(IMidiFileReader* reader,std::string name);
+ virtual void unregisterFileReader(std::string name);
//if desc=="", the option won't be visible in the settings form.
//it will only show up in the configuration file.