22 #include <QPluginLoader>
23 #include <QCoreApplication>
24 #include <QLibraryInfo>
27 #if defined(ALSA_BACKEND)
28 Q_IMPORT_PLUGIN(ALSAMIDIInput)
29 Q_IMPORT_PLUGIN(ALSAMIDIOutput)
32 #if defined(MAC_BACKEND)
33 Q_IMPORT_PLUGIN(MacMIDIInput)
34 Q_IMPORT_PLUGIN(MacMIDIOutput)
37 #if defined(WIN_BACKEND)
38 Q_IMPORT_PLUGIN(WinMIDIInput)
39 Q_IMPORT_PLUGIN(WinMIDIOutput)
42 #if defined(NET_BACKEND)
43 Q_IMPORT_PLUGIN(NetMIDIInput)
44 Q_IMPORT_PLUGIN(NetMIDIOutput)
47 #if defined(DUMMY_BACKEND)
48 Q_IMPORT_PLUGIN(DummyInput)
49 Q_IMPORT_PLUGIN(DummyOutput)
52 #if defined(SYNTH_BACKEND)
53 Q_IMPORT_PLUGIN(SynthOutput)
56 #if defined(OSS_BACKEND)
57 Q_IMPORT_PLUGIN(OSSInput)
58 Q_IMPORT_PLUGIN(OSSOutput)
87 class BackendManager::BackendManagerPrivate {
89 QList<MIDIInput*> m_inputsList;
90 QList<MIDIOutput*> m_outputsList;
91 ~BackendManagerPrivate()
98 m_outputsList.clear();
100 void appendDir(
const QString& candidate, QStringList& result)
103 QDir checked(candidate);
104 if (checked.exists() && !result.contains(checked.absolutePath())) {
105 result << checked.absolutePath();
133 QString appPath = QCoreApplication::applicationDirPath() + QDir::separator();
134 #if defined(Q_OS_WIN)
135 d->appendDir( appPath + QSTR_DRUMSTICK, result );
136 #elif defined(Q_OS_MAC)
137 d->appendDir( appPath + QStringLiteral(
"../PlugIns/") + QSTR_DRUMSTICK, result );
138 #else // Linux, Unix...
140 libs <<
"../lib/" <<
"../lib32/" <<
"../lib64/";
141 foreach(
const QString& lib, libs) {
142 d->appendDir( appPath + lib + QSTR_DRUMSTICK, result );
145 d->appendDir( appPath +
".." + QDir::separator() + QSTR_DRUMSTICK, result );
146 QByteArray envdir = qgetenv(QSTR_DRUMSTICKRT.toLatin1());
147 if(!envdir.isEmpty()) {
148 d->appendDir(QString(envdir), result );
150 d->appendDir( QDir::homePath() + QDir::separator() + QSTR_DRUMSTICK, result );
151 d->appendDir( QLibraryInfo::location(QLibraryInfo::PluginsPath) + QDir::separator() + QSTR_DRUMSTICK, result );
152 foreach(
const QString& path, QCoreApplication::libraryPaths()) {
153 d->appendDir( path + QDir::separator() + QSTR_DRUMSTICK, result );
171 settings->beginGroup(QSTR_DRUMSTICKRT_GROUP);
172 d->appendDir(settings->value(QSTR_DRUMSTICKRT_PATH).toString(), paths);
173 name_in = settings->value(QSTR_DRUMSTICKRT_PUBLICNAMEIN).toString();
174 name_out = settings->value(QSTR_DRUMSTICKRT_PUBLICNAMEOUT).toString();
175 names << settings->value(QSTR_DRUMSTICKRT_EXCLUDED).toStringList();
178 settings->endGroup();
184 foreach(
const QString& dir, paths) {
185 QDir pluginsDir(dir);
186 foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
187 if (QLibrary::isLibrary(fileName)) {
188 QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
189 QObject *obj = loader.instance();
192 if (input != 0 && !d->m_inputsList.contains(input)) {
195 d->m_inputsList << input;
198 if (output != 0 && !d->m_outputsList.contains(output)) {
201 d->m_outputsList << output;
210 foreach(
QObject* obj, QPluginLoader::staticInstances()) {
213 if (input != 0 && !d->m_inputsList.contains(input)) {
216 d->m_inputsList << input;
219 if (output != 0 && !d->m_outputsList.contains(output)) {
222 d->m_outputsList << output;
231 return d->m_inputsList;
236 return d->m_outputsList;
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
BackendManager()
BackendManager constructor.