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