File indexing completed on 2024-05-19 04:29:08

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 #include <boost/operators.hpp>
0018 
0019 class QLabel;
0020 class QToolButton;
0021 class QPushButton;
0022 class QBoxLayout;
0023 class KSqueezedTextLabel;
0024 class KisViewManager;
0025 class KisProgressWidget;
0026 class KoProgressUpdater;
0027 class KisMemoryReportButton;
0028 class KisAngleSelector;
0029 
0030 #include "kritaui_export.h"
0031 
0032 class KRITAUI_EXPORT KisStatusBar : public QObject
0033 {
0034     class StatusBarItem : public boost::equality_comparable<StatusBarItem>
0035     {
0036     public:
0037         StatusBarItem()
0038             : m_widget(0) {}
0039 
0040         StatusBarItem(QWidget * widget)
0041             : m_widget(widget) {}
0042 
0043         bool operator==(const StatusBarItem& rhs) {
0044             return m_widget == rhs.m_widget;
0045         }
0046 
0047         QWidget * widget() const {
0048             return m_widget;
0049         }
0050 
0051         void show() const {
0052             m_widget->show();
0053         }
0054         void hide() const {
0055             m_widget->hide();
0056         }
0057 
0058 
0059     private:
0060         QPointer<QWidget> m_widget;
0061     };
0062 
0063     Q_OBJECT
0064 
0065 public:
0066 
0067     explicit KisStatusBar(KisViewManager *view);
0068     ~KisStatusBar() override;
0069 
0070     void setup();
0071     void setView(QPointer<KisView> imageView);
0072     void hideAllStatusBarItems();
0073     void showAllStatusBarItems();
0074 
0075     KoProgressUpdater *progressUpdater();
0076 
0077     void addExtraWidget(QWidget *widget);
0078     void removeExtraWidget(QWidget *widget);
0079 
0080 public Q_SLOTS:
0081 
0082     void imageSizeChanged();
0083     void setSelection(KisImageWSP image);
0084     void setProfile(KisImageWSP image);
0085     void setHelp(const QString &t);
0086     void updateStatusBarProfileLabel();
0087     void updateSelectionToolTip();
0088 
0089 private Q_SLOTS:
0090     void updateSelectionIcon();
0091     void showMemoryInfoToolTip();
0092     void slotCanvasAngleSelectorAngleChanged(qreal angle);
0093     void slotCanvasRotationChanged();
0094 
0095 Q_SIGNALS:
0096     void sigCancellationRequested();
0097 
0098 private:
0099 
0100     void removeStatusBarItem(QWidget *widget);
0101     void addStatusBarItem(QWidget *widget, int stretch = 0, bool permanent = false);
0102     void updateMemoryStatus();
0103 
0104 private:
0105 
0106     QPointer<KisViewManager> m_viewManager;
0107     QPointer<KisView> m_imageView;
0108     QPointer<QStatusBar> m_statusBar;
0109     KisProgressWidget *m_progress {nullptr};
0110     QScopedPointer<KoProgressUpdater> m_progressUpdater;
0111 
0112     QToolButton *m_selectionStatus {nullptr};
0113     KisMemoryReportButton *m_memoryReportBox {nullptr};
0114     QWidget *m_extraWidgetsParent {nullptr};
0115     QBoxLayout *m_extraWidgetsLayout {nullptr};
0116     KisAngleSelector *m_canvasAngleSelector {nullptr};
0117     QToolButton *m_fullscreenToggle {nullptr};
0118 
0119     KSqueezedTextLabel *m_statusBarStatusLabel {nullptr};
0120     KSqueezedTextLabel *m_statusBarProfileLabel {nullptr};
0121 
0122     QString m_shortMemoryTag;
0123     QString m_longMemoryTag;
0124     QIcon m_memoryStatusIcon;
0125 
0126     QVector<StatusBarItem> m_statusBarItems;
0127 
0128     bool m_memoryWarningLogged {false};
0129 };
0130 
0131 #endif