File indexing completed on 2026-08-09 14:49:16
0001 /* 0002 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 #pragma once 0007 0008 #include <KDecoration2/DecorationSettings> 0009 #include <KDecoration2/Private/DecorationSettingsPrivate> 0010 #include <QAbstractListModel> 0011 #include <QObject> 0012 0013 namespace KDecoration2 0014 { 0015 0016 namespace Preview 0017 { 0018 class ButtonsModel; 0019 class PreviewBridge; 0020 0021 class BorderSizesModel : public QAbstractListModel 0022 { 0023 Q_OBJECT 0024 public: 0025 explicit BorderSizesModel(QObject *parent = nullptr); 0026 ~BorderSizesModel() override; 0027 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0028 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0029 QHash<int, QByteArray> roleNames() const override; 0030 0031 private: 0032 QList<BorderSize> m_borders = QList<BorderSize>({BorderSize::None, 0033 BorderSize::NoSides, 0034 BorderSize::Tiny, 0035 BorderSize::Normal, 0036 BorderSize::Large, 0037 BorderSize::VeryLarge, 0038 BorderSize::Huge, 0039 BorderSize::VeryHuge, 0040 BorderSize::Oversized}); 0041 }; 0042 0043 class PreviewSettings : public QObject, public DecorationSettingsPrivate 0044 { 0045 Q_OBJECT 0046 Q_PROPERTY(bool onAllDesktopsAvailable READ isOnAllDesktopsAvailable WRITE setOnAllDesktopsAvailable NOTIFY onAllDesktopsAvailableChanged) 0047 Q_PROPERTY(bool alphaChannelSupported READ isAlphaChannelSupported WRITE setAlphaChannelSupported NOTIFY alphaChannelSupportedChanged) 0048 Q_PROPERTY(bool closeOnDoubleClickOnMenu READ isCloseOnDoubleClickOnMenu WRITE setCloseOnDoubleClickOnMenu NOTIFY closeOnDoubleClickOnMenuChanged) 0049 Q_PROPERTY(QAbstractItemModel *leftButtonsModel READ leftButtonsModel CONSTANT) 0050 Q_PROPERTY(QAbstractItemModel *rightButtonsModel READ rightButtonsModel CONSTANT) 0051 Q_PROPERTY(QAbstractItemModel *availableButtonsModel READ availableButtonsModel CONSTANT) 0052 Q_PROPERTY(QAbstractItemModel *borderSizesModel READ borderSizesModel CONSTANT) 0053 Q_PROPERTY(int borderSizesIndex READ borderSizesIndex WRITE setBorderSizesIndex NOTIFY borderSizesIndexChanged) 0054 Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged) 0055 public: 0056 explicit PreviewSettings(DecorationSettings *parent); 0057 ~PreviewSettings() override; 0058 bool isAlphaChannelSupported() const override; 0059 bool isOnAllDesktopsAvailable() const override; 0060 bool isCloseOnDoubleClickOnMenu() const override 0061 { 0062 return m_closeOnDoubleClick; 0063 } 0064 BorderSize borderSize() const override; 0065 0066 void setOnAllDesktopsAvailable(bool available); 0067 void setAlphaChannelSupported(bool supported); 0068 void setCloseOnDoubleClickOnMenu(bool enabled); 0069 0070 QAbstractItemModel *leftButtonsModel() const; 0071 QAbstractItemModel *rightButtonsModel() const; 0072 QAbstractItemModel *availableButtonsModel() const; 0073 QAbstractItemModel *borderSizesModel() const 0074 { 0075 return m_borderSizes; 0076 } 0077 0078 QVector<DecorationButtonType> decorationButtonsLeft() const override; 0079 QVector<DecorationButtonType> decorationButtonsRight() const override; 0080 0081 Q_INVOKABLE void addButtonToLeft(int row); 0082 Q_INVOKABLE void addButtonToRight(int row); 0083 0084 int borderSizesIndex() const 0085 { 0086 return m_borderSize; 0087 } 0088 void setBorderSizesIndex(int index); 0089 0090 QFont font() const override 0091 { 0092 return m_font; 0093 } 0094 void setFont(const QFont &font); 0095 0096 Q_SIGNALS: 0097 void onAllDesktopsAvailableChanged(bool); 0098 void alphaChannelSupportedChanged(bool); 0099 void closeOnDoubleClickOnMenuChanged(bool); 0100 void borderSizesIndexChanged(int); 0101 void fontChanged(const QFont &); 0102 0103 private: 0104 bool m_alphaChannelSupported; 0105 bool m_onAllDesktopsAvailable; 0106 bool m_closeOnDoubleClick; 0107 ButtonsModel *m_leftButtons; 0108 ButtonsModel *m_rightButtons; 0109 ButtonsModel *m_availableButtons; 0110 BorderSizesModel *m_borderSizes; 0111 int m_borderSize; 0112 QFont m_font; 0113 }; 0114 0115 class Settings : public QObject 0116 { 0117 Q_OBJECT 0118 Q_PROPERTY(KDecoration2::Preview::PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged) 0119 Q_PROPERTY(KDecoration2::DecorationSettings *settings READ settingsPointer NOTIFY settingsChanged) 0120 Q_PROPERTY(int borderSizesIndex READ borderSizesIndex WRITE setBorderSizesIndex NOTIFY borderSizesIndexChanged) 0121 public: 0122 explicit Settings(QObject *parent = nullptr); 0123 ~Settings() override; 0124 0125 PreviewBridge *bridge() const; 0126 void setBridge(PreviewBridge *bridge); 0127 0128 QSharedPointer<DecorationSettings> settings() const; 0129 DecorationSettings *settingsPointer() const; 0130 int borderSizesIndex() const 0131 { 0132 return m_borderSize; 0133 } 0134 void setBorderSizesIndex(int index); 0135 0136 Q_SIGNALS: 0137 void bridgeChanged(); 0138 void settingsChanged(); 0139 void borderSizesIndexChanged(int); 0140 0141 private: 0142 void createSettings(); 0143 QPointer<PreviewBridge> m_bridge; 0144 QSharedPointer<KDecoration2::DecorationSettings> m_settings; 0145 PreviewSettings *m_previewSettings = nullptr; 0146 int m_borderSize = 3; 0147 }; 0148 0149 } 0150 }