mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-29 07:52:50 -05:00
Remove unused files and code
This commit is contained in:
@@ -1,26 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import Quickshell
|
|
||||||
import Quickshell.Io
|
|
||||||
pragma Singleton
|
|
||||||
pragma ComponentBehavior: Bound
|
|
||||||
|
|
||||||
Singleton {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
// Color Picker Process
|
|
||||||
Process {
|
|
||||||
id: colorPickerProcess
|
|
||||||
command: ["hyprpicker", "-a"]
|
|
||||||
running: false
|
|
||||||
|
|
||||||
onExited: (exitCode) => {
|
|
||||||
if (exitCode !== 0) {
|
|
||||||
console.warn("Color picker failed. Make sure hyprpicker is installed: yay -S hyprpicker")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function pickColor() {
|
|
||||||
colorPickerProcess.running = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -149,15 +149,12 @@ Singleton {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleWorkspaceActivated(data) {
|
function handleWorkspaceActivated(data) {
|
||||||
console.log("DEBUG: WorkspaceActivated event - ID:", data.id, "focused:", data.focused)
|
|
||||||
|
|
||||||
// Update focused workspace
|
// Update focused workspace
|
||||||
focusedWorkspaceId = data.id
|
focusedWorkspaceId = data.id
|
||||||
focusedWorkspaceIndex = allWorkspaces.findIndex(w => w.id === data.id)
|
focusedWorkspaceIndex = allWorkspaces.findIndex(w => w.id === data.id)
|
||||||
|
|
||||||
if (focusedWorkspaceIndex >= 0) {
|
if (focusedWorkspaceIndex >= 0) {
|
||||||
var activatedWs = allWorkspaces[focusedWorkspaceIndex]
|
var activatedWs = allWorkspaces[focusedWorkspaceIndex]
|
||||||
console.log("DEBUG: Found workspace - idx:", activatedWs.idx + 1, "output:", activatedWs.output, "was_active:", activatedWs.is_active)
|
|
||||||
|
|
||||||
// Update workspace states properly
|
// Update workspace states properly
|
||||||
// First, deactivate all workspaces on this output
|
// First, deactivate all workspaces on this output
|
||||||
@@ -173,7 +170,6 @@ Singleton {
|
|||||||
allWorkspaces[focusedWorkspaceIndex].is_focused = data.focused || false
|
allWorkspaces[focusedWorkspaceIndex].is_focused = data.focused || false
|
||||||
|
|
||||||
currentOutput = activatedWs.output || ""
|
currentOutput = activatedWs.output || ""
|
||||||
console.log("DEBUG: Activated workspace", activatedWs.idx + 1, "on", currentOutput)
|
|
||||||
|
|
||||||
updateCurrentOutputWorkspaces()
|
updateCurrentOutputWorkspaces()
|
||||||
} else {
|
} else {
|
||||||
@@ -256,7 +252,6 @@ Singleton {
|
|||||||
// Use sequential index (number is 1-based, array is 0-based)
|
// Use sequential index (number is 1-based, array is 0-based)
|
||||||
if (number >= 1 && number <= outputWorkspaces.length) {
|
if (number >= 1 && number <= outputWorkspaces.length) {
|
||||||
var workspace = outputWorkspaces[number - 1]
|
var workspace = outputWorkspaces[number - 1]
|
||||||
console.log("DEBUG: Switching to workspace ID", workspace.id, "for sequential number", number, "on", targetOutput)
|
|
||||||
return switchToWorkspace(workspace.id)
|
return switchToWorkspace(workspace.id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
singleton MprisController 1.0 MprisController.qml
|
singleton MprisController 1.0 MprisController.qml
|
||||||
singleton OSDetectorService 1.0 OSDetectorService.qml
|
singleton OSDetectorService 1.0 OSDetectorService.qml
|
||||||
singleton ColorPickerService 1.0 ColorPickerService.qml
|
|
||||||
singleton WeatherService 1.0 WeatherService.qml
|
singleton WeatherService 1.0 WeatherService.qml
|
||||||
singleton NetworkService 1.0 NetworkService.qml
|
singleton NetworkService 1.0 NetworkService.qml
|
||||||
singleton WifiService 1.0 WifiService.qml
|
singleton WifiService 1.0 WifiService.qml
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import "../Common"
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: archLauncher
|
|
||||||
|
|
||||||
property var root
|
|
||||||
|
|
||||||
width: 40
|
|
||||||
height: 32
|
|
||||||
radius: Theme.cornerRadius
|
|
||||||
color: launcherArea.containsMouse ? Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.12) : Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.08)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: root.osLogo || "apps"
|
|
||||||
font.family: root.osLogo ? "NerdFont" : Theme.iconFont
|
|
||||||
font.pixelSize: root.osLogo ? Theme.iconSize - 2 : Theme.iconSize - 2
|
|
||||||
font.weight: Theme.iconFontWeight
|
|
||||||
color: Theme.surfaceText
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: launcherArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
root.appLauncher.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: Theme.shortDuration
|
|
||||||
easing.type: Theme.standardEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,573 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Qt5Compat.GraphicalEffects
|
|
||||||
import Quickshell
|
|
||||||
import Quickshell.Widgets
|
|
||||||
import Quickshell.Wayland
|
|
||||||
import Quickshell.Services.Mpris
|
|
||||||
import "../Common"
|
|
||||||
import "../Services"
|
|
||||||
|
|
||||||
PanelWindow {
|
|
||||||
id: calendarPopup
|
|
||||||
|
|
||||||
visible: root.calendarVisible
|
|
||||||
|
|
||||||
// Timer to update MPRIS position like the example
|
|
||||||
Timer {
|
|
||||||
running: root.activePlayer?.playbackState === MprisPlaybackState.Playing
|
|
||||||
interval: 1000
|
|
||||||
repeat: true
|
|
||||||
onTriggered: {
|
|
||||||
if (root.activePlayer) {
|
|
||||||
root.activePlayer.positionChanged()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
implicitWidth: 320
|
|
||||||
implicitHeight: 400
|
|
||||||
|
|
||||||
WlrLayershell.layer: WlrLayershell.Overlay
|
|
||||||
WlrLayershell.exclusiveZone: -1
|
|
||||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.None
|
|
||||||
|
|
||||||
color: "transparent"
|
|
||||||
|
|
||||||
anchors {
|
|
||||||
top: true
|
|
||||||
left: true
|
|
||||||
right: true
|
|
||||||
bottom: true
|
|
||||||
}
|
|
||||||
|
|
||||||
property date displayDate: new Date()
|
|
||||||
property date selectedDate: new Date()
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 400
|
|
||||||
height: root.hasActiveMedia ? 580 : (root.weather.available ? 480 : 400)
|
|
||||||
x: (parent.width - width) / 2
|
|
||||||
y: Theme.barHeight + Theme.spacingS
|
|
||||||
color: Theme.surfaceContainer
|
|
||||||
radius: Theme.cornerRadiusLarge
|
|
||||||
border.color: Qt.rgba(Theme.outline.r, Theme.outline.g, Theme.outline.b, 0.12)
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
opacity: root.calendarVisible ? 1.0 : 0.0
|
|
||||||
scale: root.calendarVisible ? 1.0 : 0.85
|
|
||||||
|
|
||||||
Behavior on opacity {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: Theme.mediumDuration
|
|
||||||
easing.type: Theme.emphasizedEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on scale {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: Theme.mediumDuration
|
|
||||||
easing.type: Theme.emphasizedEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: Theme.spacingL
|
|
||||||
spacing: Theme.spacingM
|
|
||||||
|
|
||||||
// Media Player (when active)
|
|
||||||
Rectangle {
|
|
||||||
visible: root.hasActiveMedia
|
|
||||||
width: parent.width
|
|
||||||
height: 180
|
|
||||||
radius: Theme.cornerRadius
|
|
||||||
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08)
|
|
||||||
border.color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2)
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
Column {
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: Theme.spacingM
|
|
||||||
spacing: Theme.spacingS
|
|
||||||
|
|
||||||
Row {
|
|
||||||
width: parent.width
|
|
||||||
height: 100
|
|
||||||
spacing: Theme.spacingM
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 100
|
|
||||||
height: 100
|
|
||||||
radius: Theme.cornerRadius
|
|
||||||
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3)
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
Image {
|
|
||||||
anchors.fill: parent
|
|
||||||
source: root.activePlayer?.trackArtUrl || ""
|
|
||||||
fillMode: Image.PreserveAspectCrop
|
|
||||||
smooth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: parent.children[0].status !== Image.Ready
|
|
||||||
color: "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "album"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: 48
|
|
||||||
color: Theme.surfaceVariantText
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
width: parent.width - 100 - Theme.spacingM
|
|
||||||
spacing: Theme.spacingXS
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.activePlayer?.trackTitle || "Unknown Track"
|
|
||||||
font.pixelSize: Theme.fontSizeLarge
|
|
||||||
font.weight: Font.Bold
|
|
||||||
color: Theme.surfaceText
|
|
||||||
width: parent.width
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.activePlayer?.trackArtist || "Unknown Artist"
|
|
||||||
font.pixelSize: Theme.fontSizeMedium
|
|
||||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.8)
|
|
||||||
width: parent.width
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.activePlayer?.trackAlbum || ""
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.6)
|
|
||||||
width: parent.width
|
|
||||||
elide: Text.ElideRight
|
|
||||||
visible: text.length > 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Progress bar
|
|
||||||
Rectangle {
|
|
||||||
width: parent.width
|
|
||||||
height: 6
|
|
||||||
radius: 3
|
|
||||||
color: Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.3)
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: parent.width * (root.activePlayer?.position / Math.max(root.activePlayer?.length || 1, 1))
|
|
||||||
height: parent.height
|
|
||||||
radius: parent.radius
|
|
||||||
color: Theme.primary
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: (mouse) => {
|
|
||||||
if (root.activePlayer && root.activePlayer.length > 0) {
|
|
||||||
const ratio = mouse.x / width
|
|
||||||
const newPosition = ratio * root.activePlayer.length
|
|
||||||
console.log("Seeking to position:", newPosition, "ratio:", ratio, "canSeek:", root.activePlayer.canSeek)
|
|
||||||
root.activePlayer.setPosition(newPosition)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Control buttons
|
|
||||||
Row {
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
spacing: Theme.spacingL
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 36
|
|
||||||
height: 36
|
|
||||||
radius: 18
|
|
||||||
color: prevBtnAreaCal.containsMouse ? Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "skip_previous"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: 20
|
|
||||||
color: Theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: prevBtnAreaCal
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: {
|
|
||||||
if (!root.activePlayer) return
|
|
||||||
|
|
||||||
// >8 s → jump to start, otherwise previous track
|
|
||||||
if (root.activePlayer.position > 8000000) {
|
|
||||||
root.activePlayer.setPosition(0)
|
|
||||||
} else {
|
|
||||||
root.activePlayer.previous()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 40
|
|
||||||
height: 40
|
|
||||||
radius: 20
|
|
||||||
color: Theme.primary
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: root.activePlayer?.playbackState === MprisPlaybackState.Playing ? "pause" : "play_arrow"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: 24
|
|
||||||
color: Theme.background
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.activePlayer?.togglePlaying()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 36
|
|
||||||
height: 36
|
|
||||||
radius: 18
|
|
||||||
color: nextBtnAreaCal.containsMouse ? Qt.rgba(Theme.surfaceVariant.r, Theme.surfaceVariant.g, Theme.surfaceVariant.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "skip_next"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: 20
|
|
||||||
color: Theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: nextBtnAreaCal
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.activePlayer?.next()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Weather header (when available and no media)
|
|
||||||
Rectangle {
|
|
||||||
visible: root.weather.available && !root.hasActiveMedia
|
|
||||||
width: parent.width
|
|
||||||
height: 80
|
|
||||||
radius: Theme.cornerRadius
|
|
||||||
color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08)
|
|
||||||
border.color: Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.2)
|
|
||||||
border.width: 1
|
|
||||||
|
|
||||||
Row {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: Theme.spacingL
|
|
||||||
|
|
||||||
// Weather icon and temp
|
|
||||||
Column {
|
|
||||||
spacing: 2
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: WeatherService.getWeatherIcon(root.weather.wCode)
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.iconSize + 4
|
|
||||||
color: Theme.primary
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: (root.useFahrenheit ? root.weather.tempF : root.weather.temp) + "°" + (root.useFahrenheit ? "F" : "C")
|
|
||||||
font.pixelSize: Theme.fontSizeLarge
|
|
||||||
color: Theme.surfaceText
|
|
||||||
font.weight: Font.Bold
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.useFahrenheit = !root.useFahrenheit
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.weather.city
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.7)
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Weather details grid
|
|
||||||
Grid {
|
|
||||||
columns: 2
|
|
||||||
spacing: Theme.spacingS
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: Theme.spacingXS
|
|
||||||
Text {
|
|
||||||
text: "humidity_low"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: root.weather.humidity + "%"
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: Theme.spacingXS
|
|
||||||
Text {
|
|
||||||
text: "air"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: root.weather.wind
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: Theme.spacingXS
|
|
||||||
Text {
|
|
||||||
text: "wb_twilight"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: root.weather.sunrise
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: Theme.spacingXS
|
|
||||||
Text {
|
|
||||||
text: "bedtime"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
Text {
|
|
||||||
text: root.weather.sunset
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
width: parent.width
|
|
||||||
height: 40
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 40
|
|
||||||
height: 40
|
|
||||||
radius: Theme.cornerRadius
|
|
||||||
color: prevMonthArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "chevron_left"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.iconSize
|
|
||||||
color: Theme.primary
|
|
||||||
font.weight: Theme.iconFontWeight
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: prevMonthArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
let newDate = new Date(calendarPopup.displayDate)
|
|
||||||
newDate.setMonth(newDate.getMonth() - 1)
|
|
||||||
calendarPopup.displayDate = newDate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
width: parent.width - 80
|
|
||||||
height: 40
|
|
||||||
text: Qt.formatDate(calendarPopup.displayDate, "MMMM yyyy")
|
|
||||||
font.pixelSize: Theme.fontSizeLarge
|
|
||||||
color: Theme.surfaceText
|
|
||||||
font.weight: Font.Medium
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 40
|
|
||||||
height: 40
|
|
||||||
radius: Theme.cornerRadius
|
|
||||||
color: nextMonthArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "chevron_right"
|
|
||||||
font.family: Theme.iconFont
|
|
||||||
font.pixelSize: Theme.iconSize
|
|
||||||
color: Theme.primary
|
|
||||||
font.weight: Theme.iconFontWeight
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: nextMonthArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
let newDate = new Date(calendarPopup.displayDate)
|
|
||||||
newDate.setMonth(newDate.getMonth() + 1)
|
|
||||||
calendarPopup.displayDate = newDate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
width: parent.width
|
|
||||||
height: 32
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: parent.width / 7
|
|
||||||
height: 32
|
|
||||||
color: "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: modelData
|
|
||||||
font.pixelSize: Theme.fontSizeSmall
|
|
||||||
color: Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.6)
|
|
||||||
font.weight: Font.Medium
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Grid {
|
|
||||||
width: parent.width
|
|
||||||
height: root.hasActiveMedia ? parent.height - 300 : (root.weather.available ? parent.height - 200 : parent.height - 120)
|
|
||||||
columns: 7
|
|
||||||
rows: 6
|
|
||||||
|
|
||||||
property date firstDay: {
|
|
||||||
let date = new Date(calendarPopup.displayDate.getFullYear(), calendarPopup.displayDate.getMonth(), 1)
|
|
||||||
let dayOfWeek = date.getDay()
|
|
||||||
date.setDate(date.getDate() - dayOfWeek)
|
|
||||||
return date
|
|
||||||
}
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: 42
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: parent.width / 7
|
|
||||||
height: parent.height / 6
|
|
||||||
|
|
||||||
property date dayDate: {
|
|
||||||
let date = new Date(parent.firstDay)
|
|
||||||
date.setDate(date.getDate() + index)
|
|
||||||
return date
|
|
||||||
}
|
|
||||||
|
|
||||||
property bool isCurrentMonth: dayDate.getMonth() === calendarPopup.displayDate.getMonth()
|
|
||||||
property bool isToday: dayDate.toDateString() === new Date().toDateString()
|
|
||||||
property bool isSelected: dayDate.toDateString() === calendarPopup.selectedDate.toDateString()
|
|
||||||
|
|
||||||
color: isSelected ? Theme.primary :
|
|
||||||
isToday ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) :
|
|
||||||
dayArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.08) : "transparent"
|
|
||||||
|
|
||||||
radius: Theme.cornerRadiusSmall
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: dayDate.getDate()
|
|
||||||
font.pixelSize: Theme.fontSizeMedium
|
|
||||||
color: isSelected ? Theme.surface :
|
|
||||||
isToday ? Theme.primary :
|
|
||||||
isCurrentMonth ? Theme.surfaceText :
|
|
||||||
Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.4)
|
|
||||||
font.weight: isToday || isSelected ? Font.Medium : Font.Normal
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: dayArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
calendarPopup.selectedDate = dayDate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
z: -1
|
|
||||||
onClicked: {
|
|
||||||
root.calendarVisible = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
property var theme
|
|
||||||
property var root
|
|
||||||
|
|
||||||
width: 40
|
|
||||||
height: 32
|
|
||||||
radius: theme.cornerRadius
|
|
||||||
color: clipboardArea.containsMouse ? Qt.rgba(theme.primary.r, theme.primary.g, theme.primary.b, 0.12) : Qt.rgba(theme.secondary.r, theme.secondary.g, theme.secondary.b, 0.08)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "content_paste"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: theme.iconSize - 6
|
|
||||||
font.weight: theme.iconFontWeight
|
|
||||||
color: theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: clipboardArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
root.clipboardHistoryPopup.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: theme.shortDuration
|
|
||||||
easing.type: theme.standardEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,320 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Quickshell.Services.Mpris
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: clockContainer
|
|
||||||
|
|
||||||
property var theme
|
|
||||||
property var root
|
|
||||||
|
|
||||||
width: Math.min(root.hasActiveMedia ? 500 : (root.weather.available ? 280 : 200), parent.width - theme.spacingL * 2)
|
|
||||||
height: root.hasActiveMedia ? 80 : 32
|
|
||||||
radius: theme.cornerRadius
|
|
||||||
color: clockMouseArea.containsMouse && root.hasActiveMedia ?
|
|
||||||
Qt.rgba(theme.primary.r, theme.primary.g, theme.primary.b, 0.12) :
|
|
||||||
Qt.rgba(theme.secondary.r, theme.secondary.g, theme.secondary.b, 0.08)
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: theme.shortDuration
|
|
||||||
easing.type: theme.standardEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
property date currentDate: new Date()
|
|
||||||
|
|
||||||
// Media player content (when active)
|
|
||||||
Column {
|
|
||||||
visible: root.hasActiveMedia
|
|
||||||
anchors.centerIn: parent
|
|
||||||
width: parent.width - theme.spacingM * 2
|
|
||||||
spacing: theme.spacingXS
|
|
||||||
|
|
||||||
Row {
|
|
||||||
width: parent.width
|
|
||||||
spacing: theme.spacingS
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 48
|
|
||||||
height: 48
|
|
||||||
radius: theme.cornerRadiusSmall
|
|
||||||
color: Qt.rgba(theme.surfaceVariant.r, theme.surfaceVariant.g, theme.surfaceVariant.b, 0.3)
|
|
||||||
|
|
||||||
Item {
|
|
||||||
anchors.fill: parent
|
|
||||||
clip: true
|
|
||||||
|
|
||||||
Image {
|
|
||||||
anchors.fill: parent
|
|
||||||
source: root.activePlayer?.trackArtUrl || ""
|
|
||||||
fillMode: Image.PreserveAspectCrop
|
|
||||||
smooth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors.fill: parent
|
|
||||||
visible: parent.children[0].status !== Image.Ready
|
|
||||||
color: "transparent"
|
|
||||||
|
|
||||||
// Animated equalizer bars
|
|
||||||
Row {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: 2
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: 5
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
property real targetHeight: root.activePlayer?.playbackState === MprisPlaybackState.Playing ?
|
|
||||||
4 + Math.random() * 12 : 4
|
|
||||||
|
|
||||||
width: 3
|
|
||||||
height: targetHeight
|
|
||||||
radius: 1.5
|
|
||||||
color: theme.surfaceVariantText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Behavior on height {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 100 + index * 50
|
|
||||||
easing.type: Easing.OutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
running: root.activePlayer?.playbackState === MprisPlaybackState.Playing
|
|
||||||
interval: 150 + index * 30
|
|
||||||
repeat: true
|
|
||||||
onTriggered: {
|
|
||||||
parent.targetHeight = 4 + Math.random() * 12
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
width: parent.width - 48 - theme.spacingS - 120
|
|
||||||
spacing: 2
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.activePlayer?.trackTitle || "Unknown Track"
|
|
||||||
font.pixelSize: theme.fontSizeMedium
|
|
||||||
color: theme.surfaceText
|
|
||||||
font.weight: Font.Medium
|
|
||||||
width: parent.width
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.activePlayer?.trackArtist || "Unknown Artist"
|
|
||||||
font.pixelSize: theme.fontSizeSmall
|
|
||||||
color: Qt.rgba(theme.surfaceText.r, theme.surfaceText.g, theme.surfaceText.b, 0.7)
|
|
||||||
width: parent.width
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
spacing: theme.spacingS
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 28
|
|
||||||
height: 28
|
|
||||||
radius: 14
|
|
||||||
color: prevBtnArea.containsMouse ? Qt.rgba(theme.surfaceVariant.r, theme.surfaceVariant.g, theme.surfaceVariant.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "skip_previous"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: 16
|
|
||||||
color: theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: prevBtnArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.activePlayer?.previous()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 28
|
|
||||||
height: 28
|
|
||||||
radius: 14
|
|
||||||
color: theme.primary
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: root.activePlayer?.playbackState === MprisPlaybackState.Playing ? "pause" : "play_arrow"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: 16
|
|
||||||
color: theme.background
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.activePlayer?.togglePlaying()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 28
|
|
||||||
height: 28
|
|
||||||
radius: 14
|
|
||||||
color: nextBtnArea.containsMouse ? Qt.rgba(theme.surfaceVariant.r, theme.surfaceVariant.g, theme.surfaceVariant.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "skip_next"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: 16
|
|
||||||
color: theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: nextBtnArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
onClicked: root.activePlayer?.next()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: parent.width
|
|
||||||
height: 4
|
|
||||||
radius: 2
|
|
||||||
color: Qt.rgba(theme.surfaceVariant.r, theme.surfaceVariant.g, theme.surfaceVariant.b, 0.3)
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: progressFill
|
|
||||||
width: parent.width * (root.activePlayer?.position / Math.max(root.activePlayer?.length || 1, 1))
|
|
||||||
height: parent.height
|
|
||||||
radius: parent.radius
|
|
||||||
color: theme.primary
|
|
||||||
|
|
||||||
Behavior on width {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: 200
|
|
||||||
easing.type: Easing.OutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: (mouse) => {
|
|
||||||
if (root.activePlayer && root.activePlayer.length > 0) {
|
|
||||||
const newPosition = (mouse.x / width) * root.activePlayer.length
|
|
||||||
root.activePlayer.setPosition(newPosition)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Normal clock/weather content (when no media)
|
|
||||||
Row {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: theme.spacingM
|
|
||||||
visible: !root.hasActiveMedia
|
|
||||||
|
|
||||||
// Weather info (when available)
|
|
||||||
Row {
|
|
||||||
spacing: theme.spacingXS
|
|
||||||
visible: root.weather.available
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: root.weatherIcons[root.weather.wCode] || "clear_day"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: theme.iconSize - 2
|
|
||||||
color: theme.surfaceText
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: (root.useFahrenheit ? root.weather.tempF : root.weather.temp) + "°" + (root.useFahrenheit ? "F" : "C")
|
|
||||||
font.pixelSize: theme.fontSizeMedium
|
|
||||||
color: theme.surfaceText
|
|
||||||
font.weight: Font.Medium
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Separator when weather is available
|
|
||||||
Text {
|
|
||||||
text: "•"
|
|
||||||
font.pixelSize: theme.fontSizeMedium
|
|
||||||
color: Qt.rgba(theme.surfaceText.r, theme.surfaceText.g, theme.surfaceText.b, 0.5)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
visible: root.weather.available
|
|
||||||
}
|
|
||||||
|
|
||||||
// Time and date
|
|
||||||
Row {
|
|
||||||
spacing: theme.spacingS
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: Qt.formatTime(clockContainer.currentDate, "h:mm AP")
|
|
||||||
font.pixelSize: theme.fontSizeMedium
|
|
||||||
color: theme.surfaceText
|
|
||||||
font.weight: Font.Medium
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: "•"
|
|
||||||
font.pixelSize: theme.fontSizeMedium
|
|
||||||
color: Qt.rgba(theme.surfaceText.r, theme.surfaceText.g, theme.surfaceText.b, 0.5)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
text: Qt.formatDate(clockContainer.currentDate, "ddd d")
|
|
||||||
font.pixelSize: theme.fontSizeMedium
|
|
||||||
color: theme.surfaceText
|
|
||||||
font.weight: Font.Medium
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
interval: 1000
|
|
||||||
running: true
|
|
||||||
repeat: true
|
|
||||||
onTriggered: {
|
|
||||||
clockContainer.currentDate = new Date()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: clockMouseArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: !root.hasActiveMedia ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
||||||
enabled: !root.hasActiveMedia
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
root.calendarVisible = !root.calendarVisible
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
property var theme
|
|
||||||
property var root
|
|
||||||
|
|
||||||
width: 40
|
|
||||||
height: 32
|
|
||||||
radius: theme.cornerRadius
|
|
||||||
color: colorPickerArea.containsMouse ? Qt.rgba(theme.primary.r, theme.primary.g, theme.primary.b, 0.12) : Qt.rgba(theme.secondary.r, theme.secondary.g, theme.secondary.b, 0.08)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "colorize"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: theme.iconSize - 6
|
|
||||||
font.weight: theme.iconFontWeight
|
|
||||||
color: theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: colorPickerArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
root.colorPickerProcess.running = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: theme.shortDuration
|
|
||||||
easing.type: theme.standardEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
property var theme
|
|
||||||
property var root
|
|
||||||
|
|
||||||
width: 40
|
|
||||||
height: 32
|
|
||||||
radius: theme.cornerRadius
|
|
||||||
color: notificationArea.containsMouse || root.notificationHistoryVisible ?
|
|
||||||
Qt.rgba(theme.primary.r, theme.primary.g, theme.primary.b, 0.16) :
|
|
||||||
Qt.rgba(theme.secondary.r, theme.secondary.g, theme.secondary.b, 0.08)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
property bool hasUnread: root.notificationHistory.count > 0
|
|
||||||
|
|
||||||
Text {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
text: "notifications"
|
|
||||||
font.family: theme.iconFont
|
|
||||||
font.pixelSize: theme.iconSize - 6
|
|
||||||
font.weight: theme.iconFontWeight
|
|
||||||
color: notificationArea.containsMouse || root.notificationHistoryVisible ?
|
|
||||||
theme.primary : theme.surfaceText
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
width: 8
|
|
||||||
height: 8
|
|
||||||
radius: 4
|
|
||||||
color: theme.error
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.rightMargin: 6
|
|
||||||
anchors.topMargin: 6
|
|
||||||
visible: parent.hasUnread
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: notificationArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
root.notificationHistoryVisible = !root.notificationHistoryVisible
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: theme.shortDuration
|
|
||||||
easing.type: theme.standardEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Quickshell
|
|
||||||
import Quickshell.Services.SystemTray
|
|
||||||
import Quickshell.Widgets
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var theme
|
|
||||||
|
|
||||||
height: 32
|
|
||||||
implicitWidth: trayRow.implicitWidth
|
|
||||||
visible: trayRow.children.length > 0
|
|
||||||
|
|
||||||
Row {
|
|
||||||
id: trayRow
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: theme.spacingXS
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: SystemTray.items
|
|
||||||
|
|
||||||
delegate: Rectangle {
|
|
||||||
required property SystemTrayItem modelData
|
|
||||||
|
|
||||||
width: 24
|
|
||||||
height: 24
|
|
||||||
radius: theme.cornerRadiusSmall
|
|
||||||
color: trayItemArea.containsMouse ? Qt.rgba(theme.primary.r, theme.primary.g, theme.primary.b, 0.12) : "transparent"
|
|
||||||
|
|
||||||
IconImage {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
width: 18
|
|
||||||
height: 18
|
|
||||||
source: parent.modelData.icon
|
|
||||||
smooth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: trayItemArea
|
|
||||||
anchors.fill: parent
|
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: (mouse) => {
|
|
||||||
if (mouse.button === Qt.LeftButton) {
|
|
||||||
parent.modelData.activate()
|
|
||||||
} else if (mouse.button === Qt.RightButton) {
|
|
||||||
menuHandler.showMenu()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simple menu handling for now
|
|
||||||
QtObject {
|
|
||||||
id: menuHandler
|
|
||||||
|
|
||||||
function showMenu() {
|
|
||||||
if (parent.modelData.hasMenu) {
|
|
||||||
console.log("Right-click menu for:", parent.modelData.title || "Unknown")
|
|
||||||
// TODO: Implement proper menu positioning
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: theme.shortDuration
|
|
||||||
easing.type: theme.standardEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -701,41 +701,6 @@ EOF`
|
|||||||
anchors.verticalCenter: parent.verticalCenter
|
anchors.verticalCenter: parent.verticalCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
// Color Picker Button
|
|
||||||
// Rectangle {
|
|
||||||
// width: 40
|
|
||||||
// height: 32
|
|
||||||
// radius: Theme.cornerRadius
|
|
||||||
// color: colorPickerArea.containsMouse ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.12) : Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08)
|
|
||||||
// anchors.verticalCenter: parent.verticalCenter
|
|
||||||
|
|
||||||
// Text {
|
|
||||||
// anchors.centerIn: parent
|
|
||||||
// text: "colorize" // Material icon for color picker
|
|
||||||
// font.family: Theme.iconFont
|
|
||||||
// font.pixelSize: Theme.iconSize - 6
|
|
||||||
// font.weight: Theme.iconFontWeight
|
|
||||||
// color: Theme.surfaceText
|
|
||||||
// }
|
|
||||||
|
|
||||||
// MouseArea {
|
|
||||||
// id: colorPickerArea
|
|
||||||
// anchors.fill: parent
|
|
||||||
// hoverEnabled: true
|
|
||||||
// cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
// onClicked: {
|
|
||||||
// ColorPickerService.pickColor()
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Behavior on color {
|
|
||||||
// ColorAnimation {
|
|
||||||
// duration: Theme.shortDuration
|
|
||||||
// easing.type: Theme.standardEasing
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Notification Center Button
|
// Notification Center Button
|
||||||
Rectangle {
|
Rectangle {
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
import QtQuick
|
|
||||||
import QtQuick.Controls
|
|
||||||
import Quickshell
|
|
||||||
import Quickshell.Io
|
|
||||||
import "../Common"
|
|
||||||
import "../Services"
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: workspaceSwitcher
|
|
||||||
|
|
||||||
width: Math.max(120, workspaceRow.implicitWidth + Theme.spacingL * 2)
|
|
||||||
height: 32
|
|
||||||
radius: Theme.cornerRadiusLarge
|
|
||||||
color: Qt.rgba(Theme.secondary.r, Theme.secondary.g, Theme.secondary.b, 0.08)
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
visible: NiriWorkspaceService.niriAvailable
|
|
||||||
|
|
||||||
// Use the reactive workspace service
|
|
||||||
property int currentWorkspace: NiriWorkspaceService.getCurrentWorkspaceNumber()
|
|
||||||
property var workspaceList: NiriWorkspaceService.getCurrentOutputWorkspaceNumbers()
|
|
||||||
|
|
||||||
Row {
|
|
||||||
id: workspaceRow
|
|
||||||
anchors.centerIn: parent
|
|
||||||
spacing: Theme.spacingS
|
|
||||||
|
|
||||||
Repeater {
|
|
||||||
model: workspaceSwitcher.workspaceList
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
property bool isActive: NiriWorkspaceService.isWorkspaceActive(modelData)
|
|
||||||
property bool isHovered: mouseArea.containsMouse
|
|
||||||
|
|
||||||
width: isActive ? Theme.spacingXL + Theme.spacingS : Theme.spacingL
|
|
||||||
height: Theme.spacingS
|
|
||||||
radius: height / 2
|
|
||||||
color: isActive ? Theme.primary :
|
|
||||||
isHovered ? Qt.rgba(Theme.primary.r, Theme.primary.g, Theme.primary.b, 0.5) :
|
|
||||||
Qt.rgba(Theme.surfaceText.r, Theme.surfaceText.g, Theme.surfaceText.b, 0.3)
|
|
||||||
|
|
||||||
Behavior on width {
|
|
||||||
NumberAnimation {
|
|
||||||
duration: Theme.mediumDuration
|
|
||||||
easing.type: Theme.emphasizedEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on color {
|
|
||||||
ColorAnimation {
|
|
||||||
duration: Theme.mediumDuration
|
|
||||||
easing.type: Theme.emphasizedEasing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: mouseArea
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
// Use the service to switch workspaces
|
|
||||||
// modelData is workspace number (1-based)
|
|
||||||
NiriWorkspaceService.switchToWorkspaceByNumber(modelData)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,12 +1,4 @@
|
|||||||
TopBar 1.0 TopBar.qml
|
TopBar 1.0 TopBar.qml
|
||||||
AppLauncherButton 1.0 AppLauncherButton.qml
|
|
||||||
WorkspaceSwitcher 1.0 WorkspaceSwitcher.qml
|
|
||||||
ClockWidget 1.0 ClockWidget.qml
|
|
||||||
SystemTrayWidget 1.0 SystemTrayWidget.qml
|
|
||||||
ClipboardButton 1.0 ClipboardButton.qml
|
|
||||||
ColorPickerButton 1.0 ColorPickerButton.qml
|
|
||||||
NotificationButton 1.0 NotificationButton.qml
|
|
||||||
CalendarPopup 1.0 CalendarPopup.qml
|
|
||||||
TrayMenuPopup 1.0 TrayMenuPopup.qml
|
TrayMenuPopup 1.0 TrayMenuPopup.qml
|
||||||
NotificationPopup 1.0 NotificationPopup.qml
|
NotificationPopup 1.0 NotificationPopup.qml
|
||||||
NotificationHistoryPopup 1.0 NotificationHistoryPopup.qml
|
NotificationHistoryPopup 1.0 NotificationHistoryPopup.qml
|
||||||
|
|||||||
Reference in New Issue
Block a user