3
0
mirror of https://github.com/Qortal/Brooklyn.git synced 2025-02-12 10:15:54 +00:00
Scare Crowe d2ebfd0519 QortalOS Titan 5.60.12
Screw the description like that inbred T3Q
2022-03-05 21:17:59 +05:00

183 lines
6.7 KiB
QML

/*
SPDX-FileCopyrightText: 2013 Marco Martin <mart@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.configuration 2.0
PlasmaCore.SvgItem {
id: root
//Those properties get updated by PanelConfiguration.qml whenever a value changes
svg: containmentControlsSvg
state: parent.state
width: naturalSize.width
height: naturalSize.height
//value expressed by this slider, this is the distance to offset
property int value
//name of the graphics to load
property string graphicElementName
//where the point "0" is
property int offset: 0
/*handle type: behave in different ways based on the alignment:
* alignment == Qt.AlignRight: Panel aligned to right and handle value relative to the right
* alignment == Qt.AlignLeft: Panel aligned to left and handle relative to the left
* (alignment != Qt.AlignRight) && (alignment & Qt.AlignRight): Panel aligned to the center and handle right of offset and value doubled
* (alignment != Qt.AlignLeft) && (alignment & Qt.AlignLeft): Panel aligned to the center and handle left of offset and value doubled
* else: Panel aligned to center and handle relative to the center
* Note that right/left and top/bottom are interchangeable
*/
property int alignment: panel.alignment
//The maximum/minimum Position (X/Y) the silder can be moved to
property int minimumPosition
property int maximumPosition
function syncPos() {
if (dialogRoot.vertical) {
if (alignment == Qt.AlignRight) {
y = root.parent.height - (value + offset + root.height/2)
} else if (alignment == Qt.AlignLeft) {
y = value + offset - root.height/2
} else {
if (root.alignment & Qt.AlignRight) {
y = root.parent.height/2 - value/2 + offset - root.height/2
} else if (root.alignment & Qt.AlignLeft) {
y = root.parent.height/2 + value/2 + offset - root.height/2
} else {
y = root.parent.height/2 + value + offset -root.height/2
}
}
} else {
if (alignment == Qt.AlignRight) {
x = root.parent.width - (value + offset + root.width/2)
} else if (alignment == Qt.AlignLeft) {
x = value + offset - root.width/2
} else {
if (root.alignment & Qt.AlignRight) {
x = root.parent.width/2 - value/2 + offset - root.width/2
} else if (root.alignment & Qt.AlignLeft) {
x = root.parent.width/2 + value/2 + offset -root.width/2
} else {
x = root.parent.width/2 + value + offset -root.width/2
}
}
}
}
onValueChanged: syncPos()
onOffsetChanged: syncPos()
onAlignmentChanged: syncPos()
Connections {
target: root.parent
function onWidthChanged() {
syncPos()
}
function onHeightChanged() {
syncPos()
}
}
MouseArea {
drag {
target: parent
axis: (dialogRoot.vertical) ? Drag.YAxis : Drag.XAxis
minimumX: root.minimumPosition
minimumY: root.minimumPosition
maximumX: root.maximumPosition
maximumY: root.maximumPosition
}
anchors {
fill: parent
leftMargin: (dialogRoot.vertical) ? 0 : -PlasmaCore.Units.gridUnit
rightMargin: (dialogRoot.vertical) ? 0 : -PlasmaCore.Units.gridUnit
topMargin: (dialogRoot.vertical) ? -PlasmaCore.Units.gridUnit : 0
bottomMargin: (dialogRoot.vertical) ? -PlasmaCore.Units.gridUnit : 0
}
cursorShape: dialogRoot.vertical ? Qt.SizeVerCursor : Qt.SizeHorCursor
onPositionChanged: {
if (dialogRoot.vertical) {
if (root.alignment == Qt.AlignRight) {
root.value = root.parent.height - (parent.y + offset + root.height/2)
} else if (alignment == Qt.AlignLeft) {
root.value = parent.y - offset + root.height/2
//Center
} else {
if (root.alignment & Qt.AlignRight) {
root.value = (root.parent.height/2 - parent.y + offset)*2 - root.height
} else if (root.alignment & Qt.AlignLeft) {
root.value = (parent.y - offset - root.parent.height/2)*2 + root.height
} else {
var value = parent.y - root.parent.height/2 - offset + root.height/2
//Snap
if (Math.abs(value) < 5) {
root.value = 0
} else {
root.value = value
}
}
}
} else {
if (root.alignment == Qt.AlignRight) {
root.value = root.parent.width - (parent.x + offset + root.width/2)
} else if (alignment == Qt.AlignLeft) {
root.value = parent.x - offset + root.width/2
//Center
} else {
if (root.alignment & Qt.AlignRight) {
root.value = (root.parent.width/2 - parent.x + offset)*2 - root.width
} else if (root.alignment & Qt.AlignLeft) {
root.value = (parent.x - offset - root.parent.width/2)*2 + root.width
} else {
var value = parent.x - root.parent.width/2 - offset + root.width/2
//Snap
if (Math.abs(value) < 5) {
root.value = 0
} else {
root.value = value
}
}
}
}
}
}
states: [
State {
name: "TopEdge"
PropertyChanges {
target: root
elementId: "north-" + graphicElementName
}
},
State {
name: "BottomEdge"
PropertyChanges {
target: root
elementId: "south-" + graphicElementName
}
},
State {
name: "LeftEdge"
PropertyChanges {
target: root
elementId: "west-" + graphicElementName
}
},
State {
name: "RightEdge"
PropertyChanges {
target: root
elementId: "east-" + graphicElementName
}
}
]
}