sidebarright bottom widget group collapse

This commit is contained in:
end-4
2025-04-18 10:38:52 +02:00
parent bef66ac40a
commit d8d812cf47
4 changed files with 128 additions and 23 deletions
@@ -10,18 +10,46 @@ import Quickshell
Rectangle { Rectangle {
id: root id: root
Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: false
Layout.fillWidth: true
radius: Appearance.rounding.normal radius: Appearance.rounding.normal
color: Appearance.colors.colLayer1 color: Appearance.colors.colLayer1
height: bottomWidgetGroupRow.height // height: collapsed ? collapsedBottomWidgetGroupRow.height : bottomWidgetGroupRow.height
implicitHeight: collapsed ? collapsedBottomWidgetGroupRow.implicitHeight : bottomWidgetGroupRow.implicitHeight
property int selectedTab: 0 property int selectedTab: 0
property bool collapsed: false
property var tabs: [ property var tabs: [
{"type": "calendar", "name": "Calendar", "icon": "calendar_month", "widget": calendarWidget}, {"type": "calendar", "name": "Calendar", "icon": "calendar_month", "widget": calendarWidget},
{"type": "todo", "name": "To Do", "icon": "done_outline", "widget": todoWidget} {"type": "todo", "name": "To Do", "icon": "done_outline", "widget": todoWidget}
] ]
Behavior on implicitHeight {
NumberAnimation {
duration: Appearance.animation.elementDecel.duration
easing.type: Appearance.animation.elementDecel.type
}
}
Component.onCompleted: {
bottomWidgetGroupRow.opacity = !collapsed
collapsedBottomWidgetGroupRow.opacity = collapsed
}
function setCollapsed(state) {
collapsed = state
if (collapsed) bottomWidgetGroupRow.opacity = 0
else collapsedBottomWidgetGroupRow.opacity = 0
collapseCleanFadeTimer.start()
}
Timer {
id: collapseCleanFadeTimer
interval: Appearance.animation.elementDecel.duration / 2
repeat: false
onTriggered: {
if(collapsed) collapsedBottomWidgetGroupRow.opacity = 1
else bottomWidgetGroupRow.opacity = 1
}
}
Keys.onPressed: (event) => { Keys.onPressed: (event) => {
if ((event.key === Qt.Key_PageDown || event.key === Qt.Key_PageUp) if ((event.key === Qt.Key_PageDown || event.key === Qt.Key_PageUp)
&& event.modifiers === Qt.ControlModifier) { && event.modifiers === Qt.ControlModifier) {
@@ -34,30 +62,101 @@ Rectangle {
} }
} }
// The thing when collapsed
RowLayout {
id: collapsedBottomWidgetGroupRow
visible: opacity != 0
Behavior on opacity {
NumberAnimation {
duration: Appearance.animation.elementDecel.duration / 2
easing.type: Appearance.animation.elementDecel.type
}
}
spacing: 15
CalendarHeaderButton {
Layout.margins: 10
Layout.rightMargin: 0
forceCircle: true
onClicked: {
root.setCollapsed(false)
}
contentItem: MaterialSymbol {
text: "keyboard_arrow_up"
font.pixelSize: Appearance.font.pixelSize.larger
horizontalAlignment: Text.AlignHCenter
color: Appearance.colors.colOnLayer1
}
}
StyledText {
property int remainingTasks: Todo.list.filter(task => !task.done).length;
Layout.margins: 10
Layout.leftMargin: 0
text: `${DateTime.day} ${DateTime.month} ${DateTime.year} ${remainingTasks} task${remainingTasks > 1 ? "s" : ""}`
font.pixelSize: Appearance.font.pixelSize.large
color: Appearance.colors.colOnLayer1
}
}
// The thing when expanded
RowLayout { RowLayout {
id: bottomWidgetGroupRow id: bottomWidgetGroupRow
visible: opacity != 0
Behavior on opacity {
NumberAnimation {
duration: Appearance.animation.elementDecel.duration / 2
easing.type: Appearance.animation.elementDecel.type
}
}
anchors.fill: parent anchors.fill: parent
height: tabStack.height height: tabStack.height
spacing: 10 spacing: 10
// Navigation rail // Navigation rail
ColumnLayout { Item {
id: tabBar
Layout.fillHeight: true Layout.fillHeight: true
Layout.fillWidth: false Layout.fillWidth: false
Layout.leftMargin: 15 Layout.leftMargin: 10
spacing: 15 Layout.topMargin: 10
Repeater { width: tabBar.width
model: root.tabs // Navigation rail buttons
NavRailButton { ColumnLayout {
toggled: root.selectedTab == index anchors.verticalCenter: parent.verticalCenter
buttonText: modelData.name anchors.left: parent.left
buttonIcon: modelData.icon anchors.leftMargin: 5
onClicked: { id: tabBar
root.selectedTab = index spacing: 15
Repeater {
model: root.tabs
NavRailButton {
toggled: root.selectedTab == index
buttonText: modelData.name
buttonIcon: modelData.icon
onClicked: {
root.selectedTab = index
}
} }
} }
} }
// Collapse button
CalendarHeaderButton {
anchors.left: parent.left
anchors.top: parent.top
forceCircle: true
onClicked: {
root.setCollapsed(true)
}
contentItem: MaterialSymbol {
text: "keyboard_arrow_down"
font.pixelSize: Appearance.font.pixelSize.larger
horizontalAlignment: Text.AlignHCenter
color: Appearance.colors.colOnLayer1
}
}
} }
// Content area // Content area
@@ -84,9 +84,9 @@ Scope {
} }
ColumnLayout { ColumnLayout {
anchors.centerIn: parent anchors.fill: parent
height: parent.height - sidebarPadding * 2 anchors.margins: sidebarPadding
width: parent.width - sidebarPadding * 2
spacing: sidebarPadding spacing: sidebarPadding
RowLayout { RowLayout {
@@ -139,6 +139,7 @@ Scope {
} }
} }
// Center widget group
Rectangle { Rectangle {
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: true Layout.fillHeight: true
@@ -147,8 +148,12 @@ Scope {
color: Appearance.colors.colLayer1 color: Appearance.colors.colLayer1
} }
// Calendar BottomWidgetGroup {
BottomWidgetGroup {} Layout.alignment: Qt.AlignHCenter
Layout.fillHeight: false
Layout.fillWidth: true
Layout.preferredHeight: implicitHeight
}
} }
} }
@@ -287,4 +287,4 @@ Item {
} }
} }
} }
} }
+1
View File
@@ -7,6 +7,7 @@ pragma Singleton
Singleton { Singleton {
property string time: Qt.formatDateTime(clock.date, "hh:mm") property string time: Qt.formatDateTime(clock.date, "hh:mm")
property string date: Qt.formatDateTime(clock.date, "dddd, dd/MM") property string date: Qt.formatDateTime(clock.date, "dddd, dd/MM")
property string day: Qt.formatDateTime(clock.date, "dd")
property string month: Qt.formatDateTime(clock.date, "MMMM") property string month: Qt.formatDateTime(clock.date, "MMMM")
property string year: Qt.formatDateTime(clock.date, "yyyy") property string year: Qt.formatDateTime(clock.date, "yyyy")
property string uptime: "0h, 0m" property string uptime: "0h, 0m"