Initial submit of the project. Not yet tested
[lxqt-slackware.git] / sddm / themes / lxqt / Main.qml
1 /*
2 * Copyright 2016 Eric Hameleers, Eindhoven, NL <alien@slackware.com>
3 * All rights reserved.
4 *
5 * Permission to use, copy, modify, and distribute this software for
6 * any purpose with or without fee is hereby granted, provided that
7 * the above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
11 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
13 * IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
14 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
15 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
16 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
17 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
18 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
19 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
20 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
21 * SUCH DAMAGE.
22 */
23
24 import QtQuick 2.2
25 import SddmComponents 2.0
26
27 Rectangle {
28 id: container
29 width: 1024
30 height: 768
31
32 property int sessionIndex: session.index
33
34 TextConstants { id: textConstants }
35
36 Connections {
37 target: sddm
38 onLoginSucceeded: {
39 }
40
41 onLoginFailed: {
42 txtMessage.text = textConstants.loginFailed
43 listView.currentItem.password.text = ""
44 }
45 }
46
47 Repeater {
48 model: screenModel
49 Background {
50 x: geometry.x; y: geometry.y; width: geometry.width; height:geometry.height
51 source: config.background
52 fillMode: Image.PreserveAspectCrop
53 onStatusChanged: {
54 if (status == Image.Error && source != config.defaultBackground) {
55 source = config.defaultBackground
56 }
57 }
58 }
59 }
60
61 Rectangle {
62 property variant geometry: screenModel.geometry(screenModel.primary)
63 x: geometry.x; y: geometry.y; width: geometry.width; height: geometry.height
64 color: "transparent"
65
66 Component {
67 id: userDelegate
68
69 PictureBox {
70 anchors.verticalCenter: parent.verticalCenter
71 name: (model.realName === "") ? model.name : model.realName
72 icon: model.icon
73
74 focus: (listView.currentIndex === index) ? true : false
75 state: (listView.currentIndex === index) ? "active" : ""
76
77 onLogin: sddm.login(model.name, password, sessionIndex);
78
79 MouseArea {
80 anchors.fill: parent
81 hoverEnabled: true
82 onEntered: listView.currentIndex = index
83 onClicked: listView.focus = true
84 }
85 }
86 }
87
88 Row {
89 anchors.fill: parent
90
91 Text {
92 id: txtMessage
93 anchors.top: usersContainer.bottom;
94 anchors.margins: 20
95 anchors.horizontalCenter: parent.horizontalCenter
96 color: "white"
97 text: textConstants.promptSelectUser
98 font.pixelSize: 16
99 font.family: "sans"
100 }
101
102 Item {
103 id: usersContainer
104 width: parent.width; height: 300
105 anchors.verticalCenter: parent.verticalCenter
106
107 ImageButton {
108 id: prevUser
109 anchors.left: parent.left
110 anchors.verticalCenter: parent.verticalCenter
111 anchors.margins: 10
112 source: "angle-left.png"
113 onClicked: listView.decrementCurrentIndex()
114
115 KeyNavigation.backtab: btnShutdown; KeyNavigation.tab: listView
116 }
117
118
119
120 ListView {
121 id: listView
122 height: parent.height
123 anchors.left: prevUser.right; anchors.right: nextUser.left
124 anchors.verticalCenter: parent.verticalCenter
125 anchors.margins: 10
126
127 clip: true
128 focus: true
129
130 spacing: 5
131
132 model: userModel
133 delegate: userDelegate
134 orientation: ListView.Horizontal
135 currentIndex: userModel.lastIndex
136
137 KeyNavigation.backtab: prevUser; KeyNavigation.tab: nextUser
138 }
139
140 ImageButton {
141 id: nextUser
142 anchors.right: parent.right
143 anchors.verticalCenter: parent.verticalCenter
144 anchors.margins: 10
145 source: "angle-right.png"
146 onClicked: listView.incrementCurrentIndex()
147 KeyNavigation.backtab: listView; KeyNavigation.tab: session
148 }
149 }
150
151 }
152 }
153
154 Rectangle {
155 id: actionBar
156 anchors.top: parent.top;
157 anchors.horizontalCenter: parent.horizontalCenter
158 width: parent.width; height: 64
159 color: "#44ffffff"
160
161 Row {
162 anchors.left: parent.left
163 anchors.margins: 5
164 height: parent.height
165 spacing: 5
166
167 Text {
168 height: parent.height
169 anchors.verticalCenter: parent.verticalCenter
170 text: textConstants.session
171 font.pixelSize: 14
172 color: "white"
173 verticalAlignment: Text.AlignVCenter
174 }
175
176 ComboBox {
177 id: session
178 width: 245
179 anchors.verticalCenter: parent.verticalCenter
180 arrowIcon: "angle-down.png"
181 model: sessionModel
182 index: sessionModel.lastIndex
183 font.pixelSize: 14
184 color: "#44ffffff"
185 KeyNavigation.backtab: nextUser; KeyNavigation.tab: layoutBox
186 }
187
188 Text {
189 height: parent.height
190 anchors.verticalCenter: parent.verticalCenter
191 text: textConstants.layout
192 font.pixelSize: 14
193 color: "white"
194 verticalAlignment: Text.AlignVCenter
195 }
196
197 LayoutBox {
198 id: layoutBox
199 width: 90
200 anchors.verticalCenter: parent.verticalCenter
201 font.pixelSize: 14
202 arrowIcon: "angle-down.png"
203 KeyNavigation.backtab: session; KeyNavigation.tab: btnShutdown
204 }
205 }
206
207 Row {
208 height: parent.height
209 anchors.right: parent.right
210 anchors.margins: 5
211 spacing: 5
212
213 ImageButton {
214 id: btnReboot
215 height: parent.height
216 source: "reboot.png"
217 visible: sddm.canReboot
218 onClicked: sddm.reboot()
219 KeyNavigation.backtab: layoutBox; KeyNavigation.tab: btnShutdown
220 }
221
222 ImageButton {
223 id: btnShutdown
224 height: parent.height
225 source: "shutdown.png"
226 visible: sddm.canPowerOff
227 onClicked: sddm.powerOff()
228 KeyNavigation.backtab: btnReboot; KeyNavigation.tab: prevUser
229 }
230 Clock {
231 id: clock
232 anchors.margins: 5
233 anchors.top: parent.top; anchors.right: parent.right
234 color: "white"
235 timeFont.family: "sans"
236 timeFont.bold: true
237 timeFont.pixelSize: 28
238 dateFont.pixelSize: 12
239 }
240 }
241
242
243 }
244 }