File indexing completed on 2024-04-28 05:35:58
0001 /* 0002 SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #pragma once 0008 0009 #include <Plasma/Theme> 0010 #include <PlasmaQuick/PopupPlasmaWindow> 0011 #include <PlasmaQuick/SharedQmlEngine> 0012 0013 #include "panelview.h" 0014 0015 #include <QJSValue> 0016 #include <QPointer> 0017 #include <QQmlListProperty> 0018 #include <QQuickItem> 0019 #include <QQuickView> 0020 #include <QStandardItemModel> 0021 #include <plasmaquick/plasmawindow.h> 0022 0023 class PanelView; 0024 0025 namespace Plasma 0026 { 0027 class Containment; 0028 } 0029 0030 class PanelRulerView : public PlasmaQuick::PlasmaWindow 0031 { 0032 Q_OBJECT 0033 0034 public: 0035 PanelRulerView(Plasma::Containment *interface, PanelView *panelView, PanelConfigView *mainConfigView); 0036 ~PanelRulerView() override; 0037 0038 void syncPanelLocation(); 0039 0040 protected: 0041 void showEvent(QShowEvent *ev) override; 0042 void focusOutEvent(QFocusEvent *ev) override; 0043 0044 private: 0045 Plasma::Containment *m_containment; 0046 PanelView *m_panelView; 0047 PanelConfigView *m_mainConfigView; 0048 LayerShellQt::Window *m_layerWindow = nullptr; 0049 }; 0050 0051 class PanelConfigView : public PlasmaQuick::PopupPlasmaWindow 0052 { 0053 Q_OBJECT 0054 Q_PROPERTY(PanelView::VisibilityMode visibilityMode READ visibilityMode WRITE setVisibilityMode NOTIFY visibilityModeChanged) 0055 Q_PROPERTY(PanelView::OpacityMode opacityMode READ opacityMode WRITE setOpacityMode NOTIFY opacityModeChanged) 0056 Q_PROPERTY(KSvg::FrameSvg::EnabledBorders enabledBorders READ enabledBorders NOTIFY enabledBordersChanged) 0057 Q_PROPERTY(PanelRulerView *panelRulerView READ panelRulerView CONSTANT) 0058 0059 public: 0060 PanelConfigView(Plasma::Containment *interface, PanelView *panelView); 0061 ~PanelConfigView() override; 0062 0063 void init(); 0064 0065 PanelView::VisibilityMode visibilityMode() const; 0066 void setVisibilityMode(PanelView::VisibilityMode mode); 0067 0068 PanelView::OpacityMode opacityMode() const; 0069 void setOpacityMode(PanelView::OpacityMode mode); 0070 0071 KSvg::FrameSvg::EnabledBorders enabledBorders() const; 0072 0073 PanelRulerView *panelRulerView(); 0074 0075 friend class PanelRulerView; 0076 0077 protected: 0078 void keyPressEvent(QKeyEvent *ev) override; 0079 void showEvent(QShowEvent *ev) override; 0080 void hideEvent(QHideEvent *ev) override; 0081 void focusInEvent(QFocusEvent *ev) override; 0082 0083 public Q_SLOTS: 0084 void showAddWidgetDialog(); 0085 void addPanelSpacer(); 0086 0087 protected Q_SLOTS: 0088 void syncGeometry(); 0089 0090 Q_SIGNALS: 0091 void visibilityModeChanged(); 0092 void opacityModeChanged(); 0093 void enabledBordersChanged(); 0094 0095 private: 0096 void focusVisibilityCheck(QWindow *focusWindow); 0097 0098 Plasma::Containment *m_containment; 0099 QPointer<PanelView> m_panelView; 0100 QPointer<QWindow> m_focusWindow; 0101 std::unique_ptr<PanelRulerView> m_panelRulerView; 0102 KSvg::FrameSvg::EnabledBorders m_enabledBorders = KSvg::FrameSvg::AllBorders; 0103 Plasma::Theme m_theme; 0104 QTimer m_screenSyncTimer; 0105 std::unique_ptr<PlasmaQuick::SharedQmlEngine> m_sharedQmlEngine; 0106 };