Warning, /plasma/lightdm-kde-greeter/themes/classic/contents/ui/main.qml is written in an unsupported language. File is not indexed.

0001 /*
0002 This file is part of LightDM-KDE.
0003 
0004 Copyright 2011, 2012 David Edmundson <kde@davidedmundson.co.uk>
0005 
0006 LightDM-KDE is free software: you can redistribute it and/or modify
0007 it under the terms of the GNU General Public License as published by
0008 the Free Software Foundation, either version 3 of the License, or
0009 (at your option) any later version.
0010 
0011 LightDM-KDE is distributed in the hope that it will be useful,
0012 but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 GNU General Public License for more details.
0015 
0016 You should have received a copy of the GNU General Public License
0017 along with LightDM-KDE.  If not, see <http://www.gnu.org/licenses/>.
0018 */
0019 import QtQuick 1.0
0020 //TODO phase this out
0021 import org.kde.plasma.graphicswidgets 0.1 as PlasmaWidgets
0022 import org.kde.plasma.components 0.1 as PlasmaComponents
0023 import org.kde.qtextracomponents 0.1 as ExtraComponents
0024 import org.kde.plasma.core 0.1 as PlasmaCore
0025 import org.kde.lightdm 0.1 as LightDM
0026 
0027 Item {
0028     
0029     LightDM.ScreenManager {
0030         id: screenManager
0031         delegate: Image {
0032             // default to keeping aspect ratio
0033             fillMode: config.readEntry("BackgroundKeepAspectRatio") == false ? Image.Stretch : Image.PreserveAspectCrop;
0034             //read from config, if there's no entry use plasma theme
0035                       
0036             source: config.readEntry("Background") ? config.readEntry("Background"): theme.wallpaperPathForSize(width,height);
0037             smooth: true
0038         }
0039     }
0040 
0041     Item { //recreate active screen at a sibling level which we can anchor in.
0042         id: activeScreen
0043         x: screenManager.activeScreen.x
0044         y: screenManager.activeScreen.y
0045         width: screenManager.activeScreen.width
0046         height: screenManager.activeScreen.height
0047     }
0048 
0049 
0050     Connections {
0051         target: greeter;
0052         onShowPrompt: {
0053             greeter.respond(passwordInput.text);
0054         }
0055 
0056         onAuthenticationComplete: {
0057             busyIndicator.opacity = 0;
0058             loginButton.opacity = 1;
0059 
0060             if(greeter.authenticated) {
0061                 loginAnimation.start();
0062             }
0063             else {
0064                 feedbackLabel.text = i18n("Sorry, incorrect password please try again.");
0065                 passwordInput.selectAll()
0066                 passwordInput.forceActiveFocus()
0067             }
0068         }
0069     }
0070 
0071     function login() {
0072         busyIndicator.opacity = 1;
0073         loginButton.opacity = 0;
0074 
0075         if (useGuestOption.checked) {
0076             greeter.authenticateAsGuest();
0077         } else {
0078             greeter.authenticate(usernameInput.text);
0079         }
0080     }
0081 
0082     function doSessionSync() {
0083         var session = optionsMenu.currentSession;
0084         greeter.startSessionSync(session);
0085     }
0086 
0087     ParallelAnimation {
0088         id: loginAnimation
0089         NumberAnimation { target: dialog; property: "opacity"; to: 0; duration: 400; easing.type: Easing.InOutQuad }
0090         NumberAnimation { target: powerDialog; property: "opacity"; to: 0; duration: 400; easing.type: Easing.InOutQuad }
0091         onCompleted: doSessionSync()
0092     }
0093 
0094     PlasmaCore.FrameSvgItem {
0095         id: dialog;
0096         imagePath: "widgets/background"
0097         anchors.centerIn: activeScreen;
0098 
0099         width: childrenRect.width + 55;
0100         height: childrenRect.height + 55;
0101 
0102         Column {
0103             spacing: 15
0104             anchors.centerIn: parent
0105 
0106             Image {
0107                 id: logo
0108                 source: config.readEntry("Logo")
0109                 fillMode: Image.PreserveAspectFit
0110                 height: 100
0111                 anchors.horizontalCenter: parent.horizontalCenter
0112                 smooth: true
0113             }
0114 
0115 
0116             PlasmaComponents.Label {
0117                 anchors.horizontalCenter: parent.horizontalCenter;
0118                 id: feedbackLabel;
0119                 font.pointSize: 9
0120                 text: config.readEntry("GreetMessage").replace("%hostname%", greeter.hostname);
0121             }
0122 
0123             //if guest checked, replace the normal "user/pass" textboxes with a big login button
0124             PlasmaComponents.Button {
0125                 visible: useGuestOption.checked
0126                 text: i18n("Log in as guest");
0127                 onClicked: login()
0128             }
0129 
0130             Row {
0131                 visible: !useGuestOption.checked
0132                 spacing: 10
0133                 width: childrenRect.width
0134                 height: childrenRect.height
0135 
0136                 Grid {
0137                     columns: 2
0138                     spacing: 15
0139 
0140                     ExtraComponents.QIconItem {
0141                         icon: "meeting-participant"
0142                         height: usernameInput.height;
0143                         width: usernameInput.height;
0144                     }
0145 
0146                     PlasmaComponents.TextField {
0147                         id: usernameInput;
0148                         placeholderText: i18n("Username");
0149                         text: greeter.lastLoggedInUser
0150                         onAccepted: {
0151                             passwordInput.focus = true;
0152                         }
0153                         width: 160
0154 
0155                         Component.onCompleted: {
0156                             //if the username field has text, focus the password, else focus the username
0157                             if (usernameInput.text) {
0158                                 passwordInput.focus = true;
0159                             } else {
0160                                 usernameInput.focus = true;
0161                             }
0162                         }
0163                         KeyNavigation.tab: passwordInput
0164                     }
0165 
0166                     ExtraComponents.QIconItem {
0167                         icon: "object-locked"
0168                         height: passwordInput.height;
0169                         width: passwordInput.height;
0170                     }
0171 
0172                     PlasmaComponents.TextField {
0173                         id: passwordInput
0174                         echoMode: TextInput.Password
0175                         placeholderText: i18n("Password")
0176                         onAccepted: {
0177                             login();
0178                         }
0179                         width: 160
0180                         KeyNavigation.backtab: usernameInput
0181                         KeyNavigation.tab: loginButton
0182                     }
0183                 }
0184 
0185                 PlasmaComponents.ToolButton {
0186                     id: loginButton
0187                     anchors.verticalCenter: parent.verticalCenter
0188                     iconSource: "go-next"
0189                     onClicked: {
0190                         login();
0191                     }
0192                     KeyNavigation.backtab: passwordInput
0193                     KeyNavigation.tab: usernameInput
0194                 }
0195 
0196                 PlasmaComponents.BusyIndicator {
0197                     id: busyIndicator
0198                     running: (visible ? true : false)
0199                     anchors.fill: loginButton
0200                     opacity: 0
0201                 }
0202 
0203             }
0204 
0205             Item {
0206                 height: 10
0207             }
0208 
0209             Row {
0210                 spacing: 8;
0211                 IconButton {
0212                     icon: "system-shutdown"
0213                     onClicked: {
0214                         if (powerDialog.opacity == 1) {
0215                             powerDialog.opacity = 0;
0216                         } else {
0217                             powerDialog.opacity = 1;
0218                         }
0219                     }
0220                 }
0221 
0222                 PlasmaComponents.ContextMenu {
0223                     id: sessionMenu
0224                     visualParent: sessionMenuOption
0225                 }
0226 
0227                 Repeater {
0228                     parent: sessionMenu
0229                     model: LightDM.SessionsModel {}
0230                     delegate : PlasmaComponents.MenuItem {
0231                         text: model.display
0232                         checkable: true
0233                         checked: model.key === optionsMenu.currentSession
0234                         onClicked : {
0235                             optionsMenu.currentSession = model.key;
0236                         }
0237 
0238                         Component.onCompleted: {
0239                             parent = sessionMenu
0240                         }
0241                     }
0242                     Component.onCompleted: {
0243                         model.showLastUsedSession = true
0244                     }
0245                 }
0246 
0247                 PlasmaComponents.ContextMenu {
0248                     id: optionsMenu
0249                     visualParent: optionsButton
0250                     //in LightDM  "" means "last user session". whereas NULL is default.
0251                     property string currentSession: ""
0252                     PlasmaComponents.MenuItem {
0253                         id: useGuestOption
0254                         text: i18n("Log in as guest")
0255                         checkable: true
0256                         enabled: greeter.hasGuestAccount
0257                     }
0258                     PlasmaComponents.MenuItem {
0259                         separator: true
0260                     }
0261 
0262                     PlasmaComponents.MenuItem {
0263                         text: i18n("Session")
0264                         id: sessionMenuOption
0265                         onClicked: sessionMenu.open()
0266                     }
0267                 }
0268 
0269                 IconButton {
0270                     id: optionsButton
0271                     icon: "system-log-out"
0272                     onClicked: {
0273                         optionsMenu.open();
0274                     }
0275                 }
0276             }
0277         }
0278     }
0279 
0280     PlasmaCore.FrameSvgItem {
0281         id: powerDialog
0282         anchors.top: dialog.bottom
0283         anchors.topMargin: 3
0284         anchors.horizontalCenter: activeScreen.horizontalCenter
0285         imagePath: "translucent/dialogs/background"
0286         opacity: 0
0287 
0288         Behavior on opacity { PropertyAnimation { duration: 500} }
0289 
0290         width: childrenRect.width + 30;
0291         height: childrenRect.height + 30;
0292 
0293         Row {
0294             spacing: 5
0295             anchors.centerIn: parent
0296 
0297             LightDM.Power {
0298                 id: power
0299             }
0300 
0301             PlasmaWidgets.IconWidget {
0302                 text: i18n("Suspend")
0303                 icon: QIcon("system-suspend")
0304                 enabled: power.canSuspend;
0305                 onClicked: {power.suspend();}
0306             }
0307 
0308             PlasmaWidgets.IconWidget {
0309                 text: i18n("Hibernate")
0310                 icon: QIcon("system-suspend-hibernate")
0311                 //Hibernate is a special case, lots of distros disable it, so if it's not enabled don't show it
0312                 visible: power.canHibernate;
0313                 onClicked: {power.hibernate();}
0314             }
0315 
0316             PlasmaWidgets.IconWidget {
0317                 text: i18n("Restart")
0318                 icon: QIcon("system-reboot")
0319                 enabled: power.canRestart;
0320                 onClicked: {power.restart();}
0321             }
0322 
0323             PlasmaWidgets.IconWidget {
0324                 text: i18n("Shutdown")
0325                 icon: QIcon("system-shutdown")
0326                 enabled: power.canShutdown;
0327                 onClicked: {power.shutdown();}
0328             }
0329         }
0330 
0331     }
0332 }