dotfiles/local/share/plasma/plasmoids/Nori.Weather/contents/ui/Representation.qml
2025-04-22 01:30:36 +10:00

133 lines
4.7 KiB
QML

/*
* SPDX-FileCopyrightText: zayronxio
* SPDX-License-Identifier: GPL-3.0-or-later
*/
import QtQuick 2.4
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import Qt5Compat.GraphicalEffects
import org.kde.kirigami as Kirigami
import org.kde.ksvg 1.0 as KSvg
//import QtQuick.Controls 2.15
//import QtQuick.Effects
Item {
id: main
property int plasmoidWidV: 0
property int plasmoidWidH: 0
onVisibleChanged: {
root.visible = !root.visible
}
KSvg.FrameSvgItem {
id : backgroundSvg
visible: false
imagePath: "dialogs/background"
}
Plasmoid.status: root.visible ? PlasmaCore.Types.RequiresAttentionStatus : PlasmaCore.Types.PassiveStatus
PlasmaCore.Dialog {
id: root
objectName: "popupWindow"
flags: Qt.WindowStaysOnTopHint
location: PlasmaCore.Types.Floating
hideOnWindowDeactivate: true
onHeightChanged: {
var pos = popupPosition(width, height);
x = pos.x;
y = pos.y;
}
onWidthChanged: {
var pos = popupPosition(width, height);
x = pos.x;
y = pos.y;
}
function toggle() {
main.visible = !main.visible;
}
onVisibleChanged: {
if (visible) {
var pos = popupPosition(width, height);
x = pos.x;
y = pos.y;
//animation1.start()
}
}
function popupPosition(width, height) {
var screenAvail = wrapper.availableScreenRect;
var screen = wrapper.screenGeometry;
var panelH = wrapper.height
var panelW = wrapper.width
var horizMidPoint = screen.x + (screen.width / 2);
var vertMidPoint = screen.y + (screen.height / 2);
var appletTopLeft = parent.mapToGlobal(0, 0);
function calculatePosition(x, y) {
return Qt.point(x, y);
}
switch (plasmoid.location) {
case PlasmaCore.Types.BottomEdge:
var x = appletTopLeft.x < (screen.width - width/2 + backgroundSvg.margins.left + Kirigami.Units.gridUnit) ? appletTopLeft.x < ((width/2) + backgroundSvg.margins.left) ? Kirigami.Units.gridUnit - backgroundSvg.margins.left : appletTopLeft.x - width/2 : screen.width - (width - backgroundSvg.margins.left*2) - Kirigami.Units.gridUnit ;
var y = appletTopLeft.y - height - Kirigami.Units.gridUnit
return calculatePosition(x, y);
case PlasmaCore.Types.TopEdge:
x = appletTopLeft.x < (width/2 + backgroundSvg.margins.left + Kirigami.Units.gridUnit) ? backgroundSvg.margins.left : appletTopLeft.x > (screen.width - (width/2) - backgroundSvg.margins.left - Kirigami.Units.gridUnit) ? screen.width - width - backgroundSvg.margins.left : appletTopLeft.x - width/2 - backgroundSvg.margins.left
y = appletTopLeft.y + panelH + Kirigami.Units.gridUnit
return calculatePosition(x, y);
case PlasmaCore.Types.LeftEdge:
x = appletTopLeft.x + panelW + Kirigami.Units.gridUnit / 2;
y = appletTopLeft.y < screen.height - height ? appletTopLeft.y : appletTopLeft.y - height + iconUser.height / 2;
return calculatePosition(x, y);
case PlasmaCore.Types.RightEdge:
x = appletTopLeft.x - width - Kirigami.Units.gridUnit / 2;
y = appletTopLeft.y < screen.height - height ? appletTopLeft.y : screen.height - height - Kirigami.Units.gridUnit / 5;
return calculatePosition(x, y);
default:
return;
}
}
FocusScope {
id: rootItem
Layout.minimumWidth: Kirigami.Units.gridUnit * 20
Layout.maximumWidth: minimumWidth
Layout.minimumHeight: Kirigami.Units.gridUnit * 9 // 170
Layout.maximumHeight: minimumHeight
focus: true
FullContainer {
id: fullContainer
leftPanelMargin: backgroundSvg.margins.left
topPanelMargin: backgroundSvg.margins.top
exedentHight: backgroundSvg.margins.top + backgroundSvg.margins.bottom
widthOfLeftPanel: 130
width: widthOfLeftPanel
height: parent.height
}
ItemForecasts {
width: parent.width - fullContainer.width
height: parent.height
anchors.left: fullContainer.right
}
}
}
}