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
|
2025-01-11 16:46:50 -06:00
|
|
|
|
|
|
|
// This colum has our date and time
|
|
|
|
Column {
|
2025-01-12 03:59:59 -06:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
2025-01-11 16:46:50 -06:00
|
|
|
width: parent.width
|
|
|
|
spacing: 4
|
|
|
|
Clock {
|
2025-01-12 03:59:59 -06:00
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
2025-01-11 16:46:50 -06:00
|
|
|
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:46:50 -06:00
|
|
|
}
|
|
|
|
}
|
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
|
2025-01-12 03:18:18 -06:00
|
|
|
font.family: "IBM Plex Sans"
|
|
|
|
font.pixelSize: 13
|
2025-01-11 16:19:31 -06:00
|
|
|
}
|
|
|
|
|
2025-01-12 04:33:22 -06:00
|
|
|
SaltTextBox {
|
2025-01-11 16:19:31 -06:00
|
|
|
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
|
2025-01-12 03:18:18 -06:00
|
|
|
font.family: "IBM Plex Sans"
|
|
|
|
font.pixelSize: 13
|
2025-01-12 03:59:59 -06:00
|
|
|
radius: 8
|
|
|
|
textColor: "#ebdbb2"
|
2025-01-12 04:33:22 -06:00
|
|
|
borderWidth: 4
|
2025-01-12 03:59:59 -06:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2025-01-11 16:46:50 -06:00
|
|
|
// 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
|
2025-01-12 03:18:18 -06:00
|
|
|
font.family: "IBM Plex Sans"
|
|
|
|
font.pixelSize: 13
|
2025-01-11 16:19:31 -06:00
|
|
|
}
|
|
|
|
|
2025-01-12 04:33:22 -06:00
|
|
|
SaltPasswordBox {
|
2025-01-11 16:19:31 -06:00
|
|
|
id: password
|
2025-01-12 03:59:59 -06:00
|
|
|
width: parent.width; height: 50
|
2025-01-12 03:18:18 -06:00
|
|
|
font.family: "IBM Plex Sans"
|
|
|
|
font.pixelSize: 13
|
2025-01-12 03:59:59 -06:00
|
|
|
radius: 8
|
|
|
|
textColor: "#ebdbb2"
|
2025-01-12 04:33:22 -06:00
|
|
|
borderWidth: 4
|
2025-01-12 03:59:59 -06:00
|
|
|
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
|
2025-01-12 03:18:18 -06:00
|
|
|
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
|
2025-01-12 03:18:18 -06:00
|
|
|
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"
|
2025-01-12 04:33:22 -06:00
|
|
|
borderWidth: 4
|
2025-01-12 03:59:59 -06:00
|
|
|
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 04:33:22 -06:00
|
|
|
KeyNavigation.backtab: password; KeyNavigation.tab: loginButton
|
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
|
2025-01-12 03:18:18 -06:00
|
|
|
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-12 04:23:45 -06:00
|
|
|
SaltButton {
|
2025-01-11 16:19:31 -06:00
|
|
|
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)
|
|
|
|
|
2025-01-12 04:33:22 -06:00
|
|
|
KeyNavigation.backtab: session; 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-12 04:23:45 -06:00
|
|
|
SaltButton {
|
2025-01-11 16:19:31 -06:00
|
|
|
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
|
|
|
}
|
|
|
|
|
2025-01-12 04:23:45 -06:00
|
|
|
SaltButton {
|
2025-01-11 16:19:31 -06:00
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|