22 #include <QPluginLoader> 23 #include <QCoreApplication> 24 #include <QLibraryInfo> 27 #if defined(LINUX_BACKEND) 28 Q_IMPORT_PLUGIN(ALSAMIDIInput)
29 Q_IMPORT_PLUGIN(ALSAMIDIOutput)
30 Q_IMPORT_PLUGIN(SynthController)
33 #if defined(MAC_BACKEND) 34 Q_IMPORT_PLUGIN(MacMIDIInput)
35 Q_IMPORT_PLUGIN(MacMIDIOutput)
36 Q_IMPORT_PLUGIN(MacSynthOutput)
39 #if defined(WIN_BACKEND) 40 Q_IMPORT_PLUGIN(WinMIDIInput)
41 Q_IMPORT_PLUGIN(WinMIDIOutput)
44 #if defined(NET_BACKEND) 45 Q_IMPORT_PLUGIN(NetMIDIInput)
46 Q_IMPORT_PLUGIN(NetMIDIOutput)
49 #if defined(DUMMY_BACKEND) 50 Q_IMPORT_PLUGIN(DummyInput)
51 Q_IMPORT_PLUGIN(DummyOutput)
54 #if defined(SYNTH_BACKEND) 55 Q_IMPORT_PLUGIN(SynthOutput)
58 #if defined(OSS_BACKEND) 59 Q_IMPORT_PLUGIN(OSSInput)
60 Q_IMPORT_PLUGIN(OSSOutput)
88 class BackendManager::BackendManagerPrivate {
90 QList<MIDIInput*> m_inputsList;
91 QList<MIDIOutput*> m_outputsList;
92 ~BackendManagerPrivate()
99 m_outputsList.clear();
101 void appendDir(
const QString& candidate, QStringList& result)
104 QDir checked(candidate);
105 if (checked.exists() && !result.contains(checked.absolutePath())) {
106 result << checked.absolutePath();
134 QString appPath = QCoreApplication::applicationDirPath() + QDir::separator();
135 #if defined(Q_OS_WIN) 136 d->appendDir( appPath + QSTR_DRUMSTICK, result );
137 d->appendDir( appPath +
"../lib/" + QSTR_DRUMSTICK, result );
139 #if defined(Q_OS_MAC) 140 d->appendDir( appPath + QStringLiteral(
"../PlugIns/") + QSTR_DRUMSTICK, result );
141 #endif // Linux, Unix... 143 libs <<
"../lib/" <<
"../lib32/" <<
"../lib64/";
144 foreach(
const QString& lib, libs) {
145 d->appendDir( appPath + lib + QSTR_DRUMSTICK, result );
148 d->appendDir( appPath +
".." + QDir::separator() + QSTR_DRUMSTICK, result );
149 QByteArray envdir = qgetenv(QSTR_DRUMSTICKRT.toLatin1());
150 if(!envdir.isEmpty()) {
151 d->appendDir(QString(envdir), result );
153 d->appendDir( QDir::homePath() + QDir::separator() + QSTR_DRUMSTICK, result );
154 d->appendDir( QLibraryInfo::location(QLibraryInfo::PluginsPath) + QDir::separator() + QSTR_DRUMSTICK, result );
155 foreach(
const QString& path, QCoreApplication::libraryPaths()) {
156 d->appendDir( path + QDir::separator() + QSTR_DRUMSTICK, result );
174 settings->beginGroup(QSTR_DRUMSTICKRT_GROUP);
175 d->appendDir(settings->value(QSTR_DRUMSTICKRT_PATH).toString(), paths);
176 name_in = settings->value(QSTR_DRUMSTICKRT_PUBLICNAMEIN).toString();
177 name_out = settings->value(QSTR_DRUMSTICKRT_PUBLICNAMEOUT).toString();
178 names << settings->value(QSTR_DRUMSTICKRT_EXCLUDED).toStringList();
179 names << (name_in.isEmpty() ? QLatin1String(
"MIDI In") : name_in);
180 names << (name_out.isEmpty() ? QLatin1String(
"MIDI Out") : name_out);
181 settings->endGroup();
187 foreach(
const QString& dir, paths) {
188 QDir pluginsDir(dir);
189 foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
190 if (QLibrary::isLibrary(fileName)) {
191 QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
192 QObject *obj = loader.instance();
195 if (input != 0 && !d->m_inputsList.contains(input)) {
196 if (!name_in.isEmpty()) {
200 d->m_inputsList << input;
203 if (output != 0 && !d->m_outputsList.contains(output)) {
204 if (!name_out.isEmpty()) {
208 d->m_outputsList << output;
217 foreach(
QObject* obj, QPluginLoader::staticInstances()) {
220 if (input != 0 && !d->m_inputsList.contains(input)) {
223 d->m_inputsList << input;
226 if (output != 0 && !d->m_outputsList.contains(output)) {
229 d->m_outputsList << output;
238 return d->m_inputsList;
243 return d->m_outputsList;
248 foreach (
MIDIInput* i, d->m_inputsList) {
virtual void setPublicName(QString name)=0
setPublicName
QList< MIDIOutput * > availableOutputs()
availableOutputs
QStringList defaultPaths()
defaultPaths
QList< MIDIInput * > availableInputs()
availableInputs
The QObject class is the base class of all Qt objects.
Realtime MIDI input/output multiplatform classes.
virtual void setExcludedConnections(QStringList conns)=0
setExcludedConnections
virtual ~BackendManager()
~BackendManager destructor
void refresh(QSettings *settings=0)
refresh the list of backends
virtual QString backendName()=0
backendName
BackendManager()
BackendManager constructor.
MIDIOutput * outputBackendByName(const QString name)
outputBackendByName
MIDIInput * inputBackendByName(const QString name)
inputBackendByName