You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

262 lines
9.2 KiB

3 years ago
/*
* Copyright 2019 Romain V. <contact@rokin.in> - <https://github.com/Rokin05>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this program; if not, see <https://www.gnu.org/licenses>.
*/
import QtQuick 2.8
import QtQuick.Layouts 1.3
import "components"
import "components/artwork/fonts"
Skel {
id: root
width: 1920
height: 1080
// Init.
Fonts { id: fonts }
TextConstants { id: textConstants }
menu: Item { id: menu; anchors.fill: parent }
free: Item { id: free; anchors.fill: parent }
// ===================
// Objects
// ===================
Screensaver { id: screensaver; anchors.fill: parent }
Login {
id: login
parent: isFull ? free : menu
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
visible: isMini ? false : true
//Rectangle {anchors.fill: parent; color: "red"; opacity: 0.1} //DEBUG
}
Clock { id: clock; parent: free }
// Session and Keyboard buttons.
RowLayout {
id: combobox
z: 2
parent: free
height: 30
spacing: 4
anchors.margins: 4
LayoutMirroring.enabled: isMirror
SessionButton {
id: sessionButton
Layout.fillWidth: false
Layout.preferredWidth: 160
Layout.fillHeight: false
Layout.preferredHeight: 28
Layout.rightMargin: 4
visible: true
}
KeyboardButton {
id: keyboardButton
Layout.fillWidth: false
Layout.preferredWidth: 140
Layout.fillHeight: false
Layout.preferredHeight: 28
Layout.rightMargin: 4
visible: true
}
}
// SDDM actions buttons.
RowLayout {
id: actionButton
parent: free
anchors.margins: 0
spacing: 32
ActionButton {
id: suspendButton
Layout.fillWidth: false
Layout.preferredWidth: visible ? config["action.button/icon.size"] : 0
Layout.margins: 2
visible: root.conf("enable.button.suspend")
enabled: visible ? sddm.canSuspend : false
//enabled: true
iconSource: "components/"+config["path/action.icon.suspend"]
text: textConstants.suspend
onClicked: sddm.suspend()
}
ActionButton {
id: rebootButton
Layout.fillWidth: false
Layout.preferredWidth: visible ? config["action.button/icon.size"] : 0
Layout.margins: 2
visible: root.conf("enable.button.reboot")
enabled: visible ? sddm.canReboot : false
//enabled: true
text: textConstants.reboot
iconSource: "components/"+config["path/action.icon.reboot"]
onClicked: sddm.reboot()
}
ActionButton {
id: shutdownButton
Layout.fillWidth: false
Layout.preferredWidth: visible ? config["action.button/icon.size"] : 0
Layout.margins: 2
visible: root.conf("enable.button.shutdown")
enabled: visible ? sddm.canPowerOff : false
//enabled: true
text: textConstants.shutdown
iconSource: "components/"+config["path/action.icon.shutdown"]
onClicked: sddm.powerOff()
}
ActionButton {
id: switchButton
Layout.fillWidth: false
Layout.preferredWidth: visible ? config["action.button/icon.size"] : 0
Layout.margins: 2
visible: root.conf("enable.button.otheruser")
enabled: visible
iconSource: "components/"+config["path/action.icon.switchuser"]
onClicked: login.newUser = login.newUser ? false : true
//i18nd : https://doc.qt.io/qt-5/qtquick-internationalization.html
Component.onCompleted: {
switch (Qt.locale().name.substring(0,2)) {
case "en": switchButton.text = "Different User"; break;
case "fr": switchButton.text = "Utilisateur différent"; break;
case "es": switchButton.text = "Usuario diferente"; break;
case "it": switchButton.text = "Utente diverso"; break;
case "de": switchButton.text = "Anderer Benutzer"; break;
default: switchButton.text = "Different User";
}
}
}
}
// Button for switch in "full" view.
ActionButton {
id: fullsizeButton
parent: free
y: root.mousePosY
anchors.left: parent.left
LayoutMirroring.enabled: isMirror
mirror: isMirror
activeFocusOnTab : false
visible: root.conf("enable.button.fullscreen.switch")
opacity: isFull ? 0.1 : 0.1
iconSize: 24
iconSource: "components/"+config["path/action.icon.fullscreen"]
MouseArea {
hoverEnabled: false
anchors.fill: parent
drag.target: parent; drag.axis: Drag.XAxis
onMouseXChanged: if (drag.active) root.updateLayout(mouseX)
onReleased: if (drag.active) root.mirrorLayout(mouseX)
onClicked: taskbar.width = (isMini || isFull) ? halfSize : 0
}
}
// KDE Plasma stuff.
Loader {
id: battery
parent: free
anchors.margins: 4
LayoutMirroring.enabled: isMirror
source: "components/Battery.qml"
}
// Virtual Keyboard (opt).
Loader {
id: virtualKeyboard
z: 200
parent: free
active: primaryScreen
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
anchors.bottomMargin: actionButton.height + 22
width: 800
state: "hidden"
source: "components/VirtualKeyboard.qml"
property bool keyboardActive: item ? item.active : false
onKeyboardActiveChanged: state = keyboardActive ? "visible" : "hidden"
function show() {
state = "visible";
Qt.inputMethod.show();
virtualKeyboard.item.activated = true;
}
function hide() {
state = "hidden";
Qt.inputMethod.hide();
virtualKeyboard.item.activated = false;
}
}
// Virtual Keyboard (opt).
SwitchButton {
id: virtualKeyboardButton
z: 2
parent: free
anchors.margins: 4
anchors.leftMargin: 8
anchors.rightMargin: 8
LayoutMirroring.enabled: isMirror
text: qsTr("Virtual Keyboard")
position: 0
visible: virtualKeyboard.status == Loader.Ready
onPositionChanged: position == 1 ? virtualKeyboard.show() : virtualKeyboard.hide()
//onClicked: position === 1 ? virtualKeyboard.show() : virtualKeyboard.hide()
}
// ==============
// Misc
// ==============
// See : https://github.com/sddm/sddm/issues/202 (keyboard.layouts)
Keys.onPressed: keyboardButton.displayText = keyboard.layouts[keyboard.currentLayout].longName;
Component.onCompleted: {
getPosition(clock, root.conf("position.clock"));
getPosition(combobox, root.conf("position.combobox"));
getPosition(actionButton, root.conf("position.button.action"));
getPosition(battery, root.conf("position.battery"));
getPosition(virtualKeyboardButton, root.conf("position.button.virtual.keyboard"));
// getPosition(fullsizeButton, root.conf("position.button.fullsize"));
}
function getPosition(id, pos) {
var p = id.parent;
var o = id.anchors;
if (pos == "top") { id.anchors.top = p.top; id.anchors.horizontalCenter = p.horizontalCenter; return ""; }
if (pos == "bottom") { id.anchors.bottom = p.bottom; id.anchors.horizontalCenter = p.horizontalCenter; return ""; }
if (pos == "left") { id.anchors.left = p.left; id.anchors.verticalCenter = p.verticalCenter; return ""; }
if (pos == "right") { id.anchors.right = p.right; id.anchors.verticalCenter = p.verticalCenter; return ""; }
if (pos == "top-left") { id.anchors.top = p.top; id.anchors.left = p.left; return ""; }
if (pos == "top-right") { id.anchors.top = p.top; id.anchors.right = p.right; return ""; }
if (pos == "bottom-left") { id.anchors.bottom = p.bottom; id.anchors.left = p.left; return ""; }
if (pos == "bottom-right") { id.anchors.bottom = p.bottom; id.anchors.right = p.right; return ""; }
}
function conf(key) {
var val = config[key];
if (val === "true") {return true;}
if (val === "false") {return false;}
return val;
}
}