shift-shell/components/mobileshell/qml/actiondrawer/LandscapeContentContainer.qml

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

150 lines
5.1 KiB
QML
Raw Normal View History

// SPDX-FileCopyrightText: 2021-2024 Devin Lin <devin@kde.org>
// SPDX-License-Identifier: LGPL-2.0-or-later
import QtQuick
import QtQuick.Controls as QQC2
import QtQuick.Layouts
import QtQuick.Window
import org.kde.kirigami 2.12 as Kirigami
import org.kde.plasma.core as PlasmaCore
import org.kde.plasma.plasma5support 2.0 as P5Support
import org.kde.plasma.components 3.0 as PlasmaComponents
import org.kde.plasma.private.mobileshell as MobileShell
import org.kde.plasma.private.mobileshell.quicksettingsplugin as QS
/**
2024-06-16 20:50:06 +00:00
* Root element that contains all the ActionDrawer's contents, and is anchored to the screen.
*/
Item {
id: root
2024-07-27 03:47:44 +00:00
required property var actionDrawer
2024-07-27 03:47:44 +00:00
property alias quickSettings: quickSettingsPanel.quickSettings
property alias statusBar: quickSettingsPanel.statusBar
property alias mediaControlsWidget: mediaControlsWidgetProxy.contentItem
property alias notificationsWidget: notificationWidgetProxy.contentItem
2024-07-27 03:47:44 +00:00
readonly property real minimizedQuickSettingsOffset: height
readonly property real maximizedQuickSettingsOffset: height
readonly property bool isOnLargeScreen: width > quickSettingsPanel.width * 2.5
readonly property real minWidthHeight: Math.min(root.width, root.height)
readonly property real opacityValue: Math.max(0, Math.min(1, actionDrawer.offset / root.minimizedQuickSettingsOffset))
2024-07-27 03:47:44 +00:00
Kirigami.Theme.colorSet: Kirigami.Theme.View
Kirigami.Theme.inherit: false
2024-07-27 03:47:44 +00:00
P5Support.DataSource {
id: timeSource
engine: "time"
connectedSources: ["Local"]
interval: 60 * 1000
}
2024-07-27 03:47:44 +00:00
MouseArea {
anchors.fill: parent
2024-07-27 03:47:44 +00:00
// dismiss drawer when background is clicked
onClicked: root.actionDrawer.close();
2024-07-27 03:47:44 +00:00
// left side
ColumnLayout {
id: columnLayout
2024-07-27 03:47:44 +00:00
opacity: opacityValue
spacing: 0
2024-07-27 03:47:44 +00:00
anchors {
top: mediaControlsWidgetProxy.bottom
2022-05-16 17:06:35 +00:00
topMargin: 0
bottom: parent.bottom
bottomMargin: 0
right: quickSettingsPanel.left
left: parent.left
}
2022-05-16 17:06:35 +00:00
anchors.margins: minWidthHeight * 0.06
2024-07-27 03:47:44 +00:00
MobileShell.BaseItem {
id: notificationWidgetProxy
2024-07-27 03:47:44 +00:00
// don't allow notifications widget to get too wide
Layout.maximumWidth: Kirigami.Units.gridUnit * 25
Layout.fillHeight: true
Layout.fillWidth: true
Layout.topMargin: minWidthHeight * 0.02
}
}
2024-07-27 03:47:44 +00:00
PlasmaComponents.Label {
id: clock
text: Qt.formatTime(timeSource.data.Local.DateTime, MobileShell.ShellUtil.isSystem24HourFormat ? "h:mm" : "h:mm ap")
verticalAlignment: Qt.AlignVCenter
opacity: columnLayout.opacity
2024-07-27 03:47:44 +00:00
anchors {
left: parent.left
top: parent.top
2022-05-16 17:06:35 +00:00
topMargin: columnLayout.anchors.margins / 2
leftMargin: columnLayout.anchors.margins
}
2024-07-27 03:47:44 +00:00
font.pixelSize: Math.min(40, minWidthHeight * 0.1)
font.weight: Font.ExtraLight
elide: Text.ElideRight
}
2024-07-27 03:47:44 +00:00
PlasmaComponents.Label {
id: date
text: Qt.formatDate(timeSource.data.Local.DateTime, "ddd MMMM d")
verticalAlignment: Qt.AlignTop
color: Kirigami.Theme.disabledTextColor
opacity: columnLayout.opacity
2024-07-27 03:47:44 +00:00
anchors {
left: parent.left
top: clock.bottom
bottom: isOnLargeScreen ? columnLayout.top : mediaControlsWidgetProxy.top
topMargin: Kirigami.Units.smallSpacing
2022-05-16 17:06:35 +00:00
leftMargin: columnLayout.anchors.margins
}
font.pixelSize: Math.min(20, minWidthHeight * 0.05)
font.weight: Font.Light
}
2024-07-27 03:47:44 +00:00
MobileShell.BaseItem {
id: mediaControlsWidgetProxy
property real fullHeight: visible ? height + Kirigami.Units.smallSpacing * 6 : 0
2024-07-27 03:47:44 +00:00
2022-05-16 17:06:35 +00:00
y: isOnLargeScreen ? date.y - height + date.implicitHeight : date.y + date.implicitHeight + columnLayout.anchors.margins / 2
opacity: columnLayout.opacity
2024-07-27 03:47:44 +00:00
anchors {
right: quickSettingsPanel.left
left: isOnLargeScreen ? date.right : parent.left
2022-05-16 17:06:35 +00:00
leftMargin: columnLayout.anchors.margins
rightMargin: columnLayout.anchors.margins - quickSettingsPanel.leftPadding
}
}
2024-07-27 03:47:44 +00:00
// right sidebar
MobileShell.QuickSettingsPanel {
id: quickSettingsPanel
height: quickSettingsPanel.contentImplicitHeight + quickSettingsPanel.topPadding + quickSettingsPanel.bottomPadding
width: intendedWidth
2024-07-27 03:47:44 +00:00
readonly property real intendedWidth: 360
2024-07-27 03:47:44 +00:00
property real offsetRatio: quickSettingsPanel.height / root.height
anchors.topMargin: Math.min(root.actionDrawer.offset * offsetRatio - quickSettingsPanel.height, 0)
anchors.top: parent.top
anchors.right: parent.right
2024-07-27 03:47:44 +00:00
actionDrawer: root.actionDrawer
fullScreenHeight: root.height
}
}
}