1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
/*
SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
SPDX-License-Identifier: GPL-2.0-only
*/
#include "sievetreewidgetitem.h"
#include <KIconLoader>
#include <KPixmapSequenceLoader>
#include <QTimer>
using namespace KSieveUi;
SieveTreeWidgetProgress::SieveTreeWidgetProgress(SieveTreeWidgetItem *item, QObject *parent)
: QObject(parent)
, mItem(item)
{
mProgressPix = KPixmapSequenceLoader::load(QStringLiteral("process-working"), KIconLoader::SizeSmallMedium);
mProgressTimer = new QTimer(this);
connect(mProgressTimer, &QTimer::timeout, this, &SieveTreeWidgetProgress::slotTimerDone);
}
SieveTreeWidgetProgress::~SieveTreeWidgetProgress() = default;
void SieveTreeWidgetProgress::slotTimerDone()
{
mItem->setProgressAnimation(mProgressPix.frameAt(mProgressCount));
++mProgressCount;
if (mProgressCount == 8) {
mProgressCount = 0;
}
mProgressTimer->start(300);
}
void SieveTreeWidgetProgress::startAnimation()
{
mProgressCount = 0;
mProgressTimer->start(300);
}
void SieveTreeWidgetProgress::stopAnimation()
{
if (mProgressTimer->isActive()) {
mProgressTimer->stop();
}
mItem->setDefaultIcon();
}
class KSieveUi::SieveTreeWidgetItemPrivate
{
public:
SieveTreeWidgetItemPrivate() = default;
~SieveTreeWidgetItemPrivate()
{
delete mProgress;
}
SieveTreeWidgetProgress *mProgress = nullptr;
};
SieveTreeWidgetItem::SieveTreeWidgetItem(QTreeWidget *treeWidget, QTreeWidgetItem *item)
: QTreeWidgetItem(treeWidget, item)
, d(new KSieveUi::SieveTreeWidgetItemPrivate)
{
d->mProgress = new SieveTreeWidgetProgress(this);
}
SieveTreeWidgetItem::~SieveTreeWidgetItem() = default;
void SieveTreeWidgetItem::startAnimation()
{
d->mProgress->startAnimation();
}
void SieveTreeWidgetItem::stopAnimation()
{
d->mProgress->stopAnimation();
}
void SieveTreeWidgetItem::setProgressAnimation(const QPixmap &pix)
{
setIcon(0, QIcon(pix));
}
void SieveTreeWidgetItem::setDefaultIcon()
{
setIcon(0, QIcon::fromTheme(QStringLiteral("network-server")));
}
#include "moc_sievetreewidgetitem.cpp"
|