Add SessionFrame

This commit is contained in:
杨万青 2016-04-05 19:42:21 +08:00
parent b4394123ab
commit 87c2f85788
4 changed files with 156 additions and 37 deletions

View File

@ -2,6 +2,18 @@ import QtQuick 2.0
import SddmComponents 2.0
Rectangle {
property int m_sessionIndex: sessionModel.lastIndex
readonly property int m_powerButtonSize: 40
function getIconByName(name) {
for (var i = 0; i < userModel.count; i ++) {
if (userModel.get(i).name === name) {
return userModel.get(i).icon
}
}
return ""
}
Image {
id: powerBackground
@ -88,7 +100,7 @@ Rectangle {
KeyNavigation.backtab: userButton; KeyNavigation.tab: shutdownButton
Keys.onPressed: {
if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
sddm.login(userNameText.text, passwdInput.text, 1/*session.index*/)
sddm.login(userNameText.text, passwdInput.text, m_sessionIndex)
event.accepted = true
}
}
@ -103,7 +115,7 @@ Rectangle {
// Fixme, This is vary strange
source: "icons/login_normal.png"
onClicked: {
sddm.login(userNameText.text, passwdInput.text, 1/*session.index*/)
sddm.login(userNameText.text, passwdInput.text, m_sessionIndex)
}
}
}
@ -181,34 +193,44 @@ Rectangle {
readonly property int itemSpacing: 20;
ImageButton {
id: userButton
visible: userModel.count > 1
anchors {
right: shutdownButton.left
rightMargin: powerArea.itemSpacing
verticalCenter: parent.verticalCenter
Row {
spacing: 20
anchors.right: parent.right
anchors.rightMargin: hMargin
anchors.verticalCenter: parent.verticalCenter
ImageButton {
id: sessionButton
width: m_powerButtonSize
height: m_powerButtonSize
visible: sessionFrame.isMultipleSessions()
source: sessionFrame.getCurrentSessionIconPath()
onClicked: root.state = "stateSession"
}
source: "icons/switchframe/userswitch_normal.png"
onClicked: {
console.log("Switch User...")
}
}
ImageButton {
id: userButton
width: m_powerButtonSize
height: m_powerButtonSize
visible: true//userModel.count > 1
ImageButton {
id: shutdownButton
visible: sddm.canPowerOff
anchors {
right: parent.right
rightMargin: hMargin + powerArea.itemSpacing
verticalCenter: parent.verticalCenter
source: "icons/switchframe/userswitch_normal.png"
onClicked: {
console.log("Switch User...")
}
}
source: "icons/switchframe/powermenu.png"
onClicked: {
console.log("Show shutdown menu")
root.state = "statePower"
ImageButton {
id: shutdownButton
width: m_powerButtonSize
height: m_powerButtonSize
visible: true//sddm.canPowerOff
source: "icons/switchframe/powermenu.png"
onClicked: {
console.log("Show shutdown menu")
root.state = "statePower"
}
}
}
}

View File

@ -16,30 +16,24 @@ Rectangle {
TextConstants { id: textConstants }
function getIconByName(name) {
for (var i = 0; i < userModel.count; i ++) {
if (userModel.get(i).name === userNameText.text) {
return userModel.get(i).icon
}
}
return ""
}
states: [
State {
name: "statePower"
PropertyChanges { target: loginFrame; opacity: 0}
PropertyChanges { target: powerFrame; opacity: 1}
PropertyChanges { target: sessionFrame; opacity: 0}
},
State {
name: "stateSession"
PropertyChanges { target: loginFrame; opacity: 1}
PropertyChanges { target: loginFrame; opacity: 0}
PropertyChanges { target: powerFrame; opacity: 0}
PropertyChanges { target: sessionFrame; opacity: 1}
},
State {
name: "stateLogin"
PropertyChanges { target: loginFrame; opacity: 1}
PropertyChanges { target: powerFrame; opacity: 0}
PropertyChanges { target: sessionFrame; opacity: 0}
}
]
@ -63,6 +57,7 @@ Rectangle {
PowerFrame {
id: powerFrame
enabled: root.state == "statePower"
property variant geometry: screenModel.geometry(screenModel.primary)
x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height
opacity: 1
@ -72,8 +67,22 @@ Rectangle {
onNeedSuspend: sddm.suspend()
}
SessionFrame {
id: sessionFrame
enabled: root.state == "stateSession"
property variant geometry: screenModel.geometry(screenModel.primary)
x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height
onSelected: {
console.log("Selected :", index)
root.state = "stateLogin"
loginFrame.m_sessionIndex = index
}
onNeedClose: root.state = "stateLogin"
}
LoginFrame {
id: loginFrame
enabled: root.state == "stateLogin"
property variant geometry: screenModel.geometry(screenModel.primary)
x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height
color: "transparent"

88
SessionFrame.qml Normal file
View File

@ -0,0 +1,88 @@
import QtQuick 2.0
import QtGraphicalEffects 1.0
Rectangle {
id: frame
signal selected(var index)
signal needClose()
property var sessionTypeList: ["deepin", "enlightenment", "fluxbox", "gnome", "kde", "lxde", "ubuntu"]
function getIconName(sessionName) {
for (var item in sessionTypeList) {
var str = sessionTypeList[item]
var index = sessionName.toLowerCase().indexOf(str)
if (index >= 0) {
return str
}
}
return "unknow"
}
function getCurrentSessionIconPath() {
return sessionList.currentItem.iconPath
}
function isMultipleSessions() {
return sessionList.count > 1
}
Image {
id: sessionBackground
anchors.fill: parent
source: "background.jpg"
}
FastBlur {
anchors.fill: sessionBackground
source: sessionBackground
radius: 20
}
ListView {
id: sessionList
anchors.centerIn: parent
width: childrenRect.width
height: 80
model: sessionModel
currentIndex: sessionModel.lastIndex
orientation: ListView.Horizontal
delegate: Item {
property string iconPath: iconButton.normalImg
width: 150
height: 120
ImageButton {
id: iconButton
anchors.top: parent.top
anchors.horizontalCenter: parent.horizontalCenter
property var prefix: ("icons/%1_indicator_").arg(getIconName(name));
normalImg: ("%1normal.png").arg(prefix)
hoverImg: ("%1hover.png").arg(prefix)
pressImg: ("%1press.png").arg(prefix)
onClicked: {
selected(index)
sessionList.currentIndex = index
}
}
Text {
width: parent.width
anchors.bottom: parent.bottom
anchors.horizontalCenter: parent.horizontalCenter
horizontalAlignment: Text.AlignHCenter
text: name
font.pointSize: 15
color: "white"
wrapMode: Text.WordWrap
}
}
}
MouseArea {
z: -1
anchors.fill: parent
onClicked: needClose()
}
}

View File

@ -1,5 +1,5 @@
[SddmGreeterTheme]
Name=Deepin
Name=SDDM Deepin
Description=Deepin SDDM theme.
Screenshot=screenshot.png
License=CC-BY-SA
@ -9,5 +9,5 @@ Screenshot=screenshot.png
MainScript=Main.qml
ConfigFile=theme.conf
TranslationsDirectory=translations
Theme-Id=deepin
Theme-Id=sddm-deepin
Theme-API=2.0