kwin/kcmkwin/kwindecoration/declarative-plugin/previewsettings.h
Martin Gräßlin d5233a6b6f [kcmkwin/deco] Bring back a decoration buttons configuration interface
The decoration button configuration interface is merged into the QML
part using two list views (left buttons, right buttons) and a grid
view for all the available buttons.
2014-12-09 16:07:27 +01:00

163 lines
5.7 KiB
C++

/*
* Copyright 2014 Martin Gräßlin <mgraesslin@kde.org>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License or (at your option) version 3 or any later version
* accepted by the membership of KDE e.V. (or its successor approved
* by the membership of KDE e.V.), which shall act as a proxy
* defined in Section 14 of version 3 of the license.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef KDECOARTIONS_PREVIEW_SETTINGS_H
#define KDECOARTIONS_PREVIEW_SETTINGS_H
#include <KDecoration2/Private/DecorationSettingsPrivate>
#include <KDecoration2/DecorationSettings>
#include <QObject>
#include <QAbstractListModel>
namespace KDecoration2
{
namespace Preview
{
class ButtonsModel;
class PreviewBridge;
class BorderSizesModel : public QAbstractListModel
{
Q_OBJECT
public:
explicit BorderSizesModel(QObject *parent = 0);
virtual ~BorderSizesModel();
QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex& parent = QModelIndex()) const override;
QHash< int, QByteArray > roleNames() const override;
private:
QList<BorderSize> m_borders = QList<BorderSize>({
BorderSize::None,
BorderSize::NoSides,
BorderSize::Tiny,
BorderSize::Normal,
BorderSize::Large,
BorderSize::VeryLarge,
BorderSize::Huge,
BorderSize::VeryHuge,
BorderSize::Oversized
});
};
class PreviewSettings : public QObject, public DecorationSettingsPrivate
{
Q_OBJECT
Q_PROPERTY(bool onAllDesktopsAvailable READ isOnAllDesktopsAvailable WRITE setOnAllDesktopsAvailable NOTIFY onAllDesktopsAvailableChanged)
Q_PROPERTY(bool alphaChannelSupported READ isAlphaChannelSupported WRITE setAlphaChannelSupported NOTIFY alphaChannelSupportedChanged)
Q_PROPERTY(bool closeOnDoubleClickOnMenu READ isCloseOnDoubleClickOnMenu WRITE setCloseOnDoubleClickOnMenu NOTIFY closeOnDoubleClickOnMenuChanged)
Q_PROPERTY(QAbstractItemModel *leftButtonsModel READ leftButtonsModel CONSTANT)
Q_PROPERTY(QAbstractItemModel *rightButtonsModel READ rightButtonsModel CONSTANT)
Q_PROPERTY(QAbstractItemModel *availableButtonsModel READ availableButtonsModel CONSTANT)
Q_PROPERTY(QAbstractItemModel *borderSizesModel READ borderSizesModel CONSTANT)
Q_PROPERTY(int borderSizesIndex READ borderSizesIndex WRITE setBorderSizesIndex NOTIFY borderSizesIndexChanged)
Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
public:
explicit PreviewSettings(DecorationSettings *parent);
virtual ~PreviewSettings();
bool isAlphaChannelSupported() const override;
bool isOnAllDesktopsAvailable() const override;
bool isCloseOnDoubleClickOnMenu() const override {
return m_closeOnDoubleClick;
}
BorderSize borderSize() const override;
void setOnAllDesktopsAvailable(bool available);
void setAlphaChannelSupported(bool supported);
void setCloseOnDoubleClickOnMenu(bool enabled);
QAbstractItemModel *leftButtonsModel() const;
QAbstractItemModel *rightButtonsModel() const;
QAbstractItemModel *availableButtonsModel() const;
QAbstractItemModel *borderSizesModel() const {
return m_borderSizes;
}
QVector< DecorationButtonType > decorationButtonsLeft() const override;
QVector< DecorationButtonType > decorationButtonsRight() const override;
Q_INVOKABLE void addButtonToLeft(int row);
Q_INVOKABLE void addButtonToRight(int row);
int borderSizesIndex() const {
return m_borderSize;
}
void setBorderSizesIndex(int index);
QFont font() const {
return m_font;
}
void setFont(const QFont &font);
Q_SIGNALS:
void onAllDesktopsAvailableChanged(bool);
void alphaChannelSupportedChanged(bool);
void closeOnDoubleClickOnMenuChanged(bool);
void borderSizesIndexChanged(int);
void fontChanged(const QFont &);
private:
bool m_alphaChannelSupported;
bool m_onAllDesktopsAvailable;
bool m_closeOnDoubleClick;
ButtonsModel *m_leftButtons;
ButtonsModel *m_rightButtons;
ButtonsModel *m_availableButtons;
BorderSizesModel *m_borderSizes;
int m_borderSize;
QFont m_font;
};
class Settings : public QObject
{
Q_OBJECT
Q_PROPERTY(KDecoration2::Preview::PreviewBridge *bridge READ bridge WRITE setBridge NOTIFY bridgeChanged)
Q_PROPERTY(KDecoration2::DecorationSettings *settings READ settingsPointer NOTIFY settingsChanged)
Q_PROPERTY(int borderSizesIndex READ borderSizesIndex WRITE setBorderSizesIndex NOTIFY borderSizesIndexChanged)
public:
explicit Settings(QObject *parent = nullptr);
virtual ~Settings();
PreviewBridge *bridge() const;
void setBridge(PreviewBridge *bridge);
QSharedPointer<DecorationSettings> settings() const;
DecorationSettings *settingsPointer() const;
int borderSizesIndex() const {
return m_borderSize;
}
void setBorderSizesIndex(int index);
Q_SIGNALS:
void bridgeChanged();
void settingsChanged();
void borderSizesIndexChanged(int);
private:
void createSettings();
QPointer<PreviewBridge> m_bridge;
QSharedPointer<KDecoration2::DecorationSettings> m_settings;
PreviewSettings *m_previewSettings = nullptr;
int m_borderSize = 3;
};
}
}
#endif