mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
most icons are not plasmoids anymore
show plasmoids full rep in a flickable under quicksettings
This commit is contained in:
parent
69c0edd704
commit
8d2cf69972
7 changed files with 380 additions and 34 deletions
84
containments/panel/package/contents/applet/CompactApplet.qml
Normal file
84
containments/panel/package/contents/applet/CompactApplet.qml
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Copyright 2011 Marco Martin <mart@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 Library 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.1
|
||||
import QtQuick.Layouts 1.1
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.plasmoid 2.0
|
||||
|
||||
|
||||
PlasmaCore.ToolTipArea {
|
||||
id: appletRoot
|
||||
objectName: "org.kde.desktop-CompactApplet"
|
||||
anchors.fill: parent
|
||||
|
||||
icon: plasmoid.icon
|
||||
mainText: plasmoid.toolTipMainText
|
||||
subText: plasmoid.toolTipSubText
|
||||
location: if (plasmoid.parent && plasmoid.parent.parent.objectName === "hiddenTasksColumn" && plasmoid.location !== PlasmaCore.Types.LeftEdge) {
|
||||
return PlasmaCore.Types.RightEdge;
|
||||
} else {
|
||||
return plasmoid.location;
|
||||
}
|
||||
active: !plasmoid.expanded
|
||||
textFormat: plasmoid.toolTipTextFormat
|
||||
mainItem: plasmoid.toolTipItem ? plasmoid.toolTipItem : null
|
||||
|
||||
property Item fullRepresentation
|
||||
property Item compactRepresentation
|
||||
|
||||
Connections {
|
||||
target: plasmoid
|
||||
onContextualActionsAboutToShow: appletRoot.hideToolTip()
|
||||
}
|
||||
|
||||
|
||||
|
||||
Layout.minimumWidth: {
|
||||
switch (plasmoid.formFactor) {
|
||||
case PlasmaCore.Types.Vertical:
|
||||
return 0;
|
||||
case PlasmaCore.Types.Horizontal:
|
||||
return height;
|
||||
default:
|
||||
return units.gridUnit * 3;
|
||||
}
|
||||
}
|
||||
|
||||
Layout.minimumHeight: {
|
||||
switch (plasmoid.formFactor) {
|
||||
case PlasmaCore.Types.Vertical:
|
||||
return width;
|
||||
case PlasmaCore.Types.Horizontal:
|
||||
return 0;
|
||||
default:
|
||||
return units.gridUnit * 3;
|
||||
}
|
||||
}
|
||||
|
||||
onCompactRepresentationChanged: {
|
||||
if (compactRepresentation) {
|
||||
compactRepresentation.parent = appletRoot;
|
||||
compactRepresentation.anchors.fill = appletRoot;
|
||||
compactRepresentation.visible = true;
|
||||
}
|
||||
appletRoot.visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
/*
|
||||
* Copyright 2019 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 2.010-1301, USA.
|
||||
*/
|
||||
|
||||
import QtQuick 2.6
|
||||
import QtQuick.Layouts 1.4
|
||||
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.components 3.0 as PlasmaComponents
|
||||
import org.kde.plasma.workspace.components 2.0 as PW
|
||||
|
||||
|
||||
RowLayout {
|
||||
visible: pmSource.data["Battery"]["Has Cumulative"]
|
||||
|
||||
PW.BatteryIcon {
|
||||
id: battery
|
||||
Layout.preferredWidth: height
|
||||
Layout.fillHeight: true
|
||||
hasBattery: true
|
||||
percent: pmSource.data["Battery"]["Percent"]
|
||||
pluggedIn: pmSource.data["AC Adapter"] ? pmSource.data["AC Adapter"]["Plugged in"] : false
|
||||
|
||||
height: batteryLabel.height
|
||||
width: batteryLabel.height
|
||||
|
||||
PlasmaCore.DataSource {
|
||||
id: pmSource
|
||||
engine: "powermanagement"
|
||||
connectedSources: ["Battery", "AC Adapter"]
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: batteryLabel
|
||||
text: i18n("%1%", battery.percent)
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
|
||||
color: PlasmaCore.ColorScope.textColor
|
||||
font.pixelSize: parent.height / 2
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
Copyright 2019 MArco MArtni <mart@kde.org>
|
||||
Copyright 2013-2017 Jan Grulich <jgrulich@redhat.com>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) version 3, or any
|
||||
later version accepted by the membership of KDE e.V. (or its
|
||||
successor approved by the membership of KDE e.V.), which shall
|
||||
act as a proxy defined in Section 6 of version 3 of the license.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Layouts 1.4
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||
import org.kde.bluezqt 1.0 as BluezQt
|
||||
|
||||
PlasmaCore.IconItem {
|
||||
id: connectionIcon
|
||||
|
||||
property bool deviceConnected : false
|
||||
|
||||
source: deviceConnected ? "preferences-system-bluetooth-activated" : "preferences-system-bluetooth";
|
||||
colorGroup: PlasmaCore.ColorScope.colorGroup
|
||||
|
||||
visible: BluezQt.Manager.bluetoothOperational
|
||||
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: height
|
||||
function updateStatus()
|
||||
{
|
||||
var connectedDevices = [];
|
||||
|
||||
for (var i = 0; i < BluezQt.Manager.devices.length; ++i) {
|
||||
var device = BluezQt.Manager.devices[i];
|
||||
if (device.connected) {
|
||||
connectedDevices.push(device);
|
||||
}
|
||||
}
|
||||
deviceConnected = connectedDevices.length > 0;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
BluezQt.Manager.deviceAdded.connect(updateStatus);
|
||||
BluezQt.Manager.deviceRemoved.connect(updateStatus);
|
||||
BluezQt.Manager.deviceChanged.connect(updateStatus);
|
||||
BluezQt.Manager.bluetoothBlockedChanged.connect(updateStatus);
|
||||
BluezQt.Manager.bluetoothOperationalChanged.connect(updateStatus);
|
||||
|
||||
updateStatus();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright 2019 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 2.010-1301, USA.
|
||||
*/
|
||||
|
||||
import QtQuick 2.6
|
||||
import QtQuick.Layouts 1.4
|
||||
|
||||
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
|
||||
|
||||
|
||||
RowLayout {
|
||||
|
||||
property alias icon: icon.source
|
||||
property alias text: label.text
|
||||
PlasmaCore.IconItem {
|
||||
id: icon
|
||||
colorGroup: PlasmaCore.ColorScope.colorGroup
|
||||
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: height
|
||||
}
|
||||
PlasmaComponents.Label {
|
||||
id: label
|
||||
visible: text.length > 0
|
||||
color: PlasmaCore.ColorScope.textColor
|
||||
font.pixelSize: parent.height / 2
|
||||
}
|
||||
}
|
||||
52
containments/panel/package/contents/ui/indicators/Wifi.qml
Normal file
52
containments/panel/package/contents/ui/indicators/Wifi.qml
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
Copyright 2019 MArco MArtni <mart@kde.org>
|
||||
Copyright 2013-2017 Jan Grulich <jgrulich@redhat.com>
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) version 3, or any
|
||||
later version accepted by the membership of KDE e.V. (or its
|
||||
successor approved by the membership of KDE e.V.), which shall
|
||||
act as a proxy defined in Section 6 of version 3 of the license.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import QtQuick 2.2
|
||||
import QtQuick.Layouts 1.4
|
||||
import org.kde.plasma.core 2.0 as PlasmaCore
|
||||
import org.kde.plasma.components 2.0 as PlasmaComponents
|
||||
import org.kde.plasma.networkmanagement 0.2 as PlasmaNM
|
||||
|
||||
PlasmaCore.IconItem {
|
||||
id: connectionIcon
|
||||
|
||||
source: connectionIconProvider.connectionIcon
|
||||
colorGroup: PlasmaCore.ColorScope.colorGroup
|
||||
|
||||
Layout.fillHeight: true
|
||||
Layout.preferredWidth: height
|
||||
|
||||
PlasmaComponents.BusyIndicator {
|
||||
id: connectingIndicator
|
||||
|
||||
anchors.fill: parent
|
||||
running: connectionIconProvider.connecting
|
||||
visible: running
|
||||
}
|
||||
|
||||
PlasmaNM.NetworkStatus {
|
||||
id: networkStatus
|
||||
}
|
||||
|
||||
PlasmaNM.ConnectionIcon {
|
||||
id: connectionIconProvider
|
||||
}
|
||||
}
|
||||
|
|
@ -29,6 +29,7 @@ import org.kde.taskmanager 0.1 as TaskManager
|
|||
import "LayoutManager.js" as LayoutManager
|
||||
|
||||
import "quicksettings"
|
||||
import "indicators" as Indicators
|
||||
|
||||
PlasmaCore.ColorScope {
|
||||
id: root
|
||||
|
|
@ -51,28 +52,25 @@ PlasmaCore.ColorScope {
|
|||
}
|
||||
|
||||
function addApplet(applet, x, y) {
|
||||
var container = appletContainerComponent.createObject(appletIconsRow)
|
||||
var compactContainer = compactContainerComponent.createObject(appletIconsRow)
|
||||
print("Applet added: " + applet + " " + applet.title)
|
||||
container.width = units.iconSizes.medium
|
||||
container.height = container.height
|
||||
|
||||
applet.parent = container;
|
||||
container.applet = applet;
|
||||
applet.anchors.fill = container;
|
||||
applet.parent = compactContainer;
|
||||
compactContainer.applet = applet;
|
||||
applet.anchors.fill = compactContainer;
|
||||
applet.visible = true;
|
||||
container.visible = true;
|
||||
if (applet.pluginName == "org.kde.phone.notifications") {
|
||||
//FIXME: make a way to instantiate fullRepresentationItem without the open/close dance
|
||||
applet.expanded = true
|
||||
applet.expanded = false
|
||||
applet.fullRepresentationItem.parent = notificationsParent;
|
||||
notificationsParent.applet = applet;
|
||||
applet.fullRepresentationItem.anchors.fill = notificationsParent;
|
||||
} else {
|
||||
applet.preferredRepresentation = applet.compactRepresentation
|
||||
applet.switchWidth = -1;
|
||||
applet.switchHeight = -1;
|
||||
|
||||
}
|
||||
//FIXME: make a way to instantiate fullRepresentationItem without the open/close dance
|
||||
applet.expanded = true
|
||||
applet.expanded = false
|
||||
|
||||
var fullContainer = fullContainerComponent.createObject(fullRepresentationsLayout);
|
||||
fullContainer.parent = fullRepresentationsLayout;
|
||||
applet.fullRepresentationItem.parent = fullContainer;
|
||||
fullContainer.applet = applet;
|
||||
applet.fullRepresentationItem.anchors.fill = fullContainer;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
|
|
@ -109,17 +107,32 @@ PlasmaCore.ColorScope {
|
|||
Layout.minimumHeight: Math.max(root.height, Math.round(Layout.preferredHeight / root.height) * root.height)
|
||||
}
|
||||
|
||||
//todo: REMOVE?
|
||||
Component {
|
||||
id: appletContainerComponent
|
||||
id: compactContainerComponent
|
||||
Item {
|
||||
//not used yet
|
||||
property bool animationsEnabled: false
|
||||
property Item applet
|
||||
visible: applet && (applet.status != PlasmaCore.Types.HiddenStatus && applet.status != PlasmaCore.Types.PassiveStatus)
|
||||
Layout.fillHeight: true
|
||||
Layout.minimumWidth: applet && applet.compactRepresentationItem ? Math.max(applet.compactRepresentationItem.Layout.minimumWidth, appletIconsRow.height) : appletIconsRow.height
|
||||
Layout.maximumWidth: Layout.minimumWidth
|
||||
}
|
||||
}
|
||||
Component {
|
||||
id: fullContainerComponent
|
||||
Item {
|
||||
property Item applet
|
||||
visible: applet && (applet.status != PlasmaCore.Types.HiddenStatus && applet.status != PlasmaCore.Types.PassiveStatus)
|
||||
Layout.fillHeight: true
|
||||
Layout.minimumWidth: fullRepresentationsView.width
|
||||
Layout.minimumHeight: applet && applet.switchHeight
|
||||
onVisibleChanged: {
|
||||
if (visible) {
|
||||
fullRepresentationsView.setCurrentItem(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaCore.DataSource {
|
||||
id: timeSource
|
||||
|
|
@ -183,10 +196,24 @@ PlasmaCore.ColorScope {
|
|||
id: appletIconsRow
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
right: parent.right
|
||||
right: simpleIndicatorsLayout.left
|
||||
}
|
||||
height: parent.height
|
||||
}
|
||||
|
||||
//TODO: pluggable
|
||||
RowLayout {
|
||||
id: simpleIndicatorsLayout
|
||||
anchors {
|
||||
top: parent.top
|
||||
bottom: parent.bottom
|
||||
right: parent.right
|
||||
rightMargin: units.smallSpacing
|
||||
}
|
||||
Indicators.Bluetooth {}
|
||||
Indicators.Wifi {}
|
||||
Indicators.Battery {}
|
||||
}
|
||||
}
|
||||
MouseArea {
|
||||
z: 99
|
||||
|
|
@ -239,14 +266,39 @@ PlasmaCore.ColorScope {
|
|||
}
|
||||
y: quickSettingsParent.height - height * (1-opacity)
|
||||
opacity: slidingPanel.offset/panelContents.height
|
||||
contentItem: Item {
|
||||
id: notificationsParent
|
||||
height: Math.min(plasmoid.screenGeometry.height - quickSettingsParent.y - quickSettingsParent.height, implicitHeight)
|
||||
contentItem: Flickable {
|
||||
id: fullRepresentationsView
|
||||
|
||||
property var applet
|
||||
implicitHeight: applet ? applet.fullRepresentationItem.Layout.maximumHeight : 0
|
||||
property int minimumHeight: applet ? applet.fullRepresentationItem.Layout.minimumHeight : 0
|
||||
property Item currentItem
|
||||
onCurrentItemChanged: {
|
||||
if (currentItem) {
|
||||
contentX = currentItem.x
|
||||
} else {
|
||||
currentItem = children[0];
|
||||
}
|
||||
}
|
||||
|
||||
//TODO implicitHeight: applet ? applet.switchHeight : 0
|
||||
function setCurrentItem(item) {
|
||||
currentItem = item;
|
||||
currentItemChanged();
|
||||
}
|
||||
onMovementEnded: setCurrentItem(fullRepresentationsLayout.childAt(contentX + width/2, 1))
|
||||
contentWidth: fullRepresentationsLayout.width
|
||||
contentHeight: height
|
||||
implicitHeight: fullRepresentationsLayout.implicitHeight
|
||||
clip: true
|
||||
Behavior on contentX {
|
||||
NumberAnimation {
|
||||
duration: units.longDuration
|
||||
easing: easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: fullRepresentationsLayout
|
||||
spacing: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,12 +6,8 @@ for (var j = 0; j < desktopsArray.length; j++) {
|
|||
|
||||
var panel = new Panel("org.kde.phone.panel");
|
||||
panel.addWidget("org.kde.phone.notifications");
|
||||
panel.addWidget("org.kde.plasma.networkmanagement");
|
||||
var battery = panel.addWidget("org.kde.plasma.battery");
|
||||
battery.writeConfig("showPercentage", true);
|
||||
battery.reloadConfig();
|
||||
panel.addWidget("org.kde.plasma.volume");
|
||||
panel.addWidget("org.kde.phone.activities");
|
||||
panel.addWidget("org.kde.plasma.mediacontroller");
|
||||
panel.addWidget("org.kde.plasma.devicenotifier");
|
||||
panel.height = 1 * gridUnit;
|
||||
|
||||
var bottomPanel = new Panel("org.kde.phone.taskpanel");
|
||||
|
|
|
|||
Loading…
Reference in a new issue