2020-05-14 23:12:55 +00:00
|
|
|
import QtQuick 2.6
|
|
|
|
import QtQuick.Controls 2.6
|
|
|
|
import QtGraphicalEffects 1.6
|
|
|
|
|
|
|
|
import QtQuick.Layouts 1.6
|
|
|
|
|
|
|
|
import ".."
|
|
|
|
import "."
|
|
|
|
Item {
|
|
|
|
// This rectangle spans the screen
|
|
|
|
id: loginPaneRoot
|
|
|
|
// Emitted when an user is selected
|
|
|
|
signal userSelected(string user, string password)
|
|
|
|
signal closed()
|
|
|
|
property string hostname
|
|
|
|
property int sessionIndex
|
|
|
|
property bool _open: false
|
|
|
|
property string _user
|
2020-05-18 11:34:29 +00:00
|
|
|
property string _realUser
|
2020-05-14 23:12:55 +00:00
|
|
|
|
|
|
|
// Gives a blur effect to the background
|
|
|
|
Item {
|
|
|
|
id: background
|
|
|
|
opacity: 0
|
|
|
|
anchors.fill: parent
|
|
|
|
Image {
|
|
|
|
id: effectSource
|
|
|
|
source: Style.background //refers to the root in Main.qml
|
|
|
|
anchors.fill: parent
|
|
|
|
visible: false
|
|
|
|
}
|
|
|
|
GaussianBlur {
|
|
|
|
id: blur
|
|
|
|
anchors.fill: effectSource
|
|
|
|
source: effectSource
|
|
|
|
radius: 16
|
|
|
|
samples: 16
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// The actual pane
|
|
|
|
Rectangle {
|
|
|
|
id: userSelector
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
anchors.bottomMargin: -height
|
|
|
|
width: parent.width
|
|
|
|
height: content.height
|
|
|
|
color: Style.backgroundColor
|
|
|
|
Column {
|
|
|
|
id: content
|
|
|
|
width: parent.width
|
|
|
|
Title {
|
|
|
|
text: "Who is using %1?".arg(hostname)
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.leftMargin: Style.horizontalContentPadding
|
|
|
|
}
|
|
|
|
|
|
|
|
Divider {}
|
|
|
|
Item { height: Style.mediumPadding; width: 1; }
|
|
|
|
FocusScope {
|
|
|
|
width: parent.width
|
|
|
|
height: 220
|
|
|
|
Row {
|
|
|
|
anchors.top: parent.top
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
spacing: Style.highlightBorderSize + Style.highlightGap * 2
|
|
|
|
/*ListModel {
|
|
|
|
id: userModel
|
|
|
|
ListElement { realName: "test1"; icon: "file:///home/chris/.face.icon";}
|
|
|
|
ListElement { realName: "test2"; icon: "file:///home/chris/.face.icon";}
|
|
|
|
ListElement { realName: "test3"; icon: "file:///home/chris/.face.icon";}
|
|
|
|
}*/
|
|
|
|
Repeater {
|
|
|
|
model: userModel
|
|
|
|
UserDelegate {
|
|
|
|
focus: true
|
|
|
|
text: model.realName
|
|
|
|
icon.source: model.icon
|
|
|
|
onClicked: {
|
2020-05-18 11:34:29 +00:00
|
|
|
_user = model.name
|
|
|
|
_realUser = model.realName
|
2020-05-14 23:12:55 +00:00
|
|
|
showPasswordOverlay()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Item { height: Style.mediumPadding; width: 1; }
|
|
|
|
Divider {}
|
|
|
|
//Item { height: Style.mediumPadding; width: 1; }
|
|
|
|
RowLayout {
|
|
|
|
height: Style.iconSize + Style.mediumPadding
|
|
|
|
anchors.left: parent.left
|
|
|
|
anchors.leftMargin: Style.horizontalContentPadding
|
|
|
|
anchors.right: parent.right
|
|
|
|
anchors.rightMargin: anchors.leftMargin
|
|
|
|
TintedImage {
|
|
|
|
Layout.preferredWidth: Style.iconSize
|
|
|
|
Layout.preferredHeight: Style.iconSize
|
|
|
|
|
|
|
|
color: Style.foregroundColor
|
|
|
|
source: "../icons/keyboard.svg"
|
|
|
|
}
|
|
|
|
ComboBox {
|
|
|
|
Layout.fillHeight: true
|
|
|
|
//height: parent.height
|
|
|
|
Layout.preferredWidth: 400
|
|
|
|
model: keyboard.layouts
|
|
|
|
flat: true
|
|
|
|
font.pixelSize: Style.fontNormalSize
|
|
|
|
|
|
|
|
palette.buttonText: Style.foregroundColor
|
|
|
|
palette.button: Style.backgroundColor
|
|
|
|
palette.mid: Style.backgroundColor2
|
|
|
|
palette.dark: Style.foregroundColor
|
|
|
|
palette.light: Style.backgroundColor
|
|
|
|
palette.window: Style.backgroundColor
|
|
|
|
|
|
|
|
textRole: "longName"
|
|
|
|
currentIndex: keyboard.currentLayout
|
|
|
|
onCurrentIndexChanged: keyboard.currentLayout = currentIndex
|
|
|
|
}
|
|
|
|
Item {
|
|
|
|
Layout.fillWidth: true
|
|
|
|
Layout.fillHeight: true
|
|
|
|
}
|
|
|
|
ComboBox {
|
|
|
|
id: sessionIndex
|
|
|
|
Layout.fillHeight: true
|
|
|
|
//height: parent.height
|
|
|
|
Layout.preferredWidth: 400
|
|
|
|
model: sessionModel
|
|
|
|
flat: true
|
|
|
|
font.pixelSize: Style.fontNormalSize
|
|
|
|
|
|
|
|
palette.buttonText: Style.foregroundColor
|
|
|
|
palette.button: Style.backgroundColor
|
|
|
|
palette.mid: Style.backgroundColor2
|
|
|
|
palette.dark: Style.foregroundColor
|
|
|
|
palette.light: Style.backgroundColor
|
|
|
|
palette.window: Style.backgroundColor
|
|
|
|
|
|
|
|
textRole: "name"
|
|
|
|
currentIndex: sessionModel.lastIndex
|
|
|
|
onCurrentIndexChanged: loginPaneRoot.sessionIndex = currentIndex
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
//Item { height: Style.mediumPadding; width: 1; }
|
|
|
|
}
|
|
|
|
|
|
|
|
ParallelAnimation {
|
|
|
|
id: userSelectorShow
|
|
|
|
NumberAnimation {
|
|
|
|
target: background
|
|
|
|
property: "opacity"
|
|
|
|
from: 0
|
|
|
|
to: 1
|
|
|
|
duration: 100
|
|
|
|
}
|
|
|
|
NumberAnimation {
|
|
|
|
target: userSelector
|
|
|
|
property: "anchors.bottomMargin"
|
|
|
|
from: -userSelector.height
|
|
|
|
to: 0
|
|
|
|
duration: 150
|
|
|
|
easing.type: Easing.OutQuad
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SequentialAnimation {
|
|
|
|
id: userSelectorHide
|
|
|
|
ParallelAnimation {
|
|
|
|
NumberAnimation {
|
|
|
|
target: userSelector
|
|
|
|
property: "anchors.bottomMargin"
|
|
|
|
from: 0
|
|
|
|
to: -userSelector.height
|
|
|
|
duration: 150
|
|
|
|
easing.type: Easing.InQuad
|
|
|
|
}
|
|
|
|
NumberAnimation {
|
|
|
|
target: background
|
|
|
|
property: "opacity"
|
|
|
|
from: 1
|
|
|
|
to: 0
|
|
|
|
duration: 100
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ScriptAction {
|
|
|
|
script: closed()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
PasswordOverlay {
|
|
|
|
id: passwordOverlay
|
|
|
|
enabled: false
|
|
|
|
anchors.fill: parent
|
|
|
|
opacity: enabled ? 1 : 0
|
|
|
|
Behavior on opacity { NumberAnimation {} }
|
|
|
|
|
2020-05-18 11:34:29 +00:00
|
|
|
username: _realUser
|
2020-05-14 23:12:55 +00:00
|
|
|
|
|
|
|
onPasswordEntered: {
|
|
|
|
hidePasswordOverlay()
|
|
|
|
userSelected(_user, password)
|
|
|
|
}
|
|
|
|
onCancelled: hidePasswordOverlay()
|
|
|
|
}
|
|
|
|
|
|
|
|
function showPasswordOverlay() {
|
|
|
|
userSelector.enabled = false;
|
|
|
|
passwordOverlay.enabled = true;
|
|
|
|
passwordOverlay.focus = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
function hidePasswordOverlay() {
|
|
|
|
userSelector.enabled = true;
|
|
|
|
passwordOverlay.enabled = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
function open() {
|
|
|
|
if (!_open) userSelectorShow.start()
|
|
|
|
}
|
|
|
|
|
|
|
|
function close() {
|
|
|
|
console.log("Closing pane")
|
|
|
|
/*if (_open)*/ userSelectorHide.start()
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|