X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Findicatornotificationbackend.cpp;h=59c20b8d3b655be449e22db1cfc28b9295fdc06f;hp=281fe98b3f068c0d2f17b9c7ae97766dbbe1b72c;hb=694f9bfbf7f1af19108461c7e00d133e55082bce;hpb=61c8d84d1c849373e0f115dc748ed45cff95287d diff --git a/src/qtui/indicatornotificationbackend.cpp b/src/qtui/indicatornotificationbackend.cpp index 281fe98b..59c20b8d 100644 --- a/src/qtui/indicatornotificationbackend.cpp +++ b/src/qtui/indicatornotificationbackend.cpp @@ -33,162 +33,193 @@ #define STR(x) #x #define XSTR(x) STR(x) -class Indicator : public QIndicate::Indicator { +class Indicator : public QIndicate::Indicator +{ public: - uint lastNotificationId; + uint lastNotificationId; }; + IndicatorNotificationBackend::IndicatorNotificationBackend(QObject *parent) - : AbstractNotificationBackend(parent) + : AbstractNotificationBackend(parent) { - NotificationSettings notificationSettings; - _enabled = notificationSettings.value("Indicator/Enabled", false).toBool(); + NotificationSettings notificationSettings; + _enabled = notificationSettings.value("Indicator/Enabled", false).toBool(); - notificationSettings.notify("Indicator/Enabled", this, SLOT(enabledChanged(const QVariant &))); + notificationSettings.notify("Indicator/Enabled", this, SLOT(enabledChanged(const QVariant &))); - _server = QIndicate::Server::defaultInstance(); - _server->setType("message.irc"); - QString desktopFile = QString("%1/%2.desktop") - .arg(XSTR(XDG_APPS_INSTALL_DIR)) - .arg(QCoreApplication::applicationFilePath().section('/', -1)); - _server->setDesktopFile(desktopFile); - connect(_server, SIGNAL(serverDisplay()), SLOT(activateMainWidget())); + _server = QIndicate::Server::defaultInstance(); + _server->setType("message.irc"); + QString desktopFile = QString("%1/%2.desktop") + .arg(XSTR(XDG_APPS_INSTALL_DIR)) + .arg(QCoreApplication::applicationFilePath().section('/', -1)); + _server->setDesktopFile(desktopFile); + connect(_server, SIGNAL(serverDisplay()), SLOT(activateMainWidget())); - if (_enabled) { - _server->show(); - } + if (_enabled) { + _server->show(); + } } -IndicatorNotificationBackend::~IndicatorNotificationBackend() { - qDeleteAll(_indicatorHash); + +IndicatorNotificationBackend::~IndicatorNotificationBackend() +{ + qDeleteAll(_indicatorHash); } -void IndicatorNotificationBackend::activateMainWidget() { - GraphicalUi::activateMainWidget(); + +void IndicatorNotificationBackend::activateMainWidget() +{ + GraphicalUi::activateMainWidget(); } -void IndicatorNotificationBackend::notify(const Notification ¬ification) { - if(!_enabled) { - return; - } - if (notification.type != Highlight && notification.type != PrivMsg) { - return; - } - BufferId bufferId = notification.bufferId; - Indicator *indicator = _indicatorHash.value(bufferId); - if(!indicator) { - indicator = new Indicator; - _indicatorHash.insert(bufferId, indicator); - connect(indicator, SIGNAL(display(QIndicate::Indicator*)), - SLOT(indicatorDisplayed(QIndicate::Indicator*))); - } - indicator->lastNotificationId = notification.notificationId; - - BufferInfo::Type type = Client::networkModel()->bufferType(bufferId); - QString name; - if (type == BufferInfo::QueryBuffer) { - name = notification.sender; - } else { - name = QString("%1 (%2)") - .arg(Client::networkModel()->bufferName(bufferId)) - .arg(notification.sender); - } - indicator->setNameProperty(name); - - indicator->setTimeProperty(QDateTime::currentDateTime()); - - QModelIndex index = Client::networkModel()->bufferIndex(bufferId); - QVariant icon = QtUi::style()->bufferViewItemData(index, Qt::DecorationRole); - if (icon.canConvert()) { - QImage image = icon.value().toImage(); - indicator->setIconProperty(image); - } - - indicator->setDrawAttentionProperty(true); - indicator->show(); + +void IndicatorNotificationBackend::notify(const Notification ¬ification) +{ + if (!_enabled) { + return; + } + if (notification.type != Highlight && notification.type != PrivMsg) { + return; + } + BufferId bufferId = notification.bufferId; + Indicator *indicator = _indicatorHash.value(bufferId); + if (!indicator) { + indicator = new Indicator; + _indicatorHash.insert(bufferId, indicator); + connect(indicator, SIGNAL(display(QIndicate::Indicator *)), + SLOT(indicatorDisplayed(QIndicate::Indicator *))); + } + indicator->lastNotificationId = notification.notificationId; + + BufferInfo::Type type = Client::networkModel()->bufferType(bufferId); + QString name; + if (type == BufferInfo::QueryBuffer) { + name = notification.sender; + } + else { + name = QString("%1 (%2)") + .arg(Client::networkModel()->bufferName(bufferId)) + .arg(notification.sender); + } + indicator->setNameProperty(name); + + indicator->setTimeProperty(QDateTime::currentDateTime()); + + QModelIndex index = Client::networkModel()->bufferIndex(bufferId); + QVariant icon = QtUi::style()->bufferViewItemData(index, Qt::DecorationRole); + if (icon.canConvert()) { + QImage image = icon.value().toImage(); + indicator->setIconProperty(image); + } + + indicator->setDrawAttentionProperty(true); + indicator->show(); } -void IndicatorNotificationBackend::close(uint notificationId) { - // If we find an indicator whose lastNotificationId is notificationId, we - // delete it - IndicatorHash::Iterator - it = _indicatorHash.begin(), - end = _indicatorHash.end(); - for (; it != end; ++it) { - if (it.value()->lastNotificationId == notificationId) { - break; +void IndicatorNotificationBackend::close(uint notificationId) +{ + // If we find an indicator whose lastNotificationId is notificationId, we + // delete it + + IndicatorHash::Iterator + it = _indicatorHash.begin(), + end = _indicatorHash.end(); + for (; it != end; ++it) { + if (it.value()->lastNotificationId == notificationId) { + break; + } + } + if (it == end) { + // Not found, maybe there was no indicator for this notification or another + // notification happened after + return; } - } - if (it == end) { - // Not found, maybe there was no indicator for this notification or another - // notification happened after - return; - } - _indicatorHash.erase(it); - delete it.value(); + _indicatorHash.erase(it); + delete it.value(); } -void IndicatorNotificationBackend::enabledChanged(const QVariant &v) { - _enabled = v.toBool(); - if (_enabled) { - _server->show(); - // TODO: Create indicators for existing highlighted buffers? - } else { - _server->hide(); - qDeleteAll(_indicatorHash); - } + +void IndicatorNotificationBackend::enabledChanged(const QVariant &v) +{ + _enabled = v.toBool(); + if (_enabled) { + _server->show(); + // TODO: Create indicators for existing highlighted buffers? + } + else { + _server->hide(); + qDeleteAll(_indicatorHash); + } } -void IndicatorNotificationBackend::indicatorDisplayed(QIndicate::Indicator *_indicator) { - Indicator *indicator = static_cast(_indicator); - emit activated(indicator->lastNotificationId); + +void IndicatorNotificationBackend::indicatorDisplayed(QIndicate::Indicator *_indicator) +{ + Indicator *indicator = static_cast(_indicator); + emit activated(indicator->lastNotificationId); } -SettingsPage *IndicatorNotificationBackend::createConfigWidget() const { - return new ConfigWidget(); + +SettingsPage *IndicatorNotificationBackend::createConfigWidget() const +{ + return new ConfigWidget(); } + /***************************************************************************/ IndicatorNotificationBackend::ConfigWidget::ConfigWidget(QWidget *parent) -: SettingsPage("Internal", "IndicatorNotification", parent) + : SettingsPage("Internal", "IndicatorNotification", parent) { - ui.setupUi(this); - // FIXME find proper icon (this one is used by the plasmoid as well) - ui.enabled->setIcon(SmallIcon("mail-message-new")); + ui.setupUi(this); + // FIXME find proper icon (this one is used by the plasmoid as well) + ui.enabled->setIcon(SmallIcon("mail-message-new")); - connect(ui.enabled, SIGNAL(toggled(bool)), SLOT(widgetChanged())); + connect(ui.enabled, SIGNAL(toggled(bool)), SLOT(widgetChanged())); } -IndicatorNotificationBackend::ConfigWidget::~ConfigWidget() { + +IndicatorNotificationBackend::ConfigWidget::~ConfigWidget() +{ } -void IndicatorNotificationBackend::ConfigWidget::widgetChanged() { - bool changed = enabled != ui.enabled->isChecked(); - if(changed != hasChanged()) setChangedState(changed); +void IndicatorNotificationBackend::ConfigWidget::widgetChanged() +{ + bool changed = enabled != ui.enabled->isChecked(); + + if (changed != hasChanged()) setChangedState(changed); } -bool IndicatorNotificationBackend::ConfigWidget::hasDefaults() const { - return true; + +bool IndicatorNotificationBackend::ConfigWidget::hasDefaults() const +{ + return true; } -void IndicatorNotificationBackend::ConfigWidget::defaults() { - ui.enabled->setChecked(false); - widgetChanged(); + +void IndicatorNotificationBackend::ConfigWidget::defaults() +{ + ui.enabled->setChecked(false); + widgetChanged(); } -void IndicatorNotificationBackend::ConfigWidget::load() { - NotificationSettings s; - enabled = s.value("Indicator/Enabled", false).toBool(); - ui.enabled->setChecked(enabled); - setChangedState(false); +void IndicatorNotificationBackend::ConfigWidget::load() +{ + NotificationSettings s; + enabled = s.value("Indicator/Enabled", false).toBool(); + + ui.enabled->setChecked(enabled); + setChangedState(false); } -void IndicatorNotificationBackend::ConfigWidget::save() { - NotificationSettings s; - s.setValue("Indicator/Enabled", ui.enabled->isChecked()); - load(); + +void IndicatorNotificationBackend::ConfigWidget::save() +{ + NotificationSettings s; + s.setValue("Indicator/Enabled", ui.enabled->isChecked()); + load(); }