sddm-theme/theme/Main.qml

292 lines
7.4 KiB
QML
Raw Normal View History

2025-01-11 16:19:31 -06:00
/***************************************************************************
* Copyright (c) 2013 Abdurrahman AVCI <abdurrahmanavci@gmail.com>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
* OR OTHER DEALINGS IN THE SOFTWARE.
*
***************************************************************************/
2025-01-12 04:09:49 -06:00
import QtQuick 2.0
import SddmComponents 2.0
import "./components"
2025-01-11 16:19:31 -06:00
2025-01-12 04:09:49 -06:00
Rectangle {
2025-01-11 16:19:31 -06:00
id: container
width: 640
height: 480
color: "#282828"
LayoutMirroring.enabled: Qt.locale().textDirection == Qt.RightToLeft
LayoutMirroring.childrenInherit: true
property int sessionIndex: session.index
TextConstants { id: textConstants }
Connections {
target: sddm
function onLoginSucceeded() {
errorMessage.color = "#83a598"
errorMessage.text = textConstants.loginSucceeded
}
function onLoginFailed() {
password.text = ""
errorMessage.color = "#fb4934"
errorMessage.text = textConstants.loginFailed
}
function onInformationMessage(message) {
errorMessage.color = "#fb4934"
errorMessage.text = message
}
}
2025-01-11 16:44:05 -06:00
// Background
2025-01-11 16:19:31 -06:00
Rectangle {
anchors.fill: parent
color: "transparent"
//visible: primaryScreen
2025-01-11 16:44:05 -06:00
// Within that bg, we have a login box with everything in it
Rectangle {
2025-01-11 16:19:31 -06:00
id: rectangle
anchors.centerIn: parent
2025-01-11 16:44:05 -06:00
width: Math.max(600, mainColumn.implicitWidth + 50)
height: Math.max(800, mainColumn.implicitHeight + 50)
color: "#cc32302f"
radius: 8
2025-01-11 16:19:31 -06:00
2025-01-11 16:44:05 -06:00
// Lay out everything within as a column
2025-01-11 16:19:31 -06:00
Column {
id: mainColumn
2025-01-12 03:59:59 -06:00
width: 400
2025-01-11 16:19:31 -06:00
anchors.centerIn: parent
2025-01-12 03:59:59 -06:00
spacing: 8
// This colum has our date and time
Column {
2025-01-12 03:59:59 -06:00
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
spacing: 4
Clock {
2025-01-12 03:59:59 -06:00
anchors.horizontalCenter: parent.horizontalCenter
id: clockTime
color: "#ebdbb2"
timeFont.family: "IBM Plex Sans"
2025-01-12 03:59:59 -06:00
dateFont.family: timeFont.family
}
}
2025-01-11 16:19:31 -06:00
2025-01-11 16:44:05 -06:00
// This column contains the UN field
2025-01-11 16:19:31 -06:00
Column {
width: parent.width
spacing: 4
Text {
id: lblName
color: "#ebdbb2"
width: parent.width
text: textConstants.userName
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-11 16:19:31 -06:00
}
TextBox {
id: name
2025-01-12 03:59:59 -06:00
width: parent.width; height: 50
2025-01-11 16:19:31 -06:00
text: userModel.lastUser
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-12 03:59:59 -06:00
radius: 8
textColor: "#ebdbb2"
borderColor: "#32302f"
focusColor: "#83a598"
hoverColor: "#504945"
color: "#282828"
2025-01-11 16:19:31 -06:00
KeyNavigation.backtab: rebootButton; KeyNavigation.tab: password
Keys.onPressed: function (event) {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionIndex)
event.accepted = true
}
}
}
}
// This one, the password field
2025-01-11 16:19:31 -06:00
Column {
width: parent.width
2025-01-12 03:16:01 -06:00
spacing: 4
2025-01-11 16:19:31 -06:00
Text {
id: lblPassword
color: "#ebdbb2"
width: parent.width
text: textConstants.password
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-11 16:19:31 -06:00
}
PasswordBox {
id: password
2025-01-12 03:59:59 -06:00
width: parent.width; height: 50
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-12 03:59:59 -06:00
radius: 8
textColor: "#ebdbb2"
borderColor: "#32302f"
focusColor: "#83a598"
hoverColor: "#504945"
color: "#282828"
2025-01-11 16:19:31 -06:00
KeyNavigation.backtab: name; KeyNavigation.tab: session
Keys.onPressed: function (event) {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(name.text, password.text, sessionIndex)
event.accepted = true
}
}
}
}
2025-01-12 03:16:01 -06:00
// This one, the session selector
2025-01-12 03:14:24 -06:00
Column {
width: parent.width
2025-01-12 03:16:01 -06:00
spacing: 4
2025-01-12 04:01:15 -06:00
z: 101
2025-01-12 03:14:24 -06:00
Text {
id: lblSession
color: "#ebdbb2"
width: parent.width
text: textConstants.session
wrapMode: TextEdit.WordWrap
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-11 16:19:31 -06:00
}
2025-01-12 04:09:49 -06:00
SaltComboBox {
2025-01-12 03:14:24 -06:00
id: session
2025-01-12 03:59:59 -06:00
width: parent.width; height: 50
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-12 04:09:49 -06:00
radius: 8
2025-01-12 03:59:59 -06:00
textColor: "#ebdbb2"
borderColor: "#32302f"
focusColor: "#83a598"
hoverColor: "#504945"
color: "#282828"
2025-01-11 16:19:31 -06:00
2025-01-12 03:14:24 -06:00
model: sessionModel
index: sessionModel.lastIndex
2025-01-11 16:19:31 -06:00
2025-01-12 03:14:24 -06:00
KeyNavigation.backtab: password; KeyNavigation.tab: layoutBox
2025-01-11 16:19:31 -06:00
}
}
2025-01-12 03:16:01 -06:00
// This here's an error message/whatever prompt
2025-01-11 16:19:31 -06:00
Column {
width: parent.width
Text {
id: errorMessage
color: "#ebdbb2"
anchors.horizontalCenter: parent.horizontalCenter
text: textConstants.prompt
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-11 16:19:31 -06:00
}
}
2025-01-12 04:21:40 -06:00
// This singular Row has our login button
2025-01-11 16:19:31 -06:00
Row {
spacing: 4
anchors.horizontalCenter: parent.horizontalCenter
2025-01-12 04:21:40 -06:00
width: parent.width
2025-01-11 16:19:31 -06:00
Button {
id: loginButton
text: textConstants.login
2025-01-12 04:21:40 -06:00
width: parent.width
2025-01-11 16:44:05 -06:00
radius: 8
2025-01-11 16:19:31 -06:00
onClicked: sddm.login(name.text, password.text, sessionIndex)
KeyNavigation.backtab: layoutBox; KeyNavigation.tab: shutdownButton
2025-01-12 03:27:48 -06:00
font.family: "IBM Plex Sans"
font.pixelSize: 13
textColor: "#282828"
2025-01-12 03:59:59 -06:00
color: "#83a598"
disabledColor: "#32302f"
activeColor: "#83a598"
pressedColor: "#458588"
2025-01-11 16:19:31 -06:00
}
2025-01-12 04:21:40 -06:00
}
2025-01-11 16:19:31 -06:00
2025-01-12 04:21:40 -06:00
// And this one has our shutdown/reboot buttons
Row {
spacing: 4
width: parent.width
anchors.horizontalCenter: parent.horizontalCenter
property int btnWidth: parent.width / 2 - ( spacing / 2 )
2025-01-11 16:19:31 -06:00
Button {
id: shutdownButton
text: textConstants.shutdown
width: parent.btnWidth
2025-01-11 16:44:05 -06:00
radius: 8
2025-01-11 16:19:31 -06:00
onClicked: sddm.powerOff()
KeyNavigation.backtab: loginButton; KeyNavigation.tab: rebootButton
2025-01-12 03:27:48 -06:00
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-12 04:21:40 -06:00
textColor: "#ebdbb2"
color: "#32302f"
2025-01-12 03:59:59 -06:00
disabledColor: "#32302f"
2025-01-12 04:21:40 -06:00
activeColor: "#fb4934"
pressedColor: "#cc241d"
2025-01-11 16:19:31 -06:00
}
Button {
id: rebootButton
text: textConstants.reboot
width: parent.btnWidth
2025-01-11 16:44:05 -06:00
radius: 8
2025-01-11 16:19:31 -06:00
onClicked: sddm.reboot()
KeyNavigation.backtab: shutdownButton; KeyNavigation.tab: name
2025-01-12 03:27:48 -06:00
font.family: "IBM Plex Sans"
font.pixelSize: 13
2025-01-12 04:21:40 -06:00
textColor: "#ebdbb2"
color: "#32302f"
2025-01-12 03:59:59 -06:00
disabledColor: "#32302f"
2025-01-12 04:21:40 -06:00
activeColor: "#fb4934"
pressedColor: "#cc241d"
2025-01-11 16:19:31 -06:00
}
}
}
}
}
Component.onCompleted: {
if (name.text == "")
name.focus = true
else
password.focus = true
}
}