2022-03-05 22:41:29 +05:00

241 lines
7.4 KiB
C++

/*
SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
SPDX-License-Identifier: LGPL-2.0-or-later
*/
#include "statusnotifiertest.h"
#include "pumpjob.h"
#include <QDebug>
#include <kplugininfo.h>
#include <kservice.h>
#include <qcommandlineparser.h>
#include <KLocalizedString>
#include <KStatusNotifierItem>
#include <QStringList>
#include <QTimer>
#include <QMenu>
#include <QPushButton>
static QTextStream cout(stdout);
class StatusNotifierTestPrivate
{
public:
QString pluginName;
QTimer *timer;
int interval = 1500;
QStringList loglines;
KStatusNotifierItem *systemNotifier;
PumpJob *job;
};
StatusNotifierTest::StatusNotifierTest(QWidget *parent)
: QDialog(parent)
{
d = new StatusNotifierTestPrivate;
d->job = nullptr;
init();
setupUi(this);
connect(updateButton, &QPushButton::clicked, this, &StatusNotifierTest::updateNotifier);
connect(jobEnabledCheck, &QCheckBox::toggled, this, &StatusNotifierTest::enableJob);
updateUi();
iconName->setText(QStringLiteral("plasma"));
show();
raise();
log(QStringLiteral("started"));
}
void StatusNotifierTest::init()
{
d->systemNotifier = new KStatusNotifierItem(this);
// d->systemNotifier->setCategory(KStatusNotifierItem::SystemServices);
// d->systemNotifier->setCategory(KStatusNotifierItem::Hardware);
d->systemNotifier->setCategory(KStatusNotifierItem::Communications);
d->systemNotifier->setIconByName(QStringLiteral("plasma"));
d->systemNotifier->setStatus(KStatusNotifierItem::Active);
d->systemNotifier->setToolTipTitle(i18nc("tooltip title", "System Service Item"));
d->systemNotifier->setTitle(i18nc("title", "StatusNotifierTest"));
d->systemNotifier->setToolTipSubTitle(i18nc("tooltip subtitle", "Some explanation from the beach."));
connect(d->systemNotifier, &KStatusNotifierItem::activateRequested, this, &StatusNotifierTest::activateRequested);
connect(d->systemNotifier, &KStatusNotifierItem::secondaryActivateRequested, this, &StatusNotifierTest::secondaryActivateRequested);
connect(d->systemNotifier, &KStatusNotifierItem::scrollRequested, this, &StatusNotifierTest::scrollRequested);
auto menu = new QMenu(this);
menu->addAction(QIcon::fromTheme(QStringLiteral("document-edit")), QStringLiteral("action 1"));
menu->addAction(QIcon::fromTheme(QStringLiteral("mail-send")), QStringLiteral("action 2"));
auto subMenu = new QMenu(this);
subMenu->setTitle(QStringLiteral("Sub Menu"));
subMenu->addAction(QStringLiteral("subaction1"));
subMenu->addAction(QStringLiteral("subaction2"));
menu->addMenu(subMenu);
d->systemNotifier->setContextMenu(menu);
}
StatusNotifierTest::~StatusNotifierTest()
{
delete d;
}
void StatusNotifierTest::log(const QString &msg)
{
qDebug() << "msg: " << msg;
d->loglines.prepend(msg);
logEdit->setText(d->loglines.join('\n'));
}
void StatusNotifierTest::updateUi()
{
if (!d->systemNotifier) {
return;
}
statusActive->setChecked(d->systemNotifier->status() == KStatusNotifierItem::Active);
statusPassive->setChecked(d->systemNotifier->status() == KStatusNotifierItem::Passive);
statusNeedsAttention->setChecked(d->systemNotifier->status() == KStatusNotifierItem::NeedsAttention);
statusActive->setEnabled(!statusAuto->isChecked());
statusPassive->setEnabled(!statusAuto->isChecked());
statusNeedsAttention->setEnabled(!statusAuto->isChecked());
tooltipText->setText(d->systemNotifier->toolTipTitle());
tooltipSubtext->setText(d->systemNotifier->toolTipSubTitle());
}
void StatusNotifierTest::updateNotifier()
{
// log("update");
if (!enabledCheck->isChecked()) {
delete d->systemNotifier;
d->systemNotifier = nullptr;
return;
} else {
if (!d->systemNotifier) {
init();
}
}
if (!d->systemNotifier) {
return;
}
if (statusAuto->isChecked()) {
d->timer->start();
} else {
d->timer->stop();
}
KStatusNotifierItem::ItemStatus s = KStatusNotifierItem::Passive;
if (statusActive->isChecked()) {
s = KStatusNotifierItem::Active;
} else if (statusNeedsAttention->isChecked()) {
s = KStatusNotifierItem::NeedsAttention;
}
d->systemNotifier->setStatus(s);
iconPixmapCheckbox->isChecked() ? d->systemNotifier->setIconByPixmap(QIcon::fromTheme(iconName->text()))
: d->systemNotifier->setIconByName(iconName->text());
overlayIconPixmapCheckbox->isChecked() ? d->systemNotifier->setOverlayIconByPixmap(QIcon::fromTheme(overlayIconName->text()))
: d->systemNotifier->setOverlayIconByName(overlayIconName->text());
attentionIconPixmapCheckbox->isChecked() ? d->systemNotifier->setAttentionIconByPixmap(QIcon::fromTheme(attentionIconName->text()))
: d->systemNotifier->setAttentionIconByName(attentionIconName->text());
d->systemNotifier->setToolTip(iconName->text(), tooltipText->text(), tooltipSubtext->text());
updateUi();
}
int StatusNotifierTest::runMain()
{
d->timer = new QTimer(this);
connect(d->timer, &QTimer::timeout, this, &StatusNotifierTest::timeout);
d->timer->setInterval(d->interval);
// d->timer->start();
return 0;
}
void StatusNotifierTest::timeout()
{
if (!d->systemNotifier) {
return;
}
if (d->systemNotifier->status() == KStatusNotifierItem::Passive) {
d->systemNotifier->setStatus(KStatusNotifierItem::Active);
qDebug() << " Now Active";
} else if (d->systemNotifier->status() == KStatusNotifierItem::Active) {
d->systemNotifier->setStatus(KStatusNotifierItem::NeedsAttention);
qDebug() << " Now NeedsAttention";
} else if (d->systemNotifier->status() == KStatusNotifierItem::NeedsAttention) {
d->systemNotifier->setStatus(KStatusNotifierItem::Passive);
qDebug() << " Now passive";
}
updateUi();
}
void StatusNotifierTest::activateRequested(bool active, const QPoint &pos)
{
Q_UNUSED(active);
Q_UNUSED(pos);
log(QStringLiteral("Activated"));
}
void StatusNotifierTest::secondaryActivateRequested(const QPoint &pos)
{
Q_UNUSED(pos);
log(QStringLiteral("secondaryActivateRequested"));
}
void StatusNotifierTest::scrollRequested(int delta, Qt::Orientation orientation)
{
QString msg(QStringLiteral("Scrolled by "));
msg.append(QString::number(delta));
msg.append((orientation == Qt::Horizontal) ? " Horizontally" : " Vertically");
log(msg);
}
// Jobs
void StatusNotifierTest::enableJob(bool enable)
{
qDebug() << "Job enabled." << enable;
if (enable) {
d->job = new PumpJob(speedSlider->value());
QObject::connect(d->job, SIGNAL(percent(KJob *, unsigned long)), this, SLOT(setJobProgress(KJob *, unsigned long)));
QObject::connect(d->job, &KJob::result, this, &StatusNotifierTest::result);
} else {
if (d->job) {
d->timer->stop();
jobEnabledCheck->setChecked(Qt::Unchecked);
d->job->kill();
}
}
}
void StatusNotifierTest::setJobProgress(KJob *j, unsigned long v)
{
Q_UNUSED(j)
jobProgressBar->setValue(v);
}
void StatusNotifierTest::result(KJob *job)
{
if (job->error()) {
qDebug() << "Job Error:" << job->errorText() << job->errorString();
} else {
qDebug() << "Job finished successfully.";
}
jobEnabledCheck->setCheckState(Qt::Unchecked);
}
#include "moc_statusnotifiertest.cpp"