File indexing completed on 2024-05-12 04:38:17

0001 /*
0002     SPDX-FileCopyrightText: 2004 Till Adam <adam@kde.org>
0003     based on imapprogressdialog.cpp ,which is
0004     SPDX-FileCopyrightText: 2002-2003 Klarälvdalens Datakonsult AB
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #ifndef KDEVPLATFORM_PROGRESSDIALOG_H
0010 #define KDEVPLATFORM_PROGRESSDIALOG_H
0011 
0012 #include "overlaywidget.h"
0013 
0014 #include <QMap>
0015 #include <QScrollArea>
0016 #include <QWidget>
0017 
0018 class QProgressBar;
0019 class QFrame;
0020 class QLabel;
0021 class QPushButton;
0022 
0023 namespace KDevelop {
0024 class ProgressItem;
0025 class TransactionItem;
0026 class SSLLabel;
0027 
0028 class TransactionItemView : public QScrollArea
0029 {
0030     Q_OBJECT
0031 public:
0032     explicit TransactionItemView( QWidget * parent = nullptr, const char * name = nullptr );
0033 
0034     ~TransactionItemView() override {}
0035     TransactionItem *addTransactionItem( ProgressItem *item, bool first );
0036 
0037     QSize sizeHint() const override;
0038     QSize minimumSizeHint() const override;
0039 
0040 public Q_SLOTS:
0041     void slotItemCompleted(TransactionItem * item);
0042 
0043 protected:
0044     void resizeEvent ( QResizeEvent *event ) override;
0045 
0046 private:
0047     QWidget *mBigBox;
0048 };
0049 
0050 class TransactionItem : public QWidget
0051 {
0052     Q_OBJECT
0053 public:
0054     TransactionItem( QWidget *parent, ProgressItem *item, bool first );
0055 
0056     ~TransactionItem() override;
0057 
0058     void hideHLine();
0059 
0060     void setProgress( int progress );
0061     void setLabel( const QString & );
0062 
0063     // the given text is interpreted as RichText, so you might need to
0064     // Qt::escape() it before passing
0065     void setStatus( const QString & );
0066 
0067     void setTotalSteps( int totalSteps );
0068 
0069     ProgressItem *item() const { return mItem; }
0070 
0071     void addSubTransaction( ProgressItem *item );
0072 
0073     // The progressitem is deleted immediately, we take 5s to go out,
0074     // so better not use mItem during this time.
0075     void setItemComplete() { mItem = nullptr; }
0076 
0077 public Q_SLOTS:
0078     void slotItemCanceled();
0079 
0080 protected:
0081     QProgressBar *mProgress;
0082     QPushButton  *mCancelButton;
0083     QLabel       *mItemLabel;
0084     QLabel       *mItemStatus;
0085     QFrame       *mFrame;
0086     ProgressItem *mItem;
0087 };
0088 
0089 class ProgressDialog : public OverlayWidget
0090 {
0091     Q_OBJECT
0092 public:
0093     ProgressDialog( QWidget *alignWidget, QWidget *parent, const char *name = nullptr );
0094     ~ProgressDialog() override;
0095     void setVisible( bool b ) override;
0096 
0097 public Q_SLOTS:
0098     void slotToggleVisibility();
0099 
0100 protected Q_SLOTS:
0101     void slotTransactionAdded( KDevelop::ProgressItem *item );
0102     void slotTransactionCompleted( KDevelop::ProgressItem *item );
0103     void slotTransactionCanceled( KDevelop::ProgressItem *item );
0104     void slotTransactionProgress( KDevelop::ProgressItem *item, unsigned int progress );
0105     void slotTransactionStatus( KDevelop::ProgressItem *item, const QString & );
0106     void slotTransactionLabel( KDevelop::ProgressItem *item, const QString & );
0107     void slotTransactionUsesBusyIndicator( KDevelop::ProgressItem *, bool );
0108 
0109     void slotClose();
0110     void slotShow();
0111     void slotHide();
0112 
0113 Q_SIGNALS:
0114     void visibilityChanged( bool );
0115 
0116 protected:
0117     void closeEvent( QCloseEvent * ) override;
0118 
0119     TransactionItemView *mScrollView;
0120     QMap<const ProgressItem *, TransactionItem *> mTransactionsToListviewItems;
0121     bool mWasLastShown;
0122 };
0123 
0124 } // namespace KDevelop
0125 
0126 #endif // __KDevelop_PROGRESSDIALOG_H__