mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
129 lines
3.9 KiB
QML
129 lines
3.9 KiB
QML
import QtQuick
|
|
import QtQuick.Controls
|
|
import Quickshell
|
|
import qs.Commons
|
|
import qs.Widgets
|
|
|
|
Item {
|
|
id: root
|
|
|
|
required property ShellScreen screen
|
|
|
|
property string icon: ""
|
|
property string text: ""
|
|
property string suffix: ""
|
|
property var tooltipText: ""
|
|
property bool autoHide: false
|
|
property bool forceOpen: false
|
|
property bool forceClose: false
|
|
property bool oppositeDirection: false
|
|
property bool hovered: false
|
|
property bool rotateText: false
|
|
property color customBackgroundColor: "transparent"
|
|
property color customTextIconColor: "transparent"
|
|
property color customIconColor: "transparent"
|
|
property color customTextColor: "transparent"
|
|
|
|
readonly property string barPosition: Settings.getBarPositionForScreen(screen?.name)
|
|
readonly property bool isVerticalBar: barPosition === "left" || barPosition === "right"
|
|
|
|
signal shown
|
|
signal hidden
|
|
signal entered
|
|
signal exited
|
|
signal clicked
|
|
signal rightClicked
|
|
signal middleClicked
|
|
signal wheel(int delta)
|
|
|
|
// Size based on content for the content dimension, fill parent for the extended dimension
|
|
// Horizontal bars: width = content, height = fill parent (for extended click area)
|
|
// Vertical bars: width = fill parent, height = content
|
|
width: isVerticalBar ? parent.width : (pillLoader.item ? pillLoader.item.implicitWidth : 0)
|
|
height: isVerticalBar ? (pillLoader.item ? pillLoader.item.implicitHeight : 0) : parent.height
|
|
implicitWidth: pillLoader.item ? pillLoader.item.implicitWidth : 0
|
|
implicitHeight: pillLoader.item ? pillLoader.item.implicitHeight : 0
|
|
|
|
// Loader fills BarPill so child components can extend to full bar dimension
|
|
Loader {
|
|
id: pillLoader
|
|
anchors.fill: parent
|
|
sourceComponent: isVerticalBar ? verticalPillComponent : horizontalPillComponent
|
|
|
|
Component {
|
|
id: verticalPillComponent
|
|
BarPillVertical {
|
|
screen: root.screen
|
|
icon: root.icon
|
|
text: root.text
|
|
suffix: root.suffix
|
|
tooltipText: root.tooltipText
|
|
autoHide: root.autoHide
|
|
forceOpen: root.forceOpen
|
|
forceClose: root.forceClose
|
|
oppositeDirection: root.oppositeDirection
|
|
hovered: root.hovered
|
|
rotateText: root.rotateText
|
|
customBackgroundColor: root.customBackgroundColor
|
|
customTextIconColor: root.customTextIconColor
|
|
customIconColor: root.customIconColor
|
|
customTextColor: root.customTextColor
|
|
onShown: root.shown()
|
|
onHidden: root.hidden()
|
|
onEntered: root.entered()
|
|
onExited: root.exited()
|
|
onClicked: root.clicked()
|
|
onRightClicked: root.rightClicked()
|
|
onMiddleClicked: root.middleClicked()
|
|
onWheel: delta => root.wheel(delta)
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: horizontalPillComponent
|
|
BarPillHorizontal {
|
|
screen: root.screen
|
|
icon: root.icon
|
|
text: root.text
|
|
suffix: root.suffix
|
|
tooltipText: root.tooltipText
|
|
autoHide: root.autoHide
|
|
forceOpen: root.forceOpen
|
|
forceClose: root.forceClose
|
|
oppositeDirection: root.oppositeDirection
|
|
hovered: root.hovered
|
|
customBackgroundColor: root.customBackgroundColor
|
|
customTextIconColor: root.customTextIconColor
|
|
customIconColor: root.customIconColor
|
|
customTextColor: root.customTextColor
|
|
onShown: root.shown()
|
|
onHidden: root.hidden()
|
|
onEntered: root.entered()
|
|
onExited: root.exited()
|
|
onClicked: root.clicked()
|
|
onRightClicked: root.rightClicked()
|
|
onMiddleClicked: root.middleClicked()
|
|
onWheel: delta => root.wheel(delta)
|
|
}
|
|
}
|
|
}
|
|
|
|
function show() {
|
|
if (pillLoader.item && pillLoader.item.show) {
|
|
pillLoader.item.show();
|
|
}
|
|
}
|
|
|
|
function hide() {
|
|
if (pillLoader.item && pillLoader.item.hide) {
|
|
pillLoader.item.hide();
|
|
}
|
|
}
|
|
|
|
function showDelayed() {
|
|
if (pillLoader.item && pillLoader.item.showDelayed) {
|
|
pillLoader.item.showDelayed();
|
|
}
|
|
}
|
|
}
|