File indexing completed on 2024-12-01 06:46:12
0001 /* 0002 This file is part of the KDE libraries 0003 SPDX-FileCopyrightText: 2005 Olivier Goffart <ogoffart at kde.org> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "knotifyconfigwidget.h" 0009 #include "knotifyconfigactionswidget.h" 0010 #include "knotifyconfigelement.h" 0011 #include "knotifyeventlist.h" 0012 0013 #include <QDBusConnectionInterface> 0014 #include <QDialog> 0015 #include <QDialogButtonBox> 0016 #include <QPushButton> 0017 #include <QVBoxLayout> 0018 0019 #include <KLocalizedString> 0020 0021 class KNotifyConfigWidgetPrivate 0022 { 0023 public: 0024 KNotifyEventList *eventList; 0025 KNotifyConfigActionsWidget *actionsconfig; 0026 KNotifyConfigElement *currentElement; 0027 QString application; 0028 }; 0029 0030 KNotifyConfigWidget::KNotifyConfigWidget(QWidget *parent) 0031 : QWidget(parent) 0032 , d(new KNotifyConfigWidgetPrivate) 0033 { 0034 d->currentElement = nullptr; 0035 d->eventList = new KNotifyEventList(this); 0036 d->eventList->setFocus(); 0037 d->actionsconfig = new KNotifyConfigActionsWidget(this); 0038 d->actionsconfig->setEnabled(false); 0039 connect(d->eventList, SIGNAL(eventSelected(KNotifyConfigElement *)), this, SLOT(slotEventSelected(KNotifyConfigElement *))); 0040 connect(d->actionsconfig, SIGNAL(changed()), this, SLOT(slotActionChanged())); 0041 0042 QVBoxLayout *layout = new QVBoxLayout(this); 0043 layout->setContentsMargins(0, 0, 0, 0); 0044 layout->addWidget(d->eventList, 1); 0045 layout->addWidget(d->actionsconfig); 0046 } 0047 0048 KNotifyConfigWidget::~KNotifyConfigWidget() = default; 0049 0050 void KNotifyConfigWidget::setApplication(const QString &app) 0051 { 0052 d->currentElement = nullptr; 0053 d->application = app.isEmpty() ? QCoreApplication::instance()->applicationName() : app; 0054 d->eventList->fill(d->application); 0055 } 0056 0057 void KNotifyConfigWidget::selectEvent(const QString &eventId) 0058 { 0059 d->eventList->selectEvent(eventId); 0060 } 0061 0062 void KNotifyConfigWidget::slotEventSelected(KNotifyConfigElement *e) 0063 { 0064 if (d->currentElement) { 0065 d->actionsconfig->save(d->currentElement); 0066 } 0067 d->currentElement = e; 0068 if (e) { 0069 d->actionsconfig->setConfigElement(e); 0070 d->actionsconfig->setEnabled(true); 0071 } else { 0072 d->actionsconfig->setEnabled(false); 0073 } 0074 } 0075 0076 void KNotifyConfigWidget::save() 0077 { 0078 if (d->currentElement) { 0079 d->actionsconfig->save(d->currentElement); 0080 } 0081 0082 d->eventList->save(); 0083 Q_EMIT changed(false); 0084 0085 // ask KNotification objects to reload their config 0086 QDBusMessage message = 0087 QDBusMessage::createSignal(QStringLiteral("/Config"), QStringLiteral("org.kde.knotification"), QStringLiteral("reparseConfiguration")); 0088 message.setArguments(QVariantList() << d->application); 0089 QDBusConnection::sessionBus().send(message); 0090 } 0091 0092 void KNotifyConfigWidget::revertToDefaults() 0093 { 0094 d->eventList->fill(d->application, true); 0095 Q_EMIT changed(true); 0096 } 0097 0098 void KNotifyConfigWidget::disableAllSounds() 0099 { 0100 if (d->eventList->disableAllSounds()) { 0101 if (d->currentElement) { 0102 d->actionsconfig->setConfigElement(d->currentElement); 0103 } 0104 d->eventList->updateAllItems(); 0105 Q_EMIT changed(true); 0106 } 0107 } 0108 0109 KNotifyConfigWidget *KNotifyConfigWidget::configure(QWidget *parent, const QString &appname) 0110 { 0111 QDialog *dialog = new QDialog(parent); 0112 dialog->setWindowTitle(i18n("Configure Notifications")); 0113 0114 KNotifyConfigWidget *w = new KNotifyConfigWidget(dialog); 0115 0116 QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); 0117 buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel); 0118 buttonBox->button(QDialogButtonBox::Apply)->setEnabled(false); 0119 0120 QVBoxLayout *layout = new QVBoxLayout(dialog); 0121 layout->addWidget(w); 0122 layout->addWidget(buttonBox); 0123 0124 connect(buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), w, SLOT(save())); 0125 connect(buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked()), w, SLOT(save())); 0126 connect(w, SIGNAL(changed(bool)), buttonBox->button(QDialogButtonBox::Apply), SLOT(setEnabled(bool))); 0127 0128 connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept())); 0129 connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject())); 0130 0131 w->setApplication(appname); 0132 dialog->setAttribute(Qt::WA_DeleteOnClose); 0133 dialog->show(); 0134 return w; 0135 } 0136 0137 void KNotifyConfigWidget::slotActionChanged() 0138 { 0139 Q_EMIT changed(true); // TODO 0140 if (d->currentElement) { 0141 d->actionsconfig->save(d->currentElement); 0142 d->eventList->updateCurrentItem(); 0143 } 0144 } 0145 0146 #include "moc_knotifyconfigwidget.cpp"