19 #include <QCoreApplication>
22 #include <QLibraryInfo>
23 #include <QPluginLoader>
51 class BackendManager::BackendManagerPrivate {
53 QList<MIDIInput*> m_inputsList;
54 QList<MIDIOutput*> m_outputsList;
55 ~BackendManagerPrivate()
62 m_outputsList.clear();
64 void appendDir(
const QString& candidate, QStringList& result)
66 QDir checked(candidate.trimmed());
68 if (checked.exists() && !result.contains(checked.absolutePath())) {
69 result << checked.absolutePath();
79 QVariantMap defaultSettings {
80 { QSTR_DRUMSTICKRT_PUBLICNAMEIN, QStringLiteral(
"MIDI In")},
81 { QSTR_DRUMSTICKRT_PUBLICNAMEOUT, QStringLiteral(
"MIDI Out")}
99 QString appPath = QCoreApplication::applicationDirPath() + QDir::separator();
100 #if defined(Q_OS_WIN)
101 d->appendDir( appPath + QSTR_DRUMSTICK, result );
102 d->appendDir( appPath +
"../lib/" + QSTR_DRUMSTICK, result );
104 #if defined(Q_OS_MAC)
105 d->appendDir( appPath + QStringLiteral(
"../PlugIns/") + QSTR_DRUMSTICK, result );
109 #if defined(LIBSUFFIX)
110 libs << QString(
"../%1/").arg(QT_STRINGIFY(LIBSUFFIX));
112 foreach(
const QString& lib, libs) {
113 d->appendDir( appPath + lib + QSTR_DRUMSTICK, result );
116 d->appendDir( appPath +
".." + QDir::separator() + QSTR_DRUMSTICK, result );
117 QByteArray envdir = qgetenv(QSTR_DRUMSTICKRT.toLatin1());
119 if(!envdir.isEmpty()) {
120 d->appendDir(QString(envdir), result );
122 d->appendDir( QDir::homePath() + QDir::separator() + QSTR_DRUMSTICK, result );
123 d->appendDir( QLibraryInfo::location(QLibraryInfo::PluginsPath) + QDir::separator() + QSTR_DRUMSTICK, result );
124 foreach(
const QString& path, QCoreApplication::libraryPaths()) {
125 d->appendDir( path + QDir::separator() + QSTR_DRUMSTICK, result );
137 settings->beginGroup(QSTR_DRUMSTICKRT_GROUP);
138 const QStringList allKeys = settings->allKeys();
140 for(
const auto &k : allKeys) {
141 tmpMap.insert(k, settings->value(k));
143 settings->endGroup();
159 d->appendDir(map.value(QSTR_DRUMSTICKRT_PATH).toString(), paths);
160 name_in = map.value(QSTR_DRUMSTICKRT_PUBLICNAMEIN).toString();
161 name_out = map.value(QSTR_DRUMSTICKRT_PUBLICNAMEOUT).toString();
162 names << map.value(QSTR_DRUMSTICKRT_EXCLUDED).toStringList();
163 names << (name_in.isEmpty() ? QStringLiteral(
"MIDI In") : name_in);
164 names << (name_out.isEmpty() ? QStringLiteral(
"MIDI Out") : name_out);
172 foreach(
const QString& dir, paths) {
173 QDir pluginsDir(dir);
174 foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
175 if (QLibrary::isLibrary(fileName)) {
176 QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
177 QObject *obj = loader.instance();
178 if (obj !=
nullptr) {
179 MIDIInput *input = qobject_cast<MIDIInput*>(obj);
180 if (input !=
nullptr && !d->m_inputsList.contains(input)) {
181 if (!name_in.isEmpty()) {
185 d->m_inputsList << input;
187 MIDIOutput *output = qobject_cast<MIDIOutput*>(obj);
188 if (output !=
nullptr && !d->m_outputsList.contains(output)) {
189 if (!name_out.isEmpty()) {
193 d->m_outputsList << output;
202 foreach(
QObject* obj, QPluginLoader::staticInstances()) {
203 if (obj !=
nullptr) {
204 MIDIInput *input = qobject_cast<MIDIInput*>(obj);
205 if (input !=
nullptr && !d->m_inputsList.contains(input)) {
206 if (!name_in.isEmpty()) {
210 d->m_inputsList << input;
212 MIDIOutput *output = qobject_cast<MIDIOutput*>(obj);
213 if (output !=
nullptr && !d->m_outputsList.contains(output)) {
214 if (!name_out.isEmpty()) {
218 d->m_outputsList << output;
227 return d->m_inputsList;
232 return d->m_outputsList;
237 foreach (
MIDIInput* i, d->m_inputsList) {
255 const QString BackendManager::QSTR_DRUMSTICK = QStringLiteral(
"drumstick2");
256 const QString BackendManager::QSTR_DRUMSTICK_VERSION = QStringLiteral(QT_STRINGIFY(VERSION));
257 const QString BackendManager::QSTR_DRUMSTICKRT = QStringLiteral(
"DRUMSTICKRT");
258 const QString BackendManager::QSTR_DRUMSTICKRT_GROUP = QStringLiteral(
"DrumstickRT");
259 const QString BackendManager::QSTR_DRUMSTICKRT_PUBLICNAMEIN = QStringLiteral(
"PublicNameIN");
260 const QString BackendManager::QSTR_DRUMSTICKRT_PUBLICNAMEOUT = QStringLiteral(
"PublicNameOUT");
261 const QString BackendManager::QSTR_DRUMSTICKRT_EXCLUDED = QStringLiteral(
"ExcludedNames");
262 const QString BackendManager::QSTR_DRUMSTICKRT_PATH = QStringLiteral(
"BackendsPath");
BackendManager class declaration.
The QObject class is the base class of all Qt objects.
The QSettings class provides persistent platform-independent application settings.
QList< MIDIInput * > availableInputs()
availableInputs
virtual ~BackendManager()
~BackendManager destructor
BackendManager()
BackendManager constructor.
MIDIOutput * outputBackendByName(const QString name)
outputBackendByName
void refresh(QSettings *settings=nullptr)
refresh the list of backends
QList< MIDIOutput * > availableOutputs()
availableOutputs
QStringList defaultPaths()
defaultPaths
MIDIInput * inputBackendByName(const QString name)
inputBackendByName
virtual void setExcludedConnections(QStringList conns)=0
setExcludedConnections
virtual QString backendName()=0
backendName
virtual void setPublicName(QString name)=0
setPublicName