File indexing completed on 2024-05-05 04:57:29
0001 /* 0002 This file is part of Choqok, the KDE micro-blogging client 0003 0004 SPDX-FileCopyrightText: 2011-2012 Mehrdad Momeny <mehrdad.momeny@gmail.com> 0005 0006 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0007 */ 0008 0009 #include "notifyconfig.h" 0010 0011 #include <QListWidget> 0012 #include <QPushButton> 0013 #include <QSpinBox> 0014 0015 #include <KAboutData> 0016 #include <KColorButton> 0017 #include <KFontRequester> 0018 #include <KPluginFactory> 0019 0020 #include "account.h" 0021 #include "accountmanager.h" 0022 0023 #include "dummynotification.h" 0024 #include "notifysettings.h" 0025 0026 K_PLUGIN_CLASS_WITH_JSON(NotifyConfig, "choqok_notify_config.json") 0027 0028 NotifyConfig::NotifyConfig(QWidget *parent, const QVariantList &args) 0029 : KCModule(parent, args) 0030 { 0031 QVBoxLayout *layout = new QVBoxLayout(this); 0032 QWidget *wd = new QWidget(this); 0033 wd->setObjectName(QLatin1String("mNotifyCtl")); 0034 ui.setupUi(wd); 0035 layout->addWidget(wd); 0036 connect(ui.accountsList, &QListWidget::currentRowChanged, 0037 this, &NotifyConfig::updateTimelinesList); 0038 connect(ui.timelinesList, &QListWidget::itemSelectionChanged, 0039 this, &NotifyConfig::timelineSelectionChanged); 0040 connect(ui.interval, (void (QSpinBox::*)(int))&QSpinBox::valueChanged, this, &NotifyConfig::emitChanged); 0041 connect(ui.adjustPosition, &QPushButton::clicked, this, &NotifyConfig::slotAdjustNotificationPosition); 0042 connect(ui.backgroundColor, &KColorButton::changed, this, &NotifyConfig::emitChanged); 0043 connect(ui.foregroundColor, &KColorButton::changed, this, &NotifyConfig::emitChanged); 0044 connect(ui.font, &KFontRequester::fontSelected, this, &NotifyConfig::emitChanged); 0045 settings = new NotifySettings(this); 0046 ui.lblArrow->setPixmap(QIcon::fromTheme(QLatin1String("arrow-right")).pixmap(48)); 0047 } 0048 0049 NotifyConfig::~NotifyConfig() 0050 { 0051 } 0052 0053 void NotifyConfig::emitChanged() 0054 { 0055 Q_EMIT changed(true); 0056 } 0057 0058 void NotifyConfig::updateTimelinesList() 0059 { 0060 ui.timelinesList->blockSignals(true); 0061 ui.timelinesList->clear(); 0062 QString acc = ui.accountsList->currentItem()->text(); 0063 Choqok::Account *account = Choqok::AccountManager::self()->findAccount(acc); 0064 for (const QString &tm: account->timelineNames()) { 0065 ui.timelinesList->addItem(tm); 0066 if (accounts[acc].contains(tm)) { 0067 ui.timelinesList->item(ui.timelinesList->count() - 1)->setSelected(true); 0068 } 0069 } 0070 ui.timelinesList->blockSignals(false); 0071 } 0072 0073 void NotifyConfig::timelineSelectionChanged() 0074 { 0075 QStringList lst; 0076 for (QListWidgetItem *item: ui.timelinesList->selectedItems()) { 0077 lst.append(item->text()); 0078 } 0079 accounts[ui.accountsList->currentItem()->text()] = lst; 0080 Q_EMIT changed(); 0081 } 0082 0083 void NotifyConfig::load() 0084 { 0085 accounts = settings->accounts(); 0086 0087 ui.interval->setValue(settings->notifyInterval()); 0088 0089 for (const QString &acc: accounts.keys()) { 0090 ui.accountsList->addItem(acc); 0091 } 0092 if (ui.accountsList->count() > 0) { 0093 ui.accountsList->setCurrentRow(0); 0094 updateTimelinesList(); 0095 } 0096 0097 ui.backgroundColor->setColor(settings->backgroundColor()); 0098 ui.foregroundColor->setColor(settings->foregroundColor()); 0099 ui.font->setFont(settings->font()); 0100 } 0101 0102 void NotifyConfig::save() 0103 { 0104 //qDebug()<< accounts.keys(); 0105 settings->setAccounts(accounts); 0106 settings->setNotifyInterval(ui.interval->value()); 0107 settings->setBackgroundColor(ui.backgroundColor->color()); 0108 settings->setForegroundColor(ui.foregroundColor->color()); 0109 settings->setFont(ui.font->font()); 0110 settings->save(); 0111 } 0112 0113 void NotifyConfig::slotAdjustNotificationPosition() 0114 { 0115 ui.adjustPosition->setDisabled(true); 0116 if (!dummy) { 0117 dummy = new DummyNotification(ui.font->font(), ui.foregroundColor->color(), 0118 ui.backgroundColor->color(), this); 0119 dummy->setAttribute(Qt::WA_DeleteOnClose); 0120 dummy->resize(NOTIFICATION_WIDTH, NOTIFICATION_HEIGHT); 0121 connect(dummy, &DummyNotification::positionSelected, this, &NotifyConfig::slotNewPositionSelected); 0122 } 0123 dummy->move(settings->position()); 0124 dummy->show(); 0125 } 0126 0127 void NotifyConfig::slotNewPositionSelected(QPoint pos) 0128 { 0129 settings->setPosition(pos); 0130 dummy->close(); 0131 ui.adjustPosition->setEnabled(true); 0132 emitChanged(); 0133 } 0134 0135 #include "moc_notifyconfig.cpp" 0136 #include "notifyconfig.moc"