From 87c2f8578897c8d789628381c34aa285081b8179 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E4=B8=87=E9=9D=92?= Date: Tue, 5 Apr 2016 19:42:21 +0800 Subject: [PATCH] Add SessionFrame --- LoginFrame.qml | 72 +++++++++++++++++++++++++-------------- Main.qml | 29 ++++++++++------ SessionFrame.qml | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ metadata.desktop | 4 +-- 4 files changed, 156 insertions(+), 37 deletions(-) create mode 100644 SessionFrame.qml diff --git a/LoginFrame.qml b/LoginFrame.qml index 3c7c607..4317107 100644 --- a/LoginFrame.qml +++ b/LoginFrame.qml @@ -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" + } } } } diff --git a/Main.qml b/Main.qml index 14594c2..46b5a11 100644 --- a/Main.qml +++ b/Main.qml @@ -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" diff --git a/SessionFrame.qml b/SessionFrame.qml new file mode 100644 index 0000000..dfd48b3 --- /dev/null +++ b/SessionFrame.qml @@ -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() + } +} diff --git a/metadata.desktop b/metadata.desktop index 0641bea..8512388 100644 --- a/metadata.desktop +++ b/metadata.desktop @@ -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