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