File indexing completed on 2024-06-02 04:15:20

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2012-01-13
0007  * Description : progress manager
0008  *
0009  * SPDX-FileCopyrightText: 2007-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0010  * SPDX-FileCopyrightText: 2012      by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
0011  * SPDX-FileCopyrightText: 2004      by Till Adam <adam at kde dot org>
0012  *
0013  * SPDX-License-Identifier: GPL-2.0-or-later
0014  *
0015  * ============================================================ */
0016 
0017 #ifndef DIGIKAM_PROGRESS_VIEW_H
0018 #define DIGIKAM_PROGRESS_VIEW_H
0019 
0020 // Qt includes
0021 
0022 #include <QScrollArea>
0023 
0024 // Local includes
0025 
0026 #include "overlaywidget.h"
0027 #include "digikam_export.h"
0028 
0029 namespace Digikam
0030 {
0031 class ProgressItem;
0032 
0033 class TransactionItem : public DVBox
0034 {
0035     Q_OBJECT
0036 
0037 public:
0038 
0039     explicit TransactionItem(QWidget* const parent, ProgressItem* const item, bool first);
0040     ~TransactionItem() override;
0041 
0042     void hideHLine();
0043 
0044     void setProgress(int progress);
0045     void setLabel(const QString&);
0046     void setThumbnail(const QPixmap&);
0047 
0048     // NOTE: the given text is interpreted as RichText, so you might need to
0049     // use .toHtmlEscaped() it before passing
0050     void setStatus(const QString&);
0051 
0052     void setTotalSteps( int totalSteps );
0053 
0054     ProgressItem* item() const;
0055 
0056     void addSubTransaction(ProgressItem* const item);
0057 
0058     // The progressitem is deleted immediately, we take 5s to go out,
0059     // so better not use mItem during this time.
0060     void setItemComplete();
0061 
0062 public Q_SLOTS:
0063 
0064     void slotItemCanceled();
0065 
0066 private:
0067 
0068     class Private;
0069     Private* const d;
0070 };
0071 
0072 // --------------------------------------------------------------------------------
0073 
0074 class TransactionItemView : public QScrollArea
0075 {
0076     Q_OBJECT
0077 
0078 public:
0079 
0080     explicit TransactionItemView(QWidget* const parent = nullptr, const QString& name=QString());
0081     ~TransactionItemView() override {}
0082 
0083     TransactionItem* addTransactionItem(ProgressItem* item, bool first);
0084 
0085     QSize sizeHint()        const override;
0086     QSize minimumSizeHint() const override;
0087 
0088 public Q_SLOTS:
0089 
0090     void slotLayoutFirstItem();
0091 
0092 Q_SIGNALS:
0093 
0094     void signalTransactionViewIsEmpty();
0095 
0096 protected:
0097 
0098     void resizeEvent(QResizeEvent* event) override;
0099 
0100 private:
0101 
0102     DVBox* m_bigBox;
0103 };
0104 
0105 // --------------------------------------------------------------------------------
0106 
0107 class DIGIKAM_EXPORT ProgressView : public OverlayWidget
0108 {
0109     Q_OBJECT
0110 
0111 public:
0112 
0113     explicit ProgressView(QWidget* const alignWidget, QWidget* const parent, const QString& name = QString());
0114     ~ProgressView() override;
0115 
0116     void setVisible(bool b) override;
0117 
0118 public Q_SLOTS:
0119 
0120     void slotToggleVisibility();
0121 
0122 Q_SIGNALS:
0123 
0124     void visibilityChanged(bool);
0125 
0126 protected Q_SLOTS:
0127 
0128     void slotTransactionAdded(ProgressItem*);
0129     void slotTransactionCompleted(ProgressItem*);
0130     void slotTransactionCanceled(ProgressItem*);
0131     void slotTransactionProgress(ProgressItem*, unsigned int progress);
0132     void slotTransactionStatus(ProgressItem*, const QString&);
0133     void slotTransactionLabel(ProgressItem*, const QString&);
0134     void slotTransactionUsesBusyIndicator(ProgressItem*, bool);
0135     void slotTransactionThumbnail(ProgressItem*, const QPixmap&);
0136     void slotClose();
0137     void slotShow();
0138     void slotHide();
0139 
0140 protected:
0141 
0142     void closeEvent(QCloseEvent*) override;
0143 
0144 private:
0145 
0146     class Private;
0147     Private* const d;
0148 };
0149 
0150 } // namespace Digikam
0151 
0152 #endif // DIGIKAM_PROGRESS_VIEW_H