File indexing completed on 2024-12-01 09:54:13

0001 /*
0002     This file is part of the KDE project
0003     SPDX-FileCopyrightText: 2007 Rafael Fernández López <ereslibre@kde.org>
0004     SPDX-FileCopyrightText: 2007 Kevin Ottens <ervin@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-only
0007 */
0008 
0009 #ifndef KSTATUSBARJOBTRACKER_P_H
0010 #define KSTATUSBARJOBTRACKER_P_H
0011 
0012 #include "kabstractwidgetjobtracker_p.h"
0013 #include "kstatusbarjobtracker.h"
0014 
0015 #include <QBoxLayout>
0016 #include <QMap>
0017 #include <QStackedWidget>
0018 #include <QWidget>
0019 
0020 class QPushButton;
0021 class QCheckBox;
0022 class QLabel;
0023 class QProgressBar;
0024 
0025 class KStatusBarJobTrackerPrivate : public KAbstractWidgetJobTrackerPrivate
0026 {
0027     Q_DECLARE_PUBLIC(KStatusBarJobTracker)
0028 
0029 public:
0030     KStatusBarJobTrackerPrivate(KStatusBarJobTracker *q, QWidget *parent, bool withStopButton)
0031         : KAbstractWidgetJobTrackerPrivate(q)
0032         , parent(parent)
0033         , currentProgressWidget(nullptr)
0034         , showStopButton(withStopButton)
0035     {
0036     }
0037 
0038     class ProgressWidget;
0039 
0040     QWidget *parent;
0041     QMap<KJob *, ProgressWidget *> progressWidget;
0042     ProgressWidget *currentProgressWidget;
0043     bool showStopButton;
0044 };
0045 
0046 class KStatusBarJobTrackerPrivate::ProgressWidget : public QWidget
0047 {
0048     Q_OBJECT
0049 
0050 public:
0051     ProgressWidget(KJob *job, KStatusBarJobTracker *object, QWidget *parent)
0052         : q(object)
0053         , job(job)
0054     {
0055         init(job, parent);
0056     }
0057 
0058     ~ProgressWidget() override
0059     {
0060         beingDeleted = true;
0061         delete widget;
0062 
0063         q->unregisterJob(job);
0064     }
0065 
0066     KStatusBarJobTracker *const q;
0067     KJob *const job;
0068 
0069     QWidget *widget = nullptr;
0070     QProgressBar *progressBar = nullptr;
0071     QLabel *label = nullptr;
0072     QPushButton *button = nullptr;
0073     QBoxLayout *box = nullptr;
0074     QStackedWidget *stack = nullptr;
0075 
0076     // qlonglong totalSize = -1;
0077 
0078     KStatusBarJobTracker::StatusBarModes mode = KStatusBarJobTracker::NoInformation;
0079     bool beingDeleted = false;
0080 
0081     void init(KJob *job, QWidget *parent);
0082 
0083     void setMode(KStatusBarJobTracker::StatusBarModes newMode);
0084 
0085 public Q_SLOTS:
0086     virtual void description(const QString &title, const QPair<QString, QString> &field1, const QPair<QString, QString> &field2);
0087     virtual void totalAmount(KJob::Unit unit, qulonglong amount);
0088     virtual void percent(unsigned long percent);
0089     virtual void speed(unsigned long value);
0090     virtual void slotClean();
0091 
0092 private Q_SLOTS:
0093     void killJob();
0094 
0095 protected:
0096     bool eventFilter(QObject *obj, QEvent *event) override;
0097 };
0098 
0099 #endif // KSTATUSBARJOBTRACKER_P_H