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 };