File indexing completed on 2024-05-12 16:01:43

0001 /* This file is part of KimageShop^WKrayon^WKrita
0002  *
0003  *  SPDX-FileCopyrightText: 2003-2006 Boudewijn Rempt <boud@valdyas.org>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #ifndef KIS_STATUSBAR_H
0008 #define KIS_STATUSBAR_H
0009 
0010 #include <QObject>
0011 #include <QPointer>
0012 #include <QIcon>
0013 #include <QStatusBar>
0014 
0015 #include <kis_types.h>
0016 #include "KisView.h"
0017 
0018 class QLabel;
0019 class QToolButton;
0020 class QPushButton;
0021 class QBoxLayout;
0022 class KSqueezedTextLabel;
0023 class KisViewManager;
0024 class KisProgressWidget;
0025 class KoProgressUpdater;
0026 class KisMemoryReportButton;
0027 class KisAngleSelector;
0028 
0029 #include "kritaui_export.h"
0030 
0031 class KRITAUI_EXPORT KisStatusBar : public QObject
0032 {
0033     class StatusBarItem
0034     {
0035     public:
0036         StatusBarItem()
0037             : m_widget(0) {}
0038 
0039         StatusBarItem(QWidget * widget)
0040             : m_widget(widget) {}
0041 
0042         bool operator==(const StatusBarItem& rhs) {
0043             return m_widget == rhs.m_widget;
0044         }
0045 
0046         bool operator!=(const StatusBarItem& rhs) {
0047             return m_widget != rhs.m_widget;
0048         }
0049 
0050         QWidget * widget() const {
0051             return m_widget;
0052         }
0053 
0054         void show() const {
0055             m_widget->show();
0056         }
0057         void hide() const {
0058             m_widget->hide();
0059         }
0060 
0061 
0062     private:
0063         QPointer<QWidget> m_widget;
0064     };
0065 
0066     Q_OBJECT
0067 
0068 public:
0069 
0070     explicit KisStatusBar(KisViewManager *view);
0071     ~KisStatusBar() override;
0072 
0073     void setup();
0074     void setView(QPointer<KisView> imageView);
0075     void hideAllStatusBarItems();
0076     void showAllStatusBarItems();
0077 
0078     KoProgressUpdater *progressUpdater();
0079 
0080     void addExtraWidget(QWidget *widget);
0081     void removeExtraWidget(QWidget *widget);
0082 
0083 public Q_SLOTS:
0084 
0085     void imageSizeChanged();
0086     void setSelection(KisImageWSP image);
0087     void setProfile(KisImageWSP image);
0088     void setHelp(const QString &t);
0089     void updateStatusBarProfileLabel();
0090     void updateSelectionToolTip();
0091 
0092 private Q_SLOTS:
0093     void updateSelectionIcon();
0094     void showMemoryInfoToolTip();
0095     void slotCanvasAngleSelectorAngleChanged(qreal angle);
0096     void slotCanvasRotationChanged();
0097 
0098 Q_SIGNALS:
0099     void sigCancellationRequested();
0100 
0101     /// tell the listener that the memory usage has changed
0102     /// and it needs to update its stats
0103     void memoryStatusUpdated();
0104 
0105 private:
0106 
0107     void removeStatusBarItem(QWidget *widget);
0108     void addStatusBarItem(QWidget *widget, int stretch = 0, bool permanent = false);
0109     void updateMemoryStatus();
0110 
0111 private:
0112 
0113     QPointer<KisViewManager> m_viewManager;
0114     QPointer<KisView> m_imageView;
0115     QPointer<QStatusBar> m_statusBar;
0116     KisProgressWidget *m_progress {nullptr};
0117     QScopedPointer<KoProgressUpdater> m_progressUpdater;
0118 
0119     QToolButton *m_selectionStatus {nullptr};
0120     KisMemoryReportButton *m_memoryReportBox {nullptr};
0121     QWidget *m_extraWidgetsParent {nullptr};
0122     QBoxLayout *m_extraWidgetsLayout {nullptr};
0123     KisAngleSelector *m_canvasAngleSelector {nullptr};
0124     QToolButton *m_fullscreenToggle {nullptr};
0125 
0126     KSqueezedTextLabel *m_statusBarStatusLabel {nullptr};
0127     KSqueezedTextLabel *m_statusBarProfileLabel {nullptr};
0128 
0129     QString m_shortMemoryTag;
0130     QString m_longMemoryTag;
0131     QIcon m_memoryStatusIcon;
0132 
0133     QVector<StatusBarItem> m_statusBarItems;
0134 
0135     bool m_memoryWarningLogged {false};
0136 };
0137 
0138 #endif