summaryrefslogtreecommitdiff
path: root/noctalia/.config/plugins/privacy-indicator/Panel.qml
diff options
context:
space:
mode:
authorseraphim <18ycm9tx@anonaddy.me>2026-07-24 20:57:33 +0700
committerseraphim <18ycm9tx@anonaddy.me>2026-07-24 20:57:33 +0700
commit395c08d0a334cdffbcc370384bee67f19f964399 (patch)
treed57cdf13385785aaf068d4f8408fe6cc2f095999 /noctalia/.config/plugins/privacy-indicator/Panel.qml
frst
Diffstat (limited to 'noctalia/.config/plugins/privacy-indicator/Panel.qml')
-rw-r--r--noctalia/.config/plugins/privacy-indicator/Panel.qml170
1 files changed, 170 insertions, 0 deletions
diff --git a/noctalia/.config/plugins/privacy-indicator/Panel.qml b/noctalia/.config/plugins/privacy-indicator/Panel.qml
new file mode 100644
index 0000000..0cfcc22
--- /dev/null
+++ b/noctalia/.config/plugins/privacy-indicator/Panel.qml
@@ -0,0 +1,170 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+import Quickshell
+import qs.Commons
+import qs.Widgets
+
+Item {
+ id: root
+
+ property var pluginApi: null
+
+ // Standard panel properties
+ readonly property var geometryPlaceholder: panelContainer
+ property real contentPreferredWidth: 320 * Style.uiScaleRatio
+ property real contentPreferredHeight: 450 * Style.uiScaleRatio
+
+ readonly property var mainInstance: pluginApi?.mainInstance
+ readonly property bool allowAttach: true
+
+ Rectangle {
+ id: panelContainer
+ anchors.fill: parent
+ color: "transparent"
+
+ ColumnLayout {
+ anchors.fill: parent
+ anchors.margins: Style.marginM
+ spacing: Style.marginM
+
+ // Header Box
+ NBox {
+ Layout.fillWidth: true
+ Layout.preferredHeight: headerRow.implicitHeight + Style.marginM * 2
+
+ RowLayout {
+ id: headerRow
+ anchors.fill: parent
+ anchors.margins: Style.marginM
+ spacing: Style.marginS
+
+ NIcon {
+ icon: "shield-check"
+ color: Color.mPrimary
+ pointSize: Style.fontSizeL
+ }
+
+ NText {
+ Layout.fillWidth: true
+ text: pluginApi?.tr("history.title")
+ font.weight: Style.fontWeightBold
+ pointSize: Style.fontSizeL
+ color: Color.mOnSurface
+ }
+
+ NIconButton {
+ icon: "trash"
+ baseSize: Style.baseWidgetSize * 0.8
+ onClicked: {
+ if (mainInstance) mainInstance.clearHistory();
+ }
+ }
+ }
+ }
+
+
+ Item {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ NScrollView {
+ id: scrollView
+ anchors.fill: parent
+ horizontalPolicy: ScrollBar.AlwaysOff
+ verticalPolicy: ScrollBar.AsNeeded
+
+ ColumnLayout {
+ width: scrollView.availableWidth
+ spacing: Style.marginS
+
+ Repeater {
+ model: mainInstance ? mainInstance.accessHistory : []
+
+ delegate: Rectangle {
+ Layout.fillWidth: true
+ implicitHeight: 56 * Style.uiScaleRatio
+ radius: Style.radiusM
+ color: Color.mSurfaceVariant
+
+ RowLayout {
+ anchors.fill: parent
+ anchors.margins: Style.marginM
+ spacing: Style.marginM
+
+ Rectangle {
+ width: 32 * Style.uiScaleRatio
+ height: 32 * Style.uiScaleRatio
+ radius: width/2
+ color: Qt.alpha(iconColor, 0.1)
+
+ readonly property color iconColor: Color.resolveColorKey(modelData.colorKey || "primary")
+
+ NIcon {
+ anchors.centerIn: parent
+ icon: modelData.icon
+ color: parent.iconColor
+ pointSize: Style.fontSizeM
+ }
+ }
+
+ ColumnLayout {
+ Layout.fillWidth: true
+ spacing: 0
+
+ NText {
+ Layout.fillWidth: true
+ text: modelData.appName
+ elide: Text.ElideRight
+ font.weight: Style.fontWeightBold
+ pointSize: Style.fontSizeM
+ }
+
+ RowLayout {
+ Layout.fillWidth: true
+ spacing: Style.marginS
+
+ NText {
+ text: modelData.time
+ color: Qt.alpha(Color.mOnSurface, 0.7)
+ pointSize: Style.fontSizeS
+ }
+
+ NText {
+ text: "•"
+ color: Qt.alpha(Color.mOnSurface, 0.3)
+ pointSize: Style.fontSizeS
+ }
+
+ NText {
+ text: {
+ const action = modelData.action || "started";
+ return pluginApi?.tr("history.action." + action) || action;
+ }
+ color: (modelData.action || "started") === "stopped" ? Color.resolveColorKey("error") : Color.resolveColorKey("primary")
+ font.weight: Style.fontWeightBold
+ pointSize: Style.fontSizeS
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Empty state
+ NText {
+ Layout.alignment: Qt.AlignHCenter
+ visible: (!mainInstance || mainInstance.accessHistory.length === 0)
+ text: pluginApi?.tr("history.empty")
+ color: Qt.alpha(Color.mOnSurface, 0.5)
+ pointSize: Style.fontSizeM
+ Layout.topMargin: Style.marginL
+ }
+
+ Item { Layout.fillHeight: true } // spacer
+ }
+ }
+ }
+ }
+ }
+}