Update to KDE 6
|
@ -2,7 +2,7 @@
|
||||||
ColorScheme=TokyoNight
|
ColorScheme=TokyoNight
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Theme=TokyoNight-SE
|
Theme=Colloid-grey-dark
|
||||||
|
|
||||||
[KDE]
|
[KDE]
|
||||||
widgetStyle=Breeze
|
widgetStyle=Breeze
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
[Greeter]
|
[Greeter]
|
||||||
Theme=org.kde.breeze.desktop
|
Theme=Nothing
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
[KSplash]
|
[KSplash]
|
||||||
Engine=KSplashQML
|
Engine=KSplashQML
|
||||||
Theme=org.kde.breeze.desktop
|
Theme=Nothing
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
[TabBox]
|
[TabBox]
|
||||||
DesktopLayout=org.kde.breeze.desktop
|
|
||||||
DesktopListLayout=org.kde.breeze.desktop
|
|
||||||
LayoutName=org.kde.breeze.desktop
|
LayoutName=org.kde.breeze.desktop
|
||||||
|
|
||||||
[Windows]
|
[Windows]
|
||||||
|
@ -9,4 +7,4 @@ Placement=Centered
|
||||||
[org.kde.kdecoration2]
|
[org.kde.kdecoration2]
|
||||||
NoPlugin=false
|
NoPlugin=false
|
||||||
library=org.kde.kwin.aurorae
|
library=org.kde.kwin.aurorae
|
||||||
theme=__aurorae__svg__TokyoNight
|
theme=__aurorae__svg__Nothing
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
com.github.Jayy-Dev.Plasma.Tokyo.Night
|
Nothing
|
|
@ -1,2 +1,2 @@
|
||||||
[Theme]
|
[Theme]
|
||||||
name=Tokyo-Night
|
name=Nothing
|
||||||
|
|
|
@ -1,130 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 David Edmundson <davidedmundson@kde.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.8
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
property alias text: label.text
|
|
||||||
property alias iconSource: icon.source
|
|
||||||
property alias containsMouse: mouseArea.containsMouse
|
|
||||||
property alias font: label.font
|
|
||||||
property alias labelRendering: label.renderType
|
|
||||||
property alias circleOpacity: iconCircle.opacity
|
|
||||||
property alias circleVisiblity: iconCircle.visible
|
|
||||||
property int fontSize: config.fontSize
|
|
||||||
readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
|
|
||||||
signal clicked
|
|
||||||
|
|
||||||
activeFocusOnTab: true
|
|
||||||
|
|
||||||
property int iconSize: units.gridUnit * 3
|
|
||||||
|
|
||||||
implicitWidth: Math.max(iconSize + units.largeSpacing * 2, label.contentWidth)
|
|
||||||
implicitHeight: iconSize + units.smallSpacing + label.implicitHeight
|
|
||||||
|
|
||||||
opacity: activeFocus || containsMouse ? 1 : 0.85
|
|
||||||
Behavior on opacity {
|
|
||||||
PropertyAnimation { // OpacityAnimator makes it turn black at random intervals
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: iconCircle
|
|
||||||
anchors.centerIn: icon
|
|
||||||
width: iconSize + units.smallSpacing
|
|
||||||
height: width
|
|
||||||
radius: width / 2
|
|
||||||
color: "#09090C"
|
|
||||||
border.color: "#9B79CC"
|
|
||||||
border.width: 1
|
|
||||||
opacity: activeFocus || containsMouse ? (softwareRendering ? 0.8 : 0.15) : (softwareRendering ? 0.6 : 0)
|
|
||||||
Behavior on opacity {
|
|
||||||
PropertyAnimation { // OpacityAnimator makes it turn black at random intervals
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors.centerIn: iconCircle
|
|
||||||
width: iconCircle.width
|
|
||||||
height: width
|
|
||||||
radius: width / 2
|
|
||||||
scale: mouseArea.containsPress ? 1 : 0
|
|
||||||
color: PlasmaCore.ColorScope.textColor
|
|
||||||
opacity: 0.15
|
|
||||||
Behavior on scale {
|
|
||||||
PropertyAnimation {
|
|
||||||
duration: units.shortDuration
|
|
||||||
easing.type: Easing.InOutQuart
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
id: icon
|
|
||||||
anchors {
|
|
||||||
top: parent.top
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
width: iconSize
|
|
||||||
height: iconSize
|
|
||||||
|
|
||||||
colorGroup: PlasmaCore.ColorScope.colorGroup
|
|
||||||
active: mouseArea.containsMouse || root.activeFocus
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: label
|
|
||||||
font.pointSize: Math.max(fontSize + 1,theme.defaultFont.pointSize + 1)
|
|
||||||
anchors {
|
|
||||||
top: icon.bottom
|
|
||||||
topMargin: (softwareRendering ? 1.5 : 1) * units.smallSpacing
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
style: softwareRendering ? Text.Outline : Text.Normal
|
|
||||||
styleColor: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignTop
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
font.underline: root.activeFocus
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: mouseArea
|
|
||||||
hoverEnabled: true
|
|
||||||
onClicked: root.clicked()
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
Keys.onEnterPressed: clicked()
|
|
||||||
Keys.onReturnPressed: clicked()
|
|
||||||
Keys.onSpacePressed: clicked()
|
|
||||||
|
|
||||||
Accessible.onPressAction: clicked()
|
|
||||||
Accessible.role: Accessible.Button
|
|
||||||
Accessible.name: label.text
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 Kai Uwe Broulik <kde@privat.broulik.de>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.2
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.workspace.components 2.0 as PW
|
|
||||||
|
|
||||||
Row {
|
|
||||||
spacing: units.smallSpacing
|
|
||||||
visible: pmSource.data["Battery"]["Has Cumulative"]
|
|
||||||
|
|
||||||
PlasmaCore.DataSource {
|
|
||||||
id: pmSource
|
|
||||||
engine: "powermanagement"
|
|
||||||
connectedSources: ["Battery", "AC Adapter"]
|
|
||||||
}
|
|
||||||
|
|
||||||
PW.BatteryIcon {
|
|
||||||
id: battery
|
|
||||||
hasBattery: pmSource.data["Battery"]["Has Battery"] || false
|
|
||||||
percent: pmSource.data["Battery"]["Percent"] || 0
|
|
||||||
pluggedIn: pmSource.data["AC Adapter"] ? pmSource.data["AC Adapter"]["Plugged in"] : false
|
|
||||||
|
|
||||||
height: batteryLabel.height
|
|
||||||
width: height
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: batteryLabel
|
|
||||||
font.pointSize: config.fontSize
|
|
||||||
height: undefined
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","%1%", battery.percent)
|
|
||||||
Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Battery at %1%", battery.percent)
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 David Edmundson <davidedmundson@kde.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.8
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
import QtQuick.Controls 2.5
|
|
||||||
import org.kde.plasma.core 2.0
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
|
|
||||||
|
|
||||||
Label {
|
|
||||||
text: Qt.formatTime(timeSource.data["Local"]["DateTime"])
|
|
||||||
color: ColorScope.textColor
|
|
||||||
style: softwareRendering ? Text.Outline : Text.Normal
|
|
||||||
styleColor: softwareRendering ? ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
|
|
||||||
font.pointSize: 34
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
}
|
|
||||||
Label {
|
|
||||||
text: Qt.formatDate(timeSource.data["Local"]["DateTime"], Qt.DefaultLocaleLongDate)
|
|
||||||
color: ColorScope.textColor
|
|
||||||
style: softwareRendering ? Text.Outline : Text.Normal
|
|
||||||
styleColor: softwareRendering ? ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
|
|
||||||
font.pointSize: 17
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
}
|
|
||||||
DataSource {
|
|
||||||
id: timeSource
|
|
||||||
engine: "time"
|
|
||||||
connectedSources: ["Local"]
|
|
||||||
interval: 1000
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,62 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2014 by Daniel Vrátil <dvratil@redhat.com> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.1
|
|
||||||
import QtQuick.Controls 1.1 as QQC
|
|
||||||
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
import org.kde.plasma.workspace.keyboardlayout 1.0
|
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
|
||||||
|
|
||||||
property int fontSize: config.fontSize
|
|
||||||
|
|
||||||
id: kbLayoutButton
|
|
||||||
|
|
||||||
iconName: "input-keyboard"
|
|
||||||
implicitWidth: minimumWidth
|
|
||||||
text: layout.layoutName()
|
|
||||||
font.pointSize: Math.max(fontSize,theme.defaultFont.pointSize)
|
|
||||||
|
|
||||||
Accessible.name: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Button to change keyboard layout", "Switch layout")
|
|
||||||
|
|
||||||
visible: layout.shouldBeVisible()
|
|
||||||
|
|
||||||
onClicked: layout.nextLayout()
|
|
||||||
|
|
||||||
KeyboardLayout {
|
|
||||||
id: layout
|
|
||||||
function nextLayout() {
|
|
||||||
layout.layout = (layout.layout + 1) % layout.layoutsList.length;
|
|
||||||
}
|
|
||||||
|
|
||||||
function shouldBeVisible() {
|
|
||||||
return layout.layoutsList.length > 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
function layoutName() {
|
|
||||||
return (layout.isInitialized() && layout.layoutsList[layout.layout].displayName) || '';
|
|
||||||
}
|
|
||||||
|
|
||||||
function isInitialized() {
|
|
||||||
return layout.layoutsList.length > 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,121 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 David Edmundson <davidedmundson@kde.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.2
|
|
||||||
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
import QtQuick.Controls 1.1
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Any message to be displayed to the user, visible above the text fields
|
|
||||||
*/
|
|
||||||
property alias notificationMessage: notificationsLabel.text
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A list of Items (typically ActionButtons) to be shown in a Row beneath the prompts
|
|
||||||
*/
|
|
||||||
property alias actionItems: actionItemsLayout.children
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A model with a list of users to show in the view
|
|
||||||
* The following roles should exist:
|
|
||||||
* - name
|
|
||||||
* - iconSource
|
|
||||||
*
|
|
||||||
* The following are also handled:
|
|
||||||
* - vtNumber
|
|
||||||
* - displayNumber
|
|
||||||
* - session
|
|
||||||
* - isTty
|
|
||||||
*/
|
|
||||||
property alias userListModel: userListView.model
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Self explanatory
|
|
||||||
*/
|
|
||||||
property alias userListCurrentIndex: userListView.currentIndex
|
|
||||||
property var userListCurrentModelData: userListView.currentItem === null ? [] : userListView.currentItem.m
|
|
||||||
property bool showUserList: true
|
|
||||||
|
|
||||||
property alias userList: userListView
|
|
||||||
|
|
||||||
property int fontSize: config.fontSize
|
|
||||||
|
|
||||||
default property alias _children: innerLayout.children
|
|
||||||
|
|
||||||
UserList {
|
|
||||||
id: userListView
|
|
||||||
visible: showUserList && y > 0
|
|
||||||
anchors {
|
|
||||||
bottom: parent.verticalCenter
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//goal is to show the prompts, in ~16 grid units high, then the action buttons
|
|
||||||
//but collapse the space between the prompts and actions if there's no room
|
|
||||||
//ui is constrained to 16 grid units wide, or the screen
|
|
||||||
ColumnLayout {
|
|
||||||
id: prompts
|
|
||||||
anchors.top: parent.verticalCenter
|
|
||||||
anchors.topMargin: units.gridUnit * 0.5
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: notificationsLabel
|
|
||||||
font.pointSize: Math.max(fontSize + 1,theme.defaultFont.pointSize + 1)
|
|
||||||
Layout.maximumWidth: units.gridUnit * 16
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
font.italic: true
|
|
||||||
}
|
|
||||||
ColumnLayout {
|
|
||||||
Layout.minimumHeight: implicitHeight
|
|
||||||
Layout.maximumHeight: units.gridUnit * 10
|
|
||||||
Layout.maximumWidth: units.gridUnit * 16
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
ColumnLayout {
|
|
||||||
id: innerLayout
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Row { //deliberately not rowlayout as I'm not trying to resize child items
|
|
||||||
id: actionItemsLayout
|
|
||||||
spacing: units.largeSpacing / 2
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,192 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2014 David Edmundson <davidedmundson@kde.org>
|
|
||||||
* Copyright 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.8
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: wrapper
|
|
||||||
|
|
||||||
// If we're using software rendering, draw outlines instead of shadows
|
|
||||||
// See https://bugs.kde.org/show_bug.cgi?id=398317
|
|
||||||
readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
|
|
||||||
|
|
||||||
property bool isCurrent: true
|
|
||||||
|
|
||||||
readonly property var m: model
|
|
||||||
property string name
|
|
||||||
property string userName
|
|
||||||
property string avatarPath
|
|
||||||
property string iconSource
|
|
||||||
property bool constrainText: true
|
|
||||||
property alias nameFontSize: usernameDelegate.font.pointSize
|
|
||||||
property int fontSize: config.fontSize
|
|
||||||
signal clicked()
|
|
||||||
|
|
||||||
property real faceSize: units.gridUnit * 7
|
|
||||||
|
|
||||||
opacity: isCurrent ? 1.0 : 0.5
|
|
||||||
|
|
||||||
Behavior on opacity {
|
|
||||||
OpacityAnimator {
|
|
||||||
duration: units.longDuration
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Draw a translucent background circle under the user picture
|
|
||||||
Rectangle {
|
|
||||||
anchors.centerIn: imageSource
|
|
||||||
width: imageSource.width + 2 // Subtract to prevent fringing
|
|
||||||
height: width
|
|
||||||
radius: width / 2
|
|
||||||
gradient: Gradient {
|
|
||||||
GradientStop { position: 0.0; color: "#A67CF3" }
|
|
||||||
GradientStop { position: 1.0; color: "#9B79CC" }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: imageSource
|
|
||||||
anchors {
|
|
||||||
bottom: usernameDelegate.top
|
|
||||||
bottomMargin: units.largeSpacing
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
Behavior on width {
|
|
||||||
PropertyAnimation {
|
|
||||||
from: faceSize
|
|
||||||
duration: units.longDuration;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
width: isCurrent ? faceSize : faceSize - units.largeSpacing
|
|
||||||
height: width
|
|
||||||
|
|
||||||
//Image takes priority, taking a full path to a file, if that doesn't exist we show an icon
|
|
||||||
Image {
|
|
||||||
id: face
|
|
||||||
source: wrapper.avatarPath
|
|
||||||
sourceSize: Qt.size(faceSize, faceSize)
|
|
||||||
fillMode: Image.PreserveAspectCrop
|
|
||||||
anchors.fill: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
id: faceIcon
|
|
||||||
source: iconSource
|
|
||||||
visible: (face.status == Image.Error || face.status == Image.Null)
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.margins: units.gridUnit * 0.5 // because mockup says so...
|
|
||||||
colorGroup: PlasmaCore.ColorScope.colorGroup
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffect {
|
|
||||||
anchors {
|
|
||||||
bottom: usernameDelegate.top
|
|
||||||
bottomMargin: units.largeSpacing
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
width: imageSource.width
|
|
||||||
height: imageSource.height
|
|
||||||
|
|
||||||
supportsAtlasTextures: true
|
|
||||||
|
|
||||||
property var source: ShaderEffectSource {
|
|
||||||
sourceItem: imageSource
|
|
||||||
// software rendering is just a fallback so we can accept not having a rounded avatar here
|
|
||||||
hideSource: wrapper.GraphicsInfo.api !== GraphicsInfo.Software
|
|
||||||
live: true // otherwise the user in focus will show a blurred avatar
|
|
||||||
}
|
|
||||||
|
|
||||||
property var colorBorder: "#00000000"
|
|
||||||
|
|
||||||
//draw a circle with an antialiased border
|
|
||||||
//innerRadius = size of the inner circle with contents
|
|
||||||
//outerRadius = size of the border
|
|
||||||
//blend = area to blend between two colours
|
|
||||||
//all sizes are normalised so 0.5 == half the width of the texture
|
|
||||||
|
|
||||||
//if copying into another project don't forget to connect themeChanged to update()
|
|
||||||
//but in SDDM that's a bit pointless
|
|
||||||
fragmentShader: "
|
|
||||||
varying highp vec2 qt_TexCoord0;
|
|
||||||
uniform highp float qt_Opacity;
|
|
||||||
uniform lowp sampler2D source;
|
|
||||||
|
|
||||||
uniform lowp vec4 colorBorder;
|
|
||||||
highp float blend = 0.01;
|
|
||||||
highp float innerRadius = 0.47;
|
|
||||||
highp float outerRadius = 0.49;
|
|
||||||
lowp vec4 colorEmpty = vec4(0.0, 0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
lowp vec4 colorSource = texture2D(source, qt_TexCoord0.st);
|
|
||||||
|
|
||||||
highp vec2 m = qt_TexCoord0 - vec2(0.5, 0.5);
|
|
||||||
highp float dist = sqrt(m.x * m.x + m.y * m.y);
|
|
||||||
|
|
||||||
if (dist < innerRadius)
|
|
||||||
gl_FragColor = colorSource;
|
|
||||||
else if (dist < innerRadius + blend)
|
|
||||||
gl_FragColor = mix(colorSource, colorBorder, ((dist - innerRadius) / blend));
|
|
||||||
else if (dist < outerRadius)
|
|
||||||
gl_FragColor = colorBorder;
|
|
||||||
else if (dist < outerRadius + blend)
|
|
||||||
gl_FragColor = mix(colorBorder, colorEmpty, ((dist - outerRadius) / blend));
|
|
||||||
else
|
|
||||||
gl_FragColor = colorEmpty ;
|
|
||||||
|
|
||||||
gl_FragColor = gl_FragColor * qt_Opacity;
|
|
||||||
}
|
|
||||||
"
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: usernameDelegate
|
|
||||||
font.pointSize: Math.max(fontSize + 2,theme.defaultFont.pointSize + 2)
|
|
||||||
anchors {
|
|
||||||
bottom: parent.bottom
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
height: implicitHeight // work around stupid bug in Plasma Components that sets the height
|
|
||||||
width: constrainText ? parent.width : implicitWidth
|
|
||||||
text: wrapper.name
|
|
||||||
style: softwareRendering ? Text.Outline : Text.Normal
|
|
||||||
styleColor: softwareRendering ? PlasmaCore.ColorScope.backgroundColor : "transparent" //no outline, doesn't matter
|
|
||||||
elide: Text.ElideRight
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
//make an indication that this has active focus, this only happens when reached with keyboard navigation
|
|
||||||
font.underline: wrapper.activeFocus
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
hoverEnabled: true
|
|
||||||
|
|
||||||
onClicked: wrapper.clicked();
|
|
||||||
}
|
|
||||||
|
|
||||||
Accessible.name: name
|
|
||||||
Accessible.role: Accessible.Button
|
|
||||||
function accessiblePressAction() { wrapper.clicked() }
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2014 David Edmundson <davidedmundson@kde.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.2
|
|
||||||
|
|
||||||
ListView {
|
|
||||||
id: view
|
|
||||||
readonly property string selectedUser: currentItem ? currentItem.userName : ""
|
|
||||||
readonly property int userItemWidth: units.gridUnit * 8
|
|
||||||
readonly property int userItemHeight: units.gridUnit * 8
|
|
||||||
|
|
||||||
implicitHeight: userItemHeight
|
|
||||||
|
|
||||||
activeFocusOnTab : true
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Signals that a user was explicitly selected
|
|
||||||
*/
|
|
||||||
signal userSelected;
|
|
||||||
|
|
||||||
orientation: ListView.Horizontal
|
|
||||||
highlightRangeMode: ListView.StrictlyEnforceRange
|
|
||||||
|
|
||||||
//centre align selected item (which implicitly centre aligns the rest
|
|
||||||
preferredHighlightBegin: width/2 - userItemWidth/2
|
|
||||||
preferredHighlightEnd: preferredHighlightBegin
|
|
||||||
|
|
||||||
delegate: UserDelegate {
|
|
||||||
avatarPath: model.icon || ""
|
|
||||||
iconSource: model.iconName || "user-identity"
|
|
||||||
|
|
||||||
name: {
|
|
||||||
var displayName = model.realName || model.name
|
|
||||||
|
|
||||||
if (model.vtNumber === undefined || model.vtNumber < 0) {
|
|
||||||
return displayName
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!model.session) {
|
|
||||||
return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Nobody logged in on that session", "Unused")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var location = ""
|
|
||||||
if (model.isTty) {
|
|
||||||
location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console number", "TTY %1", model.vtNumber)
|
|
||||||
} else if (model.displayNumber) {
|
|
||||||
location = i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "User logged in on console (X display number)", "on TTY %1 (Display %2)", model.vtNumber, model.displayNumber)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (location) {
|
|
||||||
return i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Username (location)", "%1 (%2)", displayName, location)
|
|
||||||
}
|
|
||||||
|
|
||||||
return displayName
|
|
||||||
}
|
|
||||||
|
|
||||||
userName: model.name
|
|
||||||
|
|
||||||
width: userItemWidth
|
|
||||||
height: userItemHeight
|
|
||||||
|
|
||||||
//if we only have one delegate, we don't need to clip the text as it won't be overlapping with anything
|
|
||||||
constrainText: ListView.view.count > 1
|
|
||||||
|
|
||||||
isCurrent: ListView.isCurrentItem
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
ListView.view.currentIndex = index;
|
|
||||||
ListView.view.userSelected();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Keys.onEscapePressed: view.userSelected()
|
|
||||||
Keys.onEnterPressed: view.userSelected()
|
|
||||||
Keys.onReturnPressed: view.userSelected()
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2017 Martin Gräßlin <mgraesslin@kde.org>
|
|
||||||
|
|
||||||
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 2 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 General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
import QtQuick 2.5
|
|
||||||
import QtQuick.VirtualKeyboard 2.1
|
|
||||||
|
|
||||||
InputPanel {
|
|
||||||
id: inputPanel
|
|
||||||
property bool activated: false
|
|
||||||
active: activated && Qt.inputMethod.visible
|
|
||||||
visible: active
|
|
||||||
width: parent.width
|
|
||||||
}
|
|
|
@ -1,178 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
|
|
||||||
|
|
||||||
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 2 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 General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.6
|
|
||||||
import QtQuick.Controls 1.1
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
import org.kde.plasma.private.sessions 2.0
|
|
||||||
import "../components"
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: wallpaperFader
|
|
||||||
property Item clock
|
|
||||||
property Item mainStack
|
|
||||||
property Item footer
|
|
||||||
property alias source: wallpaperBlur.source
|
|
||||||
state: lockScreenRoot.uiVisible ? "on" : "off"
|
|
||||||
property real factor: 0
|
|
||||||
readonly property bool lightBackground: Math.max(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b) > 0.5
|
|
||||||
|
|
||||||
property bool alwaysShowClock: typeof config === "undefined" || config.alwaysShowClock === true
|
|
||||||
|
|
||||||
Behavior on factor {
|
|
||||||
NumberAnimation {
|
|
||||||
target: wallpaperFader
|
|
||||||
property: "factor"
|
|
||||||
duration: 1000
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FastBlur {
|
|
||||||
id: wallpaperBlur
|
|
||||||
anchors.fill: parent
|
|
||||||
radius: 50 * wallpaperFader.factor
|
|
||||||
}
|
|
||||||
ShaderEffect {
|
|
||||||
id: wallpaperShader
|
|
||||||
anchors.fill: parent
|
|
||||||
supportsAtlasTextures: true
|
|
||||||
property var source: ShaderEffectSource {
|
|
||||||
sourceItem: wallpaperBlur
|
|
||||||
live: true
|
|
||||||
hideSource: true
|
|
||||||
textureMirroring: ShaderEffectSource.NoMirroring
|
|
||||||
}
|
|
||||||
|
|
||||||
readonly property real contrast: 0.65 * wallpaperFader.factor + (1 - wallpaperFader.factor)
|
|
||||||
readonly property real saturation: 1.6 * wallpaperFader.factor + (1 - wallpaperFader.factor)
|
|
||||||
readonly property real intensity: (wallpaperFader.lightBackground ? 1.7 : 0.6) * wallpaperFader.factor + (1 - wallpaperFader.factor)
|
|
||||||
|
|
||||||
readonly property real transl: (1.0 - contrast) / 2.0;
|
|
||||||
readonly property real rval: (1.0 - saturation) * 0.2126;
|
|
||||||
readonly property real gval: (1.0 - saturation) * 0.7152;
|
|
||||||
readonly property real bval: (1.0 - saturation) * 0.0722;
|
|
||||||
|
|
||||||
property var colorMatrix: Qt.matrix4x4(
|
|
||||||
contrast, 0, 0, 0.0,
|
|
||||||
0, contrast, 0, 0.0,
|
|
||||||
0, 0, contrast, 0.0,
|
|
||||||
transl, transl, transl, 1.0).times(Qt.matrix4x4(
|
|
||||||
rval + saturation, rval, rval, 0.0,
|
|
||||||
gval, gval + saturation, gval, 0.0,
|
|
||||||
bval, bval, bval + saturation, 0.0,
|
|
||||||
0, 0, 0, 1.0)).times(Qt.matrix4x4(
|
|
||||||
intensity, 0, 0, 0,
|
|
||||||
0, intensity, 0, 0,
|
|
||||||
0, 0, intensity, 0,
|
|
||||||
0, 0, 0, 1
|
|
||||||
));
|
|
||||||
|
|
||||||
|
|
||||||
fragmentShader: "
|
|
||||||
uniform mediump mat4 colorMatrix;
|
|
||||||
uniform mediump sampler2D source;
|
|
||||||
varying mediump vec2 qt_TexCoord0;
|
|
||||||
uniform lowp float qt_Opacity;
|
|
||||||
|
|
||||||
void main(void)
|
|
||||||
{
|
|
||||||
mediump vec4 tex = texture2D(source, qt_TexCoord0);
|
|
||||||
gl_FragColor = tex * colorMatrix * qt_Opacity;
|
|
||||||
}"
|
|
||||||
}
|
|
||||||
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "on"
|
|
||||||
PropertyChanges {
|
|
||||||
target: mainStack
|
|
||||||
opacity: 1
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: footer
|
|
||||||
opacity: 1
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: wallpaperFader
|
|
||||||
factor: 1
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: clock.shadow
|
|
||||||
opacity: 0
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: clock
|
|
||||||
opacity: 1
|
|
||||||
anchors.horizontalCenter: formBg.horizontalCenter
|
|
||||||
// y: parent.height - height - 10
|
|
||||||
}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "off"
|
|
||||||
PropertyChanges {
|
|
||||||
target: mainStack
|
|
||||||
opacity: 0
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: footer
|
|
||||||
opacity: 0
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: wallpaperFader
|
|
||||||
factor: 0
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: clock.shadow
|
|
||||||
opacity: wallpaperFader.alwaysShowClock ? 1 : 0
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: clock
|
|
||||||
opacity: wallpaperFader.alwaysShowClock ? 1 : 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
from: "off"
|
|
||||||
to: "on"
|
|
||||||
//Note: can't use animators as they don't play well with parallelanimations
|
|
||||||
NumberAnimation {
|
|
||||||
targets: [mainStack, footer, clock]
|
|
||||||
property: "opacity"
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
from: "on"
|
|
||||||
to: "off"
|
|
||||||
NumberAnimation {
|
|
||||||
targets: [mainStack, footer, clock]
|
|
||||||
property: "opacity"
|
|
||||||
duration: 500
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1 +0,0 @@
|
||||||
After editing SVG files be sure to run currentColorFillFix.sh from plasma-framework
|
|
|
@ -1,20 +0,0 @@
|
||||||
[kdeglobals][KDE]
|
|
||||||
widgetStyle=kvantum
|
|
||||||
|
|
||||||
[kdeglobals][General]
|
|
||||||
ColorScheme=Dracula-purple
|
|
||||||
|
|
||||||
[kdeglobals][Icons]
|
|
||||||
Theme=candy-icons
|
|
||||||
|
|
||||||
[kcminputrc][Mouse]
|
|
||||||
cursorTheme=Dracula-cursors
|
|
||||||
|
|
||||||
[plasmarc][Theme]
|
|
||||||
name=Dracula
|
|
||||||
|
|
||||||
[kwinrc][org.kde.kdecoration2]
|
|
||||||
library=org.kde.kwin.aurorae
|
|
||||||
theme=__aurorae__svg__Dracula
|
|
||||||
|
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
|
|
||||||
|
|
||||||
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 2 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 General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.0
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import "../osd"
|
|
||||||
|
|
||||||
PlasmaCore.FrameSvgItem {
|
|
||||||
id: osd
|
|
||||||
|
|
||||||
// OSD Timeout in msecs - how long it will stay on the screen
|
|
||||||
property int timeout: 1800
|
|
||||||
// This is either a text or a number, if showingProgress is set to true,
|
|
||||||
// the number will be used as a value for the progress bar
|
|
||||||
property var osdValue
|
|
||||||
// Icon name to display
|
|
||||||
property string icon
|
|
||||||
// Set to true if the value is meant for progress bar,
|
|
||||||
// false for displaying the value as normal text
|
|
||||||
property bool showingProgress: false
|
|
||||||
|
|
||||||
objectName: "onScreenDisplay"
|
|
||||||
visible: false
|
|
||||||
width: osdItem.width + margins.left + margins.right
|
|
||||||
height: osdItem.height + margins.top + margins.bottom
|
|
||||||
imagePath: "widgets/background"
|
|
||||||
|
|
||||||
function show() {
|
|
||||||
osd.visible = true;
|
|
||||||
hideAnimation.restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
// avoid leaking ColorScope of lock screen theme into the OSD "popup"
|
|
||||||
PlasmaCore.ColorScope {
|
|
||||||
width: osdItem.width
|
|
||||||
height: osdItem.height
|
|
||||||
anchors.centerIn: parent
|
|
||||||
colorGroup: PlasmaCore.Theme.NormalColorGroup
|
|
||||||
|
|
||||||
OsdItem {
|
|
||||||
id: osdItem
|
|
||||||
rootItem: osd
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SequentialAnimation {
|
|
||||||
id: hideAnimation
|
|
||||||
// prevent press and hold from flickering
|
|
||||||
PauseAnimation { duration: 100 }
|
|
||||||
NumberAnimation {
|
|
||||||
target: osd
|
|
||||||
property: "opacity"
|
|
||||||
from: 1
|
|
||||||
to: 0
|
|
||||||
duration: osd.timeout
|
|
||||||
easing.type: Easing.InQuad
|
|
||||||
}
|
|
||||||
ScriptAction {
|
|
||||||
script: {
|
|
||||||
osd.visible = false;
|
|
||||||
osd.opacity = 1;
|
|
||||||
osd.icon = "";
|
|
||||||
osd.osdValue = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
|
|
||||||
|
|
||||||
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 2 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 General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.5
|
|
||||||
import QtQuick.Controls 1.1
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.private.sessions 2.0
|
|
||||||
import "../components"
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
property bool viewVisible: false
|
|
||||||
property bool debug: false
|
|
||||||
property string notification
|
|
||||||
property int interfaceVersion: org_kde_plasma_screenlocker_greeter_interfaceVersion ? org_kde_plasma_screenlocker_greeter_interfaceVersion : 0
|
|
||||||
signal clearPassword()
|
|
||||||
|
|
||||||
LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft
|
|
||||||
LayoutMirroring.childrenInherit: true
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
id: mainLoader
|
|
||||||
anchors.fill: parent
|
|
||||||
opacity: 0
|
|
||||||
onItemChanged: opacity = 1
|
|
||||||
|
|
||||||
focus: true
|
|
||||||
|
|
||||||
Behavior on opacity {
|
|
||||||
OpacityAnimator {
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InCubic
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Connections {
|
|
||||||
id:loaderConnection
|
|
||||||
target: org_kde_plasma_screenlocker_greeter_view
|
|
||||||
onFrameSwapped: {
|
|
||||||
mainLoader.source = "LockScreenUi.qml";
|
|
||||||
loaderConnection.target = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Component.onCompleted: {
|
|
||||||
if (root.interfaceVersion < 2) {
|
|
||||||
mainLoader.source = "LockScreenUi.qml";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,543 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2014 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
|
|
||||||
|
|
||||||
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 2 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 General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.8
|
|
||||||
import QtQuick.Controls 1.1
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
|
||||||
|
|
||||||
|
|
||||||
import org.kde.plasma.private.sessions 2.0
|
|
||||||
import "../components"
|
|
||||||
|
|
||||||
PlasmaCore.ColorScope {
|
|
||||||
|
|
||||||
id: lockScreenUi
|
|
||||||
// If we're using software rendering, draw outlines instead of shadows
|
|
||||||
// See https://bugs.kde.org/show_bug.cgi?id=398317
|
|
||||||
readonly property bool softwareRendering: GraphicsInfo.api === GraphicsInfo.Software
|
|
||||||
readonly property bool lightBackground: Math.max(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b) > 0.5
|
|
||||||
|
|
||||||
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: authenticator
|
|
||||||
onFailed: {
|
|
||||||
root.notification = i18nd("plasma_lookandfeel_org.kde.lookandfeel","Unlocking failed");
|
|
||||||
}
|
|
||||||
onGraceLockedChanged: {
|
|
||||||
if (!authenticator.graceLocked) {
|
|
||||||
root.notification = "";
|
|
||||||
root.clearPassword();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onMessage: {
|
|
||||||
root.notification = msg;
|
|
||||||
}
|
|
||||||
onError: {
|
|
||||||
root.notification = err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SessionManagement {
|
|
||||||
id: sessionManagement
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: sessionManagement
|
|
||||||
onAboutToSuspend: {
|
|
||||||
mainBlock.mainPasswordBox.text = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SessionsModel {
|
|
||||||
id: sessionsModel
|
|
||||||
showNewSessionEntry: false
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.DataSource {
|
|
||||||
id: keystateSource
|
|
||||||
engine: "keystate"
|
|
||||||
connectedSources: "Caps Lock"
|
|
||||||
}
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
id: changeSessionComponent
|
|
||||||
active: false
|
|
||||||
source: "ChangeSession.qml"
|
|
||||||
visible: false
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: lockScreenRoot
|
|
||||||
|
|
||||||
property bool uiVisible: false
|
|
||||||
property bool blockUI: mainStack.depth > 1 || mainBlock.mainPasswordBox.text.length > 0 || inputPanel.keyboardActive
|
|
||||||
|
|
||||||
x: parent.x
|
|
||||||
y: parent.y
|
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
hoverEnabled: true
|
|
||||||
drag.filterChildren: true
|
|
||||||
onPressed: uiVisible = true;
|
|
||||||
onPositionChanged: uiVisible = true;
|
|
||||||
onUiVisibleChanged: {
|
|
||||||
if (blockUI) {
|
|
||||||
fadeoutTimer.running = false;
|
|
||||||
} else if (uiVisible) {
|
|
||||||
fadeoutTimer.restart();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onBlockUIChanged: {
|
|
||||||
if (blockUI) {
|
|
||||||
fadeoutTimer.running = false;
|
|
||||||
uiVisible = true;
|
|
||||||
} else {
|
|
||||||
fadeoutTimer.restart();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Keys.onEscapePressed: {
|
|
||||||
uiVisible = !uiVisible;
|
|
||||||
if (inputPanel.keyboardActive) {
|
|
||||||
inputPanel.showHide();
|
|
||||||
}
|
|
||||||
if (!uiVisible) {
|
|
||||||
mainBlock.mainPasswordBox.text = "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Keys.onPressed: {
|
|
||||||
uiVisible = true;
|
|
||||||
event.accepted = false;
|
|
||||||
}
|
|
||||||
Timer {
|
|
||||||
id: fadeoutTimer
|
|
||||||
interval: 10000
|
|
||||||
onTriggered: {
|
|
||||||
if (!lockScreenRoot.blockUI) {
|
|
||||||
lockScreenRoot.uiVisible = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: PropertyAnimation { id: launchAnimation; target: lockScreenRoot; property: "opacity"; from: 0; to: 1; duration: 1000 }
|
|
||||||
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "onOtherSession"
|
|
||||||
// for slide out animation
|
|
||||||
PropertyChanges { target: lockScreenRoot; y: lockScreenRoot.height }
|
|
||||||
// we also change the opacity just to be sure it's not visible even on unexpected screen dimension changes with possible race conditions
|
|
||||||
PropertyChanges { target: lockScreenRoot; opacity: 0 }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
transitions:
|
|
||||||
Transition {
|
|
||||||
// we only animate switchting to another session, because kscreenlocker doesn't get notified when
|
|
||||||
// coming from another session back and so we wouldn't know when to trigger the animation exactly
|
|
||||||
from: ""
|
|
||||||
to: "onOtherSession"
|
|
||||||
|
|
||||||
PropertyAnimation { id: stateChangeAnimation; properties: "y"; duration: 300; easing.type: Easing.InQuad}
|
|
||||||
PropertyAnimation { properties: "opacity"; duration: 300}
|
|
||||||
|
|
||||||
onRunningChanged: {
|
|
||||||
// after the animation has finished switch session: since we only animate the transition TO state "onOtherSession"
|
|
||||||
// and not the other way around, we don't have to check the state we transitioned into
|
|
||||||
if (/* lockScreenRoot.state == "onOtherSession" && */ !running) {
|
|
||||||
mainStack.currentItem.switchSession()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WallpaperFader {
|
|
||||||
anchors.fill: parent
|
|
||||||
state: lockScreenRoot.uiVisible ? "on" : "off"
|
|
||||||
source: wallpaper
|
|
||||||
mainStack: mainStack
|
|
||||||
footer: footer
|
|
||||||
clock: clock
|
|
||||||
z: -3
|
|
||||||
}
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
id: clockShadow
|
|
||||||
anchors.fill: clock
|
|
||||||
source: clock
|
|
||||||
visible: !softwareRendering
|
|
||||||
horizontalOffset: 1
|
|
||||||
verticalOffset: 1
|
|
||||||
radius: 6
|
|
||||||
samples: 14
|
|
||||||
spread: 0.3
|
|
||||||
color: lockScreenUi.lightBackground ? PlasmaCore.ColorScope.backgroundColor : "black" // black matches Breeze window decoration and desktopcontainment
|
|
||||||
Behavior on opacity {
|
|
||||||
OpacityAnimator {
|
|
||||||
duration: 1000
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Clock {
|
|
||||||
id: clock
|
|
||||||
property Item shadow: clockShadow
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
y: (mainBlock.userList.y + mainStack.y)/2 - height/2
|
|
||||||
visible: y > 0
|
|
||||||
Layout.alignment: Qt.AlignBaseline
|
|
||||||
}
|
|
||||||
|
|
||||||
ListModel {
|
|
||||||
id: users
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
users.append({name: kscreenlocker_userName,
|
|
||||||
realName: kscreenlocker_userName,
|
|
||||||
icon: kscreenlocker_userImage,
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StackView {
|
|
||||||
id: mainStack
|
|
||||||
anchors.centerIn: parent
|
|
||||||
|
|
||||||
height: lockScreenRoot.height + units.gridUnit * 3
|
|
||||||
width: parent.width / 3
|
|
||||||
focus: true //StackView is an implicit focus scope, so we need to give this focus so the item inside will have it
|
|
||||||
|
|
||||||
initialItem: MainBlock {
|
|
||||||
id: mainBlock
|
|
||||||
lockScreenUiVisible: lockScreenRoot.uiVisible
|
|
||||||
|
|
||||||
showUserList: userList.y + mainStack.y > 0
|
|
||||||
|
|
||||||
Stack.onStatusChanged: {
|
|
||||||
// prepare for presenting again to the user
|
|
||||||
if (Stack.status == Stack.Activating) {
|
|
||||||
mainPasswordBox.remove(0, mainPasswordBox.length)
|
|
||||||
mainPasswordBox.focus = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
userListModel: users
|
|
||||||
notificationMessage: {
|
|
||||||
var text = ""
|
|
||||||
if (keystateSource.data["Caps Lock"]["Locked"]) {
|
|
||||||
text += i18nd("plasma_lookandfeel_org.kde.lookandfeel","Caps Lock is on")
|
|
||||||
if (root.notification) {
|
|
||||||
text += " • "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
text += root.notification
|
|
||||||
return text
|
|
||||||
}
|
|
||||||
|
|
||||||
onLoginRequest: {
|
|
||||||
root.notification = ""
|
|
||||||
authenticator.tryUnlock(password)
|
|
||||||
}
|
|
||||||
|
|
||||||
actionItems: [
|
|
||||||
ActionButton {
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Switch User")
|
|
||||||
iconSource: "system-switch-user"
|
|
||||||
onClicked: {
|
|
||||||
// If there are no existing sessions to switch to, create a new one instead
|
|
||||||
if (((sessionsModel.showNewSessionEntry && sessionsModel.count === 1) ||
|
|
||||||
(!sessionsModel.showNewSessionEntry && sessionsModel.count === 0)) &&
|
|
||||||
sessionsModel.canSwitchUser) {
|
|
||||||
mainStack.pop({immediate:true})
|
|
||||||
sessionsModel.startNewSession(true /* lock the screen too */)
|
|
||||||
lockScreenRoot.state = ''
|
|
||||||
} else {
|
|
||||||
mainStack.push(switchSessionPage)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
visible: sessionsModel.canStartNewSession && sessionsModel.canSwitchUser
|
|
||||||
//Button gets cut off on smaller displays without this.
|
|
||||||
anchors{
|
|
||||||
verticalCenter: parent.top
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.preferredHeight: item ? item.implicitHeight : 0
|
|
||||||
active: config.showMediaControls
|
|
||||||
source: "MediaControls.qml"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
if (defaultToSwitchUser) { //context property
|
|
||||||
// If we are in the only session, then going to the session switcher is
|
|
||||||
// a pointless extra step; instead create a new session immediately
|
|
||||||
if (((sessionsModel.showNewSessionEntry && sessionsModel.count === 1) ||
|
|
||||||
(!sessionsModel.showNewSessionEntry && sessionsModel.count === 0)) &&
|
|
||||||
sessionsModel.canStartNewSession) {
|
|
||||||
sessionsModel.startNewSession(true /* lock the screen too */)
|
|
||||||
} else {
|
|
||||||
mainStack.push({
|
|
||||||
item: switchSessionPage,
|
|
||||||
immediate: true});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
id: inputPanel
|
|
||||||
state: "hidden"
|
|
||||||
readonly property bool keyboardActive: item ? item.active : false
|
|
||||||
anchors {
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
function showHide() {
|
|
||||||
state = state == "hidden" ? "visible" : "hidden";
|
|
||||||
}
|
|
||||||
Component.onCompleted: inputPanel.source = "../components/VirtualKeyboard.qml"
|
|
||||||
|
|
||||||
onKeyboardActiveChanged: {
|
|
||||||
if (keyboardActive) {
|
|
||||||
state = "visible";
|
|
||||||
} else {
|
|
||||||
state = "hidden";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "visible"
|
|
||||||
PropertyChanges {
|
|
||||||
target: mainStack
|
|
||||||
y: Math.min(0, lockScreenRoot.height - inputPanel.height - mainBlock.visibleBoundary)
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: inputPanel
|
|
||||||
y: lockScreenRoot.height - inputPanel.height
|
|
||||||
opacity: 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "hidden"
|
|
||||||
PropertyChanges {
|
|
||||||
target: mainStack
|
|
||||||
y: 0
|
|
||||||
}
|
|
||||||
PropertyChanges {
|
|
||||||
target: inputPanel
|
|
||||||
y: lockScreenRoot.height - lockScreenRoot.height/4
|
|
||||||
opacity: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
from: "hidden"
|
|
||||||
to: "visible"
|
|
||||||
SequentialAnimation {
|
|
||||||
ScriptAction {
|
|
||||||
script: {
|
|
||||||
inputPanel.item.activated = true;
|
|
||||||
Qt.inputMethod.show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ParallelAnimation {
|
|
||||||
NumberAnimation {
|
|
||||||
target: mainStack
|
|
||||||
property: "y"
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
NumberAnimation {
|
|
||||||
target: inputPanel
|
|
||||||
property: "y"
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.OutQuad
|
|
||||||
}
|
|
||||||
OpacityAnimator {
|
|
||||||
target: inputPanel
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.OutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
from: "visible"
|
|
||||||
to: "hidden"
|
|
||||||
SequentialAnimation {
|
|
||||||
ParallelAnimation {
|
|
||||||
NumberAnimation {
|
|
||||||
target: mainStack
|
|
||||||
property: "y"
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
NumberAnimation {
|
|
||||||
target: inputPanel
|
|
||||||
property: "y"
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InQuad
|
|
||||||
}
|
|
||||||
OpacityAnimator {
|
|
||||||
target: inputPanel
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ScriptAction {
|
|
||||||
script: {
|
|
||||||
Qt.inputMethod.hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: switchSessionPage
|
|
||||||
SessionManagementScreen {
|
|
||||||
property var switchSession: finalSwitchSession
|
|
||||||
|
|
||||||
Stack.onStatusChanged: {
|
|
||||||
if (Stack.status == Stack.Activating) {
|
|
||||||
focus = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
userListModel: sessionsModel
|
|
||||||
|
|
||||||
// initiating animation of lockscreen for session switch
|
|
||||||
function initSwitchSession() {
|
|
||||||
lockScreenRoot.state = 'onOtherSession'
|
|
||||||
}
|
|
||||||
|
|
||||||
// initiating session switch and preparing lockscreen for possible return of user
|
|
||||||
function finalSwitchSession() {
|
|
||||||
mainStack.pop({immediate:true})
|
|
||||||
sessionsModel.switchUser(userListCurrentModelData.vtNumber)
|
|
||||||
lockScreenRoot.state = ''
|
|
||||||
}
|
|
||||||
|
|
||||||
Keys.onLeftPressed: userList.decrementCurrentIndex()
|
|
||||||
Keys.onRightPressed: userList.incrementCurrentIndex()
|
|
||||||
Keys.onEnterPressed: initSwitchSession()
|
|
||||||
Keys.onReturnPressed: initSwitchSession()
|
|
||||||
Keys.onEscapePressed: mainStack.pop()
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
spacing: units.largeSpacing
|
|
||||||
|
|
||||||
PlasmaComponents.Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Switch to This Session")
|
|
||||||
onClicked: initSwitchSession()
|
|
||||||
visible: sessionsModel.count > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Start New Session")
|
|
||||||
onClicked: {
|
|
||||||
mainStack.pop({immediate:true})
|
|
||||||
sessionsModel.startNewSession(true /* lock the screen too */)
|
|
||||||
lockScreenRoot.state = ''
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
actionItems: [
|
|
||||||
ActionButton {
|
|
||||||
iconSource: "go-previous"
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel","Back")
|
|
||||||
onClicked: mainStack.pop()
|
|
||||||
//Button gets cut off on smaller displays without this.
|
|
||||||
anchors{
|
|
||||||
verticalCenter: parent.top
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Loader {
|
|
||||||
active: root.viewVisible
|
|
||||||
source: "LockOsd.qml"
|
|
||||||
anchors {
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
bottom: parent.bottom
|
|
||||||
bottomMargin: units.largeSpacing
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: footer
|
|
||||||
z: -2
|
|
||||||
anchors {
|
|
||||||
bottom: parent.bottom
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
margins: units.smallSpacing
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
|
||||||
text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Button to show/hide virtual keyboard", "Virtual Keyboard")
|
|
||||||
iconName: inputPanel.keyboardActive ? "input-keyboard-virtual-on" : "input-keyboard-virtual-off"
|
|
||||||
onClicked: inputPanel.showHide()
|
|
||||||
|
|
||||||
visible: inputPanel.status == Loader.Ready
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyboardLayoutButton {
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
|
|
||||||
Battery {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
// version support checks
|
|
||||||
if (root.interfaceVersion < 1) {
|
|
||||||
// ksmserver of 5.4, with greeter of 5.5
|
|
||||||
root.viewVisible = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,141 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2016 David Edmundson <davidedmundson@kde.org>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Library General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 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, write to the
|
|
||||||
* Free Software Foundation, Inc.,
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.8
|
|
||||||
import QtQuick.Layouts 1.2
|
|
||||||
import QtQuick.Controls 2.4
|
|
||||||
import QtQuick.Controls.Styles 1.4
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
import "../components"
|
|
||||||
|
|
||||||
SessionManagementScreen {
|
|
||||||
|
|
||||||
property Item mainPasswordBox: passwordBox
|
|
||||||
property bool lockScreenUiVisible: false
|
|
||||||
|
|
||||||
//the y position that should be ensured visible when the on screen keyboard is visible
|
|
||||||
property int visibleBoundary: mapFromItem(loginButton, 0, 0).y
|
|
||||||
onHeightChanged: visibleBoundary = mapFromItem(loginButton, 0, 0).y + loginButton.height + units.smallSpacing
|
|
||||||
/*
|
|
||||||
* Login has been requested with the following username and password
|
|
||||||
* If username field is visible, it will be taken from that, otherwise from the "name" property of the currentIndex
|
|
||||||
*/
|
|
||||||
signal loginRequest(string password)
|
|
||||||
|
|
||||||
function startLogin() {
|
|
||||||
var password = passwordBox.text
|
|
||||||
|
|
||||||
//this is partly because it looks nicer
|
|
||||||
//but more importantly it works round a Qt bug that can trigger if the app is closed with a TextField focused
|
|
||||||
//See https://bugreports.qt.io/browse/QTBUG-55460
|
|
||||||
loginButton.forceActiveFocus();
|
|
||||||
loginRequest(password);
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
|
|
||||||
TextField {
|
|
||||||
id: passwordBox
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
Layout.fillWidth: true
|
|
||||||
placeholderText: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Password")
|
|
||||||
focus: true
|
|
||||||
echoMode: TextInput.Password
|
|
||||||
inputMethodHints: Qt.ImhHiddenText | Qt.ImhSensitiveData | Qt.ImhNoAutoUppercase | Qt.ImhNoPredictiveText
|
|
||||||
enabled: !authenticator.graceLocked
|
|
||||||
|
|
||||||
placeholderTextColor: "#C3C7D1"
|
|
||||||
palette.text: "#C3C7D1"
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
color: "#272834"
|
|
||||||
opacity: 0.9
|
|
||||||
border.width: 1
|
|
||||||
border.color: "#9283BB"
|
|
||||||
radius: parent.width / 2
|
|
||||||
height: 30
|
|
||||||
anchors.fill: parent
|
|
||||||
anchors.centerIn: parent
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
onAccepted: {
|
|
||||||
if (lockScreenUiVisible) {
|
|
||||||
startLogin();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//if empty and left or right is pressed change selection in user switch
|
|
||||||
//this cannot be in keys.onLeftPressed as then it doesn't reach the password box
|
|
||||||
Keys.onPressed: {
|
|
||||||
if (event.key == Qt.Key_Left && !text) {
|
|
||||||
userList.decrementCurrentIndex();
|
|
||||||
event.accepted = true
|
|
||||||
}
|
|
||||||
if (event.key == Qt.Key_Right && !text) {
|
|
||||||
userList.incrementCurrentIndex();
|
|
||||||
event.accepted = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: root
|
|
||||||
onClearPassword: {
|
|
||||||
passwordBox.forceActiveFocus()
|
|
||||||
passwordBox.selectAll()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: loginButton
|
|
||||||
Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Unlock")
|
|
||||||
implicitHeight: passwordBox.height - units.smallSpacing * 0.5 // otherwise it comes out taller than the password field
|
|
||||||
text: ">"
|
|
||||||
Layout.leftMargin: 30
|
|
||||||
|
|
||||||
contentItem: Text {
|
|
||||||
text: loginButton.text
|
|
||||||
font: loginButton.font
|
|
||||||
opacity: enabled ? 1.0 : 0.3
|
|
||||||
color: "#ffffff"
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
elide: Text.ElideRight
|
|
||||||
}
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
id: buttonBackground
|
|
||||||
width: 30
|
|
||||||
height: 40
|
|
||||||
radius: width / 2
|
|
||||||
rotation: -90
|
|
||||||
anchors.centerIn: parent
|
|
||||||
color: "#9B79CC"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
onClicked: startLogin()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,162 +0,0 @@
|
||||||
/********************************************************************
|
|
||||||
This file is part of the KDE project.
|
|
||||||
|
|
||||||
Copyright (C) 2016 Kai Uwe Broulik <kde@privat.broulik.de>
|
|
||||||
|
|
||||||
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 2 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 General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*********************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.5
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
|
||||||
|
|
||||||
Item {
|
|
||||||
visible: mpris2Source.hasPlayer
|
|
||||||
implicitHeight: controlsRow.height + controlsRow.y
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: controlsRow
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
y: units.smallSpacing // some distance to the password field
|
|
||||||
width: parent.width
|
|
||||||
height: units.gridUnit * 3
|
|
||||||
spacing: 0
|
|
||||||
|
|
||||||
enabled: mpris2Source.canControl
|
|
||||||
|
|
||||||
PlasmaCore.DataSource {
|
|
||||||
id: mpris2Source
|
|
||||||
|
|
||||||
readonly property string source: "@multiplex"
|
|
||||||
readonly property var playerData: data[source]
|
|
||||||
|
|
||||||
readonly property bool hasPlayer: sources.length > 1 && !!playerData
|
|
||||||
readonly property string identity: hasPlayer ? playerData.Identity : ""
|
|
||||||
readonly property bool playing: hasPlayer && playerData.PlaybackStatus === "Playing"
|
|
||||||
readonly property bool canControl: hasPlayer && playerData.CanControl
|
|
||||||
readonly property bool canGoBack: hasPlayer && playerData.CanGoPrevious
|
|
||||||
readonly property bool canGoNext: hasPlayer && playerData.CanGoNext
|
|
||||||
|
|
||||||
readonly property var currentMetadata: hasPlayer ? playerData.Metadata : ({})
|
|
||||||
|
|
||||||
readonly property string track: {
|
|
||||||
var xesamTitle = currentMetadata["xesam:title"]
|
|
||||||
if (xesamTitle) {
|
|
||||||
return xesamTitle
|
|
||||||
}
|
|
||||||
// if no track title is given, print out the file name
|
|
||||||
var xesamUrl = currentMetadata["xesam:url"] ? currentMetadata["xesam:url"].toString() : ""
|
|
||||||
if (!xesamUrl) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
var lastSlashPos = xesamUrl.lastIndexOf('/')
|
|
||||||
if (lastSlashPos < 0) {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
var lastUrlPart = xesamUrl.substring(lastSlashPos + 1)
|
|
||||||
return decodeURIComponent(lastUrlPart)
|
|
||||||
}
|
|
||||||
readonly property string artist: currentMetadata["xesam:artist"] || ""
|
|
||||||
readonly property string albumArt: currentMetadata["mpris:artUrl"] || ""
|
|
||||||
|
|
||||||
engine: "mpris2"
|
|
||||||
connectedSources: [source]
|
|
||||||
|
|
||||||
function startOperation(op) {
|
|
||||||
var service = serviceForSource(source)
|
|
||||||
var operation = service.operationDescription(op)
|
|
||||||
return service.startOperationCall(operation)
|
|
||||||
}
|
|
||||||
|
|
||||||
function goPrevious() {
|
|
||||||
startOperation("Previous");
|
|
||||||
}
|
|
||||||
function goNext() {
|
|
||||||
startOperation("Next");
|
|
||||||
}
|
|
||||||
function playPause(source) {
|
|
||||||
startOperation("PlayPause");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: albumArt
|
|
||||||
Layout.preferredWidth: height
|
|
||||||
Layout.fillHeight: true
|
|
||||||
asynchronous: true
|
|
||||||
fillMode: Image.PreserveAspectFit
|
|
||||||
source: mpris2Source.albumArt
|
|
||||||
sourceSize.height: height
|
|
||||||
visible: status === Image.Loading || status === Image.Ready
|
|
||||||
}
|
|
||||||
|
|
||||||
Item { // spacer
|
|
||||||
width: units.smallSpacing
|
|
||||||
height: 1
|
|
||||||
}
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
spacing: 0
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
wrapMode: Text.NoWrap
|
|
||||||
elide: Text.ElideRight
|
|
||||||
text: mpris2Source.track || i18nd("plasma_lookandfeel_org.kde.lookandfeel", "No media playing")
|
|
||||||
textFormat: Text.PlainText
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
maximumLineCount: 1
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaExtras.DescriptiveLabel {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
wrapMode: Text.NoWrap
|
|
||||||
elide: Text.ElideRight
|
|
||||||
// if no artist is given, show player name instead
|
|
||||||
text: mpris2Source.artist || mpris2Source.identity || ""
|
|
||||||
textFormat: Text.PlainText
|
|
||||||
font.pointSize: theme.smallestFont.pointSize + 1
|
|
||||||
maximumLineCount: 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
|
||||||
enabled: mpris2Source.canGoBack
|
|
||||||
iconName: LayoutMirroring.enabled ? "media-skip-forward" : "media-skip-backward"
|
|
||||||
onClicked: mpris2Source.goPrevious()
|
|
||||||
visible: mpris2Source.canGoBack || mpris2Source.canGoNext
|
|
||||||
Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Previous track")
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.preferredWidth: height // make this button bigger
|
|
||||||
iconName: mpris2Source.playing ? "media-playback-pause" : "media-playback-start"
|
|
||||||
onClicked: mpris2Source.playPause()
|
|
||||||
Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Play or Pause media")
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.ToolButton {
|
|
||||||
enabled: mpris2Source.canGoNext
|
|
||||||
iconName: LayoutMirroring.enabled ? "media-skip-backward" : "media-skip-forward"
|
|
||||||
onClicked: mpris2Source.goNext()
|
|
||||||
visible: mpris2Source.canGoBack || mpris2Source.canGoNext
|
|
||||||
Accessible.name: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Next track")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
import QtQuick 2.5
|
|
||||||
import QtQuick.Controls 2.5 as QQC2
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
|
|
||||||
ColumnLayout {
|
|
||||||
property alias cfg_alwaysShowClock: alwaysClock.checked
|
|
||||||
property alias cfg_showMediaControls: showMediaControls.checked
|
|
||||||
|
|
||||||
spacing: 0
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
spacing: units.largeSpacing / 2
|
|
||||||
|
|
||||||
QQC2.Label {
|
|
||||||
Layout.minimumWidth: formAlignment - units.largeSpacing //to match wallpaper config...
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Clock:")
|
|
||||||
}
|
|
||||||
QQC2.CheckBox {
|
|
||||||
id: alwaysClock
|
|
||||||
text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "verb, to show something", "Always show")
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
spacing: units.largeSpacing / 2
|
|
||||||
|
|
||||||
QQC2.Label {
|
|
||||||
Layout.minimumWidth: formAlignment - units.largeSpacing //to match wallpaper config...
|
|
||||||
horizontalAlignment: Text.AlignRight
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Media controls:")
|
|
||||||
}
|
|
||||||
QQC2.CheckBox {
|
|
||||||
id: showMediaControls
|
|
||||||
text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "verb, to show something", "Show")
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
|
||||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
|
||||||
<kcfgfile name=""/>
|
|
||||||
|
|
||||||
<group name="General">
|
|
||||||
<entry name="alwaysShowClock" type="Bool">
|
|
||||||
<label>If true, the clock is shown even when the computer is idle and the password prompt is hidden.</label>
|
|
||||||
<default>true</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="showMediaControls" type="Bool">
|
|
||||||
<label>If true, shows any currently playing media along with controls to pause it.</label>
|
|
||||||
<default>true</default>
|
|
||||||
</entry>
|
|
||||||
</group>
|
|
||||||
|
|
||||||
</kcfg>
|
|
|
@ -1,262 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2014 by Aleix Pol Gonzalez <aleixpol@blue-systems.com> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.2
|
|
||||||
import QtQuick.Layouts 1.2
|
|
||||||
import QtQuick.Controls 1.1 as Controls
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
import org.kde.kcoreaddons 1.0 as KCoreAddons
|
|
||||||
|
|
||||||
import "../components"
|
|
||||||
import "timer.js" as AutoTriggerTimer
|
|
||||||
|
|
||||||
import org.kde.plasma.private.sessions 2.0
|
|
||||||
|
|
||||||
PlasmaCore.ColorScope {
|
|
||||||
id: root
|
|
||||||
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
|
|
||||||
height: screenGeometry.height
|
|
||||||
width: screenGeometry.width
|
|
||||||
|
|
||||||
signal logoutRequested()
|
|
||||||
signal haltRequested()
|
|
||||||
signal suspendRequested(int spdMethod)
|
|
||||||
signal rebootRequested()
|
|
||||||
signal rebootRequested2(int opt)
|
|
||||||
signal cancelRequested()
|
|
||||||
signal lockScreenRequested()
|
|
||||||
|
|
||||||
property alias backgroundColor: backgroundRect.color
|
|
||||||
|
|
||||||
function sleepRequested() {
|
|
||||||
root.suspendRequested(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
function hibernateRequested() {
|
|
||||||
root.suspendRequested(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
property real timeout: 30
|
|
||||||
property real remainingTime: root.timeout
|
|
||||||
property var currentAction: {
|
|
||||||
switch (sdtype) {
|
|
||||||
case ShutdownType.ShutdownTypeReboot:
|
|
||||||
return root.rebootRequested;
|
|
||||||
case ShutdownType.ShutdownTypeHalt:
|
|
||||||
return root.haltRequested;
|
|
||||||
default:
|
|
||||||
return root.logoutRequested;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KCoreAddons.KUser {
|
|
||||||
id: kuser
|
|
||||||
}
|
|
||||||
|
|
||||||
// For showing a "other users are logged in" hint
|
|
||||||
SessionsModel {
|
|
||||||
id: sessionsModel
|
|
||||||
includeUnusedSessions: false
|
|
||||||
}
|
|
||||||
|
|
||||||
Controls.Action {
|
|
||||||
onTriggered: root.cancelRequested()
|
|
||||||
shortcut: "Escape"
|
|
||||||
}
|
|
||||||
|
|
||||||
onRemainingTimeChanged: {
|
|
||||||
if (remainingTime <= 0) {
|
|
||||||
root.currentAction();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
id: countDownTimer
|
|
||||||
running: true
|
|
||||||
repeat: true
|
|
||||||
interval: 1000
|
|
||||||
onTriggered: remainingTime--
|
|
||||||
Component.onCompleted: {
|
|
||||||
AutoTriggerTimer.addCancelAutoTriggerCallback(function() {
|
|
||||||
countDownTimer.running = false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function isLightColor(color) {
|
|
||||||
return Math.max(color.r, color.g, color.b) > 0.5
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: backgroundRect
|
|
||||||
anchors.fill: parent
|
|
||||||
//use "black" because this is intended to look like a general darkening of the scene. a dark gray as normal background would just look too "washed out"
|
|
||||||
color: "#1e1f29"
|
|
||||||
opacity: 0.6
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
onClicked: root.cancelRequested()
|
|
||||||
}
|
|
||||||
UserDelegate {
|
|
||||||
width: units.gridUnit * 7
|
|
||||||
height: width
|
|
||||||
nameFontSize: theme.defaultFont.pointSize + 2
|
|
||||||
anchors {
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
bottom: parent.verticalCenter
|
|
||||||
}
|
|
||||||
constrainText: false
|
|
||||||
avatarPath: kuser.faceIconUrl
|
|
||||||
iconSource: "user-identity"
|
|
||||||
isCurrent: true
|
|
||||||
name: kuser.fullName
|
|
||||||
}
|
|
||||||
ColumnLayout {
|
|
||||||
anchors {
|
|
||||||
top: parent.verticalCenter
|
|
||||||
topMargin: units.gridUnit * 2
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
spacing: units.largeSpacing
|
|
||||||
|
|
||||||
height: Math.max(implicitHeight, units.gridUnit * 10)
|
|
||||||
width: Math.max(implicitWidth, units.gridUnit * 16)
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
Layout.maximumWidth: units.gridUnit * 16
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
font.italic: true
|
|
||||||
text: i18ndp("plasma_lookandfeel_org.kde.lookandfeel",
|
|
||||||
"One other user is currently logged in. If the computer is shut down or restarted, that user may lose work.",
|
|
||||||
"%1 other users are currently logged in. If the computer is shut down or restarted, those users may lose work.",
|
|
||||||
sessionsModel.count)
|
|
||||||
visible: sessionsModel.count > 1
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
Layout.maximumWidth: units.gridUnit * 16
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
Layout.fillWidth: true
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
font.italic: true
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "When restarted, the computer will enter the firmware setup screen.")
|
|
||||||
visible: rebootToFirmwareSetup
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
spacing: units.largeSpacing * 2
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
LogoutButton {
|
|
||||||
id: suspendButton
|
|
||||||
iconSource: "system-suspend"
|
|
||||||
text: i18ndc("plasma_lookandfeel_org.kde.lookandfeel", "Suspend to RAM", "Sleep")
|
|
||||||
action: root.sleepRequested
|
|
||||||
KeyNavigation.left: logoutButton
|
|
||||||
KeyNavigation.right: hibernateButton
|
|
||||||
visible: spdMethods.SuspendState
|
|
||||||
}
|
|
||||||
LogoutButton {
|
|
||||||
id: hibernateButton
|
|
||||||
iconSource: "system-suspend-hibernate"
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Hibernate")
|
|
||||||
action: root.hibernateRequested
|
|
||||||
KeyNavigation.left: suspendButton
|
|
||||||
KeyNavigation.right: rebootButton
|
|
||||||
visible: spdMethods.HibernateState
|
|
||||||
}
|
|
||||||
LogoutButton {
|
|
||||||
id: rebootButton
|
|
||||||
iconSource: "system-reboot"
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Restart")
|
|
||||||
action: root.rebootRequested
|
|
||||||
KeyNavigation.left: hibernateButton
|
|
||||||
KeyNavigation.right: shutdownButton
|
|
||||||
focus: sdtype === ShutdownType.ShutdownTypeReboot
|
|
||||||
visible: maysd
|
|
||||||
}
|
|
||||||
LogoutButton {
|
|
||||||
id: shutdownButton
|
|
||||||
iconSource: "system-shutdown"
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Shut Down")
|
|
||||||
action: root.haltRequested
|
|
||||||
KeyNavigation.left: rebootButton
|
|
||||||
KeyNavigation.right: logoutButton
|
|
||||||
focus: sdtype === ShutdownType.ShutdownTypeHalt
|
|
||||||
visible: maysd
|
|
||||||
}
|
|
||||||
LogoutButton {
|
|
||||||
id: logoutButton
|
|
||||||
iconSource: "system-log-out"
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Log Out")
|
|
||||||
action: root.logoutRequested
|
|
||||||
KeyNavigation.left: shutdownButton
|
|
||||||
KeyNavigation.right: suspendButton
|
|
||||||
focus: sdtype === ShutdownType.ShutdownTypeNone
|
|
||||||
visible: canLogout
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
//opacity, as visible would re-layout
|
|
||||||
opacity: countDownTimer.running ? 1 : 0
|
|
||||||
Behavior on opacity {
|
|
||||||
OpacityAnimator {
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
text: {
|
|
||||||
switch (sdtype) {
|
|
||||||
case ShutdownType.ShutdownTypeReboot:
|
|
||||||
return i18ndp("plasma_lookandfeel_org.kde.lookandfeel", "Restarting in 1 second", "Restarting in %1 seconds", root.remainingTime);
|
|
||||||
case ShutdownType.ShutdownTypeHalt:
|
|
||||||
return i18ndp("plasma_lookandfeel_org.kde.lookandfeel", "Shutting down in 1 second", "Shutting down in %1 seconds", root.remainingTime);
|
|
||||||
default:
|
|
||||||
return i18ndp("plasma_lookandfeel_org.kde.lookandfeel", "Logging out in 1 second", "Logging out in %1 seconds", root.remainingTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
Layout.alignment: Qt.AlignHCenter
|
|
||||||
PlasmaComponents.Button {
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
enabled: root.currentAction !== null
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "OK")
|
|
||||||
onClicked: root.currentAction()
|
|
||||||
}
|
|
||||||
PlasmaComponents.Button {
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
text: i18nd("plasma_lookandfeel_org.kde.lookandfeel", "Cancel")
|
|
||||||
onClicked: root.cancelRequested()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,46 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2016 Marco Martin <mart@kde.org> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.2
|
|
||||||
import QtQuick.Layouts 1.2
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
|
|
||||||
import "../components"
|
|
||||||
import "timer.js" as AutoTriggerTimer
|
|
||||||
|
|
||||||
ActionButton {
|
|
||||||
property var action
|
|
||||||
onClicked: action()
|
|
||||||
Layout.alignment: Qt.AlignTop
|
|
||||||
iconSize: units.iconSizes.huge
|
|
||||||
circleVisiblity: activeFocus || containsMouse
|
|
||||||
circleOpacity: 0.55 // Selected option's circle is instantly visible
|
|
||||||
opacity: activeFocus || containsMouse ? 1 : 0.7
|
|
||||||
labelRendering: Text.QtRendering // Remove once we've solved Qt bug: https://bugreports.qt.io/browse/QTBUG-70138 (KDE bug: https://bugs.kde.org/show_bug.cgi?id=401644)
|
|
||||||
font.underline: false
|
|
||||||
font.pointSize: theme.defaultFont.pointSize + 1
|
|
||||||
Behavior on opacity {
|
|
||||||
OpacityAnimator {
|
|
||||||
duration: units.longDuration
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Keys.onPressed: AutoTriggerTimer.cancelAutoTrigger();
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2018 David Edmundson <davidedmundson@kde.org> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
.pragma library
|
|
||||||
|
|
||||||
//written as a library to share knowledge of when a key was pressed
|
|
||||||
//between the multiple views, so pressing a key on one cancels all timers
|
|
||||||
|
|
||||||
var callbacks = [];
|
|
||||||
|
|
||||||
function addCancelAutoTriggerCallback(callback) {
|
|
||||||
callbacks.push(callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
function cancelAutoTrigger() {
|
|
||||||
callbacks.forEach(function(c) {
|
|
||||||
if (!c) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
c();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2014 Martin Klapetek <mklapetek@kde.org>
|
|
||||||
*
|
|
||||||
* 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 2 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 General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.0
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.extras 2.0 as PlasmaExtra
|
|
||||||
|
|
||||||
PlasmaCore.Dialog {
|
|
||||||
id: root
|
|
||||||
location: PlasmaCore.Types.Floating
|
|
||||||
type: PlasmaCore.Dialog.OnScreenDisplay
|
|
||||||
outputOnly: true
|
|
||||||
|
|
||||||
property alias timeout: osd.timeout
|
|
||||||
property alias osdValue: osd.osdValue
|
|
||||||
property alias osdMaxValue: osd.osdMaxValue
|
|
||||||
property alias icon: osd.icon
|
|
||||||
property alias showingProgress: osd.showingProgress
|
|
||||||
|
|
||||||
mainItem: OsdItem {
|
|
||||||
id: osd
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2014 Martin Klapetek <mklapetek@kde.org>
|
|
||||||
* Copyright 2019 Kai Uwe Broulik <kde@broulik.de>
|
|
||||||
*
|
|
||||||
* 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 2 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 General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import QtQuick 2.14
|
|
||||||
import QtQuick.Layouts 1.1
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents3
|
|
||||||
import org.kde.plasma.extras 2.0 as PlasmaExtra
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
// OSD Timeout in msecs - how long it will stay on the screen
|
|
||||||
property int timeout: 1800
|
|
||||||
// This is either a text or a number, if showingProgress is set to true,
|
|
||||||
// the number will be used as a value for the progress bar
|
|
||||||
property var osdValue
|
|
||||||
// Maximum percent value
|
|
||||||
property int osdMaxValue: 100
|
|
||||||
// Icon name to display
|
|
||||||
property string icon
|
|
||||||
// Set to true if the value is meant for progress bar,
|
|
||||||
// false for displaying the value as normal text
|
|
||||||
property bool showingProgress: false
|
|
||||||
|
|
||||||
spacing: PlasmaCore.Units.smallSpacing
|
|
||||||
|
|
||||||
width: Math.max(Math.min(Screen.desktopAvailableWidth / 2, implicitWidth), PlasmaCore.Units.gridUnit * 15)
|
|
||||||
height: PlasmaCore.Units.iconSizes.medium
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
Layout.leftMargin: PlasmaCore.Units.smallSpacing
|
|
||||||
Layout.preferredWidth: PlasmaCore.Units.iconSizes.medium
|
|
||||||
Layout.preferredHeight: PlasmaCore.Units.iconSizes.medium
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
source: icon
|
|
||||||
visible: valid
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents3.ProgressBar {
|
|
||||||
id: progressBar
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
// So it never exceeds the minimum popup size
|
|
||||||
Layout.preferredWidth: 1
|
|
||||||
Layout.rightMargin: PlasmaCore.Units.smallSpacing
|
|
||||||
visible: showingProgress
|
|
||||||
from: 0
|
|
||||||
to: osdMaxValue
|
|
||||||
value: Number(osdValue)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the width of a three-digit number so we can size the label
|
|
||||||
// to the maximum width to avoid the progress bad resizing itself
|
|
||||||
TextMetrics {
|
|
||||||
id: widestLabelSize
|
|
||||||
text: i18n("100%")
|
|
||||||
font: percentageLabel.font
|
|
||||||
}
|
|
||||||
|
|
||||||
// Numerical display of progress bar value
|
|
||||||
PlasmaExtra.Heading {
|
|
||||||
id: percentageLabel
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.preferredWidth: widestLabelSize.width
|
|
||||||
Layout.rightMargin: PlasmaCore.Units.smallSpacing
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
level: 3
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
text: i18nc("Percentage value", "%1%", progressBar.value)
|
|
||||||
visible: showingProgress
|
|
||||||
// Display a subtle visual indication that the volume might be
|
|
||||||
// dangerously high
|
|
||||||
// ------------------------------------------------
|
|
||||||
// Keep this in sync with the copies in plasma-pa:ListItemBase.qml
|
|
||||||
// and plasma-pa:VolumeSlider.qml
|
|
||||||
color: {
|
|
||||||
if (progressBar.value <= 100) {
|
|
||||||
return PlasmaCore.Theme.textColor
|
|
||||||
} else if (progressBar.value > 100 && progressBar.value <= 125) {
|
|
||||||
return PlasmaCore.Theme.neutralTextColor
|
|
||||||
} else {
|
|
||||||
return PlasmaCore.Theme.negativeTextColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaExtra.Heading {
|
|
||||||
id: label
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.fillHeight: true
|
|
||||||
Layout.rightMargin: PlasmaCore.Units.smallSpacing
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
level: 3
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
textFormat: Text.PlainText
|
|
||||||
wrapMode: Text.NoWrap
|
|
||||||
elide: Text.ElideRight
|
|
||||||
text: !showingProgress && osdValue ? osdValue : ""
|
|
||||||
visible: !showingProgress
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 744 KiB |
Before Width: | Height: | Size: 640 KiB |
Before Width: | Height: | Size: 30 KiB |
|
@ -1,109 +0,0 @@
|
||||||
import QtQuick 2.5
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: root
|
|
||||||
source: "images/background.png"
|
|
||||||
|
|
||||||
property int stage
|
|
||||||
|
|
||||||
onStageChanged: {
|
|
||||||
if (stage == 1) {
|
|
||||||
introAnimation.running = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: content
|
|
||||||
anchors.fill: parent
|
|
||||||
opacity: 0
|
|
||||||
TextMetrics {
|
|
||||||
id: units
|
|
||||||
text: "M"
|
|
||||||
property int gridUnit: boundingRect.height
|
|
||||||
property int largeSpacing: units.gridUnit
|
|
||||||
property int smallSpacing: Math.max(2, gridUnit/4)
|
|
||||||
}
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: logo
|
|
||||||
property real size: units.gridUnit * 12
|
|
||||||
anchors.centerIn: parent
|
|
||||||
source: "images/logo.png"
|
|
||||||
sourceSize.width: 150
|
|
||||||
sourceSize.height: 150
|
|
||||||
|
|
||||||
ParallelAnimation {
|
|
||||||
running: true
|
|
||||||
|
|
||||||
ScaleAnimator {
|
|
||||||
target: logo
|
|
||||||
from: 0
|
|
||||||
to: 1
|
|
||||||
duration: 700
|
|
||||||
}
|
|
||||||
SequentialAnimation {
|
|
||||||
loops: Animation.Infinite
|
|
||||||
|
|
||||||
ScaleAnimator {
|
|
||||||
target: logo
|
|
||||||
from: 0.97
|
|
||||||
to: 1
|
|
||||||
duration: 1000
|
|
||||||
}
|
|
||||||
ScaleAnimator {
|
|
||||||
target: logo
|
|
||||||
from: 1
|
|
||||||
to: 0.97
|
|
||||||
duration: 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: busyIndicator
|
|
||||||
//in the middle of the remaining space
|
|
||||||
y: parent.height / 2 - height/2
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
source: "images/busy02.svg"
|
|
||||||
sourceSize.height: logo.height + 60
|
|
||||||
sourceSize.width: logo.width + 60
|
|
||||||
RotationAnimator on rotation {
|
|
||||||
id: rotationAnimator
|
|
||||||
from: 0
|
|
||||||
to: 360
|
|
||||||
duration: 1200
|
|
||||||
loops: Animation.Infinite
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: busyIndicator2
|
|
||||||
//in the middle of the remaining space
|
|
||||||
y: parent.height / 2 - height /2
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
source: "images/busy02.svg"
|
|
||||||
sourceSize.height: logo.height + 100
|
|
||||||
sourceSize.width: logo.width + 100
|
|
||||||
RotationAnimator on rotation {
|
|
||||||
id: rotationAnimator2
|
|
||||||
from: 360
|
|
||||||
to: 0
|
|
||||||
duration: 1200
|
|
||||||
loops: Animation.Infinite
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
OpacityAnimator {
|
|
||||||
id: introAnimation
|
|
||||||
running: false
|
|
||||||
target: content
|
|
||||||
from: 0
|
|
||||||
to: 1
|
|
||||||
duration: 1000
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 118 KiB |
|
@ -1,46 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Generator: Gravit.io -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
style="isolation:isolate"
|
|
||||||
viewBox="0 0 44 44"
|
|
||||||
width="44pt"
|
|
||||||
height="44pt"
|
|
||||||
version="1.1"
|
|
||||||
id="svg6"
|
|
||||||
sodipodi:docname="busy02.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs10" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview8"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
inkscape:document-units="pt"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="10.875"
|
|
||||||
inkscape:cx="9.2413793"
|
|
||||||
inkscape:cy="29.333333"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1020"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg6" />
|
|
||||||
<path
|
|
||||||
d=" M 21.61 2.5 L 21.61 2.5 C 21.334 2.506 21.108 2.286 21.105 2.01 L 21.105 2.01 C 21.102 1.734 21.324 1.506 21.6 1.5 L 21.6 1.5 L 22 1.5 C 22 1.5 22 1.5 22 1.5 C 27.43 1.5 32.65 3.66 36.5 7.5 C 40.34 11.35 42.5 16.57 42.5 22 C 42.5 22 42.5 22 42.5 22.01 L 42.49 22.52 L 42.49 22.52 C 42.49 22.796 42.266 23.018 41.99 23.015 L 41.99 23.015 C 41.714 23.012 41.49 22.786 41.49 22.51 L 41.49 22.51 L 41.5 22 C 41.5 16.83 39.44 11.87 35.79 8.21 C 32.13 4.56 27.17 2.5 22 2.5 L 21.61 2.5 Z "
|
|
||||||
id="path2"
|
|
||||||
style="fill:#44475a;fill-opacity:1" />
|
|
||||||
<path
|
|
||||||
d=" M 22.77 41.49 L 22.77 41.49 C 23.046 41.484 23.274 41.704 23.28 41.98 L 23.28 41.98 C 23.286 42.256 23.066 42.48 22.79 42.48 L 22.79 42.48 L 22.01 42.5 C 22.01 42.5 22 42.5 22 42.5 C 16.57 42.5 11.35 40.34 7.5 36.5 C 3.66 32.65 1.5 27.43 1.5 22 C 1.5 22 1.5 21.99 1.5 21.99 L 1.51 21.34 L 1.51 21.34 C 1.516 21.064 1.744 20.844 2.02 20.85 L 2.02 20.85 C 2.296 20.856 2.516 21.084 2.51 21.36 L 2.51 21.36 L 2.5 22 C 2.5 27.17 4.56 32.13 8.21 35.79 C 11.87 39.44 16.83 41.5 22 41.5 L 22.77 41.49 Z "
|
|
||||||
id="path4"
|
|
||||||
style="fill:#44475a;fill-opacity:1" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 18 KiB |
|
@ -1,13 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=Dracula-purple
|
|
||||||
X-KDE-PluginInfo-Author=EliverLara
|
|
||||||
X-KDE-PluginInfo-Category=Plasma Look And Feel
|
|
||||||
X-KDE-PluginInfo-Email=eliverlara@gmail.com
|
|
||||||
X-KDE-PluginInfo-EnabledByDefault=true
|
|
||||||
X-KDE-PluginInfo-License=GPL 3+
|
|
||||||
X-KDE-PluginInfo-Name=Dracula-purple
|
|
||||||
X-KDE-PluginInfo-Version=0.1
|
|
||||||
X-KDE-PluginInfo-Website=https://github.com/EliverLara/Ant-Dracula/tree/master/kde
|
|
||||||
X-KDE-ServiceTypes=Plasma/LookAndFeel
|
|
||||||
|
|
||||||
X-KPackage-Dependencies=kns://colorschemes.knsrc/api.kde-look.org/1370679,kns://plasma-themes.knsrc/api.kde-look.org/1370687,kns://plasma-themes.knsrc/api.kde-look.org/1420691,kns://aurorae.knsrc/api.kde-look.org/1370682,kns://sddmtheme.knsrc/api.kde-look.org/1374247,kns://wallpaper.knsrc/api.kde-look.org/1378234,kns://xcursor.knsrc/api.kde-look.org/1669262,kns://plasmoids.knsrc/api.kde-look.org/2048016
|
|
|
@ -1,11 +1,11 @@
|
||||||
[kcminputrc][Mouse]
|
[kcminputrc][Mouse]
|
||||||
cursorTheme=breeze_cursors
|
cursorTheme=WhiteSur-cursors
|
||||||
|
|
||||||
[kdeglobals][General]
|
[kdeglobals][General]
|
||||||
ColorScheme=BreezeDark
|
ColorScheme=Nothing
|
||||||
|
|
||||||
[kdeglobals][Icons]
|
[kdeglobals][Icons]
|
||||||
Theme=Papirus-Dark
|
Theme=Colloid-grey-dark
|
||||||
|
|
||||||
[kdeglobals][KDE]
|
[kdeglobals][KDE]
|
||||||
widgetStyle=Breeze
|
widgetStyle=Breeze
|
||||||
|
@ -17,11 +17,11 @@ LayoutName=org.kde.breeze.desktop
|
||||||
LayoutName=org.kde.breeze.desktop
|
LayoutName=org.kde.breeze.desktop
|
||||||
|
|
||||||
[kwinrc][org.kde.kdecoration2]
|
[kwinrc][org.kde.kdecoration2]
|
||||||
library=org.kde.breeze
|
library=org.kde.kwin.aurorae
|
||||||
theme=Breeze
|
theme=__aurorae__svg__Nothing
|
||||||
|
|
||||||
[plasmarc][Theme]
|
[plasmarc][Theme]
|
||||||
name=Colloid-dark
|
name=Nothing
|
||||||
|
|
||||||
[Wallpaper]
|
[Wallpaper]
|
||||||
Image=PomeDefaultWallpaper
|
Image=Nothing1
|
|
@ -1,60 +1,57 @@
|
||||||
var plasma = getApiVersion(1);
|
var plasma = getApiVersion(1);
|
||||||
|
|
||||||
ColorAccetFile = ConfigFile("kdeglobals")
|
|
||||||
ColorAccetFile.group = "General"
|
|
||||||
ColorAccetFile.writeEntry("accentColorFromWallpaper", "true")
|
|
||||||
|
|
||||||
var layout = {
|
var layout = {
|
||||||
"desktops": [
|
|
||||||
{
|
|
||||||
"applets": [
|
|
||||||
],
|
|
||||||
"config": {
|
|
||||||
"/": {
|
|
||||||
"ItemGeometries-1920x1080": "",
|
|
||||||
"ItemGeometriesHorizontal": "",
|
|
||||||
"formfactor": "0",
|
|
||||||
"immutability": "1",
|
|
||||||
"lastScreen": "0",
|
|
||||||
"wallpaperplugin": "com.github.casout.wallpaperEngineKde"
|
|
||||||
},
|
|
||||||
"/ConfigDialog": {
|
|
||||||
"DialogHeight": "540",
|
|
||||||
"DialogWidth": "720"
|
|
||||||
},
|
|
||||||
"/General": {
|
|
||||||
"ToolBoxButtonState": "topcenter",
|
|
||||||
"ToolBoxButtonX": "315",
|
|
||||||
"ToolBoxButtonY": "27",
|
|
||||||
"filterMimeTypes": "\\0",
|
|
||||||
"positions": "{\"1920x1080\":[]}",
|
|
||||||
"sortMode": "-1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wallpaperPlugin": "org.kde.image"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"panels": [
|
"panels": [
|
||||||
{
|
{
|
||||||
"alignment": "left",
|
"alignment": "center",
|
||||||
"applets": [
|
"applets": [
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
"/": {
|
"/": {
|
||||||
"PreloadWeight": "100"
|
"PreloadWeight": "100",
|
||||||
|
"popupHeight": "495",
|
||||||
|
"popupWidth": "657"
|
||||||
},
|
},
|
||||||
"/ConfigDialog": {
|
"/ConfigDialog": {
|
||||||
"DialogHeight": "540",
|
"DialogHeight": "540",
|
||||||
"DialogWidth": "720"
|
"DialogWidth": "720"
|
||||||
},
|
},
|
||||||
"/General": {
|
"/General": {
|
||||||
"displayPosition": "Center",
|
"applicationsDisplay": "0",
|
||||||
"favoritesPortedToKAstats": "true",
|
"favoritesPortedToKAstats": "true",
|
||||||
"floating": "true",
|
"icon": "start-here-kde",
|
||||||
"launcherPosition": "2"
|
"systemFavorites": "suspend\\,hibernate\\,reboot\\,shutdown"
|
||||||
|
},
|
||||||
|
"/Shortcuts": {
|
||||||
|
"global": "Alt+F1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugin": "org.kde.plasma.dittomenu"
|
"plugin": "org.kde.plasma.kickoff"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"/ConfigDialog": {
|
||||||
|
"DialogHeight": "480",
|
||||||
|
"DialogWidth": "796"
|
||||||
|
},
|
||||||
|
"/General": {
|
||||||
|
"containmentType": "Plasma",
|
||||||
|
"lengthFirstMargin": "6",
|
||||||
|
"lengthLastMargin": "4",
|
||||||
|
"lengthMarginsLock": "false",
|
||||||
|
"showIcon": "false"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugin": "org.kde.windowtitle"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"/ConfigDialog": {
|
||||||
|
"DialogHeight": "480",
|
||||||
|
"DialogWidth": "640"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugin": "org.kde.plasma.appmenu"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -64,20 +61,23 @@ var layout = {
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
"/": {
|
"/": {
|
||||||
"PreloadWeight": "75",
|
"PreloadWeight": "100",
|
||||||
"popupHeight": "450",
|
"popupHeight": "450",
|
||||||
"popupWidth": "396"
|
"popupWidth": "396"
|
||||||
},
|
},
|
||||||
"/Appearance": {
|
"/Appearance": {
|
||||||
"customDateFormat": "",
|
"customSpacing": "1.7171717171717171",
|
||||||
"showDate": "false"
|
"enabledCalendarPlugins": "/usr/lib/qt5/plugins/plasmacalendarplugins/holidaysevents.so",
|
||||||
|
"fixedFont": "true",
|
||||||
|
"fontFamily": "SFNS Display",
|
||||||
|
"fontSize": "15"
|
||||||
},
|
},
|
||||||
"/ConfigDialog": {
|
"/ConfigDialog": {
|
||||||
"DialogHeight": "540",
|
"DialogHeight": "510",
|
||||||
"DialogWidth": "720"
|
"DialogWidth": "680"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugin": "org.kde.plasma.digitalclock"
|
"plugin": "org.kde.plasma.betterinlineclock"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -86,16 +86,20 @@ var layout = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
"/": {
|
"/ConfigDialog": {
|
||||||
"PreloadWeight": "65"
|
"DialogHeight": "480",
|
||||||
|
"DialogWidth": "640"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugin": "org.kde.plasma.systemtray"
|
"plugin": "org.kde.plasma.marginsseparator"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
|
"/": {
|
||||||
|
"PreloadWeight": "100"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"plugin": "org.kde.plasma.lock_logout"
|
"plugin": "org.kde.plasma.systemtray"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"config": {
|
"config": {
|
||||||
|
@ -106,15 +110,15 @@ var layout = {
|
||||||
"wallpaperplugin": "org.kde.image"
|
"wallpaperplugin": "org.kde.image"
|
||||||
},
|
},
|
||||||
"/ConfigDialog": {
|
"/ConfigDialog": {
|
||||||
"DialogHeight": "84",
|
"DialogHeight": "78",
|
||||||
"DialogWidth": "1920"
|
"DialogWidth": "1920"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"height": 1.5,
|
"height": 1.625,
|
||||||
"hiding": "normal",
|
"hiding": "normal",
|
||||||
"location": "top",
|
"location": "top",
|
||||||
"maximumLength": 106.66666666666667,
|
"maximumLength": 120,
|
||||||
"minimumLength": 106.66666666666667,
|
"minimumLength": 120,
|
||||||
"offset": 0
|
"offset": 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -122,41 +126,32 @@ var layout = {
|
||||||
"applets": [
|
"applets": [
|
||||||
{
|
{
|
||||||
"config": {
|
"config": {
|
||||||
"/": {
|
|
||||||
"launchers": ""
|
|
||||||
},
|
|
||||||
"/General": {
|
"/General": {
|
||||||
"iconSpacing": "0",
|
"launchers": ""
|
||||||
"indicateAudioStreams": "false",
|
|
||||||
"launchers": "",
|
|
||||||
"maxStripes": "1"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugin": "org.kde.plasma.icontasks"
|
"plugin": "org.kde.plasma.icontasks"
|
||||||
},
|
|
||||||
{
|
|
||||||
"config": {
|
|
||||||
},
|
|
||||||
"plugin": "org.kde.plasma.trash"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"config": {
|
"config": {
|
||||||
"/": {
|
"/": {
|
||||||
"formfactor": "3",
|
"formfactor": "2",
|
||||||
"immutability": "1",
|
"immutability": "1",
|
||||||
"lastScreen": "0",
|
"lastScreen": "0",
|
||||||
"wallpaperplugin": "org.kde.image"
|
"wallpaperplugin": "org.kde.image"
|
||||||
},
|
},
|
||||||
"/ConfigDialog": {
|
"/ConfigDialog": {
|
||||||
"DialogHeight": "1080",
|
"DialogHeight": "78",
|
||||||
"DialogWidth": "248"
|
"DialogWidth": "1920"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"height": 3.3333333333333335,
|
"height": 3.25,
|
||||||
"hiding": "autohide",
|
"hiding": "windowscover",
|
||||||
"location": "right",
|
"location": "bottom",
|
||||||
"maximumLength": 60,
|
"floating": 0,
|
||||||
"minimumLength": 60,
|
"floating": "true",
|
||||||
|
"maximumLength": 49.75,
|
||||||
|
"minimumLength": 30,
|
||||||
"offset": 0
|
"offset": 0
|
||||||
}
|
}
|
||||||
],
|
],
|
After Width: | Height: | Size: 131 KiB |
BIN
kde/plasma/look-and-feel/Nothing/contents/previews/preview.png
Normal file
After Width: | Height: | Size: 61 KiB |
13
kde/plasma/look-and-feel/Nothing/metadata.desktop
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Comment=Nothing Global Theme
|
||||||
|
Name=Nothing
|
||||||
|
X-KDE-PluginInfo-Author=jomada
|
||||||
|
X-KDE-PluginInfo-Category=Plasma Look And Feel
|
||||||
|
X-KDE-PluginInfo-Email=gicalucejo@gmail.com
|
||||||
|
X-KDE-PluginInfo-EnabledByDefault=true
|
||||||
|
X-KDE-PluginInfo-License=GPL 3+
|
||||||
|
X-KDE-PluginInfo-Name=Nothing
|
||||||
|
X-KDE-PluginInfo-Version=1.2
|
||||||
|
X-KDE-PluginInfo-Website=seduccionlinux.wordpress.com
|
||||||
|
X-KDE-ServiceTypes=Plasma/LookAndFeel
|
||||||
|
X-KPackage-Dependencies=kns://colorschemes.knsrc/api.kde-look.org/2116662,kns://plasma-themes.knsrc/api.kde-look.org/2116665,kns://aurorae.knsrc/api.kde-look.org/2116663,kns://xcursor.knsrc/api.kde-look.org/1411743,kns://wallpaper.knsrc/api.kde-look.org/2116657,kns://wallpaper.knsrc/api.kde-look.org/2116658,kns://wallpaper.knsrc/api.kde-look.org/2116659,kns://plasmoids.knsrc/api.kde-look.org/1245902,kns://plasmoids.knsrc/api.kde-look.org/1274218
|
66
kde/plasma/look-and-feel/Nothing/metadata.json
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
{
|
||||||
|
"KPackageStructure": "Plasma/LookAndFeel",
|
||||||
|
"KPlugin": {
|
||||||
|
"Authors": [
|
||||||
|
{
|
||||||
|
"Email": "gicalucejo@gmail.com",
|
||||||
|
"Name": "jomada"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Category": "",
|
||||||
|
"Description": "Nothing Desktop Design",
|
||||||
|
"Id": "Nothing",
|
||||||
|
"License": "GPLv2+",
|
||||||
|
"Name": "Nothing",
|
||||||
|
"Website": ""
|
||||||
|
},
|
||||||
|
"Keywords": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;",
|
||||||
|
"Keywords[ar]": "سطح المكتب;مساحة العمل;المظهر;المظهر والإحساس;اخرج;Lock;علق;أطفئ;أسبت;",
|
||||||
|
"Keywords[ast]": "Escritoriu;Estaya de trabayu;Aspeutu;Estilu;Aspeutu y Estilu;Zarrar sesión;Zarru de sesión;Bloquiar;Bloquéu;Suspender;Suspensión;Apagar;Apagáu;Ivernar;Ivernación;Hibernar;Hibernación;",
|
||||||
|
"Keywords[az]": "iş masası;iş mühiti;iş mühiti;vizual təqdimat;çıxış;seansdan çıxış;kilidləmə;işi dayandırmaq;işin bitirilməsi;söndürmək;yuxu rejimi;gözləmə rejimi;",
|
||||||
|
"Keywords[ca@valencia]": "Escriptori;Espai de treball;Aparença;Aspecte i comportament;Eixida;Bloqueig;Suspensió;Parada;Hibernació;",
|
||||||
|
"Keywords[ca]": "Escriptori;Espai de treball;Aparença;Aspecte i comportament;Sortida;Bloqueig;Suspensió;Aturada;Hibernació;",
|
||||||
|
"Keywords[da]": "Skrivebord;Desktop;Arbejdsområde;Udseende;log ud;Lås;Suspendér;Nedlukning;dvale;",
|
||||||
|
"Keywords[de]": "Desktop;Arbeitsfläche;Arbeitsbereich;Erscheinungsbild;Erscheinungsbild und Verhalten;Abmelden;Sperren;Standby;Ruhezustand;Tiefschlaf;Herunterfahren;",
|
||||||
|
"Keywords[el]": "Επιφάνεια εργασίας;Χώρος εργασίας;Εμφάνιση;Όψη και Αίσθηση;Αποσύνδεση;Κλείδωμα;Αναστολή;Τερματισμός;Νάρκη;",
|
||||||
|
"Keywords[en_GB]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;",
|
||||||
|
"Keywords[es]": "Escritorio;Espacio de trabajo;Apariencia;Aspecto visual;Cerrar sesión;Bloquear;Suspender;Apagar;Hibernar;",
|
||||||
|
"Keywords[et]": "töölaud;töötsoon;välimus;väljalogimine;lukustamine;seiskamine;väljalülitamine;talveuni;uni;",
|
||||||
|
"Keywords[eu]": "mahaigain;lan-eremu;lan-gune;itxura;itxura eta izaera;saioa-amaitu;giltzatu;blokeatu;eseki;itzali;hibernatu;",
|
||||||
|
"Keywords[fi]": "Työpöytä;Työtila;Ulkoasu;Ulkoasu ja tuntuma;Kirjaudu ulos;Lukitse;Valmiustila;Sammuta;Lepotila",
|
||||||
|
"Keywords[fr]": "bureau;espace de travail;apparence;déconnexion;verrouillage;suspension;arrêt;hibernation;",
|
||||||
|
"Keywords[gl]": "Escritorio;Espazo de traballo;Aparencia;Aparencia e Comportamento;Saír;Trancar;Bloquear;Suspender;Apagar;Hibernar;",
|
||||||
|
"Keywords[hi]": "डेस्कटॉप; कार्यक्षेत्र; दिखावट; रंगरूप और अनुभव; लॉगआउट; तालाबंद; निलंबन; बंद करना;सुप्तावस्था;",
|
||||||
|
"Keywords[hu]": "Asztal;Munkaterület;Megjelenés;Kinézet;Kijelentkezés;Zárolás;Felfüggesztés;Leállítás;Hibernálás;",
|
||||||
|
"Keywords[ia]": "Scriptorio;Spatio de labor;Apparentia;Look and Feel;Logout;Lock;Suspende;Shutdown;Hibernate;",
|
||||||
|
"Keywords[id]": "Desktop;Workspace;Penampilan;Nuansa dan Suasana,Keluar log;Kunci;Suspensi;Mematikan;Hibernasi;",
|
||||||
|
"Keywords[is]": "skjáborð;vinnusvæði;útlit;ásýnd og hegðun;Útskráning;Læsing;setja í bið;slökkva;svæfa;",
|
||||||
|
"Keywords[it]": "desktop;spazio di lavoro;aspetto;uscita;blocco;sospensione;spegnimento;ibernazione;",
|
||||||
|
"Keywords[ja]": "デスクトップ;ワークスペース;外観;外観と挙動;ログアウト;ロック;サスペンド;シャットダウン;休止状態;",
|
||||||
|
"Keywords[ko]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;데스크톱;작업공간;모양;로그아웃;잠금;대기모드;종료;끄기;최대절전모드;",
|
||||||
|
"Keywords[lt]": "Darbalaukis;Darbo sritis;Erdvė;Erdve;Isvaizda;Isvaizda ir turinys;Išvaizda;Išvaizda ir turinys;Atsijungti;Užrakinti;Uzrakinti;Pristabdyti;Sulaikyti;Užmigdyti;Uzmigdyti;Isjungti;Išjungti;Hibernuoti;",
|
||||||
|
"Keywords[ml]": "ഡെസ്ക്ടോപ്പ്;വർക്ക്സ്പേസ്;ബാഹ്യരൂപം;രൂപവും ഭാവവും;പുറത്തിറങ്ങുക;മയങ്ങുക;;നിഷ്ക്രിയമാക്കുക;അടയ്ക്കുക;",
|
||||||
|
"Keywords[nl]": "Bureaublad;Werkruimte;Uiterlijk;Uiterlijk en gedrag;Afmelden;Vergrendelen;Onderbreken;Afsluiten;Slapen naar schijf;",
|
||||||
|
"Keywords[nn]": "skrivebord;arbeidsområde;arbeidsflate;ustjånad;åtferd;utlogging;logga ut;låsa;låsing;pausemodus;kvilemodus;dvalemodus;avslutting;",
|
||||||
|
"Keywords[pa]": "ਡੈਸਕਟਾਪ;ਵਰਕਸਪੇਸ;ਦਿੱਖ;ਲਾਗਆਉਟ;ਲਾਕ;ਸਸਪੈਂਡ;ਬੰਦ ਕਰੋ;ਹਾਈਬਰਨੇਟ;",
|
||||||
|
"Keywords[pl]": "Pulpit;Przestrzeń robocza;Wygląd;Wygląd i Odczucia;Wylogowanie;Zablokowanie ;Wstrzymanie;Zamknięcie;Hibernowanie;Wrażenia;",
|
||||||
|
"Keywords[pt]": "Ecrã;Área de Trabalho;Aparência;Aparência e Comportamento;Encerrar;Bloquear;Suspender;Desligar;Hibernar;",
|
||||||
|
"Keywords[pt_BR]": "Área de trabalho;Espaço de trabalho;Aparência;Aparência e Comportamento;Encerrar sessão;Bloquear;Suspender;Desligar;Hibernar;",
|
||||||
|
"Keywords[ro]": "birou,spațiu de lucru,aspect,comportament,ieșire,blocare,suspendare,suspendă,blochează,oprește,oprire,hibernare,deconectare",
|
||||||
|
"Keywords[ru]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;рабочий стол;рабочая среда;внешний вид;визуальное представление;выход;завершение сеанса;блокировка;приостановка работы;завершение работы;выключение;спящий режим;ждущий режим;",
|
||||||
|
"Keywords[sk]": "Plocha;pracovný priestor;vzhľad;vzhľad a dojem;odhlásiť;zamknúť;uspať;vypnúť;hibernovať;",
|
||||||
|
"Keywords[sl]": "Namizje;delovni prostor;videz;videz in občutek;odjava;zaklep;pripravljenost;izklop;mirovanje;",
|
||||||
|
"Keywords[sr@ijekavian]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;површ;радни простор;изглед;осећај;одјављивање;закључавање;суспендовање;гашење;хибернисање;",
|
||||||
|
"Keywords[sr@ijekavianlatin]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;površ;radni prostor;izgled;osećaj;odjavljivanje;zaključavanje;suspendovanje;gašenje;hibernisanje;",
|
||||||
|
"Keywords[sr@latin]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;površ;radni prostor;izgled;osećaj;odjavljivanje;zaključavanje;suspendovanje;gašenje;hibernisanje;",
|
||||||
|
"Keywords[sr]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;површ;радни простор;изглед;осећај;одјављивање;закључавање;суспендовање;гашење;хибернисање;",
|
||||||
|
"Keywords[sv]": "Skrivbord;Arbetsområde;Utseende;Utseende och känsla;Utloggning;Lås;Viloläge;Avstängning;Dvala;",
|
||||||
|
"Keywords[ta]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate; பணிமேடை; தோற்றம்; பார்வை; வெளியேறு; பூட்டு; தூக்கம்; தூங்கு; நிறுத்து;",
|
||||||
|
"Keywords[tr]": "Masaüstü;Çalışma Alanı;Görünüm;Görünüm ve Doku;Çık;Kilitle;Askıya Al;Kapat;Uyku;",
|
||||||
|
"Keywords[uk]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;стільниця;робочий простір;воркспейс;вигляд;вигляд і поведінка;вихід;вийти;заблокувати;замкнути;призупинити;вимкнути;приспати;",
|
||||||
|
"Keywords[vi]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;Bàn làm việc;Không gian làm việc;Diện mạo;Nhìn và Cảm;Đăng xuất;Khoá;Tạm ngừng;Tắt;Ngủ đông;",
|
||||||
|
"Keywords[x-test]": "xxDesktopxx;xxWorkspacexx;xxAppearancexx;xxLook and Feelxx;xxLogoutxx;xxLockxx;xxSuspendxx;xxShutdownxx;xxHibernatexx;",
|
||||||
|
"Keywords[zh_CN]": "桌面;工作空间;外观;观感;注销;锁定;待机;关机;休眠;",
|
||||||
|
"Keywords[zh_TW]": "Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;",
|
||||||
|
"X-Plasma-APIVersion": "2"
|
||||||
|
}
|
Before Width: | Height: | Size: 128 KiB |
Before Width: | Height: | Size: 94 KiB |
|
@ -1,15 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=Pome Desktop 2
|
|
||||||
X-KDE-PluginInfo-Author=UuBroot
|
|
||||||
X-KDE-PluginInfo-Category=Plasma Look And Feel
|
|
||||||
X-KDE-PluginInfo-Email=lolylyt@gmail.com
|
|
||||||
X-KDE-PluginInfo-EnabledByDefault=true
|
|
||||||
X-KDE-PluginInfo-License=GPL 3+
|
|
||||||
X-KDE-PluginInfo-Name=PomeDesktop2
|
|
||||||
X-KDE-PluginInfo-Version=2
|
|
||||||
X-KDE-PluginInfo-Website=https://github.com/uubroot
|
|
||||||
X-KDE-ServiceTypes=Plasma/LookAndFeel
|
|
||||||
X-KDE-fallbackPackage=org.kde.breeze.desktop
|
|
||||||
|
|
||||||
X-KPackage-Dependencies=kns://plasma-themes.knsrc/api.kde-look.org/1738703,kns://plasmoids.knsrc/api.kde-look.org/1312669,kns://icons.knsrc/api.kde-look.org/1166289/,kns://wallpaper.knsrc/api.kde-look.org/2056002/
|
|
||||||
|
|
Before Width: | Height: | Size: 202 KiB |
|
@ -1,24 +0,0 @@
|
||||||
import QtQuick 2.15
|
|
||||||
|
|
||||||
Rectangle
|
|
||||||
{
|
|
||||||
id: root
|
|
||||||
property int number
|
|
||||||
property alias font: text.font.family
|
|
||||||
radius: height * 0.05
|
|
||||||
|
|
||||||
color: "#9b0000"
|
|
||||||
|
|
||||||
Text
|
|
||||||
{
|
|
||||||
id: text
|
|
||||||
text: (root.number < 10 ? "0" : "") + root.number
|
|
||||||
anchors.fill: parent
|
|
||||||
color: "#d8d8d8"
|
|
||||||
font.pixelSize: Math.min(height * 0.4, width * 0.4)
|
|
||||||
font.family: fixedFont.name
|
|
||||||
renderType: Text.QtRendering
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,160 +0,0 @@
|
||||||
import QtQuick 2.15
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides a flip-panel effect on a given item
|
|
||||||
* It is assumed we have the same geometry of that item and anchored on top
|
|
||||||
*/
|
|
||||||
|
|
||||||
// in any sane world we would hide the flipEffect when we're not animating
|
|
||||||
// however QtQuick tries to be clever and flushes with Effectsource when there's no monitor
|
|
||||||
// and I relied on that..
|
|
||||||
// doesn't seem too costly, so meh
|
|
||||||
// it does look hilarious if you resize though...
|
|
||||||
|
|
||||||
Item
|
|
||||||
{
|
|
||||||
id: root
|
|
||||||
property Item sourceItem
|
|
||||||
property int duration: 1000
|
|
||||||
property bool supress: true
|
|
||||||
|
|
||||||
function flip()
|
|
||||||
{
|
|
||||||
// lazy hack to avoid the first flip that happens on initial bind
|
|
||||||
if (supress)
|
|
||||||
{
|
|
||||||
supress = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
flipAnim.start()
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffectSource
|
|
||||||
{
|
|
||||||
id: oldTop
|
|
||||||
sourceItem: root.sourceItem
|
|
||||||
sourceRect: Qt.rect(0, 0, root.sourceItem.width, root.sourceItem.height/2)
|
|
||||||
live: false
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffectSource
|
|
||||||
{
|
|
||||||
id: oldBottom
|
|
||||||
sourceItem: root.sourceItem
|
|
||||||
sourceRect: Qt.rect(0, root.sourceItem.height/2, root.sourceItem.width, root.sourceItem.height/2)
|
|
||||||
live: false
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffectSource
|
|
||||||
{
|
|
||||||
id: newBottom
|
|
||||||
sourceItem: root.sourceItem
|
|
||||||
sourceRect: Qt.rect(0, root.sourceItem.height/2, root.sourceItem.width, root.sourceItem.height/2)
|
|
||||||
live: false
|
|
||||||
textureMirroring: ShaderEffectSource.NoMirroring
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffect
|
|
||||||
{
|
|
||||||
id: effect
|
|
||||||
anchors.top: root.top
|
|
||||||
anchors.bottom: root.verticalCenter
|
|
||||||
anchors.left: root.left
|
|
||||||
anchors.right: root.right
|
|
||||||
property variant source: oldTop
|
|
||||||
z: 10
|
|
||||||
transform: Rotation
|
|
||||||
{
|
|
||||||
id: upperRotation
|
|
||||||
origin.x: effect.width/2
|
|
||||||
origin.y: effect.height
|
|
||||||
axis.x: 1
|
|
||||||
axis.y: 0
|
|
||||||
axis.z: 0
|
|
||||||
angle: 90
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffect
|
|
||||||
{
|
|
||||||
id: effect2
|
|
||||||
anchors.top: root.top
|
|
||||||
anchors.bottom: root.verticalCenter
|
|
||||||
anchors.left: root.left
|
|
||||||
anchors.right: root.right
|
|
||||||
property variant source: newBottom
|
|
||||||
z: 10
|
|
||||||
transform: Rotation
|
|
||||||
{
|
|
||||||
id: lowerRotation
|
|
||||||
origin.x: effect.width/2
|
|
||||||
origin.y: effect.height
|
|
||||||
axis.x: 1
|
|
||||||
axis.y: 0
|
|
||||||
axis.z: 0
|
|
||||||
angle: 90
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ShaderEffect
|
|
||||||
{
|
|
||||||
property variant source: oldBottom
|
|
||||||
anchors.top: root.verticalCenter
|
|
||||||
anchors.bottom: root.bottom
|
|
||||||
anchors.left: root.left
|
|
||||||
anchors.right: root.right
|
|
||||||
z:1
|
|
||||||
}
|
|
||||||
|
|
||||||
SequentialAnimation
|
|
||||||
{
|
|
||||||
id: flipAnim
|
|
||||||
|
|
||||||
NumberAnimation
|
|
||||||
{
|
|
||||||
target: upperRotation
|
|
||||||
property: "angle"
|
|
||||||
from: 0
|
|
||||||
to: -90
|
|
||||||
duration: root.duration / 2
|
|
||||||
}
|
|
||||||
|
|
||||||
ScriptAction
|
|
||||||
{
|
|
||||||
script:
|
|
||||||
{
|
|
||||||
newBottom.scheduleUpdate()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
NumberAnimation
|
|
||||||
{
|
|
||||||
target: lowerRotation
|
|
||||||
property: "angle"
|
|
||||||
from: -90
|
|
||||||
to: -180
|
|
||||||
duration: root.duration / 2
|
|
||||||
}
|
|
||||||
|
|
||||||
ScriptAction
|
|
||||||
{
|
|
||||||
script:
|
|
||||||
{
|
|
||||||
oldTop.scheduleUpdate();
|
|
||||||
oldBottom.scheduleUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// horizontal line to make it look like a flippy thing
|
|
||||||
Rectangle
|
|
||||||
{
|
|
||||||
color: "#9b0000"
|
|
||||||
height: 2
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
z: 20
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,162 +0,0 @@
|
||||||
import QtQuick 2.15
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: root
|
|
||||||
source: "images/RedDash.png"
|
|
||||||
fillMode: Image.PreserveAspectCrop
|
|
||||||
|
|
||||||
property int stage
|
|
||||||
|
|
||||||
onStageChanged:
|
|
||||||
{
|
|
||||||
if (stage == 1)
|
|
||||||
{
|
|
||||||
introAnimation.running = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
width: 1920
|
|
||||||
height: 1200
|
|
||||||
|
|
||||||
FontLoader {
|
|
||||||
id: fixedFont
|
|
||||||
source: "BebasNeue-Regular.ttf"
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.DataSource
|
|
||||||
{
|
|
||||||
id: dataSource
|
|
||||||
engine: "time"
|
|
||||||
connectedSources: "Local"
|
|
||||||
interval: 60000
|
|
||||||
intervalAlignment: PlasmaCore.Types.AlignToMinute
|
|
||||||
onDataChanged:
|
|
||||||
{
|
|
||||||
updateTime()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateTime() {
|
|
||||||
root.hour = dataSource.data["Local"]["DateTime"].getHours()
|
|
||||||
root.min = dataSource.data["Local"]["DateTime"].getMinutes()
|
|
||||||
}
|
|
||||||
|
|
||||||
property int hour
|
|
||||||
property int min
|
|
||||||
|
|
||||||
// helper for testing animation
|
|
||||||
//Timer
|
|
||||||
//{
|
|
||||||
//running: true
|
|
||||||
//interval: 4000
|
|
||||||
//repeat: true
|
|
||||||
//onTriggered: root.hour++
|
|
||||||
//}
|
|
||||||
|
|
||||||
Digit
|
|
||||||
{
|
|
||||||
id: hours
|
|
||||||
y: root.height
|
|
||||||
height: root.height * 0.2
|
|
||||||
width: Math.min(parent.width * 0.45, height)
|
|
||||||
anchors.right: parent.horizontalCenter
|
|
||||||
anchors.rightMargin: parent.width * 0.01
|
|
||||||
font: fixedFont.name
|
|
||||||
//anchors.verticalCenter: root.verticalCenter
|
|
||||||
number: root.hour
|
|
||||||
onNumberChanged: flipEffectHours.flip()
|
|
||||||
}
|
|
||||||
|
|
||||||
FlipEffect
|
|
||||||
{
|
|
||||||
id: flipEffectHours
|
|
||||||
sourceItem: hours
|
|
||||||
anchors.fill: hours
|
|
||||||
}
|
|
||||||
|
|
||||||
Digit
|
|
||||||
{
|
|
||||||
id: min
|
|
||||||
y: root.height
|
|
||||||
height: root.height * 0.2
|
|
||||||
width: Math.min(parent.width * 0.45, height)
|
|
||||||
anchors.left: parent.horizontalCenter
|
|
||||||
anchors.leftMargin: parent.width * 0.01
|
|
||||||
font: fixedFont.name
|
|
||||||
//anchors.verticalCenter: root.verticalCenter
|
|
||||||
number: root.min
|
|
||||||
onNumberChanged: flipEffectMin.flip()
|
|
||||||
}
|
|
||||||
|
|
||||||
FlipEffect {
|
|
||||||
id: flipEffectMin
|
|
||||||
sourceItem: min
|
|
||||||
anchors.fill: min
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle
|
|
||||||
{
|
|
||||||
radius: 12
|
|
||||||
color: "#640000"
|
|
||||||
height: 12
|
|
||||||
width: height*40
|
|
||||||
anchors
|
|
||||||
{
|
|
||||||
bottom: parent.bottom
|
|
||||||
bottomMargin:200
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle
|
|
||||||
{
|
|
||||||
radius: 12
|
|
||||||
color: "#c80000"
|
|
||||||
width: (parent.width / 6) * (stage - 0.00)
|
|
||||||
anchors
|
|
||||||
{
|
|
||||||
left: parent.left
|
|
||||||
top: parent.top
|
|
||||||
bottom: parent.bottom
|
|
||||||
}
|
|
||||||
|
|
||||||
Behavior on width
|
|
||||||
{
|
|
||||||
PropertyAnimation
|
|
||||||
{
|
|
||||||
duration: 2500
|
|
||||||
easing.type: Easing.InOutQuad
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SequentialAnimation
|
|
||||||
{
|
|
||||||
id: introAnimation
|
|
||||||
running: false
|
|
||||||
|
|
||||||
ParallelAnimation
|
|
||||||
{
|
|
||||||
PropertyAnimation
|
|
||||||
{
|
|
||||||
property: "y"
|
|
||||||
target: hours
|
|
||||||
to: (root.height / 2) - (hours.height / 2)
|
|
||||||
duration: 0
|
|
||||||
easing.type: Easing.InOutBack
|
|
||||||
easing.overshoot: 1.0
|
|
||||||
}
|
|
||||||
|
|
||||||
PropertyAnimation
|
|
||||||
{
|
|
||||||
property: "y"
|
|
||||||
target: min
|
|
||||||
to: (root.height / 2) - (min.height / 2)
|
|
||||||
duration: 0
|
|
||||||
easing.type: Easing.InOutBack
|
|
||||||
easing.overshoot: 1.0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Before Width: | Height: | Size: 202 KiB |
|
@ -1,22 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Comment=Add a Dash of Red to your Startup
|
|
||||||
|
|
||||||
Encoding=UTF-8
|
|
||||||
Keywords=Desktop;Workspace;Appearance;Look and Feel;Logout;Lock;Suspend;Shutdown;Hibernate;
|
|
||||||
Name=Red Dash
|
|
||||||
|
|
||||||
Type=Service
|
|
||||||
|
|
||||||
X-KDE-ServiceTypes=Plasma/LookAndFeel
|
|
||||||
X-KDE-ParentApp=
|
|
||||||
X-KDE-PluginInfo-Author=RedrcknRbn
|
|
||||||
X-KDE-PluginInfo-Category=
|
|
||||||
X-KDE-PluginInfo-Email=
|
|
||||||
X-KDE-PluginInfo-License=CC BY-SA 4.0
|
|
||||||
X-KDE-PluginInfo-Name=RedDash
|
|
||||||
X-KDE-PluginInfo-Version=1.0
|
|
||||||
X-KDE-PluginInfo-Website=
|
|
||||||
X-KDE-fallbackPackage=org.kde.breeze.desktop
|
|
||||||
X-Plasma-MainScript=defaults
|
|
||||||
X-Plasma-APIVersion=2
|
|
||||||
X-KPackage-Dependencies=
|
|
|
@ -1,339 +0,0 @@
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
Version 2, June 1991
|
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
License is intended to guarantee your freedom to share and change free
|
|
||||||
software--to make sure the software is free for all its users. This
|
|
||||||
General Public License applies to most of the Free Software
|
|
||||||
Foundation's software and to any other program whose authors commit to
|
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
|
||||||
the GNU Lesser General Public License instead.) You can apply it to
|
|
||||||
your programs, too.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
|
||||||
price. Our General Public Licenses are designed to make sure that you
|
|
||||||
have the freedom to distribute copies of free software (and charge for
|
|
||||||
this service if you wish), that you receive source code or can get it
|
|
||||||
if you want it, that you can change the software or use pieces of it
|
|
||||||
in new free programs; and that you know you can do these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
anyone to deny you these rights or to ask you to surrender the rights.
|
|
||||||
These restrictions translate to certain responsibilities for you if you
|
|
||||||
distribute copies of the software, or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of such a program, whether
|
|
||||||
gratis or for a fee, you must give the recipients all the rights that
|
|
||||||
you have. You must make sure that they, too, receive or can get the
|
|
||||||
source code. And you must show them these terms so they know their
|
|
||||||
rights.
|
|
||||||
|
|
||||||
We protect your rights with two steps: (1) copyright the software, and
|
|
||||||
(2) offer you this license which gives you legal permission to copy,
|
|
||||||
distribute and/or modify the software.
|
|
||||||
|
|
||||||
Also, for each author's protection and ours, we want to make certain
|
|
||||||
that everyone understands that there is no warranty for this free
|
|
||||||
software. If the software is modified by someone else and passed on, we
|
|
||||||
want its recipients to know that what they have is not the original, so
|
|
||||||
that any problems introduced by others will not reflect on the original
|
|
||||||
authors' reputations.
|
|
||||||
|
|
||||||
Finally, any free program is threatened constantly by software
|
|
||||||
patents. We wish to avoid the danger that redistributors of a free
|
|
||||||
program will individually obtain patent licenses, in effect making the
|
|
||||||
program proprietary. To prevent this, we have made it clear that any
|
|
||||||
patent must be licensed for everyone's free use or not licensed at all.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow.
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License applies to any program or other work which contains
|
|
||||||
a notice placed by the copyright holder saying it may be distributed
|
|
||||||
under the terms of this General Public License. The "Program", below,
|
|
||||||
refers to any such program or work, and a "work based on the Program"
|
|
||||||
means either the Program or any derivative work under copyright law:
|
|
||||||
that is to say, a work containing the Program or a portion of it,
|
|
||||||
either verbatim or with modifications and/or translated into another
|
|
||||||
language. (Hereinafter, translation is included without limitation in
|
|
||||||
the term "modification".) Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running the Program is not restricted, and the output from the Program
|
|
||||||
is covered only if its contents constitute a work based on the
|
|
||||||
Program (independent of having been made by running the Program).
|
|
||||||
Whether that is true depends on what the Program does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Program's
|
|
||||||
source code as you receive it, in any medium, provided that you
|
|
||||||
conspicuously and appropriately publish on each copy an appropriate
|
|
||||||
copyright notice and disclaimer of warranty; keep intact all the
|
|
||||||
notices that refer to this License and to the absence of any warranty;
|
|
||||||
and give any other recipients of the Program a copy of this License
|
|
||||||
along with the Program.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy, and
|
|
||||||
you may at your option offer warranty protection in exchange for a fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Program or any portion
|
|
||||||
of it, thus forming a work based on the Program, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) You must cause the modified files to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
b) You must cause any work that you distribute or publish, that in
|
|
||||||
whole or in part contains or is derived from the Program or any
|
|
||||||
part thereof, to be licensed as a whole at no charge to all third
|
|
||||||
parties under the terms of this License.
|
|
||||||
|
|
||||||
c) If the modified program normally reads commands interactively
|
|
||||||
when run, you must cause it, when started running for such
|
|
||||||
interactive use in the most ordinary way, to print or display an
|
|
||||||
announcement including an appropriate copyright notice and a
|
|
||||||
notice that there is no warranty (or else, saying that you provide
|
|
||||||
a warranty) and that users may redistribute the program under
|
|
||||||
these conditions, and telling the user how to view a copy of this
|
|
||||||
License. (Exception: if the Program itself is interactive but
|
|
||||||
does not normally print such an announcement, your work based on
|
|
||||||
the Program is not required to print an announcement.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Program,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Program, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Program.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Program
|
|
||||||
with the Program (or with a work based on the Program) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may copy and distribute the Program (or a work based on it,
|
|
||||||
under Section 2) in object code or executable form under the terms of
|
|
||||||
Sections 1 and 2 above provided that you also do one of the following:
|
|
||||||
|
|
||||||
a) Accompany it with the complete corresponding machine-readable
|
|
||||||
source code, which must be distributed under the terms of Sections
|
|
||||||
1 and 2 above on a medium customarily used for software interchange; or,
|
|
||||||
|
|
||||||
b) Accompany it with a written offer, valid for at least three
|
|
||||||
years, to give any third party, for a charge no more than your
|
|
||||||
cost of physically performing source distribution, a complete
|
|
||||||
machine-readable copy of the corresponding source code, to be
|
|
||||||
distributed under the terms of Sections 1 and 2 above on a medium
|
|
||||||
customarily used for software interchange; or,
|
|
||||||
|
|
||||||
c) Accompany it with the information you received as to the offer
|
|
||||||
to distribute corresponding source code. (This alternative is
|
|
||||||
allowed only for noncommercial distribution and only if you
|
|
||||||
received the program in object code or executable form with such
|
|
||||||
an offer, in accord with Subsection b above.)
|
|
||||||
|
|
||||||
The source code for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For an executable work, complete source
|
|
||||||
code means all the source code for all modules it contains, plus any
|
|
||||||
associated interface definition files, plus the scripts used to
|
|
||||||
control compilation and installation of the executable. However, as a
|
|
||||||
special exception, the source code distributed need not include
|
|
||||||
anything that is normally distributed (in either source or binary
|
|
||||||
form) with the major components (compiler, kernel, and so on) of the
|
|
||||||
operating system on which the executable runs, unless that component
|
|
||||||
itself accompanies the executable.
|
|
||||||
|
|
||||||
If distribution of executable or object code is made by offering
|
|
||||||
access to copy from a designated place, then offering equivalent
|
|
||||||
access to copy the source code from the same place counts as
|
|
||||||
distribution of the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
|
||||||
except as expressly provided under this License. Any attempt
|
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
|
||||||
void, and will automatically terminate your rights under this License.
|
|
||||||
However, parties who have received copies, or rights, from you under
|
|
||||||
this License will not have their licenses terminated so long as such
|
|
||||||
parties remain in full compliance.
|
|
||||||
|
|
||||||
5. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Program or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Program (or any work based on the
|
|
||||||
Program), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Program or works based on it.
|
|
||||||
|
|
||||||
6. Each time you redistribute the Program (or any work based on the
|
|
||||||
Program), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute or modify the Program subject to
|
|
||||||
these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties to
|
|
||||||
this License.
|
|
||||||
|
|
||||||
7. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Program at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Program by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Program.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under
|
|
||||||
any particular circumstance, the balance of the section is intended to
|
|
||||||
apply and the section as a whole is intended to apply in other
|
|
||||||
circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system, which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Program under this License
|
|
||||||
may add an explicit geographical distribution limitation excluding
|
|
||||||
those countries, so that distribution is permitted only in or among
|
|
||||||
countries not thus excluded. In such case, this License incorporates
|
|
||||||
the limitation as if written in the body of this License.
|
|
||||||
|
|
||||||
9. The Free Software Foundation may publish revised and/or new versions
|
|
||||||
of the General Public License from time to time. Such new versions will
|
|
||||||
be similar in spirit to the present version, but may differ in detail to
|
|
||||||
address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Program
|
|
||||||
specifies a version number of this License which applies to it and "any
|
|
||||||
later version", you have the option of following the terms and conditions
|
|
||||||
either of that version or of any later version published by the Free
|
|
||||||
Software Foundation. If the Program does not specify a version number of
|
|
||||||
this License, you may choose any version ever published by the Free Software
|
|
||||||
Foundation.
|
|
||||||
|
|
||||||
10. If you wish to incorporate parts of the Program into other free
|
|
||||||
programs whose distribution conditions are different, write to the author
|
|
||||||
to ask for permission. For software which is copyrighted by the Free
|
|
||||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
|
||||||
make exceptions for this. Our decision will be guided by the two goals
|
|
||||||
of preserving the free status of all derivatives of our free software and
|
|
||||||
of promoting the sharing and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
|
||||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
|
||||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
|
||||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
|
||||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
|
||||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
|
||||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
|
||||||
REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
|
||||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
|
||||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
|
||||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
|
||||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
|
||||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|
||||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
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 2 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 General Public License along
|
|
||||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
|
||||||
when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) year name of author
|
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, the commands you use may
|
|
||||||
be called something other than `show w' and `show c'; they could even be
|
|
||||||
mouse-clicks or menu items--whatever suits your program.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
|
||||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1989
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
This General Public License does not permit incorporating your program into
|
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
|
||||||
consider it more useful to permit linking proprietary applications with the
|
|
||||||
library. If this is what you want to do, use the GNU Lesser General
|
|
||||||
Public License instead of this License.
|
|
|
@ -1,202 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2013 by Aurélien Gâteau <agateau@kde.org> *
|
|
||||||
* Copyright (C) 2013-2015 by Eike Hein <hein@kde.org> *
|
|
||||||
* Copyright (C) 2017 by Ivan Cukic <ivan.cukic@kde.org> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
.pragma library
|
|
||||||
|
|
||||||
function fillActionMenu(i18n, actionMenu, actionList, favoriteModel, favoriteId) {
|
|
||||||
// Accessing actionList can be a costly operation, so we don't
|
|
||||||
// access it until we need the menu.
|
|
||||||
|
|
||||||
var actions = createFavoriteActions(i18n, favoriteModel, favoriteId);
|
|
||||||
|
|
||||||
if (actions) {
|
|
||||||
if (actionList && actionList.length > 0) {
|
|
||||||
var separator = { "type": "separator" };
|
|
||||||
actionList.push(separator);
|
|
||||||
// actionList = actions.concat(actionList); // this crashes Qt O.o
|
|
||||||
actionList.push.apply(actionList, actions);
|
|
||||||
} else {
|
|
||||||
actionList = actions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
actionMenu.actionList = actionList;
|
|
||||||
}
|
|
||||||
|
|
||||||
function createFavoriteActions(i18n, favoriteModel, favoriteId) {
|
|
||||||
if (favoriteModel === null || !favoriteModel.enabled || favoriteId == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (favoriteModel.activities === undefined ||
|
|
||||||
favoriteModel.activities.runningActivities.length <= 1) {
|
|
||||||
var action = {};
|
|
||||||
|
|
||||||
if (favoriteModel.isFavorite(favoriteId)) {
|
|
||||||
action.text = i18n("Remove from Favorites");
|
|
||||||
action.icon = "bookmark-remove";
|
|
||||||
action.actionId = "_kicker_favorite_remove";
|
|
||||||
} else if (favoriteModel.maxFavorites == -1 || favoriteModel.count < favoriteModel.maxFavorites) {
|
|
||||||
action.text = i18n("Add to Favorites");
|
|
||||||
action.icon = "bookmark-new";
|
|
||||||
action.actionId = "_kicker_favorite_add";
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId };
|
|
||||||
|
|
||||||
return [action];
|
|
||||||
|
|
||||||
} else {
|
|
||||||
var actions = [];
|
|
||||||
|
|
||||||
var linkedActivities = favoriteModel.linkedActivitiesFor(favoriteId);
|
|
||||||
|
|
||||||
var activities = favoriteModel.activities.runningActivities;
|
|
||||||
|
|
||||||
// Adding the item to link/unlink to all activities
|
|
||||||
|
|
||||||
var linkedToAllActivities =
|
|
||||||
!(linkedActivities.indexOf(":global") === -1);
|
|
||||||
|
|
||||||
actions.push({
|
|
||||||
text : i18n("On All Activities"),
|
|
||||||
checkable : true,
|
|
||||||
|
|
||||||
actionId : linkedToAllActivities ?
|
|
||||||
"_kicker_favorite_remove_from_activity" :
|
|
||||||
"_kicker_favorite_set_to_activity",
|
|
||||||
checked : linkedToAllActivities,
|
|
||||||
|
|
||||||
actionArgument : {
|
|
||||||
favoriteModel: favoriteModel,
|
|
||||||
favoriteId: favoriteId,
|
|
||||||
favoriteActivity: ""
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// Adding items for each activity separately
|
|
||||||
|
|
||||||
var addActivityItem = function(activityId, activityName) {
|
|
||||||
var linkedToThisActivity =
|
|
||||||
!(linkedActivities.indexOf(activityId) === -1);
|
|
||||||
|
|
||||||
actions.push({
|
|
||||||
text : activityName,
|
|
||||||
checkable : true,
|
|
||||||
checked : linkedToThisActivity && !linkedToAllActivities,
|
|
||||||
|
|
||||||
actionId :
|
|
||||||
// If we are on all activities, and the user clicks just one
|
|
||||||
// specific activity, unlink from everything else
|
|
||||||
linkedToAllActivities ? "_kicker_favorite_set_to_activity" :
|
|
||||||
|
|
||||||
// If we are linked to the current activity, just unlink from
|
|
||||||
// that single one
|
|
||||||
linkedToThisActivity ? "_kicker_favorite_remove_from_activity" :
|
|
||||||
|
|
||||||
// Otherwise, link to this activity, but do not unlink from
|
|
||||||
// other ones
|
|
||||||
"_kicker_favorite_add_to_activity",
|
|
||||||
|
|
||||||
actionArgument : {
|
|
||||||
favoriteModel : favoriteModel,
|
|
||||||
favoriteId : favoriteId,
|
|
||||||
favoriteActivity : activityId
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Adding the item to link/unlink to the current activity
|
|
||||||
|
|
||||||
addActivityItem(favoriteModel.activities.currentActivity, i18n("On the Current Activity"));
|
|
||||||
|
|
||||||
actions.push({
|
|
||||||
type: "separator",
|
|
||||||
actionId: "_kicker_favorite_separator"
|
|
||||||
});
|
|
||||||
|
|
||||||
// Adding the items for each activity
|
|
||||||
|
|
||||||
activities.forEach(function(activityId) {
|
|
||||||
addActivityItem(activityId, favoriteModel.activityNameForId(activityId));
|
|
||||||
});
|
|
||||||
|
|
||||||
return [{
|
|
||||||
text : i18n("Show in Favorites"),
|
|
||||||
icon : "favorite",
|
|
||||||
subActions : actions
|
|
||||||
}];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function triggerAction(model, index, actionId, actionArgument) {
|
|
||||||
function startsWith(txt, needle) {
|
|
||||||
return txt.substr(0, needle.length) === needle;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (startsWith(actionId, "_kicker_favorite_")) {
|
|
||||||
handleFavoriteAction(actionId, actionArgument);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var closeRequested = model.trigger(index, actionId, actionArgument);
|
|
||||||
|
|
||||||
if (closeRequested) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function handleFavoriteAction(actionId, actionArgument) {
|
|
||||||
var favoriteId = actionArgument.favoriteId;
|
|
||||||
var favoriteModel = actionArgument.favoriteModel;
|
|
||||||
|
|
||||||
console.log(actionId);
|
|
||||||
|
|
||||||
if (favoriteModel === null || favoriteId == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (actionId == "_kicker_favorite_remove") {
|
|
||||||
console.log("Removing from all activities");
|
|
||||||
favoriteModel.removeFavorite(favoriteId);
|
|
||||||
} else if (actionId == "_kicker_favorite_add") {
|
|
||||||
console.log("Adding to global activity");
|
|
||||||
favoriteModel.addFavorite(favoriteId);
|
|
||||||
} else if (actionId == "_kicker_favorite_remove_from_activity") {
|
|
||||||
console.log("Removing from a specific activity");
|
|
||||||
favoriteModel.removeFavoriteFrom(favoriteId, actionArgument.favoriteActivity);
|
|
||||||
|
|
||||||
} else if (actionId == "_kicker_favorite_add_to_activity") {
|
|
||||||
console.log("Adding to another activity");
|
|
||||||
favoriteModel.addFavoriteTo(favoriteId, actionArgument.favoriteActivity);
|
|
||||||
|
|
||||||
} else if (actionId == "_kicker_favorite_set_to_activity") {
|
|
||||||
console.log("Removing the item from the favourites, and re-adding it just to be on a specific activity");
|
|
||||||
favoriteModel.setFavoriteOn(favoriteId, actionArgument.favoriteActivity);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,30 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2014 by Eike Hein <hein@kde.org> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.0
|
|
||||||
|
|
||||||
import org.kde.plasma.configuration 2.0
|
|
||||||
|
|
||||||
ConfigModel {
|
|
||||||
ConfigCategory {
|
|
||||||
name: i18n("General")
|
|
||||||
icon: "preferences-desktop-plasma"
|
|
||||||
source: "ConfigGeneral.qml"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
|
|
||||||
http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
|
|
||||||
<kcfgfile name=""/>
|
|
||||||
|
|
||||||
<group name="General">
|
|
||||||
<entry name="icon" type="String">
|
|
||||||
<label>The name of the icon to use for the compact representation (e.g. on a small panel).</label>
|
|
||||||
<default>start-here-kde</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="useCustomButtonImage" type="Bool">
|
|
||||||
<label>Whether to use a custom image instead of an icon in the compact representation (e.g. on a small panel).</label>
|
|
||||||
<default>false</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="customButtonImage" type="Url">
|
|
||||||
<label>The URL of the custtom image to use instead of an icon in the compact representation (e.g. on a small panel).</label>
|
|
||||||
<default></default>
|
|
||||||
</entry>
|
|
||||||
<entry name="activationIndicator" type="Bool">
|
|
||||||
<label>Shows an indicator underneath the launcher's icon when the launcher is opened.</label>
|
|
||||||
<default>true</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="indicatorColor" type="Color">
|
|
||||||
<label>Color of the indicator.</label>
|
|
||||||
<default>#2164C9</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="enableGreeting" type="Bool">
|
|
||||||
<label>Enable the greeting.</label>
|
|
||||||
<default>true</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="defaultPage" type="Int">
|
|
||||||
<label>Default Page</label>
|
|
||||||
<default>0</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="theming" type="Int">
|
|
||||||
<label>Theming</label>
|
|
||||||
<default>0</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="customGreeting" type="String">
|
|
||||||
<label>Custom greeting Text</label>
|
|
||||||
<default></default>
|
|
||||||
</entry>
|
|
||||||
<entry name="launcherPosition" type="Int">
|
|
||||||
<label>Where is the launcher supposed to open? 1: Auto (Bottom or Top panel) 2: Bottom or top center 3: Screen center</label>
|
|
||||||
<default>0</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="offsetX" type="Int">
|
|
||||||
<label>Offset when floating 0 = 0.25 * Panel height</label>
|
|
||||||
<default>0</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="offsetY" type="Int">
|
|
||||||
<label>Offset when floating 0 = 0.25 * Panel height</label>
|
|
||||||
<default>0</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="floating" type="Bool">
|
|
||||||
<label>Gives the launcher some breathing room.</label>
|
|
||||||
<default>false</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="enableGlow" type="Bool">
|
|
||||||
<label>Gives the launcher elements some glow.</label>
|
|
||||||
<default>false</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="glowColor" type="Int">
|
|
||||||
<label>Color of the glow</label>
|
|
||||||
<default>0</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="useExtraRunners" type="Bool">
|
|
||||||
<label>Whether to use additional KRunner plugins to produce results in the search.</label>
|
|
||||||
<default>true</default>
|
|
||||||
</entry>
|
|
||||||
<entry name="extraRunners" type="StringList">
|
|
||||||
<label>The plugin id's of additional KRunner plugins to use. Only used if useExtraRunners is true.</label>
|
|
||||||
<default>shell,bookmarks,baloosearch,locations</default>
|
|
||||||
</entry>
|
|
||||||
</group>
|
|
||||||
</kcfg>
|
|
|
@ -1,137 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2013 by Aurélien Gâteau <agateau@kde.org> *
|
|
||||||
* Copyright (C) 2014-2015 by Eike Hein <hein@kde.org> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.0
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
property QtObject menu
|
|
||||||
property Item visualParent
|
|
||||||
property variant actionList
|
|
||||||
property bool opened: menu ? (menu.status != PlasmaComponents.DialogStatus.Closed) : false
|
|
||||||
|
|
||||||
signal actionClicked(string actionId, variant actionArgument)
|
|
||||||
signal closed
|
|
||||||
|
|
||||||
onActionListChanged: refreshMenu();
|
|
||||||
|
|
||||||
onOpenedChanged: {
|
|
||||||
if (!opened) {
|
|
||||||
closed();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function open(x, y) {
|
|
||||||
if (!actionList) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x && y) {
|
|
||||||
menu.open(x, y);
|
|
||||||
} else {
|
|
||||||
menu.open();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshMenu() {
|
|
||||||
if (menu) {
|
|
||||||
menu.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!actionList) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
menu = contextMenuComponent.createObject(root);
|
|
||||||
|
|
||||||
fillMenu(menu, actionList);
|
|
||||||
}
|
|
||||||
|
|
||||||
function fillMenu(menu, items) {
|
|
||||||
items.forEach(function (actionItem) {
|
|
||||||
if (actionItem.subActions) {
|
|
||||||
// This is a menu
|
|
||||||
var submenuItem = contextSubmenuItemComponent.createObject(
|
|
||||||
menu, { "actionItem": actionItem });
|
|
||||||
|
|
||||||
fillMenu(submenuItem.submenu, actionItem.subActions);
|
|
||||||
|
|
||||||
} else {
|
|
||||||
var item = contextMenuItemComponent.createObject(
|
|
||||||
menu,
|
|
||||||
{
|
|
||||||
"actionItem": actionItem,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: contextMenuComponent
|
|
||||||
|
|
||||||
PlasmaComponents.ContextMenu {
|
|
||||||
visualParent: root.visualParent
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: contextSubmenuItemComponent
|
|
||||||
|
|
||||||
PlasmaComponents.MenuItem {
|
|
||||||
id: submenuItem
|
|
||||||
|
|
||||||
property variant actionItem
|
|
||||||
|
|
||||||
text: actionItem.text ? actionItem.text : ""
|
|
||||||
icon: actionItem.icon ? actionItem.icon : null
|
|
||||||
|
|
||||||
property variant submenu: submenu_
|
|
||||||
|
|
||||||
PlasmaComponents.ContextMenu {
|
|
||||||
id: submenu_
|
|
||||||
visualParent: submenuItem.action
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: contextMenuItemComponent
|
|
||||||
|
|
||||||
PlasmaComponents.MenuItem {
|
|
||||||
property variant actionItem
|
|
||||||
|
|
||||||
text: actionItem.text ? actionItem.text : ""
|
|
||||||
enabled: actionItem.type != "title" && ("enabled" in actionItem ? actionItem.enabled : true)
|
|
||||||
separator: actionItem.type == "separator"
|
|
||||||
section: actionItem.type == "title"
|
|
||||||
icon: actionItem.icon ? actionItem.icon : null
|
|
||||||
checkable: actionItem.checkable ? actionItem.checkable : false
|
|
||||||
checked: actionItem.checked ? actionItem.checked : false
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
actionClicked(actionItem.actionId, actionItem.actionArgument);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,373 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls 2.15
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
|
|
||||||
ScrollView {
|
|
||||||
id: scrollView
|
|
||||||
|
|
||||||
anchors {
|
|
||||||
top: parent.top
|
|
||||||
}
|
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
|
|
||||||
contentWidth: - 1 //no horizontal scrolling
|
|
||||||
|
|
||||||
property bool grabFocus: false
|
|
||||||
property bool showDescriptions: false
|
|
||||||
property int iconSize: units.iconSizes.medium
|
|
||||||
|
|
||||||
property var pinnedModel: [globalFavorites, rootModel.modelForRow(0), rootModel.modelForRow(1)]
|
|
||||||
property var allAppsModel: [rootModel.modelForRow(2)]
|
|
||||||
|
|
||||||
property var currentStateIndex: plasmoid.configuration.defaultPage
|
|
||||||
|
|
||||||
property bool hasListener: false
|
|
||||||
property bool isRight: true
|
|
||||||
|
|
||||||
property var scrollpositon: 0.0
|
|
||||||
property var scrollheight: 0.0
|
|
||||||
|
|
||||||
function updateModels() {
|
|
||||||
item.pinnedModel = [globalFavorites, rootModel.modelForRow(0), rootModel.modelForRow(1)]
|
|
||||||
item.allAppsModel = [rootModel.modelForRow(2)]
|
|
||||||
}
|
|
||||||
|
|
||||||
function reset(){
|
|
||||||
ScrollBar.vertical.position = 0
|
|
||||||
sortingImage.state = sortingImage.states[plasmoid.configuration.defaultPage].name
|
|
||||||
currentStateIndex = plasmoid.configuration.defaultPage
|
|
||||||
}
|
|
||||||
function get_position(){
|
|
||||||
return ScrollBar.vertical.position;
|
|
||||||
}
|
|
||||||
function get_size(){
|
|
||||||
return ScrollBar.vertical.size;
|
|
||||||
}
|
|
||||||
Connections {
|
|
||||||
target: root
|
|
||||||
function onVisibleChanged() {
|
|
||||||
sortingImage.state = sortingImage.states[plasmoid.configuration.defaultPage].name
|
|
||||||
currentStateIndex = plasmoid.configuration.defaultPage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onContentHeightChanged: {
|
|
||||||
ScrollBar.vertical.position = scrollpositon * scrollheight / scrollView.contentHeight
|
|
||||||
}
|
|
||||||
Column {
|
|
||||||
id: column
|
|
||||||
width: parent.width
|
|
||||||
onPositioningComplete: {
|
|
||||||
scrollView.contentHeight = height
|
|
||||||
if (height < backdrop.height) {
|
|
||||||
scrollView.contentHeight = backdrop.height + 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Flow { //Favorites
|
|
||||||
id: flow
|
|
||||||
width: scrollView.width - 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
spacing: 12
|
|
||||||
leftPadding: 20
|
|
||||||
visible: !main.showAllApps
|
|
||||||
Repeater {
|
|
||||||
model: pinnedModel[0]
|
|
||||||
delegate:
|
|
||||||
FavoriteItem {
|
|
||||||
id: favitem
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: sortingImage
|
|
||||||
width: 15 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: width
|
|
||||||
visible: main.showAllApps
|
|
||||||
//I don't like it this way but I have to assign custom images anyways, so it's not too bad... right?
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "all";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("All")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/file-text.svg'}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "dev";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Developement")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/code.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(3)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "games";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Games")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/lucide/gamepad-2.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(4)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "graphics";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Graphics")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/image.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(5)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "internet";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Internet")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/globe.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(6)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "multimedia";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Multimedia")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/lucide/film.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(8)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "office";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Office")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/lucide/paperclip.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(9)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "science";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Science & Math")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/lucide/flask-conical.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(10)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "settings";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Settings")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/settings.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(11)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "system";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("System")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/lucide/cpu.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(12)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "utilities";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Utilities")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/tool.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(13)}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "lost";
|
|
||||||
PropertyChanges { target: sortingLabel; text: i18n("Lost & Found")}
|
|
||||||
PropertyChanges { target: sortingImage; source: 'icons/feather/trash-2.svg'}
|
|
||||||
PropertyChanges { target: (currentStateIndex % 2 == 0 ? categoriesRepeater : categoriesRepeater2); model: rootModel.modelForRow(7)}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: sortingLabel
|
|
||||||
x: parent.width + 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
text: i18n("All")
|
|
||||||
color: main.textColor
|
|
||||||
font.family: main.textFont
|
|
||||||
font.pixelSize: 12 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
id: mouseArea
|
|
||||||
width: parent.width + sortingLabel.width + 5 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: parent.height
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
hoverEnabled: true
|
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
|
|
||||||
onClicked: {
|
|
||||||
if (mouse.button == Qt.LeftButton) {
|
|
||||||
isRight = false
|
|
||||||
currentStateIndex += 1
|
|
||||||
} else if (mouse.button == Qt.RightButton) {
|
|
||||||
isRight = true
|
|
||||||
currentStateIndex -= 1
|
|
||||||
} else if (mouse.button == Qt.MiddleButton) {
|
|
||||||
isRight = false
|
|
||||||
currentStateIndex = plasmoid.configuration.defaultPage
|
|
||||||
}
|
|
||||||
if (currentStateIndex > sortingImage.states.length - 1) {
|
|
||||||
currentStateIndex = 0
|
|
||||||
} else if (currentStateIndex < 0) {
|
|
||||||
currentStateIndex = sortingImage.states.length - 1
|
|
||||||
}
|
|
||||||
sortingImage.state = sortingImage.states[currentStateIndex].name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ColorOverlay {
|
|
||||||
visible: plasmoid.configuration.theming != 0
|
|
||||||
anchors.fill: sortingImage
|
|
||||||
source: sortingImage
|
|
||||||
color: main.textColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item { //Spacer
|
|
||||||
id: spacer
|
|
||||||
width: 1
|
|
||||||
height: 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
}
|
|
||||||
|
|
||||||
Grid {
|
|
||||||
id: allAppsGrid
|
|
||||||
x: - 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
columns: 1
|
|
||||||
width: scrollView.width - 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
visible: opacity > 0 && main.showAllApps
|
|
||||||
Repeater {
|
|
||||||
id: allAppsRepeater
|
|
||||||
model: allAppsModel[0]
|
|
||||||
Repeater {
|
|
||||||
id: repeater2
|
|
||||||
model: allAppsRepeater.model.modelForRow(index)
|
|
||||||
GenericItem {
|
|
||||||
id: genericItem
|
|
||||||
triggerModel: repeater2.model
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "hidden"; when: (sortingImage.state != 'all')
|
|
||||||
PropertyChanges { target: allAppsGrid; opacity: 0.0 }
|
|
||||||
PropertyChanges { target: allAppsGrid; x: (!isRight ? -20 * PlasmaCore.Units.devicePixelRatio : 0) }
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "shown"; when: (sortingImage.state == 'all')
|
|
||||||
PropertyChanges { target: allAppsGrid; opacity: 1.0 }
|
|
||||||
PropertyChanges { target: allAppsGrid; x: -10 }
|
|
||||||
}]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
to: "hidden"
|
|
||||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing: Easing.InQuart}
|
|
||||||
PropertyAnimation { properties: 'x'; from: -10 * PlasmaCore.Units.devicePixelRatio; duration: 80;easing: Easing.InQuart}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
to: "shown"
|
|
||||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing: Easing.InQuart}
|
|
||||||
PropertyAnimation { properties: 'x'; from: (isRight ? -20 * PlasmaCore.Units.devicePixelRatio : 0); duration: 80; easing: Easing.InQuart}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
onStateChanged: {
|
|
||||||
if (state == 'hidden') {
|
|
||||||
scrollpositon = scrollView.ScrollBar.vertical.position
|
|
||||||
scrollheight = scrollView.contentHeight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Grid { //Categories
|
|
||||||
id: appCategories
|
|
||||||
columns: 1
|
|
||||||
width: scrollView.width - 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
visible: opacity > 0 && main.showAllApps
|
|
||||||
Repeater {
|
|
||||||
id: categoriesRepeater
|
|
||||||
delegate:
|
|
||||||
GenericItem {
|
|
||||||
id: genericItemCat
|
|
||||||
triggerModel: categoriesRepeater.model
|
|
||||||
}
|
|
||||||
}
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "hidden"; when: (currentStateIndex % 2 === 1)
|
|
||||||
PropertyChanges { target: appCategories; opacity: 0.0 }
|
|
||||||
PropertyChanges { target: appCategories; x: (isRight ? -20 * PlasmaCore.Units.devicePixelRatio : 0) }
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "shown"; when: (currentStateIndex % 2 === 0)
|
|
||||||
PropertyChanges { target: appCategories; opacity: 1.0 }
|
|
||||||
PropertyChanges { target: appCategories; x: -10 * PlasmaCore.Units.devicePixelRatio }
|
|
||||||
}]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
to: "hidden"
|
|
||||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing: Easing.InQuart}
|
|
||||||
PropertyAnimation { properties: 'x'; from: -10 * PlasmaCore.Units.devicePixelRatio; duration: 80; easing: Easing.InQuart}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
to: "shown"
|
|
||||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing: Easing.InQuart}
|
|
||||||
PropertyAnimation { properties: 'x'; from: (isRight ? -20 * PlasmaCore.Units.devicePixelRatio : 0); duration: 80; easing: Easing.InQuart}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
onStateChanged: {
|
|
||||||
if (state == 'hidden') {
|
|
||||||
scrollpositon = scrollView.ScrollBar.vertical.position
|
|
||||||
scrollheight = scrollView.contentHeight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Grid { //Categories
|
|
||||||
id: appCategories2
|
|
||||||
columns: 1
|
|
||||||
width: scrollView.width - 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
visible: opacity > 0 && main.showAllApps
|
|
||||||
Repeater {
|
|
||||||
id: categoriesRepeater2
|
|
||||||
delegate:
|
|
||||||
GenericItem {
|
|
||||||
id: genericItemCat2
|
|
||||||
triggerModel: categoriesRepeater2.model
|
|
||||||
}
|
|
||||||
}
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "hidden"; when: (currentStateIndex % 2 === 0)
|
|
||||||
PropertyChanges { target: appCategories2; opacity: 0.0 }
|
|
||||||
PropertyChanges { target: appCategories2; x: (isRight ? -20 * PlasmaCore.Units.devicePixelRatio : 0) }
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "shown"; when: (currentStateIndex % 2 === 1)
|
|
||||||
PropertyChanges { target: appCategories2; opacity: 1.0 }
|
|
||||||
PropertyChanges { target: appCategories2; x: -10 * PlasmaCore.Units.devicePixelRatio}
|
|
||||||
}]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
to: "hidden"
|
|
||||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing: Easing.InQuart}
|
|
||||||
PropertyAnimation { properties: 'x'; from: -10 * PlasmaCore.Units.devicePixelRatio; duration: 80; easing: Easing.InQuart}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
to: "shown"
|
|
||||||
PropertyAnimation { properties: 'opacity'; duration: 80; easing: Easing.InQuart}
|
|
||||||
PropertyAnimation { properties: 'x'; from: (isRight ? -20 * PlasmaCore.Units.devicePixelRatio : 0);duration: 80; easing: Easing.InQuart}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
onStateChanged: {
|
|
||||||
if (state == 'hidden') {
|
|
||||||
scrollpositon = scrollView.ScrollBar.vertical.position
|
|
||||||
scrollheight = scrollView.contentHeight
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Item { //Spacer
|
|
||||||
width: 1
|
|
||||||
height: 20 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,101 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2013-2014 by Eike Hein <hein@kde.org> *
|
|
||||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Layouts 1.12
|
|
||||||
|
|
||||||
import org.kde.plasma.plasmoid 2.0
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
property QtObject dashWindow: null
|
|
||||||
readonly property bool useCustomButtonImage: (plasmoid.configuration.useCustomButtonImage && plasmoid.configuration.customButtonImage.length != 0)
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
id: buttonIcon
|
|
||||||
|
|
||||||
width: plasmoid.configuration.activationIndicator ? parent.width * 0.65 : parent.width
|
|
||||||
height: plasmoid.configuration.activationIndicator ? parent.height * 0.65 : parent.height
|
|
||||||
anchors.centerIn: parent
|
|
||||||
|
|
||||||
source: useCustomButtonImage ? plasmoid.configuration.customButtonImage : plasmoid.configuration.icon
|
|
||||||
|
|
||||||
active: mouseArea.containsMouse
|
|
||||||
|
|
||||||
smooth: true
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: indicator
|
|
||||||
width: 0
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
height: 3 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
radius: 10
|
|
||||||
y: parent.height + height
|
|
||||||
color: plasmoid.configuration.indicatorColor
|
|
||||||
visible: plasmoid.configuration.activationIndicator
|
|
||||||
|
|
||||||
states: [
|
|
||||||
State { name: "inactive"
|
|
||||||
when: !dashWindow.visible
|
|
||||||
PropertyChanges {
|
|
||||||
target: indicator
|
|
||||||
width: 0
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
|
||||||
State { name: "active"
|
|
||||||
when: dashWindow.visible
|
|
||||||
PropertyChanges {
|
|
||||||
target: indicator
|
|
||||||
width: parent.width * 0.65
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
NumberAnimation { properties: 'width'; duration: 60}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea
|
|
||||||
{
|
|
||||||
id: mouseArea
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
hoverEnabled: true
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
dashWindow.visible = !dashWindow.visible;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
dashWindow = Qt.createQmlObject("MenuRepresentation {}", root);
|
|
||||||
plasmoid.activated.connect(function() {
|
|
||||||
dashWindow.visible = !dashWindow.visible;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,322 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2013-2014 by Eike Hein <hein@kde.org> *
|
|
||||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Controls 2.5
|
|
||||||
import QtQuick.Dialogs 1.0
|
|
||||||
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
|
|
||||||
import org.kde.draganddrop 2.0 as DragDrop
|
|
||||||
import org.kde.kirigami 2.3 as Kirigami
|
|
||||||
|
|
||||||
import org.kde.plasma.private.kicker 0.1 as Kicker
|
|
||||||
|
|
||||||
Kirigami.FormLayout {
|
|
||||||
id: configGeneral
|
|
||||||
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
property bool isDash: (plasmoid.pluginName === "org.kde.plasma.kickerdash")
|
|
||||||
|
|
||||||
property string cfg_icon: plasmoid.configuration.icon
|
|
||||||
property bool cfg_useCustomButtonImage: plasmoid.configuration.useCustomButtonImage
|
|
||||||
property string cfg_customButtonImage: plasmoid.configuration.customButtonImage
|
|
||||||
property bool cfg_activationIndicator: plasmoid.configuration.activationIndicator
|
|
||||||
property color cfg_indicatorColor: plasmoid.configuration.indicatorColor
|
|
||||||
property bool cfg_enableGreeting: plasmoid.configuration.indicatorColor
|
|
||||||
property alias cfg_defaultPage: defaultPage.currentIndex
|
|
||||||
property alias cfg_theming: theming.currentIndex
|
|
||||||
property alias cfg_useExtraRunners: useExtraRunners.checked
|
|
||||||
property alias cfg_customGreeting: customGreeting.text
|
|
||||||
property alias cfg_floating: floating.checked
|
|
||||||
property alias cfg_launcherPosition: launcherPosition.currentIndex
|
|
||||||
property alias cfg_offsetX: screenOffset.value
|
|
||||||
property alias cfg_offsetY: panelOffset.value
|
|
||||||
|
|
||||||
property alias cfg_enableGlow: enableGlowCheck.checked
|
|
||||||
property alias cfg_glowColor: glowColor.currentIndex
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: iconButton
|
|
||||||
|
|
||||||
Kirigami.FormData.label: i18n("Icon:")
|
|
||||||
|
|
||||||
implicitWidth: previewFrame.width + units.smallSpacing * 2
|
|
||||||
implicitHeight: previewFrame.height + units.smallSpacing * 2
|
|
||||||
|
|
||||||
// Just to provide some visual feedback when dragging;
|
|
||||||
// cannot have checked without checkable enabled
|
|
||||||
checkable: true
|
|
||||||
checked: dropArea.containsAcceptableDrag
|
|
||||||
|
|
||||||
onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open()
|
|
||||||
|
|
||||||
DragDrop.DropArea {
|
|
||||||
id: dropArea
|
|
||||||
|
|
||||||
property bool containsAcceptableDrag: false
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
onDragEnter: {
|
|
||||||
// Cannot use string operations (e.g. indexOf()) on "url" basic type.
|
|
||||||
var urlString = event.mimeData.url.toString();
|
|
||||||
|
|
||||||
// This list is also hardcoded in KIconDialog.
|
|
||||||
var extensions = [".png", ".xpm", ".svg", ".svgz"];
|
|
||||||
containsAcceptableDrag = urlString.indexOf("file:///") === 0 && extensions.some(function (extension) {
|
|
||||||
return urlString.indexOf(extension) === urlString.length - extension.length; // "endsWith"
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!containsAcceptableDrag) {
|
|
||||||
event.ignore();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onDragLeave: containsAcceptableDrag = false
|
|
||||||
|
|
||||||
onDrop: {
|
|
||||||
if (containsAcceptableDrag) {
|
|
||||||
// Strip file:// prefix, we already verified in onDragEnter that we have only local URLs.
|
|
||||||
iconDialog.setCustomButtonImage(event.mimeData.url.toString().substr("file://".length));
|
|
||||||
}
|
|
||||||
containsAcceptableDrag = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
KQuickAddons.IconDialog {
|
|
||||||
id: iconDialog
|
|
||||||
|
|
||||||
function setCustomButtonImage(image) {
|
|
||||||
cfg_customButtonImage = image || cfg_icon || "start-here-kde"
|
|
||||||
cfg_useCustomButtonImage = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
onIconNameChanged: setCustomButtonImage(iconName);
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.FrameSvgItem {
|
|
||||||
id: previewFrame
|
|
||||||
anchors.centerIn: parent
|
|
||||||
imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal
|
|
||||||
? "widgets/panel-background" : "widgets/background"
|
|
||||||
width: units.iconSizes.large + fixedMargins.left + fixedMargins.right
|
|
||||||
height: units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
width: units.iconSizes.large
|
|
||||||
height: width
|
|
||||||
source: cfg_useCustomButtonImage ? cfg_customButtonImage : cfg_icon
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Menu {
|
|
||||||
id: iconMenu
|
|
||||||
|
|
||||||
// Appear below the button
|
|
||||||
y: +parent.height
|
|
||||||
|
|
||||||
onClosed: iconButton.checked = false;
|
|
||||||
|
|
||||||
MenuItem {
|
|
||||||
text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...")
|
|
||||||
icon.name: "document-open-folder"
|
|
||||||
onClicked: iconDialog.open()
|
|
||||||
}
|
|
||||||
MenuItem {
|
|
||||||
text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
|
|
||||||
icon.name: "edit-clear"
|
|
||||||
onClicked: {
|
|
||||||
cfg_icon = "start-here-kde"
|
|
||||||
cfg_useCustomButtonImage = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
id: activationIndicatorCheck
|
|
||||||
Kirigami.FormData.label: i18n("Indicator:")
|
|
||||||
text: i18n("Enabled")
|
|
||||||
checked: plasmoid.configuration.activationIndicator
|
|
||||||
onCheckedChanged: {
|
|
||||||
plasmoid.configuration.activationIndicator = checked
|
|
||||||
cfg_activationIndicator = checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Button {
|
|
||||||
id: colorButton
|
|
||||||
width: units.iconSizes.small
|
|
||||||
height: width
|
|
||||||
Kirigami.FormData.label: i18n("Indicator Color:")
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
anchors.fill: parent
|
|
||||||
radius: 10
|
|
||||||
color: cfg_indicatorColor
|
|
||||||
}
|
|
||||||
onPressed: colorDialog.visible ? colorDialog.close() : colorDialog.open()
|
|
||||||
ColorDialog {
|
|
||||||
id: colorDialog
|
|
||||||
title: i18n("Please choose a color")
|
|
||||||
onAccepted: {
|
|
||||||
cfg_indicatorColor = colorDialog.color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Kirigami.FormData.isSection: true
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
id: enableGreetingCheck
|
|
||||||
Kirigami.FormData.label: i18n("Greeting:")
|
|
||||||
text: i18n("Enabled")
|
|
||||||
checked: plasmoid.configuration.enableGreeting
|
|
||||||
onCheckedChanged: {
|
|
||||||
plasmoid.configuration.enableGreeting = checked
|
|
||||||
cfg_enableGreeting = checked
|
|
||||||
customGreeting.enabled = checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: customGreeting
|
|
||||||
Kirigami.FormData.label: i18n("Custom Greeting Text:")
|
|
||||||
placeholderText: i18n("No custom greeting set")
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Kirigami.FormData.isSection: true
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
id: enableGlowCheck
|
|
||||||
Kirigami.FormData.label: i18n("Glow")
|
|
||||||
text: i18n("Enabled")
|
|
||||||
checked: plasmoid.configuration.enableGlow
|
|
||||||
onCheckedChanged: {
|
|
||||||
plasmoid.configuration.enableGlow = checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ComboBox {
|
|
||||||
id: glowColor
|
|
||||||
Kirigami.FormData.label: i18n("Glow color:")
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
model: [
|
|
||||||
i18n("Purple (Default)"),
|
|
||||||
i18n("Blue"),
|
|
||||||
i18n("Red"),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Kirigami.FormData.isSection: true
|
|
||||||
}
|
|
||||||
ComboBox {
|
|
||||||
id: launcherPosition
|
|
||||||
Kirigami.FormData.label: i18n("Launcher Positioning:")
|
|
||||||
model: [
|
|
||||||
i18n("Default"),
|
|
||||||
i18n("Horizontal Center"),
|
|
||||||
i18n("Screen Center"),
|
|
||||||
]
|
|
||||||
onCurrentIndexChanged: {
|
|
||||||
if (currentIndex == 2) {
|
|
||||||
floating.enabled = false
|
|
||||||
floating.checked = true
|
|
||||||
} else {
|
|
||||||
floating.enabled = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
id: floating
|
|
||||||
text: i18n("Floating")
|
|
||||||
onCheckedChanged: {
|
|
||||||
screenOffset.visible = checked
|
|
||||||
panelOffset.visible = checked
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Slider {
|
|
||||||
id: screenOffset
|
|
||||||
visible: plasmoid.configuration.floating
|
|
||||||
Kirigami.FormData.label: i18n("Offset Screen Edge (0 is Default):")
|
|
||||||
from: 0
|
|
||||||
value: 0
|
|
||||||
to: 100
|
|
||||||
stepSize: 1
|
|
||||||
PlasmaComponents.ToolTip {
|
|
||||||
text: screenOffset.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Slider {
|
|
||||||
id: panelOffset
|
|
||||||
visible: plasmoid.configuration.floating
|
|
||||||
Kirigami.FormData.label: i18n("Offset Panel (0 is Default):")
|
|
||||||
from: 0
|
|
||||||
value: 0
|
|
||||||
to: 100
|
|
||||||
stepSize: 1
|
|
||||||
PlasmaComponents.ToolTip {
|
|
||||||
text: panelOffset.value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Kirigami.FormData.isSection: true
|
|
||||||
}
|
|
||||||
ComboBox {
|
|
||||||
id: defaultPage
|
|
||||||
Kirigami.FormData.label: i18n("Default Page:")
|
|
||||||
model: [
|
|
||||||
i18n("All Applications (Default)"),
|
|
||||||
i18n("Developement"),
|
|
||||||
i18n("Games"),
|
|
||||||
i18n("Graphics"),
|
|
||||||
i18n("Internet"),
|
|
||||||
i18n("Multimedia"),
|
|
||||||
i18n("Office"),
|
|
||||||
i18n("Science & Math"),
|
|
||||||
i18n("Settings"),
|
|
||||||
i18n("System"),
|
|
||||||
i18n("Utilities"),
|
|
||||||
i18n("Lost & Found"),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Kirigami.FormData.isSection: true
|
|
||||||
}
|
|
||||||
CheckBox {
|
|
||||||
id: useExtraRunners
|
|
||||||
Kirigami.FormData.label: i18n("Search:")
|
|
||||||
text: i18n("Expand search to bookmarks, files and emails")
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
Kirigami.FormData.isSection: true
|
|
||||||
}
|
|
||||||
ComboBox {
|
|
||||||
id: theming
|
|
||||||
Kirigami.FormData.label: i18n("Theming:")
|
|
||||||
model: [
|
|
||||||
i18n("Dark (Default)"),
|
|
||||||
i18n("Light"),
|
|
||||||
i18n("Matching"),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,211 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Layouts 1.12
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.plasmoid 2.0
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.kcoreaddons 1.0 as KCoreAddons
|
|
||||||
import org.kde.kirigami 2.13 as Kirigami
|
|
||||||
import QtQuick.Controls 2.15
|
|
||||||
|
|
||||||
import "../code/tools.js" as Tools
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: favItem
|
|
||||||
|
|
||||||
property int iconSize: units.gridUnit * 3.2
|
|
||||||
|
|
||||||
width: Math.max(iconSize + units.largeSpacing * 2, appname.contentWidth) + 10
|
|
||||||
height: iconSize + units.smallSpacing + appname.implicitHeight + 10
|
|
||||||
|
|
||||||
signal itemActivated(int index, string actionId, string argument)
|
|
||||||
|
|
||||||
property bool highlighted: false
|
|
||||||
property bool isDraging: false
|
|
||||||
|
|
||||||
property bool hasActionList: ((model.favoriteId !== null)
|
|
||||||
|| (("hasActionList" in model) && (model.hasActionList === true)))
|
|
||||||
|
|
||||||
|
|
||||||
function openActionMenu(x, y) {
|
|
||||||
var actionList = hasActionList ? model.actionList : [];
|
|
||||||
console.log(model.favoriteId)
|
|
||||||
Tools.fillActionMenu(i18n, actionMenu, actionList, globalFavorites, model.favoriteId);
|
|
||||||
actionMenu.visualParent = favItem;
|
|
||||||
actionMenu.open(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
function actionTriggered(actionId, actionArgument) {
|
|
||||||
var close = (Tools.triggerAction(kicker.globalFavorites, index, actionId, actionArgument) === true);
|
|
||||||
if (close) {
|
|
||||||
root.toggle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
id: appicon
|
|
||||||
anchors {
|
|
||||||
top: parent.top
|
|
||||||
horizontalCenter: parent.horizontalCenter
|
|
||||||
}
|
|
||||||
width: iconSize
|
|
||||||
height: iconSize
|
|
||||||
source: model.decoration
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: appname
|
|
||||||
text: ("name" in model ? model.name : model.display)
|
|
||||||
font.family: main.textFont
|
|
||||||
font.pixelSize: 14 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
anchors {
|
|
||||||
top: appicon.bottom
|
|
||||||
topMargin: units.smallSpacing
|
|
||||||
left: parent.left
|
|
||||||
right: parent.right
|
|
||||||
}
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignTop
|
|
||||||
wrapMode: Text.WordWrap
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: rect
|
|
||||||
z: -20
|
|
||||||
visible: !plasmoid.configuration.enableGlow
|
|
||||||
height: parent.height
|
|
||||||
width: parent.width
|
|
||||||
anchors.centerIn: parent
|
|
||||||
radius: 8
|
|
||||||
|
|
||||||
color: PlasmaCore.Theme.highlightColor
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "highlight"; when: (highlighted)
|
|
||||||
PropertyChanges { target: rect; opacity: 0.3}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "default"; when: (!highlighted)
|
|
||||||
PropertyChanges { target: rect; opacity: 0}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
transitions: highlight
|
|
||||||
}
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
id:appIconGlow
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
anchors.fill: appicon
|
|
||||||
cached: true
|
|
||||||
horizontalOffset: 0
|
|
||||||
verticalOffset: 0
|
|
||||||
radius: 15.0
|
|
||||||
samples: 16
|
|
||||||
color: main.glowColor1
|
|
||||||
source: appicon
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "highlight"; when: (highlighted)
|
|
||||||
PropertyChanges { target: appIconGlow; opacity: 1}
|
|
||||||
PropertyChanges { target: appNameGlow; opacity: 1}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "default"; when: (!highlighted)
|
|
||||||
PropertyChanges { target: appIconGlow; opacity: 0}
|
|
||||||
PropertyChanges { target: appNameGlow; opacity: 0}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
transitions: highlight
|
|
||||||
}
|
|
||||||
|
|
||||||
DropShadow {
|
|
||||||
id: appNameGlow
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
anchors.fill: appname
|
|
||||||
cached: true
|
|
||||||
horizontalOffset: 0
|
|
||||||
verticalOffset: 0
|
|
||||||
radius: 15.0
|
|
||||||
samples: 16
|
|
||||||
color: main.glowColor1
|
|
||||||
source: appname
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: ma
|
|
||||||
anchors.fill: parent
|
|
||||||
z: parent.z + 1
|
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
hoverEnabled: true
|
|
||||||
onClicked: {
|
|
||||||
if (!isDraging) {
|
|
||||||
if (mouse.button == Qt.RightButton ) {
|
|
||||||
if (favItem.hasActionList) {
|
|
||||||
var mapped = mapToItem(favItem, mouse.x, mouse.y);
|
|
||||||
openActionMenu(mapped.x, mapped.y);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
kicker.globalFavorites.trigger(index, "", null);
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onReleased: {
|
|
||||||
isDraging: false
|
|
||||||
}
|
|
||||||
onEntered: {
|
|
||||||
if(plasmoid.configuration.enableGlow) {
|
|
||||||
appIconGlow.state = "highlight"
|
|
||||||
} else { rect.state = "highlight" }
|
|
||||||
|
|
||||||
}
|
|
||||||
onExited: {
|
|
||||||
if(plasmoid.configuration.enableGlow) {
|
|
||||||
appIconGlow.state = "default"
|
|
||||||
} else { rect.state = "default" }
|
|
||||||
}
|
|
||||||
onPositionChanged: {
|
|
||||||
isDraging = pressed
|
|
||||||
if (pressed){
|
|
||||||
if ("pluginName" in model) {
|
|
||||||
dragHelper.startDrag(kicker, model.url, model.decoration,
|
|
||||||
"text/x-plasmoidservicename", model.pluginName);
|
|
||||||
} else {
|
|
||||||
dragHelper.startDrag(kicker, model.url, model.decoration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ActionMenu {
|
|
||||||
id: actionMenu
|
|
||||||
|
|
||||||
onActionClicked: {
|
|
||||||
visualParent.actionTriggered(actionId, actionArgument);
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Transition {
|
|
||||||
id: highlight
|
|
||||||
ColorAnimation {duration: 100 }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,99 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.kirigami 2.13 as Kirigami
|
|
||||||
import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
|
|
||||||
|
|
||||||
PlasmaCore.Dialog { //cosmic background noise is less random than the placement of this dialog
|
|
||||||
id: avatarContainer
|
|
||||||
|
|
||||||
property int avatarWidth
|
|
||||||
property bool isTop: false
|
|
||||||
|
|
||||||
readonly property color borderGradientColor1: plasmoid.configuration.glowColor == 0 ? "#FEAC5E" :
|
|
||||||
plasmoid.configuration.glowColor == 1 ? "#a5fecb" :
|
|
||||||
"#ff005d"
|
|
||||||
readonly property color borderGradientColor2: plasmoid.configuration.glowColor == 0 ? "#C779D0" :
|
|
||||||
plasmoid.configuration.glowColor == 1 ? "#20bdff" :
|
|
||||||
"#ff005c"
|
|
||||||
readonly property color borderGradientColor3: plasmoid.configuration.glowColor == 0 ? "#4BC0C8" :
|
|
||||||
plasmoid.configuration.glowColor == 1 ? "#5433ff" :
|
|
||||||
"#ff8b26"
|
|
||||||
|
|
||||||
type: "Notification"
|
|
||||||
|
|
||||||
x: root.x + root.width / 2 - width / 2
|
|
||||||
y: root.y - width / 2 //you can't even add 1 without everything breaking wtf
|
|
||||||
|
|
||||||
mainItem:
|
|
||||||
Item {
|
|
||||||
onParentChanged: {
|
|
||||||
//This removes the dialog background
|
|
||||||
if (parent){
|
|
||||||
var popupWindow = Window.window
|
|
||||||
if (typeof popupWindow.backgroundHints !== "undefined"){
|
|
||||||
popupWindow.backgroundHints = PlasmaCore.Types.NoBackground
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
id: avatarFrame
|
|
||||||
anchors.centerIn: parent
|
|
||||||
width: avatarWidth
|
|
||||||
height: avatarWidth
|
|
||||||
Kirigami.Avatar {
|
|
||||||
id: mainFaceIcon
|
|
||||||
source: kuser.faceIconUrl
|
|
||||||
anchors {
|
|
||||||
fill: parent
|
|
||||||
margins: PlasmaCore.Units.smallSpacing
|
|
||||||
}
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
hoverEnabled: false
|
|
||||||
onClicked: {
|
|
||||||
KQuickAddons.KCMShell.openSystemSettings("kcm_users")
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
anchors.centerIn: mainFaceIcon
|
|
||||||
width: parent.width - 4 // Subtract to prevent fringing
|
|
||||||
height: width
|
|
||||||
radius: width / 2
|
|
||||||
|
|
||||||
gradient: Gradient {
|
|
||||||
GradientStop { position: 0.0; color: borderGradientColor1 }
|
|
||||||
GradientStop { position: 0.33; color: borderGradientColor2 }
|
|
||||||
GradientStop { position: 1.0; color: borderGradientColor3 }
|
|
||||||
}
|
|
||||||
|
|
||||||
z:-1
|
|
||||||
rotation: 270
|
|
||||||
transformOrigin: Item.Center
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,193 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Layouts 1.12
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.plasmoid 2.0
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.kcoreaddons 1.0 as KCoreAddons
|
|
||||||
import org.kde.kirigami 2.13 as Kirigami
|
|
||||||
import QtQuick.Controls 2.15
|
|
||||||
|
|
||||||
import "../code/tools.js" as Tools
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: allItem
|
|
||||||
width: rect.width + 4 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: rect.height + 4 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
|
|
||||||
property bool highlighted: false
|
|
||||||
property bool isDraging: false
|
|
||||||
property bool canDrag: true
|
|
||||||
property bool canNavigate: false
|
|
||||||
property bool isMouseHighlight: false
|
|
||||||
|
|
||||||
property int subIndex: 0
|
|
||||||
|
|
||||||
signal highlightChanged
|
|
||||||
|
|
||||||
property bool hasActionList: ((model.favoriteId !== null)
|
|
||||||
|| (("hasActionList" in model) && (model.hasActionList === true)))
|
|
||||||
|
|
||||||
property var triggerModel
|
|
||||||
|
|
||||||
function openActionMenu(x, y) {
|
|
||||||
var actionList = hasActionList ? model.actionList : [];
|
|
||||||
Tools.fillActionMenu(i18n, actionMenu, actionList, globalFavorites, model.favoriteId);
|
|
||||||
actionMenu.visualParent = allItem;
|
|
||||||
actionMenu.open(x, y);
|
|
||||||
}
|
|
||||||
function actionTriggered(actionId, actionArgument) {
|
|
||||||
var close = (Tools.triggerAction(triggerModel, index, actionId, actionArgument) === true);
|
|
||||||
if (close) {
|
|
||||||
root.toggle();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function trigger() {
|
|
||||||
triggerModel.trigger(index, "", null);
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
function updateHighlight() {
|
|
||||||
if (navGrid.currentIndex == index){
|
|
||||||
highlighted = true
|
|
||||||
} else {
|
|
||||||
highlighted = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function deselect(){
|
|
||||||
highlighted = false
|
|
||||||
listView.currentIndex = -1
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
id: rect
|
|
||||||
x: 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
y: 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
width: main.width - 40 * PlasmaCore.Units.devicePixelRatio - allItem.x
|
|
||||||
height: 38 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
|
|
||||||
PlasmaCore.IconItem {
|
|
||||||
x: 9 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
anchors.verticalCenter: rect.verticalCenter
|
|
||||||
id: appicon
|
|
||||||
width: 24 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: width
|
|
||||||
source: model.decoration
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: appname
|
|
||||||
x: appicon.width + 9 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
anchors.verticalCenter: appicon.verticalCenter
|
|
||||||
text: ("name" in model ? model.name : model.display)
|
|
||||||
color: main.textColor
|
|
||||||
font.family: main.textFont
|
|
||||||
font.pixelSize: 12 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
}
|
|
||||||
}
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "highlight"; when: !canNavigate ? highlighted : runnerList.currentMainIndex == index && runnerList.currentSubIndex == subIndex
|
|
||||||
PropertyChanges { target: rectFill; opacity: 0.3}
|
|
||||||
PropertyChanges { target: appname; color: highlightedTextColor}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "default"; when: !canNavigate ? !highlighted : runnerList.currentMainIndex != index || runnerList.currentSubIndex != subIndex
|
|
||||||
PropertyChanges { target: rectFill; opacity: 0}
|
|
||||||
PropertyChanges { target: appname; color: textColor}
|
|
||||||
}]
|
|
||||||
transitions: highlight
|
|
||||||
onStateChanged: {
|
|
||||||
if (state == 'default'){
|
|
||||||
isMouseHighlight = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: rectFill
|
|
||||||
color: PlasmaCore.Theme.highlightColor
|
|
||||||
radius: 6
|
|
||||||
z: -20
|
|
||||||
anchors.fill: rect
|
|
||||||
}
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
id: ma
|
|
||||||
anchors.fill: parent
|
|
||||||
z: parent.z + 1
|
|
||||||
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
||||||
cursorShape: Qt.PointingHandCursor
|
|
||||||
hoverEnabled: true
|
|
||||||
onClicked: {
|
|
||||||
if (!isDraging) {
|
|
||||||
if (mouse.button == Qt.RightButton) {
|
|
||||||
if (allItem.hasActionList) {
|
|
||||||
var mapped = mapToItem(allItem, mouse.x, mouse.y);
|
|
||||||
openActionMenu(mapped.x, mapped.y);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
trigger()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onReleased: {
|
|
||||||
isDraging: false
|
|
||||||
}
|
|
||||||
onExited: {
|
|
||||||
rect.state = "default"
|
|
||||||
isMouseHighlight = false
|
|
||||||
}
|
|
||||||
onPositionChanged: {
|
|
||||||
isDraging = pressed
|
|
||||||
if (pressed && canDrag){
|
|
||||||
if ("pluginName" in model) {
|
|
||||||
dragHelper.startDrag(kicker, model.url, model.decoration,
|
|
||||||
"text/x-plasmoidservicename", model.pluginName);
|
|
||||||
} else {
|
|
||||||
dragHelper.startDrag(kicker, model.url, model.decoration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (containsMouse) {
|
|
||||||
isMouseHighlight = true
|
|
||||||
rect.state = "highlight"
|
|
||||||
if (canNavigate) {
|
|
||||||
if (runnerList.currentSubIndex != subIndex) {
|
|
||||||
repeater.itemAt(runnerList.currentSubIndex).nGrid.currentIndex = -1
|
|
||||||
}
|
|
||||||
runnerList.currentSubIndex = subIndex
|
|
||||||
runnerList.currentMainIndex = index
|
|
||||||
listView.currentIndex = index
|
|
||||||
listView.focus = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ActionMenu {
|
|
||||||
id: actionMenu
|
|
||||||
|
|
||||||
onActionClicked: {
|
|
||||||
visualParent.actionTriggered(actionId, actionArgument);
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Transition {
|
|
||||||
id: highlight
|
|
||||||
ColorAnimation {duration: 100 }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,95 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import QtQuick.Controls 2.5
|
|
||||||
import QtQuick 2.0
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons
|
|
||||||
|
|
||||||
Item {
|
|
||||||
property var iconSize
|
|
||||||
width: iconSize * 3.75
|
|
||||||
height: iconSize
|
|
||||||
PlasmaComponents.RoundButton {
|
|
||||||
id: settingsButton
|
|
||||||
visible: true
|
|
||||||
flat: true
|
|
||||||
height: iconSize * 2
|
|
||||||
width: height
|
|
||||||
anchors.left: parent.left
|
|
||||||
|
|
||||||
PlasmaComponents.ToolTip {
|
|
||||||
text: i18n("Settings")
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
id: visualParentSettings
|
|
||||||
y: 2 * iconSize
|
|
||||||
}
|
|
||||||
Image {
|
|
||||||
id: settingsImage
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
source: "icons/feather/settings.svg"
|
|
||||||
width: iconSize
|
|
||||||
height: width
|
|
||||||
ColorOverlay {
|
|
||||||
visible: plasmoid.configuration.theming != 0
|
|
||||||
anchors.fill: settingsImage
|
|
||||||
source: settingsImage
|
|
||||||
color: main.textColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onClicked: {
|
|
||||||
KQuickAddons.KCMShell.openSystemSettings("kcm_quick")
|
|
||||||
root.toggle()
|
|
||||||
//plasmoid.action("configure").trigger() //might implement later
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PlasmaComponents.RoundButton {
|
|
||||||
id: powerOffButton
|
|
||||||
visible: true
|
|
||||||
flat: true
|
|
||||||
height: iconSize * 2
|
|
||||||
width: height
|
|
||||||
anchors.right: parent.right
|
|
||||||
|
|
||||||
PlasmaComponents.ToolTip {
|
|
||||||
text: i18n("Power Off")
|
|
||||||
}
|
|
||||||
Image {
|
|
||||||
id: powerImage
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
|
||||||
source: "icons/feather/power.svg"
|
|
||||||
width: iconSize
|
|
||||||
height: width
|
|
||||||
ColorOverlay {
|
|
||||||
visible: plasmoid.configuration.theming != 0
|
|
||||||
anchors.fill: powerImage
|
|
||||||
source: powerImage
|
|
||||||
color: main.textColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onClicked: {
|
|
||||||
pmEngine.performOperation("requestShutDown")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,431 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick 2.15
|
|
||||||
import QtQuick.Layouts 1.12
|
|
||||||
import QtGraphicalEffects 1.12
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
import org.kde.kcoreaddons 1.0 as KCoreAddons
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: main
|
|
||||||
anchors.fill: parent
|
|
||||||
property bool searching: (searchBar.text != "")
|
|
||||||
signal newTextQuery(string text)
|
|
||||||
|
|
||||||
readonly property color textColor: PlasmaCore.Theme.textColor
|
|
||||||
readonly property string textFont: "SF Pro Text"
|
|
||||||
readonly property color bgColor: PlasmaCore.Theme.backgroundColor
|
|
||||||
readonly property color highlightColor: PlasmaCore.Theme.highlightColor
|
|
||||||
readonly property color highlightedTextColor: PlasmaCore.Theme.highlightedTextColor
|
|
||||||
readonly property bool isTop: plasmoid.location == PlasmaCore.Types.TopEdge & plasmoid.configuration.launcherPosition != 2 & !plasmoid.configuration.floating
|
|
||||||
|
|
||||||
readonly property color glowColor1: plasmoid.configuration.glowColor == 0 ? "#D300DC" :
|
|
||||||
plasmoid.configuration.glowColor == 1 ? "#20bdff" :
|
|
||||||
"#ff005d"
|
|
||||||
readonly property color glowColor2: plasmoid.configuration.glowColor == 0 ? "#8700FF" :
|
|
||||||
plasmoid.configuration.glowColor == 1 ? "#5433ff" :
|
|
||||||
"#ff8b26"
|
|
||||||
|
|
||||||
property bool showAllApps: false
|
|
||||||
|
|
||||||
KCoreAddons.KUser {
|
|
||||||
id: kuser
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.DataSource {
|
|
||||||
id: pmEngine
|
|
||||||
engine: "powermanagement"
|
|
||||||
connectedSources: ["PowerDevil", "Sleep States"]
|
|
||||||
function performOperation(what) {
|
|
||||||
var service = serviceForSource("PowerDevil")
|
|
||||||
var operation = service.operationDescription(what)
|
|
||||||
service.startOperationCall(operation)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateStartpage(){
|
|
||||||
appList.currentStateIndex = plasmoid.configuration.defaultPage
|
|
||||||
}
|
|
||||||
|
|
||||||
function reload() {
|
|
||||||
searchBar.clear()
|
|
||||||
searchBar.focus = true
|
|
||||||
appList.reset()
|
|
||||||
}
|
|
||||||
function reset(){
|
|
||||||
searchBar.clear()
|
|
||||||
searchBar.focus = true
|
|
||||||
appList.reset()
|
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: backdrop
|
|
||||||
x: 0
|
|
||||||
y: isTop ? 0 : 125 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
width: main.width
|
|
||||||
height: isTop ? main.height - 200 * PlasmaCore.Units.devicePixelRatio : main.height - y - (searchBarContainer.height + 20)
|
|
||||||
color: bgColor
|
|
||||||
opacity: 0
|
|
||||||
}
|
|
||||||
//Floating Avatar
|
|
||||||
Item {
|
|
||||||
id: avatarParent
|
|
||||||
x: main.width / 2
|
|
||||||
y: - root.margins.top
|
|
||||||
FloatingAvatar { //Anyone looking for an unpredictable number generator?
|
|
||||||
id: floatingAvatar
|
|
||||||
//visualParent: root
|
|
||||||
isTop: main.isTop
|
|
||||||
avatarWidth: 125 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
visible: root.visible && !isTop ? true : root.visible && plasmoid.configuration.floating ? true : false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Power & Settings
|
|
||||||
Item {
|
|
||||||
Header {
|
|
||||||
id: powerSettings
|
|
||||||
x: main.width - width - iconSize / 2
|
|
||||||
y: isTop ? main.height - 2 * height - iconSize / 2 : iconSize / 2
|
|
||||||
iconSize: 20 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Greeting
|
|
||||||
Item {
|
|
||||||
id: greeting
|
|
||||||
Text {
|
|
||||||
id: nameLabel
|
|
||||||
x: main.width / 2 - width / 2 //This centeres the Text
|
|
||||||
y: isTop ? main.height - height - 135 * PlasmaCore.Units.devicePixelRatio : 70 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
text: plasmoid.configuration.enableGreeting && plasmoid.configuration.customGreeting ? plasmoid.configuration.customGreeting : plasmoid.configuration.enableGreeting ? 'Hi, ' + kuser.fullName : i18n("%1@%2", kuser.loginName, kuser.host)
|
|
||||||
color: textColor
|
|
||||||
font.family: textFont
|
|
||||||
font.pixelSize: 25 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
font.bold: true
|
|
||||||
}
|
|
||||||
// Text shadow for greeting label
|
|
||||||
DropShadow {
|
|
||||||
anchors.fill: nameLabel
|
|
||||||
cached: true
|
|
||||||
horizontalOffset: 0
|
|
||||||
verticalOffset: 0
|
|
||||||
radius: 10.0
|
|
||||||
samples: 16
|
|
||||||
color: glowColor1
|
|
||||||
source: nameLabel
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//Searchbar
|
|
||||||
Item {
|
|
||||||
Rectangle {
|
|
||||||
id: searchBarContainer
|
|
||||||
x: headerLabel.width * PlasmaCore.Units.devicePixelRatio
|
|
||||||
y: isTop ? main.height - height - (2 * powerSettings.height + powerSettings.iconSize / 2) - 10 * PlasmaCore.Units.devicePixelRatio : main.height - (height + x) * PlasmaCore.Units.devicePixelRatio
|
|
||||||
width: main.width - 2 * x
|
|
||||||
height: 45 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
radius: 8
|
|
||||||
color: Qt.lighter(theme.backgroundColor) // better contrast color
|
|
||||||
Image {
|
|
||||||
id: searchIcon
|
|
||||||
x: 15 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
width: 15 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: width
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
source: 'icons/feather/search.svg'
|
|
||||||
ColorOverlay {
|
|
||||||
visible: true
|
|
||||||
anchors.fill: searchIcon
|
|
||||||
source: searchIcon
|
|
||||||
color: main.textColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Rectangle {
|
|
||||||
x: 45 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
width: parent.width - 60 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: searchBar.height
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
clip: true
|
|
||||||
color: 'transparent'
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: Qt.IBeamCursor
|
|
||||||
hoverEnabled: false
|
|
||||||
}
|
|
||||||
TextInput {
|
|
||||||
id: searchBar
|
|
||||||
width: parent.width
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
focus: true
|
|
||||||
color: textColor
|
|
||||||
selectByMouse: true
|
|
||||||
selectionColor: highlightedTextColor
|
|
||||||
font.family: textFont
|
|
||||||
font.pixelSize: 13 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
Text {
|
|
||||||
anchors.fill: parent
|
|
||||||
text: i18n("Search your computer")
|
|
||||||
color: PlasmaCore.Theme.disabledTextColor
|
|
||||||
visible: !parent.text
|
|
||||||
}
|
|
||||||
onTextChanged: {
|
|
||||||
runnerModel.query = text;
|
|
||||||
newTextQuery(text)
|
|
||||||
}
|
|
||||||
function clear() {
|
|
||||||
text = "";
|
|
||||||
}
|
|
||||||
function backspace() {
|
|
||||||
if (searching) {
|
|
||||||
text = text.slice(0, -1);
|
|
||||||
}
|
|
||||||
focus = true;
|
|
||||||
}
|
|
||||||
function appendText(newText) {
|
|
||||||
if (!root.visible) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
focus = true;
|
|
||||||
text = text + newText;
|
|
||||||
}
|
|
||||||
Keys.onPressed: {
|
|
||||||
if (event.key == Qt.Key_Down) {
|
|
||||||
event.accepted = true;
|
|
||||||
runnerList.setFocus()
|
|
||||||
} else if (event.key == Qt.Key_Tab || event.key == Qt.Key_Up) {
|
|
||||||
event.accepted = true;
|
|
||||||
runnerList.setFocus()
|
|
||||||
} else if (event.key == Qt.Key_Escape) {
|
|
||||||
event.accepted = true;
|
|
||||||
if (searching) {
|
|
||||||
clear()
|
|
||||||
} else {
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
} else if (event.key == Qt.Key_Enter || event.key == Qt.Key_Return) {
|
|
||||||
runnerList.setFocus()
|
|
||||||
runnerList.triggerFirst()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fvorites / All apps label
|
|
||||||
Image {
|
|
||||||
id: headerLabel
|
|
||||||
source: "icons/feather/star.svg"
|
|
||||||
width: 15
|
|
||||||
height: width
|
|
||||||
y: backdrop.y + width
|
|
||||||
anchors.leftMargin: units.largeSpacing
|
|
||||||
anchors.topMargin: units.largeSpacing
|
|
||||||
anchors.left: parent.left
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: mainLabelGrid
|
|
||||||
x: parent.width + 10
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
text: i18n(showAllApps ? "All apps" : "Favorite Apps")
|
|
||||||
font.family: "SF Pro Text"
|
|
||||||
font.pixelSize: 12
|
|
||||||
}
|
|
||||||
|
|
||||||
ColorOverlay {
|
|
||||||
visible: true
|
|
||||||
anchors.fill: headerLabel
|
|
||||||
source: headerLabel
|
|
||||||
color: main.textColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Show all app buttons
|
|
||||||
PlasmaComponents.Button {
|
|
||||||
MouseArea {
|
|
||||||
hoverEnabled: true
|
|
||||||
anchors.fill: parent
|
|
||||||
cursorShape: containsMouse ? Qt.PointingHandCursor : Qt.ArrowCursor
|
|
||||||
onClicked: showAllApps = !showAllApps
|
|
||||||
}
|
|
||||||
text: i18n(showAllApps ? "Back" : "All apps")
|
|
||||||
id: mainsecLabelGrid
|
|
||||||
icon.name: showAllApps ? "go-previous" : "go-next"
|
|
||||||
font.pointSize: 9
|
|
||||||
icon.height: 15
|
|
||||||
icon.width: icon.height
|
|
||||||
LayoutMirroring.enabled: true
|
|
||||||
LayoutMirroring.childrenInherit: !showAllApps
|
|
||||||
flat: false
|
|
||||||
background: Rectangle {
|
|
||||||
color: Qt.lighter(theme.backgroundColor)
|
|
||||||
border.width: 1
|
|
||||||
border.color: Qt.darker(theme.backgroundColor, 1.14)
|
|
||||||
radius: plasmoid.configuration.enableGlow ? height / 2 : 5
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
id: bgMask
|
|
||||||
width: parent.width
|
|
||||||
height: parent.height
|
|
||||||
radius: height / 2
|
|
||||||
border.width: 0
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
}
|
|
||||||
Item {
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
anchors.fill: bgMask
|
|
||||||
// x: container.x - 20
|
|
||||||
layer.enabled: true
|
|
||||||
layer.effect: OpacityMask {
|
|
||||||
maskSource: bgMask
|
|
||||||
}
|
|
||||||
|
|
||||||
LinearGradient {
|
|
||||||
anchors.fill: parent
|
|
||||||
start: Qt.point(bgMask.width, 0)
|
|
||||||
end: Qt.point(0, bgMask.height)
|
|
||||||
gradient: Gradient {
|
|
||||||
GradientStop { position: 0.0; color: glowColor1 }
|
|
||||||
GradientStop { position: 1.0; color: glowColor2 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
topPadding: 4
|
|
||||||
bottomPadding: topPadding
|
|
||||||
leftPadding: 8
|
|
||||||
rightPadding: 8
|
|
||||||
icon{
|
|
||||||
width: height
|
|
||||||
height: visible ? units.iconSizes.small : 0
|
|
||||||
name: showAllApps ? "go-previous" : "go-next"
|
|
||||||
}
|
|
||||||
|
|
||||||
anchors {
|
|
||||||
topMargin: units.smallSpacing
|
|
||||||
verticalCenter: headerLabel.verticalCenter
|
|
||||||
rightMargin: units.largeSpacing
|
|
||||||
leftMargin: units.largeSpacing
|
|
||||||
left: parent.left
|
|
||||||
}
|
|
||||||
x: -units.smallSpacing
|
|
||||||
visible: !searching
|
|
||||||
}
|
|
||||||
// All apps button shadow
|
|
||||||
DropShadow {
|
|
||||||
anchors.fill: mainsecLabelGrid
|
|
||||||
cached: true
|
|
||||||
horizontalOffset: 0
|
|
||||||
verticalOffset: 0
|
|
||||||
radius: 11.0
|
|
||||||
samples: 16
|
|
||||||
color: glowColor1
|
|
||||||
source: mainsecLabelGrid
|
|
||||||
visible: plasmoid.configuration.enableGlow
|
|
||||||
}
|
|
||||||
|
|
||||||
//List of Apps
|
|
||||||
AppList {
|
|
||||||
id: appList
|
|
||||||
state: "visible"
|
|
||||||
anchors.top: headerLabel.bottom
|
|
||||||
anchors.topMargin: showAllApps ? headerLabel.width : headerLabel.width * 2
|
|
||||||
width: main.width - 30 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: showAllApps ? backdrop.height - (headerLabel.height * 3.5) : main.height - y
|
|
||||||
visible: opacity > 0
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "visible"; when: (!searching)
|
|
||||||
PropertyChanges { target: appList; opacity: 1.0 }
|
|
||||||
PropertyChanges { target: appList; x: 25 * PlasmaCore.Units.devicePixelRatio }
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "hidden"; when: (searching)
|
|
||||||
PropertyChanges { target: appList; opacity: 0.0}
|
|
||||||
PropertyChanges { target: appList; x: 5 * PlasmaCore.Units.devicePixelRatio}
|
|
||||||
}]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
to: "visible"
|
|
||||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
PropertyAnimation {properties: 'x'; from: 5 * PlasmaCore.Units.devicePixelRatio; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
to: "hidden"
|
|
||||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
PropertyAnimation {properties: 'x'; from: 25 * PlasmaCore.Units.devicePixelRatio; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
RunnerList {
|
|
||||||
id: runnerList
|
|
||||||
model: runnerModel
|
|
||||||
state: "hidden"
|
|
||||||
visible: opacity > 0
|
|
||||||
anchors.top: headerLabel.bottom
|
|
||||||
anchors.topMargin: headerLabel.width
|
|
||||||
width: main.width - 30 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: backdrop.height - (headerLabel.height * 3.5)
|
|
||||||
states: [
|
|
||||||
State {
|
|
||||||
name: "visible"; when: (searching)
|
|
||||||
PropertyChanges { target: runnerList; opacity: 1.0 }
|
|
||||||
PropertyChanges { target: runnerList; x: 20 * PlasmaCore.Units.devicePixelRatio}
|
|
||||||
},
|
|
||||||
State {
|
|
||||||
name: "hidden"; when: (!searching)
|
|
||||||
PropertyChanges { target: runnerList; opacity: 0.0}
|
|
||||||
PropertyChanges { target: runnerList; x: 40 * PlasmaCore.Units.devicePixelRatio}
|
|
||||||
}]
|
|
||||||
transitions: [
|
|
||||||
Transition {
|
|
||||||
to: "visible"
|
|
||||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
PropertyAnimation {properties: 'x'; from: 80 * PlasmaCore.Units.devicePixelRatio; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
},
|
|
||||||
Transition {
|
|
||||||
to: "hidden"
|
|
||||||
PropertyAnimation {properties: 'opacity'; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
PropertyAnimation {properties: 'x'; from: 20 * PlasmaCore.Units.devicePixelRatio; duration: 100; easing.type: Easing.OutQuart}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
Keys.onPressed: {
|
|
||||||
if (event.key == Qt.Key_Backspace) {
|
|
||||||
event.accepted = true;
|
|
||||||
if (searching)
|
|
||||||
searchBar.backspace();
|
|
||||||
else
|
|
||||||
searchBar.focus = true
|
|
||||||
} else if (event.key == Qt.Key_Escape) {
|
|
||||||
event.accepted = true;
|
|
||||||
if (searching) {
|
|
||||||
searchBar.clear()
|
|
||||||
} else {
|
|
||||||
root.toggle()
|
|
||||||
}
|
|
||||||
} else if (event.text != "" || event.key == Qt.Key_Down) {
|
|
||||||
if (event.key != Qt.Key_Return){
|
|
||||||
event.accepted = true;
|
|
||||||
searchBar.appendText(event.text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,166 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2014 by Weng Xuetian <wengxt@gmail.com> *
|
|
||||||
* Copyright (C) 2013-2017 by Eike Hein <hein@kde.org> *
|
|
||||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Layouts 1.12
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
|
|
||||||
PlasmaCore.Dialog {
|
|
||||||
id: root
|
|
||||||
|
|
||||||
objectName: "popupWindow"
|
|
||||||
flags: Qt.WindowStaysOnTopHint
|
|
||||||
|
|
||||||
location: plasmoid.configuration.floating || plasmoid.configuration.launcherPosition == 2 ? "Floating" : plasmoid.location
|
|
||||||
|
|
||||||
hideOnWindowDeactivate: true
|
|
||||||
|
|
||||||
onVisibleChanged: {
|
|
||||||
if (!visible) {
|
|
||||||
reset();
|
|
||||||
} else {
|
|
||||||
main.updateStartpage()
|
|
||||||
var pos = popupPosition(width, height);
|
|
||||||
x = pos.x;
|
|
||||||
y = pos.y;
|
|
||||||
requestActivate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onHeightChanged: {
|
|
||||||
var pos = popupPosition(width, height);
|
|
||||||
x = pos.x;
|
|
||||||
y = pos.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
onWidthChanged: {
|
|
||||||
var pos = popupPosition(width, height);
|
|
||||||
x = pos.x;
|
|
||||||
y = pos.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggle() {
|
|
||||||
root.visible = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function reset() {
|
|
||||||
main.reset()
|
|
||||||
}
|
|
||||||
|
|
||||||
function popupPosition(width, height) {
|
|
||||||
var screenAvail = plasmoid.availableScreenRect;
|
|
||||||
var screen/*Geom*/ = plasmoid.screenGeometry;
|
|
||||||
//QtBug - QTBUG-64115
|
|
||||||
/*var screen = Qt.rect(screenAvail.x + screenGeom.x,
|
|
||||||
screenAvail.y + screenGeom.y,
|
|
||||||
screenAvail.width,
|
|
||||||
screenAvail.height);*/
|
|
||||||
|
|
||||||
var offset = 0
|
|
||||||
|
|
||||||
if (plasmoid.configuration.offsetX > 0 && plasmoid.configuration.floating) {
|
|
||||||
offset = plasmoid.configuration.offsetX
|
|
||||||
} else {
|
|
||||||
offset = plasmoid.configuration.floating ? parent.height * 0.75 : 0
|
|
||||||
}
|
|
||||||
// Fall back to bottom-left of screen area when the applet is on the desktop or floating.
|
|
||||||
var x = offset;
|
|
||||||
var y = screen.height - height - offset;
|
|
||||||
var horizMidPoint = screen.x + (screen.width / 2);
|
|
||||||
var vertMidPoint = screen.y + (screen.height / 2);
|
|
||||||
var appletTopLeft = parent.mapToGlobal(0, 0);
|
|
||||||
var appletBottomLeft = parent.mapToGlobal(0, parent.height);
|
|
||||||
|
|
||||||
if (plasmoid.configuration.launcherPosition != 0){
|
|
||||||
x = horizMidPoint - width / 2;
|
|
||||||
} else {
|
|
||||||
x = (appletTopLeft.x < horizMidPoint) ? screen.x : (screen.x + screen.width) - width;
|
|
||||||
if (plasmoid.configuration.floating) {
|
|
||||||
if (appletTopLeft.x < horizMidPoint) {
|
|
||||||
x += offset
|
|
||||||
} else if (appletTopLeft.x + width > horizMidPoint){
|
|
||||||
x -= offset
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plasmoid.configuration.launcherPosition != 2){
|
|
||||||
if (plasmoid.location == PlasmaCore.Types.TopEdge) {
|
|
||||||
if (plasmoid.configuration.floating) {
|
|
||||||
/*this is floatingAvatar.width*/
|
|
||||||
if (plasmoid.configuration.offsetY > 0) {
|
|
||||||
offset = (125 * PlasmaCore.Units.devicePixelRatio) / 2 + plasmoid.configuration.offsetY
|
|
||||||
} else {
|
|
||||||
offset = (125 * PlasmaCore.Units.devicePixelRatio) / 2 + parent.height * 0.125
|
|
||||||
}
|
|
||||||
}
|
|
||||||
y = screen.y + parent.height + panelSvg.margins.bottom + offset;
|
|
||||||
} else {
|
|
||||||
if (plasmoid.configuration.offsetY > 0) {
|
|
||||||
offset = plasmoid.configuration.offsetY
|
|
||||||
}
|
|
||||||
y = screen.y + screen.height - parent.height - height - panelSvg.margins.top - offset;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
y = vertMidPoint - height / 2
|
|
||||||
}
|
|
||||||
|
|
||||||
return Qt.point(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
FocusScope {
|
|
||||||
id: fs
|
|
||||||
focus: true
|
|
||||||
Layout.minimumWidth: 600 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
Layout.minimumHeight: 550 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
Layout.maximumWidth: Layout.minimumWidth
|
|
||||||
Layout.maximumHeight: Layout.minimumHeight
|
|
||||||
|
|
||||||
Item {
|
|
||||||
x: - root.margins.left
|
|
||||||
y: - root.margins.top
|
|
||||||
width: parent.width + root.margins.left + root.margins.right
|
|
||||||
height: parent.height + root.margins.top + root.margins.bottom
|
|
||||||
|
|
||||||
MainView {
|
|
||||||
id: main
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Keys.onPressed: {
|
|
||||||
if (event.key == Qt.Key_Escape) {
|
|
||||||
root.visible = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function refreshModel() {
|
|
||||||
main.reload()
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
rootModel.refreshed.connect(refreshModel)
|
|
||||||
kicker.reset.connect(reset);
|
|
||||||
reset();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,140 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
import QtQuick 2.12
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
|
||||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
|
||||||
import org.kde.kquickcontrolsaddons 2.0
|
|
||||||
|
|
||||||
import org.kde.draganddrop 2.0
|
|
||||||
|
|
||||||
FocusScope {
|
|
||||||
id: navGrid
|
|
||||||
|
|
||||||
signal keyNavUp
|
|
||||||
signal keyNavDown
|
|
||||||
|
|
||||||
property alias triggerModel: listView.model
|
|
||||||
property alias count: listView.count
|
|
||||||
property alias currentIndex: listView.currentIndex
|
|
||||||
property alias currentItem: listView.currentItem
|
|
||||||
property alias contentItem: listView.contentItem
|
|
||||||
|
|
||||||
property int subIndex: 0
|
|
||||||
|
|
||||||
onFocusChanged: {
|
|
||||||
if (!focus) {
|
|
||||||
currentIndex = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function setFocus() {
|
|
||||||
currentIndex = 0
|
|
||||||
focus = true
|
|
||||||
runnerList.currentMainIndex = currentIndex
|
|
||||||
}
|
|
||||||
function setFocusLast() {
|
|
||||||
if (count > 0) {
|
|
||||||
currentIndex = count - 1
|
|
||||||
focus = true
|
|
||||||
runnerList.currentMainIndex = currentIndex
|
|
||||||
} else {
|
|
||||||
setFocus()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: genericItem
|
|
||||||
GenericItem {
|
|
||||||
x: 20
|
|
||||||
canNavigate: true
|
|
||||||
canDrag: false
|
|
||||||
triggerModel: listView.model
|
|
||||||
subIndex: navGrid.subIndex
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaExtras.ScrollArea {
|
|
||||||
id: scrollArea
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
focus: true
|
|
||||||
|
|
||||||
ListView {
|
|
||||||
id: listView
|
|
||||||
currentIndex: -1
|
|
||||||
focus: true
|
|
||||||
keyNavigationEnabled: true
|
|
||||||
highlightFollowsCurrentItem: true
|
|
||||||
highlightMoveDuration: 0
|
|
||||||
|
|
||||||
delegate: genericItem
|
|
||||||
|
|
||||||
onCurrentIndexChanged: {
|
|
||||||
if (currentIndex != -1) {
|
|
||||||
focus = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onModelChanged: {
|
|
||||||
currentIndex = -1;
|
|
||||||
}
|
|
||||||
onFocusChanged: {
|
|
||||||
if (!focus) {
|
|
||||||
currentIndex = -1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Keys.onUpPressed: {
|
|
||||||
if (runnerList.currentSubIndex != subIndex) {
|
|
||||||
repeater.itemAt(runnerList.currentSubIndex).nGrid.currentIndex = -1
|
|
||||||
}
|
|
||||||
if (currentIndex > 0) {
|
|
||||||
event.accepted = true;
|
|
||||||
currentIndex = currentIndex - 1
|
|
||||||
runnerList.currentMainIndex = currentIndex
|
|
||||||
runnerList.currentSubIndex = subIndex
|
|
||||||
positionViewAtIndex(currentIndex, ListView.Contain);
|
|
||||||
} else {
|
|
||||||
navGrid.keyNavUp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Keys.onDownPressed: {
|
|
||||||
if (runnerList.currentSubIndex != subIndex) {
|
|
||||||
repeater.itemAt(runnerList.currentSubIndex).nGrid.currentIndex = -1
|
|
||||||
}
|
|
||||||
if (currentIndex < count - 1) {
|
|
||||||
event.accepted = true;
|
|
||||||
currentIndex = currentIndex + 1;
|
|
||||||
runnerList.currentMainIndex = currentIndex
|
|
||||||
runnerList.currentSubIndex = subIndex
|
|
||||||
positionViewAtIndex(currentIndex, ListView.Contain);
|
|
||||||
} else {
|
|
||||||
navGrid.keyNavDown();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Keys.onPressed: {
|
|
||||||
if (event.key == Qt.Key_Enter || event.key == Qt.Key_Return) {
|
|
||||||
event.accepted = true;
|
|
||||||
if (currentItem){
|
|
||||||
currentItem.trigger()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,198 +0,0 @@
|
||||||
/*****************************************************************************
|
|
||||||
* Copyright (C) 2022 by Friedrich Schriewer <friedrich.schriewer@gmx.net> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.extras 2.0 as PlasmaExtras
|
|
||||||
|
|
||||||
import org.kde.plasma.private.kicker 0.1 as Kicker
|
|
||||||
|
|
||||||
import QtQuick.Window 2.2
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
import QtQuick.Layouts 1.15
|
|
||||||
import QtQuick.Controls 2.15
|
|
||||||
|
|
||||||
import QtGraphicalEffects 1.0
|
|
||||||
|
|
||||||
PlasmaExtras.ScrollArea {
|
|
||||||
id: runnerList
|
|
||||||
focus: true
|
|
||||||
property alias model: repeater.model
|
|
||||||
property alias count: repeater.count
|
|
||||||
|
|
||||||
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
|
|
||||||
verticalScrollBarPolicy: Qt.ScrollBarAsNeeded
|
|
||||||
|
|
||||||
property int currentMainIndex: 0
|
|
||||||
property int currentSubIndex: 0
|
|
||||||
|
|
||||||
onFocusChanged: {
|
|
||||||
if (!focus) {
|
|
||||||
for (var i = 0; i < repeater.count; i++) {
|
|
||||||
repeater.itemAt(i).nGrid.focus = false
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
currentMainIndex = 0
|
|
||||||
for (var i = 0; i < repeater.count; ++i) {
|
|
||||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
|
||||||
currentSubIndex = i
|
|
||||||
repeater.itemAt(i).nGrid.setFocus();
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function get_position(){
|
|
||||||
return flickableItem.contentY / (flickableItem.contentHeight - height)
|
|
||||||
}
|
|
||||||
function get_size(){
|
|
||||||
return (flickableItem.contentHeight <= height ? -1 : 0.99999)
|
|
||||||
}
|
|
||||||
function setFocus() {
|
|
||||||
currentMainIndex = 0
|
|
||||||
for (var i = 0; i < repeater.count; ++i) {
|
|
||||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
|
||||||
currentSubIndex = i
|
|
||||||
repeater.itemAt(i).nGrid.setFocus();
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function triggerFirst(){
|
|
||||||
repeater.itemAt(currentSubIndex).nGrid.currentItem.trigger()
|
|
||||||
}
|
|
||||||
|
|
||||||
Column {
|
|
||||||
x: -10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
Repeater {
|
|
||||||
id: repeater
|
|
||||||
delegate:
|
|
||||||
Item {
|
|
||||||
id: section
|
|
||||||
width: runnerList.width
|
|
||||||
height: headerLabel.height + navGrid.height + (index == repeater.count - 1 ? 0 : 10)
|
|
||||||
visible: navGrid.count > 0
|
|
||||||
property Item nGrid: navGrid
|
|
||||||
Item {
|
|
||||||
id: headerLabel
|
|
||||||
anchors.top: parent.top
|
|
||||||
height: image.height
|
|
||||||
Image {
|
|
||||||
id: image
|
|
||||||
x: 20 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
source: repeater.model.modelForRow(index).description === 'Command Line' ? "icons/feather/code.svg" : repeater.model.modelForRow(index).description == 'Desktop Search' ? "icons/feather/search.svg" : "icons/feather/file-text.svg"
|
|
||||||
width: 15 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
height: width
|
|
||||||
//visible: repeater.model.modelForRow(index).count > 0
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
x: parent.width + 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
anchors.verticalCenter: parent.verticalCenter
|
|
||||||
text: repeater.model.modelForRow(index).description
|
|
||||||
color: main.textColor
|
|
||||||
font.family: main.textFont
|
|
||||||
font.pixelSize: 12 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
}
|
|
||||||
ColorOverlay {
|
|
||||||
visible: plasmoid.configuration.theming != 0
|
|
||||||
anchors.fill: image
|
|
||||||
source: image
|
|
||||||
color: main.textColor
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
NavGrid {
|
|
||||||
id: navGrid
|
|
||||||
width: runnerList.width
|
|
||||||
height: Math.ceil(count * (42 * PlasmaCore.Units.devicePixelRatio )) + 10 * PlasmaCore.Units.devicePixelRatio
|
|
||||||
anchors.top: headerLabel.bottom
|
|
||||||
subIndex: index
|
|
||||||
triggerModel: repeater.model.modelForRow(index)
|
|
||||||
|
|
||||||
onFocusChanged: {
|
|
||||||
if (focus) {
|
|
||||||
runnerList.focus = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onCountChanged: {
|
|
||||||
if (index == 0 && count > 0) {
|
|
||||||
currentIndex = 0;
|
|
||||||
focus = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onCurrentItemChanged: {
|
|
||||||
if (!currentItem) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (currentItem.isMouseHighlight) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (index == 0 && currentIndex === 0) {
|
|
||||||
runnerList.flickableItem.contentY = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var y = currentItem.y;
|
|
||||||
y = contentItem.mapToItem(runnerList.flickableItem.contentItem, 0, y).y;
|
|
||||||
|
|
||||||
if (y < runnerList.flickableItem.contentY) {
|
|
||||||
runnerList.flickableItem.contentY = y;
|
|
||||||
} else {
|
|
||||||
y += currentItem.height + 10 * PlasmaCore.Units.devicePixelRatio + 15 * PlasmaCore.Units.devicePixelRatio;
|
|
||||||
y -= runnerList.flickableItem.contentY;
|
|
||||||
y -= runnerList.viewport.height;
|
|
||||||
|
|
||||||
if (y > 0) {
|
|
||||||
runnerList.flickableItem.contentY += y;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
onKeyNavUp: {
|
|
||||||
if (index > 0) {
|
|
||||||
for (var i = index - 1; i > -1; --i) {
|
|
||||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
|
||||||
repeater.itemAt(i).nGrid.setFocusLast()
|
|
||||||
currentSubIndex = index - 1
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
onKeyNavDown: {
|
|
||||||
if (index < repeater.count - 1) {
|
|
||||||
for (var i = index + 1; i < repeater.count; ++i) {
|
|
||||||
if (repeater.itemAt(i).nGrid.count > 0) {
|
|
||||||
repeater.itemAt(i).nGrid.setFocus()
|
|
||||||
currentSubIndex = index + 1
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Kicker.WheelInterceptor {
|
|
||||||
anchors.fill: navGrid
|
|
||||||
z: 1
|
|
||||||
destination: findWheelArea(runnerList.flickableItem)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2013-2017 Cole Bemis
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
|
@ -1,48 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-code"
|
|
||||||
version="1.1"
|
|
||||||
id="svg6"
|
|
||||||
sodipodi:docname="code.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs10" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview8"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg6" />
|
|
||||||
<polyline
|
|
||||||
points="16 18 22 12 16 6"
|
|
||||||
id="polyline2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<polyline
|
|
||||||
points="8 6 2 12 8 18"
|
|
||||||
id="polyline4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,66 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-file-text"
|
|
||||||
version="1.1"
|
|
||||||
id="svg12"
|
|
||||||
sodipodi:docname="file-text.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs16" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview14"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1032"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg12" />
|
|
||||||
<path
|
|
||||||
d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"
|
|
||||||
id="path2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<polyline
|
|
||||||
points="14 2 14 8 20 8"
|
|
||||||
id="polyline4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="16"
|
|
||||||
y1="13"
|
|
||||||
x2="8"
|
|
||||||
y2="13"
|
|
||||||
id="line6"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="16"
|
|
||||||
y1="17"
|
|
||||||
x2="8"
|
|
||||||
y2="17"
|
|
||||||
id="line8"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<polyline
|
|
||||||
points="10 9 9 9 8 9"
|
|
||||||
id="polyline10"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,57 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-globe"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
sodipodi:docname="globe.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs12" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview10"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg8" />
|
|
||||||
<circle
|
|
||||||
cx="12"
|
|
||||||
cy="12"
|
|
||||||
r="10"
|
|
||||||
id="circle2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="2"
|
|
||||||
y1="12"
|
|
||||||
x2="22"
|
|
||||||
y2="12"
|
|
||||||
id="line4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<path
|
|
||||||
d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"
|
|
||||||
id="path6"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.5 KiB |
|
@ -1,59 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-image"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
sodipodi:docname="image.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs12" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview10"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg8" />
|
|
||||||
<rect
|
|
||||||
x="3"
|
|
||||||
y="3"
|
|
||||||
width="18"
|
|
||||||
height="18"
|
|
||||||
rx="2"
|
|
||||||
ry="2"
|
|
||||||
id="rect2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<circle
|
|
||||||
cx="8.5"
|
|
||||||
cy="8.5"
|
|
||||||
r="1.5"
|
|
||||||
id="circle4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<polyline
|
|
||||||
points="21 15 16 10 5 21"
|
|
||||||
id="polyline6"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,51 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-power"
|
|
||||||
version="1.1"
|
|
||||||
id="svg6"
|
|
||||||
sodipodi:docname="power.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs10" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview8"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1600"
|
|
||||||
inkscape:window-height="876"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="180"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg6" />
|
|
||||||
<path
|
|
||||||
d="M18.36 6.64a9 9 0 1 1-12.73 0"
|
|
||||||
id="path2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="12"
|
|
||||||
y1="2"
|
|
||||||
x2="12"
|
|
||||||
y2="12"
|
|
||||||
id="line4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,53 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-search"
|
|
||||||
version="1.1"
|
|
||||||
id="svg6"
|
|
||||||
sodipodi:docname="search.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs10" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview8"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="11.961905"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1032"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg6" />
|
|
||||||
<circle
|
|
||||||
cx="11"
|
|
||||||
cy="11"
|
|
||||||
id="circle2"
|
|
||||||
r="8"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="21"
|
|
||||||
y1="21"
|
|
||||||
x2="16.65"
|
|
||||||
y2="16.65"
|
|
||||||
id="line4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,50 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-settings"
|
|
||||||
version="1.1"
|
|
||||||
id="svg6"
|
|
||||||
sodipodi:docname="settings.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs10" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview8"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1600"
|
|
||||||
inkscape:window-height="876"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="180"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg6" />
|
|
||||||
<circle
|
|
||||||
cx="12"
|
|
||||||
cy="12"
|
|
||||||
r="3"
|
|
||||||
id="circle2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<path
|
|
||||||
d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"
|
|
||||||
id="path4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2 KiB |
|
@ -1,44 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-star"
|
|
||||||
version="1.1"
|
|
||||||
id="svg4"
|
|
||||||
sodipodi:docname="star.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs8" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview6"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="1032"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg4" />
|
|
||||||
<polygon
|
|
||||||
points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"
|
|
||||||
id="polygon2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,44 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-tool"
|
|
||||||
version="1.1"
|
|
||||||
id="svg4"
|
|
||||||
sodipodi:docname="tool.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs8" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview6"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg4" />
|
|
||||||
<path
|
|
||||||
d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"
|
|
||||||
id="path2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,62 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
class="feather feather-trash-2"
|
|
||||||
version="1.1"
|
|
||||||
id="svg10"
|
|
||||||
sodipodi:docname="trash-2.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs14" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview12"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg10" />
|
|
||||||
<polyline
|
|
||||||
points="3 6 5 6 21 6"
|
|
||||||
id="polyline2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<path
|
|
||||||
d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"
|
|
||||||
id="path4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="10"
|
|
||||||
y1="11"
|
|
||||||
x2="10"
|
|
||||||
y2="17"
|
|
||||||
id="line6"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="14"
|
|
||||||
y1="11"
|
|
||||||
x2="14"
|
|
||||||
y2="17"
|
|
||||||
id="line8"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,15 +0,0 @@
|
||||||
ISC License
|
|
||||||
|
|
||||||
Copyright (c) 2020, Lucide Contributors
|
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
|
||||||
purpose with or without fee is hereby granted, provided that the above
|
|
||||||
copyright notice and this permission notice appear in all copies.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
@ -1,111 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
version="1.1"
|
|
||||||
id="svg22"
|
|
||||||
sodipodi:docname="cpu.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs26" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview24"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg22" />
|
|
||||||
<rect
|
|
||||||
x="4"
|
|
||||||
y="4"
|
|
||||||
width="16"
|
|
||||||
height="16"
|
|
||||||
rx="2"
|
|
||||||
ry="2"
|
|
||||||
id="rect2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<rect
|
|
||||||
x="9"
|
|
||||||
y="9"
|
|
||||||
width="6"
|
|
||||||
height="6"
|
|
||||||
id="rect4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="9"
|
|
||||||
y1="1"
|
|
||||||
x2="9"
|
|
||||||
y2="4"
|
|
||||||
id="line6"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="15"
|
|
||||||
y1="1"
|
|
||||||
x2="15"
|
|
||||||
y2="4"
|
|
||||||
id="line8"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="9"
|
|
||||||
y1="20"
|
|
||||||
x2="9"
|
|
||||||
y2="23"
|
|
||||||
id="line10"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="15"
|
|
||||||
y1="20"
|
|
||||||
x2="15"
|
|
||||||
y2="23"
|
|
||||||
id="line12"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="20"
|
|
||||||
y1="9"
|
|
||||||
x2="23"
|
|
||||||
y2="9"
|
|
||||||
id="line14"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="20"
|
|
||||||
y1="14"
|
|
||||||
x2="23"
|
|
||||||
y2="14"
|
|
||||||
id="line16"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="1"
|
|
||||||
y1="9"
|
|
||||||
x2="4"
|
|
||||||
y2="9"
|
|
||||||
id="line18"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="1"
|
|
||||||
y1="14"
|
|
||||||
x2="4"
|
|
||||||
y2="14"
|
|
||||||
id="line20"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.1 KiB |
|
@ -1,97 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
version="1.1"
|
|
||||||
id="svg18"
|
|
||||||
sodipodi:docname="film.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs22" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview20"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg18" />
|
|
||||||
<rect
|
|
||||||
x="2"
|
|
||||||
y="2"
|
|
||||||
width="20"
|
|
||||||
height="20"
|
|
||||||
rx="2.18"
|
|
||||||
ry="2.18"
|
|
||||||
id="rect2"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="7"
|
|
||||||
y1="2"
|
|
||||||
x2="7"
|
|
||||||
y2="22"
|
|
||||||
id="line4"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="17"
|
|
||||||
y1="2"
|
|
||||||
x2="17"
|
|
||||||
y2="22"
|
|
||||||
id="line6"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="2"
|
|
||||||
y1="12"
|
|
||||||
x2="22"
|
|
||||||
y2="12"
|
|
||||||
id="line8"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="2"
|
|
||||||
y1="7"
|
|
||||||
x2="7"
|
|
||||||
y2="7"
|
|
||||||
id="line10"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="2"
|
|
||||||
y1="17"
|
|
||||||
x2="7"
|
|
||||||
y2="17"
|
|
||||||
id="line12"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="17"
|
|
||||||
y1="17"
|
|
||||||
x2="22"
|
|
||||||
y2="17"
|
|
||||||
id="line14"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
<line
|
|
||||||
x1="17"
|
|
||||||
y1="7"
|
|
||||||
x2="22"
|
|
||||||
y2="7"
|
|
||||||
id="line16"
|
|
||||||
style="stroke:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 1.9 KiB |
|
@ -1,51 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
sodipodi:docname="flask-conical.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs12" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview10"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="5.0857143"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg8" />
|
|
||||||
<path
|
|
||||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
d="M 10,1 A 1,1 0 0 0 9,2 V 9.7636719 L 3.8261719,20.101562 C 3.174232,21.398629 4.1748637,23.010141 5.6269531,23 H 18.373047 c 1.452089,0.01014 2.452721,-1.601371 1.800781,-2.898438 v -0.002 L 15,9.7636719 V 2 A 1,1 0 0 0 14,1 1,1 0 0 0 13,2 v 8 a 1.0001,1.0001 0 0 0 0.105469,0.447266 l 5.28125,10.550781 a 1.0001,1.0001 0 0 0 0,0.002 1.0001,1.0001 0 0 0 -0.0059,0 H 5.6191406 a 1.0001,1.0001 0 0 0 -0.00586,0 1.0001,1.0001 0 0 0 0,-0.002 L 10.894531,10.447266 A 1.0001,1.0001 0 0 0 11,10 V 2 A 1,1 0 0 0 10,1 Z"
|
|
||||||
id="path2" />
|
|
||||||
<path
|
|
||||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
d="m 8.5,1 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 h 7 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z"
|
|
||||||
id="path4" />
|
|
||||||
<path
|
|
||||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
d="m 7,15 a 1,1 0 0 0 -1,1 1,1 0 0 0 1,1 h 10 a 1,1 0 0 0 1,-1 1,1 0 0 0 -1,-1 z"
|
|
||||||
id="path6" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.1 KiB |
|
@ -1,49 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="currentColor"
|
|
||||||
stroke="none"
|
|
||||||
stroke-width="0"
|
|
||||||
version="1.1"
|
|
||||||
id="svg8"
|
|
||||||
sodipodi:docname="gamepad-2.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs12" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview10"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="15.638095"
|
|
||||||
inkscape:cy="12.495238"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg8" />
|
|
||||||
<path
|
|
||||||
d="M6 10a1 1 0 0 0-1 1 1 1 0 0 0 1 1h4a1 1 0 0 0 1-1 1 1 0 0 0-1-1z"
|
|
||||||
id="path2"
|
|
||||||
style="fill:#ffffff" />
|
|
||||||
<path
|
|
||||||
d="M8 8a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1 1 1 0 0 0 1-1V9a1 1 0 0 0-1-1zM15 11a1 1 0 0 0-1 1 1 1 0 0 0 1 1h.01a1 1 0 0 0 1-1 1 1 0 0 0-1-1zM18 9a1 1 0 0 0-1 1 1 1 0 0 0 1 1h.01a1 1 0 0 0 1-1 1 1 0 0 0-1-1z"
|
|
||||||
id="path4"
|
|
||||||
style="fill:#ffffff" />
|
|
||||||
<path
|
|
||||||
d="M6.68 4a5.013 5.013 0 0 0-4.973 4.486v.002l-.014.117a1 1 0 0 0-.002.018c-.04.338-.21 1.772-.373 3.318C1.156 13.488 1 15.098 1 16c0 2.197 1.803 4 4 4 1.333 0 2.207-.793 2.707-1.293l1.414-1.414A.999.999 0 0 1 9.828 17h4.344c.265 0 .52.105.707.293l1.414 1.414c.5.5 1.374 1.293 2.707 1.293 2.197 0 4-1.803 4-4 0-.903-.156-2.514-.318-4.06a239.334 239.334 0 0 0-.373-3.317 1 1 0 0 0-.004-.02l-.012-.115v-.002A5.012 5.012 0 0 0 17.32 4zm0 2h10.64a2.987 2.987 0 0 1 2.983 2.693 1 1 0 0 0 .002.014c.003.027.007.085.02.174.041.347.21 1.749.368 3.267.16 1.528.307 3.21.307 3.852 0 1.116-.884 2-2 2-.667 0-.793-.207-1.293-.707l-1.414-1.414A3.001 3.001 0 0 0 14.172 15H9.828c-.795 0-1.559.317-2.121.879l-1.414 1.414c-.5.5-.626.707-1.293.707-1.116 0-2-.884-2-2 0-.642.146-2.323.307-3.852.159-1.52.327-2.923.369-3.27l.002-.017c.009-.071.014-.128.017-.156a1 1 0 0 0 .002-.012A2.987 2.987 0 0 1 6.68 6z"
|
|
||||||
id="path6"
|
|
||||||
style="fill:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.3 KiB |
|
@ -1,43 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke="currentColor"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
version="1.1"
|
|
||||||
id="svg4"
|
|
||||||
sodipodi:docname="paperclip.svg"
|
|
||||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg">
|
|
||||||
<defs
|
|
||||||
id="defs8" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="namedview6"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="26.25"
|
|
||||||
inkscape:cx="12.019048"
|
|
||||||
inkscape:cy="12"
|
|
||||||
inkscape:window-width="1920"
|
|
||||||
inkscape:window-height="992"
|
|
||||||
inkscape:window-x="1600"
|
|
||||||
inkscape:window-y="24"
|
|
||||||
inkscape:window-maximized="1"
|
|
||||||
inkscape:current-layer="svg4" />
|
|
||||||
<path
|
|
||||||
style="color:#000000;fill:#ffffff;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
|
|
||||||
d="M 16.015625,0.32421875 C 14.737949,0.24906105 13.362296,0.73340705 12.242188,1.8535156 L 3.0527344,11.042969 c -1.5917746,1.591774 -2.25307446,3.496569 -2.14843752,5.27539 0.10463692,1.778822 0.93005392,3.410523 2.14843752,4.628907 1.2183835,1.218383 2.8500848,2.0438 4.6289062,2.148437 1.7788215,0.104637 3.6836164,-0.556663 5.2753904,-2.148437 l 9.189453,-9.189453 a 1,1 0 0 0 0,-1.414063 1,1 0 0 0 -1.414062,0 l -9.189453,9.189453 C 10.304747,20.771425 9.0268781,21.171848 7.7988281,21.099609 6.5707782,21.027371 5.3709112,20.437317 4.4667969,19.533203 3.5626826,18.629089 2.9726291,17.429222 2.9003906,16.201172 2.8281521,14.973122 3.2285755,13.695253 4.4667969,12.457031 L 13.65625,3.2675781 c 0.766555,-0.7665554 1.515283,-0.9900249 2.242188,-0.9472656 0.726904,0.042759 1.453541,0.3969009 2.003906,0.9472656 0.550364,0.5503647 0.904506,1.2770016 0.947265,2.0039063 0.04276,0.7269047 -0.18071,1.4756321 -0.947265,2.2421875 L 8.703125,16.703125 C 8.4082356,16.998014 8.1906032,17.04453 7.9648437,17.03125 7.7390843,17.01797 7.4837244,16.89974 7.2871094,16.703125 7.0904943,16.50651 6.9722644,16.25115 6.9589844,16.025391 6.9457044,15.799631 6.99222,15.581999 7.2871094,15.287109 L 15.777344,6.8066406 a 1,1 0 0 0 0,-1.4140625 1,1 0 0 0 -1.414063,0 L 5.8730469,13.873047 c -0.6484426,0.648442 -0.9558347,1.493 -0.9101563,2.269531 0.045679,0.776531 0.399272,1.463725 0.9101563,1.974609 0.5108842,0.510885 1.1980784,0.864478 1.9746093,0.910157 0.776531,0.04568 1.6210887,-0.261714 2.2695318,-0.910157 L 19.316406,8.9277344 C 20.436515,7.8076258 20.920861,6.4319731 20.845703,5.1542969 20.770545,3.8766207 20.18104,2.7181495 19.316406,1.8535156 18.451772,0.98888172 17.293301,0.39937645 16.015625,0.32421875 Z"
|
|
||||||
id="path2" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
|
@ -1,219 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* Copyright (C) 2014-2015 by Eike Hein <hein@kde.org> *
|
|
||||||
* Copyright (C) 2021 by Prateek SU <pankajsunal123@gmail.com> *
|
|
||||||
* *
|
|
||||||
* 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 2 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 General Public License *
|
|
||||||
* along with this program; if not, write to the *
|
|
||||||
* Free Software Foundation, Inc., *
|
|
||||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
import QtQuick 2.12
|
|
||||||
import QtQuick.Layouts 1.12
|
|
||||||
import org.kde.plasma.plasmoid 2.0
|
|
||||||
|
|
||||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
|
||||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
|
||||||
|
|
||||||
import org.kde.plasma.private.kicker 0.1 as Kicker
|
|
||||||
|
|
||||||
Item {
|
|
||||||
id: kicker
|
|
||||||
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
signal reset
|
|
||||||
|
|
||||||
property bool isDash: false
|
|
||||||
|
|
||||||
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
|
|
||||||
|
|
||||||
Plasmoid.compactRepresentation: null
|
|
||||||
Plasmoid.fullRepresentation: compactRepresentation
|
|
||||||
|
|
||||||
property Item dragSource: null
|
|
||||||
|
|
||||||
property QtObject globalFavorites: rootModel.favoritesModel
|
|
||||||
property QtObject systemFavorites: rootModel.systemFavoritesModel
|
|
||||||
|
|
||||||
function action_menuedit() {
|
|
||||||
processRunner.runMenuEditor();
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: compactRepresentation
|
|
||||||
CompactRepresentation { }
|
|
||||||
}
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: menuRepresentation
|
|
||||||
MenuRepresentation { }
|
|
||||||
}
|
|
||||||
|
|
||||||
Kicker.RootModel {
|
|
||||||
id: rootModel
|
|
||||||
|
|
||||||
autoPopulate: false
|
|
||||||
|
|
||||||
appNameFormat: plasmoid.configuration.appNameFormat
|
|
||||||
flat: true
|
|
||||||
sorted: true
|
|
||||||
showSeparators: false
|
|
||||||
appletInterface: plasmoid
|
|
||||||
|
|
||||||
showAllApps: true
|
|
||||||
showAllAppsCategorized: true
|
|
||||||
showTopLevelItems: !isDash
|
|
||||||
showRecentApps: plasmoid.configuration.showRecentApps
|
|
||||||
showRecentDocs: plasmoid.configuration.showRecentDocs
|
|
||||||
showRecentContacts: plasmoid.configuration.showRecentContacts
|
|
||||||
recentOrdering: plasmoid.configuration.recentOrdering
|
|
||||||
|
|
||||||
onShowRecentAppsChanged: {
|
|
||||||
plasmoid.configuration.showRecentApps = showRecentApps;
|
|
||||||
}
|
|
||||||
|
|
||||||
onShowRecentDocsChanged: {
|
|
||||||
plasmoid.configuration.showRecentDocs = showRecentDocs;
|
|
||||||
}
|
|
||||||
|
|
||||||
onShowRecentContactsChanged: {
|
|
||||||
plasmoid.configuration.showRecentContacts = showRecentContacts;
|
|
||||||
}
|
|
||||||
|
|
||||||
onRecentOrderingChanged: {
|
|
||||||
plasmoid.configuration.recentOrdering = recentOrdering;
|
|
||||||
}
|
|
||||||
|
|
||||||
onFavoritesModelChanged: {
|
|
||||||
if ("initForClient" in favoritesModel) {
|
|
||||||
favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + plasmoid.id)
|
|
||||||
|
|
||||||
if (!plasmoid.configuration.favoritesPortedToKAstats) {
|
|
||||||
favoritesModel.portOldFavorites(plasmoid.configuration.favoriteApps);
|
|
||||||
plasmoid.configuration.favoritesPortedToKAstats = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
favoritesModel.favorites = plasmoid.configuration.favoriteApps;
|
|
||||||
}
|
|
||||||
|
|
||||||
favoritesModel.maxFavorites = pageSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
onSystemFavoritesModelChanged: {
|
|
||||||
systemFavoritesModel.enabled = false;
|
|
||||||
systemFavoritesModel.favorites = plasmoid.configuration.favoriteSystemActions;
|
|
||||||
systemFavoritesModel.maxFavorites = 6;
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
if ("initForClient" in favoritesModel) {
|
|
||||||
favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + plasmoid.id)
|
|
||||||
|
|
||||||
if (!plasmoid.configuration.favoritesPortedToKAstats) {
|
|
||||||
favoritesModel.portOldFavorites(plasmoid.configuration.favoriteApps);
|
|
||||||
plasmoid.configuration.favoritesPortedToKAstats = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
favoritesModel.favorites = plasmoid.configuration.favoriteApps;
|
|
||||||
}
|
|
||||||
|
|
||||||
favoritesModel.maxFavorites = pageSize;
|
|
||||||
rootModel.refresh();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: globalFavorites
|
|
||||||
|
|
||||||
onFavoritesChanged: {
|
|
||||||
plasmoid.configuration.favoriteApps = target.favorites;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: systemFavorites
|
|
||||||
|
|
||||||
onFavoritesChanged: {
|
|
||||||
plasmoid.configuration.favoriteSystemActions = target.favorites;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Connections {
|
|
||||||
target: plasmoid.configuration
|
|
||||||
|
|
||||||
onFavoriteAppsChanged: {
|
|
||||||
globalFavorites.favorites = plasmoid.configuration.favoriteApps;
|
|
||||||
}
|
|
||||||
|
|
||||||
onFavoriteSystemActionsChanged: {
|
|
||||||
systemFavorites.favorites = plasmoid.configuration.favoriteSystemActions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Kicker.RunnerModel {
|
|
||||||
id: runnerModel
|
|
||||||
|
|
||||||
favoritesModel: globalFavorites
|
|
||||||
appletInterface: plasmoid
|
|
||||||
|
|
||||||
deleteWhenEmpty: false
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
Kicker.DragHelper {
|
|
||||||
id: dragHelper
|
|
||||||
}
|
|
||||||
|
|
||||||
Kicker.ProcessRunner {
|
|
||||||
id: processRunner;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.FrameSvgItem {
|
|
||||||
id: highlightItemSvg
|
|
||||||
|
|
||||||
visible: false
|
|
||||||
|
|
||||||
imagePath: "widgets/viewitem"
|
|
||||||
prefix: "hover"
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaCore.FrameSvgItem {
|
|
||||||
id: panelSvg
|
|
||||||
visible: false
|
|
||||||
imagePath: "widgets/panel-background"
|
|
||||||
}
|
|
||||||
|
|
||||||
PlasmaComponents.Label {
|
|
||||||
id: toolTipDelegate
|
|
||||||
|
|
||||||
width: contentWidth
|
|
||||||
height: contentHeight
|
|
||||||
|
|
||||||
property Item toolTip
|
|
||||||
|
|
||||||
text: (toolTip != null) ? toolTip.text : ""
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetDragSource() {
|
|
||||||
dragSource = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
|
||||||
plasmoid.setAction("menuedit", i18n("Edit Applications..."));
|
|
||||||
|
|
||||||
rootModel.refreshed.connect(reset);
|
|
||||||
|
|
||||||
dragHelper.dropped.connect(resetDragSource);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
[Desktop Entry]
|
|
||||||
Name=Andromeda Launcher
|
|
||||||
Comment=A modern Launcher for plasma!
|
|
||||||
|
|
||||||
Type=Service
|
|
||||||
Icon=start-here-kde
|
|
||||||
X-KDE-ServiceTypes=Plasma/Applet
|
|
||||||
|
|
||||||
X-Plasma-API=declarativeappletscript
|
|
||||||
X-Plasma-MainScript=ui/main.qml
|
|
||||||
X-Plasma-Provides=org.kde.plasma.launchermenu
|
|
||||||
|
|
||||||
X-KDE-PluginInfo-Author=EliverLara
|
|
||||||
X-KDE-PluginInfo-Email=eliverlara@gmail.com
|
|
||||||
X-KDE-PluginInfo-Name=AndromedaLauncher
|
|
||||||
X-KDE-PluginInfo-Version=0.6
|
|
||||||
X-KDE-PluginInfo-Website=https://github.com/EliverLara/AndromedaLauncher
|
|
||||||
X-KDE-PluginInfo-Category=Application Launchers
|
|
||||||
X-KDE-PluginInfo-EnabledByDefault=true
|
|
|
@ -1,53 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Version: 6
|
|
||||||
|
|
||||||
# This script will convert the *.po files to *.mo files, rebuilding the package/contents/locale folder.
|
|
||||||
# Feature discussion: https://phabricator.kde.org/D5209
|
|
||||||
# Eg: contents/locale/fr_CA/LC_MESSAGES/plasma_applet_org.kde.plasma.eventcalendar.mo
|
|
||||||
|
|
||||||
DIR=`cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd`
|
|
||||||
plasmoidName=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Name"`
|
|
||||||
website=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Website"`
|
|
||||||
bugAddress="$website"
|
|
||||||
packageRoot=".." # Root of translatable sources
|
|
||||||
projectName="plasma_applet_${plasmoidName}" # project name
|
|
||||||
|
|
||||||
#---
|
|
||||||
if [ -z "$plasmoidName" ]; then
|
|
||||||
echo "[build] Error: Couldn't read plasmoidName."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$(which msgfmt)" ]; then
|
|
||||||
echo "[build] Error: msgfmt command not found. Need to install gettext"
|
|
||||||
echo "[build] Running 'sudo apt install gettext'"
|
|
||||||
sudo apt install gettext
|
|
||||||
echo "[build] gettext installation should be finished. Going back to installing translations."
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---
|
|
||||||
echo "[build] Compiling messages"
|
|
||||||
|
|
||||||
catalogs=`find . -name '*.po' | sort`
|
|
||||||
for cat in $catalogs; do
|
|
||||||
echo "$cat"
|
|
||||||
catLocale=`basename ${cat%.*}`
|
|
||||||
msgfmt -o "${catLocale}.mo" "$cat"
|
|
||||||
|
|
||||||
installPath="$DIR/../contents/locale/${catLocale}/LC_MESSAGES/${projectName}.mo"
|
|
||||||
|
|
||||||
echo "[build] Install to ${installPath}"
|
|
||||||
mkdir -p "$(dirname "$installPath")"
|
|
||||||
mv "${catLocale}.mo" "${installPath}"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "[build] Done building messages"
|
|
||||||
|
|
||||||
if [ "$1" = "--restartplasma" ]; then
|
|
||||||
echo "[build] Restarting plasmashell"
|
|
||||||
killall plasmashell
|
|
||||||
kstart5 plasmashell
|
|
||||||
echo "[build] Done restarting plasmashell"
|
|
||||||
else
|
|
||||||
echo "[build] (re)install the plasmoid and restart plasmashell to test."
|
|
||||||
fi
|
|
|
@ -1,135 +0,0 @@
|
||||||
# Translation of MMcK Launcher in German
|
|
||||||
# Copyright (C) 2022
|
|
||||||
# This file is distributed under the same license as the MMcK Launcher package.
|
|
||||||
# Friedrich Schriewer <friedrich.schriewer@gmx.net>, 2022.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: mmcklauncher\n"
|
|
||||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
|
||||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
|
||||||
"PO-Revision-Date: 2022-03-07 20:42+0000\n"
|
|
||||||
"Last-Translator: Friedrich Schriewer <friedrich.schriewer@gmx.net>\n"
|
|
||||||
"Language-Team: n/a\n"
|
|
||||||
"Language: \n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Einstellungen"
|
|
||||||
|
|
||||||
msgid "Power Off"
|
|
||||||
msgstr "Herunterfahren"
|
|
||||||
|
|
||||||
msgid "Favorite Apps"
|
|
||||||
msgstr "Favoriten"
|
|
||||||
|
|
||||||
msgid "General"
|
|
||||||
msgstr "Allgemein"
|
|
||||||
|
|
||||||
msgid "Default Page:"
|
|
||||||
msgstr "Startseite:"
|
|
||||||
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Alle"
|
|
||||||
|
|
||||||
msgid "Developement"
|
|
||||||
msgstr "Entwicklung"
|
|
||||||
|
|
||||||
msgid "Games"
|
|
||||||
msgstr "Spiele"
|
|
||||||
|
|
||||||
msgid "Graphics"
|
|
||||||
msgstr "Grafik"
|
|
||||||
|
|
||||||
msgid "Internet"
|
|
||||||
msgstr "Internet"
|
|
||||||
|
|
||||||
msgid "Multimedia"
|
|
||||||
msgstr "Multimedia"
|
|
||||||
|
|
||||||
msgid "Office"
|
|
||||||
msgstr "Büro"
|
|
||||||
|
|
||||||
msgid "Science & Math"
|
|
||||||
msgstr "Wissenschaft & Mathematik"
|
|
||||||
|
|
||||||
msgid "System"
|
|
||||||
msgstr "System"
|
|
||||||
|
|
||||||
msgid "Utilities"
|
|
||||||
msgstr "Werkzeuge"
|
|
||||||
|
|
||||||
msgid "Lost & Found"
|
|
||||||
msgstr "Fundsachen"
|
|
||||||
|
|
||||||
msgid "Icon:"
|
|
||||||
msgstr "Ikone:"
|
|
||||||
|
|
||||||
msgid "Indicator:"
|
|
||||||
msgstr "Statusanzeige:"
|
|
||||||
|
|
||||||
msgid "Enabled"
|
|
||||||
msgstr "Eingeschaltet"
|
|
||||||
|
|
||||||
msgid "Indicator Color:"
|
|
||||||
msgstr "Farbe der Statusanzeige:"
|
|
||||||
|
|
||||||
msgid "Please choose a color"
|
|
||||||
msgstr "Bitte wählen Sie eine Farbe"
|
|
||||||
|
|
||||||
msgid "Greeting:"
|
|
||||||
msgstr "Begrüßung:"
|
|
||||||
|
|
||||||
msgid "Custom Greeting Text:"
|
|
||||||
msgstr "Benutzerdefinierte Begrüßung:"
|
|
||||||
|
|
||||||
msgid "No custom greeting set"
|
|
||||||
msgstr "Keine Begrüßung gesetzt"
|
|
||||||
|
|
||||||
msgid "Launcher Positioning:"
|
|
||||||
msgstr "Startmenü Position:"
|
|
||||||
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Standard"
|
|
||||||
|
|
||||||
msgid "Horizontal Center"
|
|
||||||
msgstr "Horizontal zentriert"
|
|
||||||
|
|
||||||
msgid "Screen Center"
|
|
||||||
msgstr "Bildschirmmitte"
|
|
||||||
|
|
||||||
msgid "Floating"
|
|
||||||
msgstr "Schwebend"
|
|
||||||
|
|
||||||
msgid "Offset Screen Edge (0 is Default):"
|
|
||||||
msgstr "Versatz Bildschirmkante (0 ist Standard):"
|
|
||||||
|
|
||||||
msgid "Offset Panel (0 is Default):"
|
|
||||||
msgstr "Versatz Leiste (0 ist Standard):"
|
|
||||||
|
|
||||||
msgid "All Applications (Default)"
|
|
||||||
msgstr "Alle Anwendungen (Standard)"
|
|
||||||
|
|
||||||
msgid "Search:"
|
|
||||||
msgstr "Suche:"
|
|
||||||
|
|
||||||
msgid "Expand search to bookmarks, files and emails"
|
|
||||||
msgstr "Erweiterte Suche für Lesezeichen, Dateien und E-Mails"
|
|
||||||
|
|
||||||
msgid "Theming:"
|
|
||||||
msgstr "Thematisierung:"
|
|
||||||
|
|
||||||
msgid "Dark (Default)"
|
|
||||||
msgstr "Dunkel (Standard)"
|
|
||||||
|
|
||||||
msgid "Light"
|
|
||||||
msgstr "Hell"
|
|
||||||
|
|
||||||
msgid "Matching"
|
|
||||||
msgstr "Automatisch anpassend"
|
|
||||||
|
|
||||||
msgid "Search your computer"
|
|
||||||
msgstr "Computer durchsuchen"
|
|
|
@ -1,135 +0,0 @@
|
||||||
# Translation of MMcK Launcher in French
|
|
||||||
# Copyright (C) 2022
|
|
||||||
# This file is distributed under the same license as the MMcK Launcher package.
|
|
||||||
# Augustin Laurent <augustin.lrt2@icloud.com>, 2022.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: mmcklauncher\n"
|
|
||||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
|
||||||
"POT-Creation-Date: 2022-08-07 10:00-0000\n"
|
|
||||||
"PO-Revision-Date: 2022-08-07 HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: ugustin Laurent <augustin.lrt2@icloud.com>\n"
|
|
||||||
"Language-Team: French <>\n"
|
|
||||||
"Language: fr\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Réglages"
|
|
||||||
|
|
||||||
msgid "Power Off"
|
|
||||||
msgstr "Éteindre"
|
|
||||||
|
|
||||||
msgid "Favorite Apps"
|
|
||||||
msgstr "Applications préférées"
|
|
||||||
|
|
||||||
msgid "General"
|
|
||||||
msgstr "Général"
|
|
||||||
|
|
||||||
msgid "Default Page:"
|
|
||||||
msgstr "Page par défaut:"
|
|
||||||
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Tout"
|
|
||||||
|
|
||||||
msgid "Developement"
|
|
||||||
msgstr "Développement"
|
|
||||||
|
|
||||||
msgid "Games"
|
|
||||||
msgstr "Jeux"
|
|
||||||
|
|
||||||
msgid "Graphics"
|
|
||||||
msgstr "Graphisme"
|
|
||||||
|
|
||||||
msgid "Internet"
|
|
||||||
msgstr "Internet"
|
|
||||||
|
|
||||||
msgid "Multimedia"
|
|
||||||
msgstr "Multimédia"
|
|
||||||
|
|
||||||
msgid "Office"
|
|
||||||
msgstr "Office"
|
|
||||||
|
|
||||||
msgid "Science & Math"
|
|
||||||
msgstr "Sciences & Math"
|
|
||||||
|
|
||||||
msgid "System"
|
|
||||||
msgstr "Système"
|
|
||||||
|
|
||||||
msgid "Utilities"
|
|
||||||
msgstr "Utilitaires"
|
|
||||||
|
|
||||||
msgid "Lost & Found"
|
|
||||||
msgstr "Lost & Found"
|
|
||||||
|
|
||||||
msgid "Icon:"
|
|
||||||
msgstr "Icône:"
|
|
||||||
|
|
||||||
msgid "Indicator:"
|
|
||||||
msgstr "Indicateur:"
|
|
||||||
|
|
||||||
msgid "Enabled"
|
|
||||||
msgstr "Activé"
|
|
||||||
|
|
||||||
msgid "Indicator Color:"
|
|
||||||
msgstr "Couleur de l'indicateur:"
|
|
||||||
|
|
||||||
msgid "Please choose a color"
|
|
||||||
msgstr "Veuillez choisir une couleur"
|
|
||||||
|
|
||||||
msgid "Greeting:"
|
|
||||||
msgstr "Message d'acceuil:"
|
|
||||||
|
|
||||||
msgid "Custom Greeting Text:"
|
|
||||||
msgstr "Texte d'acceuil personnalisé :"
|
|
||||||
|
|
||||||
msgid "No custom greeting set"
|
|
||||||
msgstr "Aucun message d'accueil personnalisé défini"
|
|
||||||
|
|
||||||
msgid "Launcher Positioning:"
|
|
||||||
msgstr "Positionnement du lanceur:"
|
|
||||||
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Défaut"
|
|
||||||
|
|
||||||
msgid "Horizontal Center"
|
|
||||||
msgstr "Centre horizontal"
|
|
||||||
|
|
||||||
msgid "Screen Center"
|
|
||||||
msgstr "Centre de l'écran"
|
|
||||||
|
|
||||||
msgid "Floating"
|
|
||||||
msgstr "Flottant"
|
|
||||||
|
|
||||||
msgid "Offset Screen Edge (0 is Default):"
|
|
||||||
msgstr "Décalage par rapport au bord de l'écran (0 est la valeur par défaut):"
|
|
||||||
|
|
||||||
msgid "Offset Panel (0 is Default):"
|
|
||||||
msgstr "Décalage par rapport à la barre de tâche (0 est la valeur par défaut):"
|
|
||||||
|
|
||||||
msgid "All Applications (Default)"
|
|
||||||
msgstr "Toutes les applications (par défaut)"
|
|
||||||
|
|
||||||
msgid "Search:"
|
|
||||||
msgstr "Rechercher:"
|
|
||||||
|
|
||||||
msgid "Expand search to bookmarks, files and emails"
|
|
||||||
msgstr "Étendre la recherche aux signets, fichiers et e-mails"
|
|
||||||
|
|
||||||
msgid "Theming:"
|
|
||||||
msgstr "Thème:"
|
|
||||||
|
|
||||||
msgid "Dark (Default)"
|
|
||||||
msgstr "Dark (Default)"
|
|
||||||
|
|
||||||
msgid "Light"
|
|
||||||
msgstr "Light"
|
|
||||||
|
|
||||||
msgid "Matching"
|
|
||||||
msgstr "Correspondant"
|
|
||||||
|
|
||||||
msgid "Search your computer"
|
|
||||||
msgstr "Rechercher dans votre ordinateur"
|
|
|
@ -1,135 +0,0 @@
|
||||||
# Translation of MMcK Launcher in id
|
|
||||||
# Copyright (C) 2022
|
|
||||||
# This file is distributed under the same license as the MMcK Launcher package.
|
|
||||||
# Adam Adrian <4.adam.adrian@gmail.com>, 2022.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: mmcklauncher\n"
|
|
||||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
|
||||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: Adam Adrian <4.adam.adrian@gmail.com>\n"
|
|
||||||
"Language-Team: Indonesia <>\n"
|
|
||||||
"Language: id\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Pengaturan"
|
|
||||||
|
|
||||||
msgid "Power Off"
|
|
||||||
msgstr "Matikan Daya"
|
|
||||||
|
|
||||||
msgid "Favorite Apps"
|
|
||||||
msgstr "Aplikasi Favorit"
|
|
||||||
|
|
||||||
msgid "General"
|
|
||||||
msgstr "Umum"
|
|
||||||
|
|
||||||
msgid "Default Page:"
|
|
||||||
msgstr "Halaman Bawaan"
|
|
||||||
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Semua"
|
|
||||||
|
|
||||||
msgid "Developement"
|
|
||||||
msgstr "Pengembangan"
|
|
||||||
|
|
||||||
msgid "Games"
|
|
||||||
msgstr "Permainan"
|
|
||||||
|
|
||||||
msgid "Graphics"
|
|
||||||
msgstr "Grafis"
|
|
||||||
|
|
||||||
msgid "Internet"
|
|
||||||
msgstr "Intenet"
|
|
||||||
|
|
||||||
msgid "Multimedia"
|
|
||||||
msgstr "Multimedia"
|
|
||||||
|
|
||||||
msgid "Office"
|
|
||||||
msgstr "Kantor"
|
|
||||||
|
|
||||||
msgid "Science & Math"
|
|
||||||
msgstr "Sains & Matematika"
|
|
||||||
|
|
||||||
msgid "System"
|
|
||||||
msgstr "Sistem"
|
|
||||||
|
|
||||||
msgid "Utilities"
|
|
||||||
msgstr "Alat"
|
|
||||||
|
|
||||||
msgid "Lost & Found"
|
|
||||||
msgstr "Hilang & Ditemukan"
|
|
||||||
|
|
||||||
msgid "Icon:"
|
|
||||||
msgstr "Ikon:"
|
|
||||||
|
|
||||||
msgid "Indicator:"
|
|
||||||
msgstr "Indkator:"
|
|
||||||
|
|
||||||
msgid "Enabled"
|
|
||||||
msgstr "Diaktifkan"
|
|
||||||
|
|
||||||
msgid "Indicator Color:"
|
|
||||||
msgstr "Warna Indikator"
|
|
||||||
|
|
||||||
msgid "Please choose a color"
|
|
||||||
msgstr "Silahkan pilih sebuah warna"
|
|
||||||
|
|
||||||
msgid "Greeting:"
|
|
||||||
msgstr "Sapaan:"
|
|
||||||
|
|
||||||
msgid "Custom Greeting Text:"
|
|
||||||
msgstr "Teks Sapaan Kustom:"
|
|
||||||
|
|
||||||
msgid "No custom greeting set"
|
|
||||||
msgstr "Tidak ada spaan kustom yang diatur"
|
|
||||||
|
|
||||||
msgid "Launcher Positioning:"
|
|
||||||
msgstr "Pemosisian Peluncur:"
|
|
||||||
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Default"
|
|
||||||
|
|
||||||
msgid "Horizontal Center"
|
|
||||||
msgstr "Tengah Horizontal"
|
|
||||||
|
|
||||||
msgid "Screen Center"
|
|
||||||
msgstr "Di Tengah Layar"
|
|
||||||
|
|
||||||
msgid "Floating"
|
|
||||||
msgstr "Mengambang"
|
|
||||||
|
|
||||||
msgid "Offset Screen Edge (0 is Default):"
|
|
||||||
msgstr "Offset Tepian Layar (0 = Default)"
|
|
||||||
|
|
||||||
msgid "Offset Panel (0 is Default):"
|
|
||||||
msgstr "Offset Panel (0 = Default)"
|
|
||||||
|
|
||||||
msgid "All Applications (Default)"
|
|
||||||
msgstr "Semua Aplikasi (Default)"
|
|
||||||
|
|
||||||
msgid "Search:"
|
|
||||||
msgstr "Cari:"
|
|
||||||
|
|
||||||
msgid "Expand search to bookmarks, files and emails"
|
|
||||||
msgstr "Luaskan pencaarian ke bookmark, file dan email"
|
|
||||||
|
|
||||||
msgid "Theming:"
|
|
||||||
msgstr "Tema:"
|
|
||||||
|
|
||||||
msgid "Dark (Default)"
|
|
||||||
msgstr "Gelap (Default)"
|
|
||||||
|
|
||||||
msgid "Light"
|
|
||||||
msgstr "Terang"
|
|
||||||
|
|
||||||
msgid "Matching"
|
|
||||||
msgstr "Cocokkan Tema"
|
|
||||||
|
|
||||||
msgid "Search your computer"
|
|
||||||
msgstr "Cari di komputermu"
|
|
|
@ -1,229 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Version: 21
|
|
||||||
|
|
||||||
# https://techbase.kde.org/Development/Tutorials/Localization/i18n_Build_Systems
|
|
||||||
# https://techbase.kde.org/Development/Tutorials/Localization/i18n_Build_Systems/Outside_KDE_repositories
|
|
||||||
# https://invent.kde.org/sysadmin/l10n-scripty/-/blob/master/extract-messages.sh
|
|
||||||
|
|
||||||
DIR=`cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd`
|
|
||||||
plasmoidName=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Name"`
|
|
||||||
widgetName="${plasmoidName##*.}" # Strip namespace
|
|
||||||
website=`kreadconfig5 --file="$DIR/../metadata.desktop" --group="Desktop Entry" --key="X-KDE-PluginInfo-Website"`
|
|
||||||
bugAddress="$website"
|
|
||||||
packageRoot=".." # Root of translatable sources
|
|
||||||
projectName="plasma_applet_${plasmoidName}" # project name
|
|
||||||
|
|
||||||
#---
|
|
||||||
if [ -z "$plasmoidName" ]; then
|
|
||||||
echo "[merge] Error: Couldn't read plasmoidName."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$(which xgettext)" ]; then
|
|
||||||
echo "[merge] Error: xgettext command not found. Need to install gettext"
|
|
||||||
echo "[merge] Running 'sudo apt install gettext'"
|
|
||||||
sudo apt install gettext
|
|
||||||
echo "[merge] gettext installation should be finished. Going back to merging translations."
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---
|
|
||||||
echo "[merge] Extracting messages"
|
|
||||||
potArgs="--from-code=UTF-8 --width=200 --add-location=file"
|
|
||||||
|
|
||||||
# Note: xgettext v0.20.1 (Kubuntu 20.04) and below will attempt to translate Icon,
|
|
||||||
# so we need to specify Name, GenericName, Comment, and Keywords.
|
|
||||||
# https://github.com/Zren/plasma-applet-lib/issues/1
|
|
||||||
# https://savannah.gnu.org/support/?108887
|
|
||||||
find "${packageRoot}" -name '*.desktop' | sort > "${DIR}/infiles.list"
|
|
||||||
xgettext \
|
|
||||||
${potArgs} \
|
|
||||||
--files-from="${DIR}/infiles.list" \
|
|
||||||
--language=Desktop \
|
|
||||||
-k -kName -kGenericName -kComment -kKeywords \
|
|
||||||
-D "${packageRoot}" \
|
|
||||||
-D "${DIR}" \
|
|
||||||
-o "template.pot.new" \
|
|
||||||
|| \
|
|
||||||
{ echo "[merge] error while calling xgettext. aborting."; exit 1; }
|
|
||||||
|
|
||||||
sed -i 's/"Content-Type: text\/plain; charset=CHARSET\\n"/"Content-Type: text\/plain; charset=UTF-8\\n"/' "template.pot.new"
|
|
||||||
|
|
||||||
# See Ki18n's extract-messages.sh for a full example:
|
|
||||||
# https://invent.kde.org/sysadmin/l10n-scripty/-/blob/master/extract-messages.sh#L25
|
|
||||||
# The -kN_ and -kaliasLocale keywords are mentioned in the Outside_KDE_repositories wiki.
|
|
||||||
# We don't need -kN_ since we don't use intltool-extract but might as well keep it.
|
|
||||||
# I have no idea what -kaliasLocale is used for. Googling aliasLocale found only listed kde1 code.
|
|
||||||
# We don't need to parse -ki18nd since that'll extract messages from other domains.
|
|
||||||
find "${packageRoot}" -name '*.cpp' -o -name '*.h' -o -name '*.c' -o -name '*.qml' -o -name '*.js' | sort > "${DIR}/infiles.list"
|
|
||||||
xgettext \
|
|
||||||
${potArgs} \
|
|
||||||
--files-from="${DIR}/infiles.list" \
|
|
||||||
-C -kde \
|
|
||||||
-ci18n \
|
|
||||||
-ki18n:1 -ki18nc:1c,2 -ki18np:1,2 -ki18ncp:1c,2,3 \
|
|
||||||
-kki18n:1 -kki18nc:1c,2 -kki18np:1,2 -kki18ncp:1c,2,3 \
|
|
||||||
-kxi18n:1 -kxi18nc:1c,2 -kxi18np:1,2 -kxi18ncp:1c,2,3 \
|
|
||||||
-kkxi18n:1 -kkxi18nc:1c,2 -kkxi18np:1,2 -kkxi18ncp:1c,2,3 \
|
|
||||||
-kI18N_NOOP:1 -kI18NC_NOOP:1c,2 \
|
|
||||||
-kI18N_NOOP2:1c,2 -kI18N_NOOP2_NOSTRIP:1c,2 \
|
|
||||||
-ktr2i18n:1 -ktr2xi18n:1 \
|
|
||||||
-kN_:1 \
|
|
||||||
-kaliasLocale \
|
|
||||||
--package-name="${widgetName}" \
|
|
||||||
--msgid-bugs-address="${bugAddress}" \
|
|
||||||
-D "${packageRoot}" \
|
|
||||||
-D "${DIR}" \
|
|
||||||
--join-existing \
|
|
||||||
-o "template.pot.new" \
|
|
||||||
|| \
|
|
||||||
{ echo "[merge] error while calling xgettext. aborting."; exit 1; }
|
|
||||||
|
|
||||||
sed -i 's/# SOME DESCRIPTIVE TITLE./'"# Translation of ${widgetName} in LANGUAGE"'/' "template.pot.new"
|
|
||||||
sed -i 's/# Copyright (C) YEAR THE PACKAGE'"'"'S COPYRIGHT HOLDER/'"# Copyright (C) $(date +%Y)"'/' "template.pot.new"
|
|
||||||
|
|
||||||
if [ -f "template.pot" ]; then
|
|
||||||
newPotDate=`grep "POT-Creation-Date:" template.pot.new | sed 's/.\{3\}$//'`
|
|
||||||
oldPotDate=`grep "POT-Creation-Date:" template.pot | sed 's/.\{3\}$//'`
|
|
||||||
sed -i 's/'"${newPotDate}"'/'"${oldPotDate}"'/' "template.pot.new"
|
|
||||||
changes=`diff "template.pot" "template.pot.new"`
|
|
||||||
if [ ! -z "$changes" ]; then
|
|
||||||
# There's been changes
|
|
||||||
sed -i 's/'"${oldPotDate}"'/'"${newPotDate}"'/' "template.pot.new"
|
|
||||||
mv "template.pot.new" "template.pot"
|
|
||||||
|
|
||||||
addedKeys=`echo "$changes" | grep "> msgid" | cut -c 9- | sort`
|
|
||||||
removedKeys=`echo "$changes" | grep "< msgid" | cut -c 9- | sort`
|
|
||||||
echo ""
|
|
||||||
echo "Added Keys:"
|
|
||||||
echo "$addedKeys"
|
|
||||||
echo ""
|
|
||||||
echo "Removed Keys:"
|
|
||||||
echo "$removedKeys"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
else
|
|
||||||
# No changes
|
|
||||||
rm "template.pot.new"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# template.pot didn't already exist
|
|
||||||
mv "template.pot.new" "template.pot"
|
|
||||||
fi
|
|
||||||
|
|
||||||
potMessageCount=`expr $(grep -Pzo 'msgstr ""\n(\n|$)' "template.pot" | grep -c 'msgstr ""')`
|
|
||||||
echo "| Locale | Lines | % Done|" > "./Status.md"
|
|
||||||
echo "|----------|---------|-------|" >> "./Status.md"
|
|
||||||
entryFormat="| %-8s | %7s | %5s |"
|
|
||||||
templateLine=`perl -e "printf(\"$entryFormat\", \"Template\", \"${potMessageCount}\", \"\")"`
|
|
||||||
echo "$templateLine" >> "./Status.md"
|
|
||||||
|
|
||||||
rm "${DIR}/infiles.list"
|
|
||||||
echo "[merge] Done extracting messages"
|
|
||||||
|
|
||||||
#---
|
|
||||||
echo "[merge] Merging messages"
|
|
||||||
catalogs=`find . -name '*.po' | sort`
|
|
||||||
for cat in $catalogs; do
|
|
||||||
echo "[merge] $cat"
|
|
||||||
catLocale=`basename ${cat%.*}`
|
|
||||||
|
|
||||||
widthArg=""
|
|
||||||
catUsesGenerator=`grep "X-Generator:" "$cat"`
|
|
||||||
if [ -z "$catUsesGenerator" ]; then
|
|
||||||
widthArg="--width=400"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cp "$cat" "$cat.new"
|
|
||||||
sed -i 's/"Content-Type: text\/plain; charset=CHARSET\\n"/"Content-Type: text\/plain; charset=UTF-8\\n"/' "$cat.new"
|
|
||||||
|
|
||||||
msgmerge \
|
|
||||||
${widthArg} \
|
|
||||||
--add-location=file \
|
|
||||||
--no-fuzzy-matching \
|
|
||||||
-o "$cat.new" \
|
|
||||||
"$cat.new" "${DIR}/template.pot"
|
|
||||||
|
|
||||||
sed -i 's/# SOME DESCRIPTIVE TITLE./'"# Translation of ${widgetName} in ${catLocale}"'/' "$cat.new"
|
|
||||||
sed -i 's/# Translation of '"${widgetName}"' in LANGUAGE/'"# Translation of ${widgetName} in ${catLocale}"'/' "$cat.new"
|
|
||||||
sed -i 's/# Copyright (C) YEAR THE PACKAGE'"'"'S COPYRIGHT HOLDER/'"# Copyright (C) $(date +%Y)"'/' "$cat.new"
|
|
||||||
|
|
||||||
poEmptyMessageCount=`expr $(grep -Pzo 'msgstr ""\n(\n|$)' "$cat.new" | grep -c 'msgstr ""')`
|
|
||||||
poMessagesDoneCount=`expr $potMessageCount - $poEmptyMessageCount`
|
|
||||||
poCompletion=`perl -e "printf(\"%d\", $poMessagesDoneCount * 100 / $potMessageCount)"`
|
|
||||||
poLine=`perl -e "printf(\"$entryFormat\", \"$catLocale\", \"${poMessagesDoneCount}/${potMessageCount}\", \"${poCompletion}%\")"`
|
|
||||||
echo "$poLine" >> "./Status.md"
|
|
||||||
|
|
||||||
# mv "$cat" "$cat.old"
|
|
||||||
mv "$cat.new" "$cat"
|
|
||||||
done
|
|
||||||
echo "[merge] Done merging messages"
|
|
||||||
|
|
||||||
#---
|
|
||||||
echo "[merge] Updating .desktop file"
|
|
||||||
|
|
||||||
# Generate LINGUAS for msgfmt
|
|
||||||
if [ -f "$DIR/LINGUAS" ]; then
|
|
||||||
rm "$DIR/LINGUAS"
|
|
||||||
fi
|
|
||||||
touch "$DIR/LINGUAS"
|
|
||||||
for cat in $catalogs; do
|
|
||||||
catLocale=`basename ${cat%.*}`
|
|
||||||
echo "${catLocale}" >> "$DIR/LINGUAS"
|
|
||||||
done
|
|
||||||
|
|
||||||
cp -f "$DIR/../metadata.desktop" "$DIR/template.desktop"
|
|
||||||
sed -i '/^Name\[/ d; /^GenericName\[/ d; /^Comment\[/ d; /^Keywords\[/ d' "$DIR/template.desktop"
|
|
||||||
|
|
||||||
msgfmt \
|
|
||||||
--desktop \
|
|
||||||
--template="$DIR/template.desktop" \
|
|
||||||
-d "$DIR/" \
|
|
||||||
-o "$DIR/new.desktop"
|
|
||||||
|
|
||||||
# Delete empty msgid messages that used the po header
|
|
||||||
if [ ! -z "$(grep '^Name=$' "$DIR/new.desktop")" ]; then
|
|
||||||
echo "[merge] Name in metadata.desktop is empty!"
|
|
||||||
sed -i '/^Name\[/ d' "$DIR/new.desktop"
|
|
||||||
fi
|
|
||||||
if [ ! -z "$(grep '^GenericName=$' "$DIR/new.desktop")" ]; then
|
|
||||||
echo "[merge] GenericName in metadata.desktop is empty!"
|
|
||||||
sed -i '/^GenericName\[/ d' "$DIR/new.desktop"
|
|
||||||
fi
|
|
||||||
if [ ! -z "$(grep '^Comment=$' "$DIR/new.desktop")" ]; then
|
|
||||||
echo "[merge] Comment in metadata.desktop is empty!"
|
|
||||||
sed -i '/^Comment\[/ d' "$DIR/new.desktop"
|
|
||||||
fi
|
|
||||||
if [ ! -z "$(grep '^Keywords=$' "$DIR/new.desktop")" ]; then
|
|
||||||
echo "[merge] Keywords in metadata.desktop is empty!"
|
|
||||||
sed -i '/^Keywords\[/ d' "$DIR/new.desktop"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Place translations at the bottom of the desktop file.
|
|
||||||
translatedLines=`cat "$DIR/new.desktop" | grep "]="`
|
|
||||||
if [ ! -z "${translatedLines}" ]; then
|
|
||||||
sed -i '/^Name\[/ d; /^GenericName\[/ d; /^Comment\[/ d; /^Keywords\[/ d' "$DIR/new.desktop"
|
|
||||||
if [ "$(tail -c 2 "$DIR/new.desktop" | wc -l)" != "2" ]; then
|
|
||||||
# Does not end with 2 empty lines, so add an empty line.
|
|
||||||
echo "" >> "$DIR/new.desktop"
|
|
||||||
fi
|
|
||||||
echo "${translatedLines}" >> "$DIR/new.desktop"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
mv "$DIR/new.desktop" "$DIR/../metadata.desktop"
|
|
||||||
rm "$DIR/template.desktop"
|
|
||||||
rm "$DIR/LINGUAS"
|
|
||||||
|
|
||||||
#---
|
|
||||||
# Populate ReadMe.md
|
|
||||||
echo "[merge] Updating translate/ReadMe.md"
|
|
||||||
sed -i -E 's`share\/plasma\/plasmoids\/(.+)\/translate`share/plasma/plasmoids/'"${plasmoidName}"'/translate`' ./ReadMe.md
|
|
||||||
if [[ "$website" == *"github.com"* ]]; then
|
|
||||||
sed -i -E 's`\[new issue\]\(https:\/\/github\.com\/(.+)\/(.+)\/issues\/new\)`[new issue]('"${website}"'/issues/new)`' ./ReadMe.md
|
|
||||||
fi
|
|
||||||
sed -i '/^|/ d' ./ReadMe.md # Remove status table from ReadMe
|
|
||||||
cat ./Status.md >> ./ReadMe.md
|
|
||||||
rm ./Status.md
|
|
||||||
|
|
||||||
echo "[merge] Done"
|
|
||||||
|
|
|
@ -1,136 +0,0 @@
|
||||||
# Translation of MMcK Launcher in LANGUAGE
|
|
||||||
# Copyright (C) 2022
|
|
||||||
# This file is distributed under the same license as the MMcK Launcher package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: mmcklauncher\n"
|
|
||||||
"Report-Msgid-Bugs-To: https://github.com/snoutbug/mmcklauncher\n"
|
|
||||||
"POT-Creation-Date: 2022-03-07 20:42-0000\n"
|
|
||||||
"PO-Revision-Date: 2022-03-08 13:20+0100\n"
|
|
||||||
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
|
|
||||||
"Language-Team: \n"
|
|
||||||
"Language: nl\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
||||||
"X-Generator: Poedit 3.0.1\n"
|
|
||||||
|
|
||||||
msgid "Settings"
|
|
||||||
msgstr "Instellingen"
|
|
||||||
|
|
||||||
msgid "Power Off"
|
|
||||||
msgstr "Uitschakelen"
|
|
||||||
|
|
||||||
msgid "Favorite Apps"
|
|
||||||
msgstr "Favorieten"
|
|
||||||
|
|
||||||
msgid "General"
|
|
||||||
msgstr "Algemeen"
|
|
||||||
|
|
||||||
msgid "Default Page:"
|
|
||||||
msgstr "Startpagina:"
|
|
||||||
|
|
||||||
msgid "All"
|
|
||||||
msgstr "Alles"
|
|
||||||
|
|
||||||
msgid "Developement"
|
|
||||||
msgstr "Ontwikkeling"
|
|
||||||
|
|
||||||
msgid "Games"
|
|
||||||
msgstr "Games"
|
|
||||||
|
|
||||||
msgid "Graphics"
|
|
||||||
msgstr "Grafisch"
|
|
||||||
|
|
||||||
msgid "Internet"
|
|
||||||
msgstr "Internet"
|
|
||||||
|
|
||||||
msgid "Multimedia"
|
|
||||||
msgstr "Multimedia"
|
|
||||||
|
|
||||||
msgid "Office"
|
|
||||||
msgstr "Kantoor"
|
|
||||||
|
|
||||||
msgid "Science & Math"
|
|
||||||
msgstr "Wetenschap"
|
|
||||||
|
|
||||||
msgid "System"
|
|
||||||
msgstr "Systeem"
|
|
||||||
|
|
||||||
msgid "Utilities"
|
|
||||||
msgstr "Hulpmiddelen"
|
|
||||||
|
|
||||||
msgid "Lost & Found"
|
|
||||||
msgstr "Overig"
|
|
||||||
|
|
||||||
msgid "Icon:"
|
|
||||||
msgstr "Pictogram:"
|
|
||||||
|
|
||||||
msgid "Indicator:"
|
|
||||||
msgstr "Indicator:"
|
|
||||||
|
|
||||||
msgid "Enabled"
|
|
||||||
msgstr "Ingeschakeld"
|
|
||||||
|
|
||||||
msgid "Indicator Color:"
|
|
||||||
msgstr "Indicatorkleur:"
|
|
||||||
|
|
||||||
msgid "Please choose a color"
|
|
||||||
msgstr "Kies een kleur"
|
|
||||||
|
|
||||||
msgid "Greeting:"
|
|
||||||
msgstr "Begroeting:"
|
|
||||||
|
|
||||||
msgid "Custom Greeting Text:"
|
|
||||||
msgstr "Eigen tekst:"
|
|
||||||
|
|
||||||
msgid "No custom greeting set"
|
|
||||||
msgstr "Geen eigen tekst ingesteld"
|
|
||||||
|
|
||||||
msgid "Launcher Positioning:"
|
|
||||||
msgstr "Startmenu openen op locatie:"
|
|
||||||
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Standaard"
|
|
||||||
|
|
||||||
msgid "Horizontal Center"
|
|
||||||
msgstr "Midden (horizontaal)"
|
|
||||||
|
|
||||||
msgid "Screen Center"
|
|
||||||
msgstr "Midden van scherm"
|
|
||||||
|
|
||||||
msgid "Floating"
|
|
||||||
msgstr "Zweven"
|
|
||||||
|
|
||||||
msgid "Offset Screen Edge (0 is Default):"
|
|
||||||
msgstr "Ruimte vanaf schermrand (standaard: 0)"
|
|
||||||
|
|
||||||
msgid "Offset Panel (0 is Default):"
|
|
||||||
msgstr "Ruimte vanaf paneel (standaard: 0)"
|
|
||||||
|
|
||||||
msgid "All Applications (Default)"
|
|
||||||
msgstr "Alle programma's (standaard)"
|
|
||||||
|
|
||||||
msgid "Search:"
|
|
||||||
msgstr "Zoeken:"
|
|
||||||
|
|
||||||
msgid "Expand search to bookmarks, files and emails"
|
|
||||||
msgstr "Ook bladwijzers, bestanden en e-mails doorzoeken"
|
|
||||||
|
|
||||||
msgid "Theming:"
|
|
||||||
msgstr "Thema:"
|
|
||||||
|
|
||||||
msgid "Dark (Default)"
|
|
||||||
msgstr "Donker (standaard)"
|
|
||||||
|
|
||||||
msgid "Light"
|
|
||||||
msgstr "Licht"
|
|
||||||
|
|
||||||
msgid "Matching"
|
|
||||||
msgstr "Systeemthema"
|
|
||||||
|
|
||||||
msgid "Search your computer"
|
|
||||||
msgstr "Doorzoek je computer"
|
|