115 lines
2.9 KiB
QML
115 lines
2.9 KiB
QML
pragma Singleton
|
|
|
|
import QtQuick
|
|
import QtQuick.Layouts
|
|
// Workspaces.qml
|
|
import Quickshell
|
|
import Quickshell.Widgets
|
|
import qs.Common
|
|
import qs.Services
|
|
|
|
|
|
Singleton {
|
|
|
|
function start(component, type) {
|
|
HoverMediator.component = component
|
|
HoverMediator.type = type
|
|
hoverTimer.start()
|
|
}
|
|
|
|
function exit() {
|
|
hoverTimer.stop()
|
|
wsPopUp.opacity=0
|
|
}
|
|
|
|
PopupWindow {
|
|
id: hoverPopUp
|
|
|
|
anchor.item: HoverMediator.component
|
|
property bool initialized: false
|
|
anchor.rect.y: HoverMediator.y
|
|
anchor.rect.x: (HoverMediator.x - this.implicitWidth)/2
|
|
implicitHeight: wsPopUp.implicitHeight
|
|
implicitWidth: wsPopUp.implicitWidth
|
|
// implicitHeight: HoverMediator.height
|
|
// implicitWidth: HoverMediator.width
|
|
|
|
color:"transparent"
|
|
visible:true
|
|
|
|
Component {
|
|
id: stub
|
|
Text {
|
|
text: "stub"
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: audio
|
|
Text {
|
|
property string sinkDescription:(HoverMediator.component && HoverMediator.component.sink)? HoverMediator.component.sink.description : ""
|
|
text: sinkDescription
|
|
color:"white"
|
|
}
|
|
}
|
|
|
|
Component {
|
|
id: workspaceComponent
|
|
|
|
RowLayout {
|
|
id: wsPopUpRow
|
|
|
|
property int workspaceIndexAlign: HoverMediator.component.workspaceIndexAlign || 0
|
|
|
|
Repeater {
|
|
|
|
property var modelo: HyprlandService.sortedDesktopApplications.get(parent.workspaceIndexAlign)
|
|
|
|
model: modelo
|
|
delegate: IconImage {
|
|
|
|
required property var modelData
|
|
|
|
width:30; height:30
|
|
source: (modelData && modelData.icon) ? Quickshell.iconPath(modelData.icon, 1) : ""
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
WrapperRectangle {
|
|
id: wsPopUp
|
|
|
|
leftMargin: (Theme.gaps * 2)
|
|
rightMargin: (Theme.gaps * 2)
|
|
topMargin: Theme.gaps
|
|
bottomMargin: Theme.gaps
|
|
color: Theme.backgroudColor
|
|
radius: 25
|
|
opacity: 0
|
|
Behavior on opacity {
|
|
NumberAnimation { property: "opacity"; duration: Theme.animationDuration}
|
|
}
|
|
|
|
Loader {
|
|
id: hoverLoader
|
|
sourceComponent: {
|
|
if(!HoverMediator.type) return stub
|
|
if(HoverMediator.type === "workspace") return workspaceComponent
|
|
if(HoverMediator.type === "audio") return audio
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
Timer {
|
|
id: hoverTimer
|
|
|
|
interval: 300
|
|
onTriggered: {
|
|
wsPopUp.opacity = 1
|
|
// hoverPopUp.visible = true
|
|
}
|
|
}
|
|
} |