1 /***************************************************************************
2 * Copyright (C) 2005-09 by the Quassel Project *
3 * devel@quassel-irc.org *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) version 3. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
21 #include <QFileDialog>
23 #include <phonon/mediaobject.h>
25 #include "phononnotificationbackend.h"
27 #include "clientsettings.h"
28 #include "iconloader.h"
32 PhononNotificationBackend::PhononNotificationBackend(QObject *parent)
33 : AbstractNotificationBackend(parent),
36 NotificationSettings notificationSettings;
37 _enabled = notificationSettings.value("Phonon/Enabled", true).toBool();
38 createMediaObject(notificationSettings.value("Phonon/AudioFile", QString()).toString());
40 notificationSettings.notify("Phonon/Enabled", this, SLOT(enabledChanged(const QVariant &)));
41 notificationSettings.notify("Phonon/AudioFile", this, SLOT(audioFileChanged(const QVariant &)));
44 PhononNotificationBackend::~PhononNotificationBackend() {
49 void PhononNotificationBackend::notify(const Notification ¬ification) {
50 if(_enabled && _media && (notification.type == Highlight || notification.type == PrivMsg)) {
56 void PhononNotificationBackend::close(uint notificationId) {
57 Q_UNUSED(notificationId);
60 void PhononNotificationBackend::enabledChanged(const QVariant &v) {
61 _enabled = v.toBool();
64 void PhononNotificationBackend::audioFileChanged(const QVariant &v) {
65 createMediaObject(v.toString());
68 SettingsPage *PhononNotificationBackend::createConfigWidget() const {
69 return new ConfigWidget();
72 void PhononNotificationBackend::createMediaObject(const QString &file) {
81 _media = Phonon::createPlayer(Phonon::NotificationCategory,
82 Phonon::MediaSource(file));
85 /***************************************************************************/
87 PhononNotificationBackend::ConfigWidget::ConfigWidget(QWidget *parent)
88 : SettingsPage("Internal", "PhononNotification", parent),
92 ui.enabled->setIcon(SmallIcon("media-playback-start"));
93 ui.play->setIcon(SmallIcon("media-playback-start"));
94 ui.open->setIcon(SmallIcon("document-open"));
96 connect(ui.enabled, SIGNAL(toggled(bool)), SLOT(widgetChanged()));
97 connect(ui.filename, SIGNAL(textChanged(const QString &)), SLOT(widgetChanged()));
100 PhononNotificationBackend::ConfigWidget::~ConfigWidget() {
105 void PhononNotificationBackend::ConfigWidget::widgetChanged() {
106 ui.play->setEnabled(ui.enabled->isChecked() && !ui.filename->text().isEmpty());
108 bool changed = (enabled != ui.enabled->isChecked()
109 || filename != ui.filename->text());
111 if(changed != hasChanged()) setChangedState(changed);
114 bool PhononNotificationBackend::ConfigWidget::hasDefaults() const {
118 void PhononNotificationBackend::ConfigWidget::defaults() {
119 ui.enabled->setChecked(false);
120 ui.filename->setText(QString());
124 void PhononNotificationBackend::ConfigWidget::load() {
125 NotificationSettings s;
126 enabled = s.value("Phonon/Enabled", false).toBool();
127 filename = s.value("Phonon/AudioFile", QString()).toString();
129 ui.enabled->setChecked(enabled);
130 ui.filename->setText(filename);
132 setChangedState(false);
135 void PhononNotificationBackend::ConfigWidget::save() {
136 NotificationSettings s;
137 s.setValue("Phonon/Enabled", ui.enabled->isChecked());
138 s.setValue("Phonon/AudioFile", ui.filename->text());
142 void PhononNotificationBackend::ConfigWidget::on_open_clicked() {
143 QString file = QFileDialog::getOpenFileName(this, tr("Select Audio File"));
144 if(!file.isEmpty()) {
145 ui.filename->setText(file);
146 ui.play->setEnabled(true);
151 void PhononNotificationBackend::ConfigWidget::on_play_clicked() {
152 if(!ui.filename->text().isEmpty()) {
156 audioPreview = Phonon::createPlayer(Phonon::NotificationCategory,
157 Phonon::MediaSource(ui.filename->text()));
158 audioPreview->play();