File indexing completed on 2024-05-12 04:45:34

0001 /*
0002     SnoreNotify is a Notification Framework based on Qt
0003     Copyright (C) 2015  Hannah von Reth <vonreth@kde.org>
0004 
0005     SnoreNotify is free software: you can redistribute it and/or modify
0006     it under the terms of the GNU Lesser General Public License as published by
0007     the Free Software Foundation, either version 3 of the License, or
0008     (at your option) any later version.
0009 
0010     SnoreNotify is distributed in the hope that it will be useful,
0011     but WITHOUT ANY WARRANTY; without even the implied warranty of
0012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0013     GNU Lesser General Public License for more details.
0014 
0015     You should have received a copy of the GNU Lesser General Public License
0016     along with SnoreNotify.  If not, see <http://www.gnu.org/licenses/>.
0017 */
0018 #include "settings.h"
0019 #include "libsnore/snore_p.h"
0020 #include "libsnore/plugins/settingsplugin.h"
0021 #include "libsnore/settings/pluginsettingswidget.h"
0022 
0023 #include <QList>
0024 
0025 using namespace Snore;
0026 
0027 QList<PluginSettingsWidget *> Settings::settingWidgets(SnorePlugin::PluginTypes type)
0028 {
0029     SnoreCorePrivate *core(SnoreCorePrivate::instance());
0030     QList<PluginSettingsWidget *> list;
0031     foreach(const QString & name, core->m_pluginNames[type]) {
0032         //TODO: mem leak?
0033 
0034         SnorePlugin *plugin = core->m_plugins[qMakePair(type, name)];
0035         SettingsPlugin *settingsPlugin = qobject_cast< Snore::SettingsPlugin * >(core->m_plugins[qMakePair(Snore::SnorePlugin::Settings, name + SnorePlugin::typeToString(type))]);
0036         if (settingsPlugin) {
0037             PluginSettingsWidget *widget = settingsPlugin->settingsWidget(plugin);
0038             if (widget) {
0039                 list.append(widget);
0040             }
0041         } else {
0042             if (!qobject_cast< Snore::SnoreBackend * >(plugin)) {
0043                 list.append(new PluginSettingsWidget(plugin));
0044             }
0045         }
0046     }
0047     qSort(list.begin(), list.end(), [](PluginSettingsWidget * a, PluginSettingsWidget * b) {
0048         return a->name() < b->name();
0049     });
0050     return list;
0051 }