File indexing completed on 2024-05-12 15:58:29

0001 /*
0002  *  SPDX-FileCopyrightText: 2008 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "kis_node_progress_proxy.h"
0008 
0009 #include <QApplication>
0010 
0011 #include "kis_node.h"
0012 
0013 struct Q_DECL_HIDDEN KisNodeProgressProxy::Private {
0014     Private()
0015         : minimum(0)
0016         , maximum(100)
0017         , value(100)
0018         , percentage(-1)
0019     {
0020     }
0021 
0022     KisNodeWSP node;
0023     int minimum;
0024     int maximum;
0025     int value;
0026     int percentage;
0027 
0028     bool computePercentage() {
0029         int old_percentage = percentage;
0030         if (value == maximum) {
0031             percentage = -1;
0032         } else if (minimum == maximum && minimum == 0) {
0033             percentage = 0;
0034         } else {
0035             percentage = (100 * (value - minimum)) / (maximum - minimum);
0036             percentage = qBound(0, percentage, 100);
0037         }
0038         return old_percentage != percentage;
0039     }
0040 };
0041 
0042 KisNodeProgressProxy::KisNodeProgressProxy(KisNode* _node)
0043     : d(new Private)
0044 {
0045     d->node = _node;
0046 }
0047 
0048 KisNodeProgressProxy::~KisNodeProgressProxy()
0049 {
0050     delete d;
0051 }
0052 
0053 void KisNodeProgressProxy::prepareDestroying()
0054 {
0055     d->node = 0;
0056 }
0057 
0058 
0059 int KisNodeProgressProxy::maximum() const
0060 {
0061     return d->maximum;
0062 }
0063 
0064 int KisNodeProgressProxy::percentage() const
0065 {
0066     return d->percentage;
0067 }
0068 
0069 void KisNodeProgressProxy::setValue(int _value)
0070 {
0071     d->value = _value;
0072     if (d->node && d->computePercentage()) {
0073         emit(percentageChanged(d->percentage, d->node));
0074     }
0075 }
0076 
0077 void KisNodeProgressProxy::setRange(int _minimum, int _maximum)
0078 {
0079     d->minimum = _minimum;
0080     d->maximum = _maximum;
0081     if (d->node && d->computePercentage()) {
0082         emit(percentageChanged(d->percentage, d->node));
0083     }
0084 }
0085 
0086 void KisNodeProgressProxy::setFormat(const QString & _format)
0087 {
0088     Q_UNUSED(_format);
0089 }