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"