mirror of
https://github.com/tumillanino/miasma-os.git
synced 2026-04-11 07:15:31 +00:00
some more branding
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.configuration
|
||||
|
||||
ConfigModel {
|
||||
id: configModel
|
||||
property bool isFolder: (Plasmoid.pluginName === "org.kde.plasma.folder")
|
||||
|
||||
ConfigCategory {
|
||||
name: i18nc("@title:group for configuration dialog page", "Location")
|
||||
icon: "inode-directory"
|
||||
source: "ConfigLocation.qml"
|
||||
visible: configModel.isFolder
|
||||
}
|
||||
|
||||
ConfigCategory {
|
||||
name: i18nc("@title:group for configuration dialog page", "Icons")
|
||||
icon: "preferences-desktop-icons"
|
||||
source: "ConfigIcons.qml"
|
||||
visible: configModel.isFolder
|
||||
}
|
||||
|
||||
ConfigCategory {
|
||||
name: i18nc("@title:group for configuration dialog page", "Filter")
|
||||
icon: "preferences-desktop-filter"
|
||||
source: "ConfigFilter.qml"
|
||||
visible: configModel.isFolder
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
<?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 custom icon to use for the compact representation (e.g. on a small panel) of the Folder View applet. Only used if useCustomIcon is true.</label>
|
||||
<default>folder-symbolic</default>
|
||||
</entry>
|
||||
<entry name="useCustomIcon" type="Bool">
|
||||
<label>Whether to use a custom icon for the compact representation (e.g. on a small panel) of the Folder View Applet.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
|
||||
<entry name="ItemsGeometries" type="String" hidden="true">
|
||||
<label>Encoded geometries of items (resource categories).</label>
|
||||
</entry>
|
||||
<entry name="ToolBoxButtonState" type="String">
|
||||
<label>Position state of the toolbox button.</label>
|
||||
<default></default>
|
||||
</entry>
|
||||
<entry name="ToolBoxButtonX" type="int">
|
||||
<label>X coordinate of the toolbox.</label>
|
||||
</entry>
|
||||
<entry name="ToolBoxButtonY" type="int">
|
||||
<label>Y coordinate of the toolbox.</label>
|
||||
</entry>
|
||||
<entry name="FirstStartup" type="Bool" hidden="true">
|
||||
<label>First time the containment starts?</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
|
||||
<entry name="positions" type="StringList" hidden="true">
|
||||
<default></default>
|
||||
</entry>
|
||||
|
||||
<entry name="url" type="String">
|
||||
<label>URL of the file system location being shown.</label>
|
||||
<default>desktop:/</default>
|
||||
</entry>
|
||||
<entry name="labelMode" type="Int">
|
||||
<label>How to show the Folder View label: 0 = No label, 1 = Friendly version of path relative to closest Places entry, 2 = Full path, 3 = Custom title</label>
|
||||
<default>1</default>
|
||||
</entry>
|
||||
<entry name="labelText" type="String">
|
||||
<label>Custom text for the Folder View label. Only used if labelMode is 3.</label>
|
||||
<default></default>
|
||||
</entry>
|
||||
|
||||
<entry name="arrangement" type="Int">
|
||||
<label>How Folder View icons are arranged: 0 = Rows, 1 = Columns</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="alignment" type="Int">
|
||||
<label>How Folder View icons are aligned: 0 = Left, 1 = Right</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="locked" type="Bool">
|
||||
<label>Whether Folder View icons are locked or not. Only used when serving as containment.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="sortMode" type="Int">
|
||||
<label>How Folder View icons are sorted: 0 = Unsorted, 1 = Name, 2 = Size, 3 = Type, 4 = Date</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="sortDesc" type="Bool">
|
||||
<label>Whether to sort Folder View icons descending instead of ascending.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="sortDirsFirst" type="Bool">
|
||||
<label>Whether to sort folders before files in Folder View.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="toolTips" type="Bool">
|
||||
<label>Whether to show info tooltips when hovering Folder View icons.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
<entry name="selectionMarkers" type="Bool">
|
||||
<label>Whether to show selection markers when hovering Folder View icons.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="renameInline" type="Bool">
|
||||
<label>Whether to initiate inline renaming when clicking on the text of an already-selected item, while using the systemwide double-click mode.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="popups" type="Bool">
|
||||
<label>Whether to show a popup preview window for Folder View icons for folders.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="previews" type="Bool">
|
||||
<label>Whether to show preview thumbnails in Folder View.</label>
|
||||
<default>true</default>
|
||||
</entry>
|
||||
<entry name="previewPlugins" type="StringList">
|
||||
<label>List of ids of the thumbnail preview plugins to use in Folder View. If empty, uses a default set of thumbnailers (cf. KIO::PreviewJob::defaultPlugins)</label>
|
||||
<default></default>
|
||||
</entry>
|
||||
<entry name="viewMode" type="Int">
|
||||
<label>The Folder View view mode (used only by the widget full representation): 0 = Grid, 1 = List</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="iconSize" type="Int">
|
||||
<label>The icon size to use for Folder View icons. 0 = 22px (smallMedium); 1 = 32px (medium); 2 = 48px (large); 3 = 64px (huge); 4 = 96px (large * 2); 5 = 128px (enormous); 6 = 256px (enormous * 2)</label>
|
||||
<default>3</default>
|
||||
</entry>
|
||||
<entry name="labelWidth" type="Int">
|
||||
<label>The width of the grid cells when using icon view. 0 = Narrow, 1 = Medium, 2 = Wide</label>
|
||||
<default>1</default>
|
||||
</entry>
|
||||
<entry name="textLines" type="Int">
|
||||
<label>The (maximum) number of lines of text to use below Folder View icons.</label>
|
||||
<default>2</default>
|
||||
</entry>
|
||||
<entry name="textColor" type="String">
|
||||
<label>The text color to use below Folder View icons. Only used when serving as containment.</label>
|
||||
<default>white</default>
|
||||
</entry>
|
||||
|
||||
<entry name="filterPattern" type="String">
|
||||
<label>The pattern to filter files by. Supports wildcards.</label>
|
||||
<default>*</default>
|
||||
</entry>
|
||||
<entry name="filterMode" type="Int">
|
||||
<label>The file filter mode: 0 = Show All Files, 1 = Show Files Matching, 2 = Hide Files Matching</label>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
<entry name="filterMimeTypes" type="StringList">
|
||||
<label>List of MIME types to filter by.</label>
|
||||
<default>all/all</default>
|
||||
</entry>
|
||||
<entry name="showHiddenFiles" type="Bool">
|
||||
<label>Show hidden files.</label>
|
||||
<default>false</default>
|
||||
</entry>
|
||||
</group>
|
||||
</kcfg>
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2011 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.plasma.components as PC3
|
||||
|
||||
PC3.ToolButton {
|
||||
id: button
|
||||
|
||||
property PlasmaCore.Action qAction
|
||||
readonly property int iconSize: Kirigami.Settings.hasTransientTouchInput
|
||||
? Kirigami.Units.iconSizes.medium
|
||||
: Kirigami.Units.iconSizes.small
|
||||
|
||||
property alias toolTip: toolTip.text
|
||||
|
||||
onClicked: {
|
||||
if (qAction) {
|
||||
qAction.trigger()
|
||||
}
|
||||
if (!Plasmoid.containment.corona.editMode) {
|
||||
appletContainer.editMode = false;
|
||||
}
|
||||
}
|
||||
|
||||
icon.width: iconSize
|
||||
icon.height: iconSize
|
||||
|
||||
PC3.ToolTip {
|
||||
id: toolTip
|
||||
text: button.qAction ? button.qAction.text : ""
|
||||
delay: 0
|
||||
visible: button.hovered && text.length > 0
|
||||
Kirigami.Theme.colorSet: Kirigami.Theme.Window
|
||||
Kirigami.Theme.inherit: false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2011-2013 Sebastian Kügler <sebas@kde.org>
|
||||
SPDX-FileCopyrightText: 2011 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
import org.kde.ksvg as KSvg
|
||||
import org.kde.plasma.components as PlasmaComponents3
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: upButton
|
||||
|
||||
width: gridView.cellWidth
|
||||
height: visible ? gridView.cellHeight : 0
|
||||
|
||||
visible: history.length !== 0
|
||||
|
||||
property bool ignoreClick: false
|
||||
property bool containsDrag: false
|
||||
property alias active: hoverActivateTimer.running
|
||||
|
||||
imagePath: "widgets/viewitem"
|
||||
|
||||
function handleDragMove() {
|
||||
containsDrag = true;
|
||||
hoverActivateTimer.restart();
|
||||
}
|
||||
|
||||
function endDragMove() {
|
||||
containsDrag = false;
|
||||
hoverActivateTimer.stop();
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
acceptedButtons: Qt.LeftButton | Qt.BackButton
|
||||
hoverEnabled: true
|
||||
|
||||
onContainsMouseChanged: {
|
||||
gridView.hoveredItem = null;
|
||||
}
|
||||
|
||||
onPressed: mouse => {
|
||||
if (mouse.buttons & Qt.BackButton) {
|
||||
if (root.isPopup && dir.resolvedUrl !== dir.resolve(Plasmoid.configuration.url)) {
|
||||
doBack();
|
||||
upButton.ignoreClick = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onClicked: mouse => {
|
||||
if (upButton.ignoreClick) {
|
||||
upButton.ignoreClick = false;
|
||||
return;
|
||||
}
|
||||
|
||||
doBack();
|
||||
}
|
||||
}
|
||||
|
||||
Kirigami.Icon {
|
||||
id: icon
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
leftMargin: Kirigami.Units.smallSpacing
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
width: gridView.iconSize
|
||||
height: gridView.iconSize
|
||||
|
||||
source: "arrow-left"
|
||||
}
|
||||
|
||||
PlasmaComponents3.Label {
|
||||
id: label
|
||||
|
||||
anchors {
|
||||
left: icon.right
|
||||
leftMargin: Kirigami.Units.smallSpacing * 2
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
width: parent.width - icon.width - (Kirigami.Units.smallSpacing * 4);
|
||||
|
||||
height: undefined // Unset PlasmaComponents.Label's default.
|
||||
|
||||
textFormat: Text.PlainText
|
||||
|
||||
maximumLineCount: root.isPopup ? 1 : Plasmoid.configuration.textLines
|
||||
wrapMode: Text.Wrap
|
||||
elide: Text.ElideRight
|
||||
|
||||
text: i18nc("@action:button", "Back")
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: hoverActivateTimer
|
||||
|
||||
interval: root.hoverActivateDelay
|
||||
|
||||
onTriggered: doBack()
|
||||
}
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "hover"
|
||||
when: mouseArea.containsMouse || upButton.containsDrag
|
||||
|
||||
PropertyChanges {
|
||||
upButton.prefix: "hover"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2013-2014 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.draganddrop as DragDrop
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
DragDrop.DropArea {
|
||||
id: compactRoot
|
||||
readonly property bool inPanel: [
|
||||
PlasmaCore.Types.TopEdge,
|
||||
PlasmaCore.Types.LeftEdge,
|
||||
PlasmaCore.Types.RightEdge,
|
||||
PlasmaCore.Types.BottomEdge,
|
||||
].includes(Plasmoid.location)
|
||||
|
||||
Layout.minimumWidth: Plasmoid.formFactor === PlasmaCore.Types.Horizontal ? height : Kirigami.Units.iconSizes.small
|
||||
Layout.minimumHeight: Plasmoid.formFactor === PlasmaCore.Types.Vertical ? width : (Kirigami.Units.iconSizes.small + 2 * Kirigami.Units.iconSizes.sizeForLabels)
|
||||
|
||||
property FolderView folderView: null
|
||||
|
||||
onContainsDragChanged: contained => {
|
||||
if (containsDrag) {
|
||||
hoverActivateTimer.restart();
|
||||
} else {
|
||||
hoverActivateTimer.stop();
|
||||
}
|
||||
}
|
||||
|
||||
onDrop: event => {
|
||||
folderView.model.dropCwd(event);
|
||||
}
|
||||
|
||||
preventStealing: true
|
||||
|
||||
function toggle() {
|
||||
root.expanded = !root.expanded;
|
||||
}
|
||||
|
||||
Kirigami.Icon {
|
||||
id: icon
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
active: mouseArea.containsMouse
|
||||
|
||||
source: Plasmoid.configuration.useCustomIcon ? Plasmoid.configuration.icon : compactRoot.folderView.model.iconName
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: mouse => compactRoot.toggle()
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: hoverActivateTimer
|
||||
|
||||
interval: root.hoverActivateDelay
|
||||
|
||||
onTriggered: compactRoot.toggle()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
import org.kde.kitemmodels as KItemModels
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
KCM.ScrollViewKCM {
|
||||
id: configIcons
|
||||
|
||||
property alias cfg_filterMode: filterMode.currentIndex
|
||||
property alias cfg_filterPattern: filterPattern.text
|
||||
property alias cfg_filterMimeTypes: mimeTypesModel.checkedTypes
|
||||
property alias cfg_showHiddenFiles: showHiddenFiles.checked
|
||||
|
||||
KItemModels.KSortFilterProxyModel {
|
||||
id: filteredMimeTypesModel
|
||||
|
||||
sourceModel: Folder.MimeTypesModel {
|
||||
id: mimeTypesModel
|
||||
}
|
||||
|
||||
filterRegularExpression: RegExp(mimeFilter.text, "i")
|
||||
filterRoleName: "name"
|
||||
|
||||
sortRoleName: "name"
|
||||
sortOrder: Qt.AscendingOrder
|
||||
|
||||
function checkFiltered() {
|
||||
var types = [];
|
||||
|
||||
for (var i = 0; i < count; ++i) {
|
||||
types.push(index(i, 0).data(Qt.UserRole));
|
||||
}
|
||||
|
||||
mimeTypesModel.checkedTypes = types;
|
||||
}
|
||||
|
||||
function uncheckFiltered() {
|
||||
var types = [];
|
||||
|
||||
for (var i = 0; i < count; ++i) {
|
||||
types.push(index(i, 0).data(Qt.UserRole));
|
||||
}
|
||||
|
||||
mimeTypesModel.checkedTypes = mimeTypesModel.checkedTypes
|
||||
.filter(x => types.indexOf(x) === -1);
|
||||
}
|
||||
}
|
||||
|
||||
header: Kirigami.FormLayout {
|
||||
ComboBox {
|
||||
id: filterMode
|
||||
Kirigami.FormData.label: i18nc("@label:listbox filter mode", "Files:")
|
||||
model: [i18nc("@item:inlistbox filter mode", "Show all"), i18nc("@item:inlistbox filter mode", "Show matching"), i18nc("@item:inlistbox filter mode", "Hide matching")]
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: filterPattern
|
||||
Kirigami.FormData.label: i18nc("@label:textbox", "File name pattern:")
|
||||
enabled: (filterMode.currentIndex > 0)
|
||||
inputMethodHints: Qt.ImhNoPredictiveText
|
||||
}
|
||||
|
||||
Kirigami.SearchField {
|
||||
id: mimeFilter
|
||||
Kirigami.FormData.label: i18nc("@label:textbox filter list by", "File types:")
|
||||
enabled: (filterMode.currentIndex > 0)
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: showHiddenFiles
|
||||
Kirigami.FormData.label: i18nc("@option:check prefix", "Show hidden files:")
|
||||
}
|
||||
}
|
||||
|
||||
view: ListView {
|
||||
id: mimeTypesView
|
||||
clip: true
|
||||
enabled: (filterMode.currentIndex > 0)
|
||||
|
||||
// Signal the delegates listen to when user presses space to toggle current row.
|
||||
signal toggleCurrent()
|
||||
|
||||
|
||||
model: filteredMimeTypesModel
|
||||
property real columnSize: Kirigami.Units.gridUnit * 15
|
||||
headerPositioning: ListView.OverlayHeader
|
||||
|
||||
Keys.onSpacePressed: toggleCurrent()
|
||||
|
||||
header: HorizontalHeaderView {
|
||||
id: headerView
|
||||
z: 9
|
||||
implicitWidth: mimeTypesView.width
|
||||
rowHeightProvider: function () {
|
||||
return Kirigami.Units.gridUnit * 2
|
||||
}
|
||||
clip: true // This removes event handling blocking by the header
|
||||
model: ListModel {
|
||||
Component.onCompleted: {
|
||||
append({ display: i18nc("@title:column", "File Type") });
|
||||
append({ display: i18nc("@title:column", "Description") });
|
||||
}
|
||||
}
|
||||
interactive: false
|
||||
columnWidthProvider: function(column) {
|
||||
if (column === 0) {
|
||||
return mimeTypesView.columnSize;
|
||||
} else {
|
||||
return mimeTypesView.width - mimeTypesView.columnSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delegate: ItemDelegate {
|
||||
id: delegate
|
||||
width: mimeTypesView.width
|
||||
required property string name
|
||||
required property string comment
|
||||
required property var decoration
|
||||
|
||||
contentItem: RowLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.preferredHeight: Kirigami.Units.iconSizes.small
|
||||
RowLayout {
|
||||
Layout.preferredWidth: mimeTypesView.columnSize
|
||||
Layout.maximumWidth: mimeTypesView.columnSize
|
||||
Layout.fillHeight: true
|
||||
CheckBox {
|
||||
Layout.fillHeight: true
|
||||
checked: mimeTypesModel.checkedTypes.indexOf(delegate.name) >= 0
|
||||
onToggled: {
|
||||
let idx = mimeTypesModel.checkedTypes.indexOf(delegate.name);
|
||||
if (idx >= 0) {
|
||||
mimeTypesModel.checkedTypes.splice(idx, 1);
|
||||
} else {
|
||||
mimeTypesModel.checkedTypes.push(delegate.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
Kirigami.Icon {
|
||||
Layout.fillHeight: true
|
||||
implicitWidth: Kirigami.Units.iconSizes.small
|
||||
implicitHeight: Kirigami.Units.iconSizes.small
|
||||
animated: false // TableView reuses delegates, avoid animation when sorting/filtering.
|
||||
source: delegate.decoration
|
||||
}
|
||||
Label {
|
||||
text: delegate.name
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
Label {
|
||||
text: delegate.comment
|
||||
elide: Text.ElideRight
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
footer: RowLayout {
|
||||
id: selectLayout
|
||||
Button {
|
||||
id: selectAllButton
|
||||
enabled: (filterMode.currentIndex > 0)
|
||||
icon.name: "edit-select-all"
|
||||
ToolTip.delay: Kirigami.Units.toolTipDelay
|
||||
ToolTip.visible: (Kirigami.Settings.isMobile ? pressed : hovered) && ToolTip.text.length > 0
|
||||
ToolTip.text: i18nc("@action:button tooltip only Select all filetypes", "Select All")
|
||||
onClicked: filteredMimeTypesModel.checkFiltered()
|
||||
}
|
||||
|
||||
Button {
|
||||
id: deselectAllButton
|
||||
enabled: (filterMode.currentIndex > 0)
|
||||
icon.name: "edit-select-none"
|
||||
ToolTip.delay: Kirigami.Units.toolTipDelay
|
||||
ToolTip.visible: (Kirigami.Settings.isMobile ? pressed : hovered) && ToolTip.text.length > 0
|
||||
ToolTip.text: i18nc("@action:button tooltip only Deselect all filetypes", "Deselect All")
|
||||
onClicked: filteredMimeTypesModel.uncheckFiltered()
|
||||
}
|
||||
|
||||
Button {
|
||||
enabled: (filterMode.currentIndex > 0)
|
||||
icon.name: filteredMimeTypesModel.sortOrder === Qt.AscendingOrder ? "view-sort-ascending-symbolic" : "view-sort-descending-symbolic"
|
||||
ToolTip.delay: Kirigami.Units.toolTipDelay
|
||||
ToolTip.visible: (Kirigami.Settings.isMobile ? pressed : hovered) && ToolTip.text.length > 0
|
||||
ToolTip.text: i18nc("@action:button tooltip only, ascending/descending", "Switch Sort Order")
|
||||
onClicked: {
|
||||
filteredMimeTypesModel.sortOrder = filteredMimeTypesModel.sortOrder === Qt.AscendingOrder ? Qt.DescendingOrder : Qt.AscendingOrder;
|
||||
filteredMimeTypesModel.sort(0, filteredMimeTypesModel.sortOrder);
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,358 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
|
||||
SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
import org.kde.iconthemes as KIconThemes
|
||||
import org.kde.config // for KAuthorized
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
KCM.SimpleKCM {
|
||||
id: configIcons
|
||||
|
||||
property bool isPopup: (Plasmoid.location !== PlasmaCore.Types.Floating)
|
||||
|
||||
property string cfg_icon: Plasmoid.configuration.icon
|
||||
property alias cfg_useCustomIcon: useCustomIcon.checked
|
||||
property alias cfg_arrangement: arrangement.currentIndex
|
||||
property alias cfg_alignment: alignment.currentIndex
|
||||
property bool cfg_locked
|
||||
property alias cfg_sortMode: sortMode.mode
|
||||
property alias cfg_sortDesc: sortDesc.checked
|
||||
property alias cfg_sortDirsFirst: sortDirsFirst.checked
|
||||
property alias cfg_toolTips: toolTips.checked
|
||||
property alias cfg_selectionMarkers: selectionMarkers.checked
|
||||
property alias cfg_renameInline: renameInline.checked
|
||||
property alias cfg_popups: popups.checked
|
||||
property alias cfg_previews: previews.checked
|
||||
property var cfg_previewPlugins
|
||||
property alias cfg_viewMode: viewMode.currentIndex
|
||||
property alias cfg_iconSize: iconSize.value
|
||||
property alias cfg_labelWidth: labelWidth.currentIndex
|
||||
property alias cfg_textLines: textLines.value
|
||||
|
||||
readonly property bool lockedByKiosk: !KAuthorized.authorize("editable_desktop_icons")
|
||||
|
||||
KIconThemes.IconDialog {
|
||||
id: iconDialog
|
||||
onIconNameChanged: iconName => configIcons.cfg_icon = iconName || "folder-symbolic";
|
||||
}
|
||||
|
||||
Kirigami.FormLayout {
|
||||
// Panel button
|
||||
RowLayout {
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
visible: configIcons.isPopup
|
||||
|
||||
Kirigami.FormData.label: i18nc("@title:group prefix for checkbox + button", "Panel button:")
|
||||
|
||||
CheckBox {
|
||||
id: useCustomIcon
|
||||
visible: configIcons.isPopup
|
||||
checked: configIcons.cfg_useCustomIcon
|
||||
text: i18nc("@option:check", "Use a custom icon")
|
||||
}
|
||||
|
||||
Button {
|
||||
id: iconButton
|
||||
Layout.minimumWidth: Kirigami.Units.iconSizes.large + Kirigami.Units.smallSpacing * 2
|
||||
Layout.maximumWidth: Layout.minimumWidth
|
||||
Layout.minimumHeight: Layout.minimumWidth
|
||||
Layout.maximumHeight: Layout.minimumWidth
|
||||
|
||||
checkable: true
|
||||
enabled: useCustomIcon.checked
|
||||
|
||||
onClicked: {
|
||||
checked = Qt.binding(() =>
|
||||
iconMenu.status === PlasmaExtras.Menu.Open);
|
||||
|
||||
iconMenu.open(0, height);
|
||||
}
|
||||
|
||||
Kirigami.Icon {
|
||||
anchors.centerIn: parent
|
||||
width: Kirigami.Units.iconSizes.large
|
||||
height: width
|
||||
source: configIcons.cfg_icon
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaExtras.Menu {
|
||||
id: iconMenu
|
||||
visualParent: iconButton
|
||||
|
||||
PlasmaExtras.MenuItem {
|
||||
text: i18nc("@item:inmenu Open icon chooser dialog", "Choose…")
|
||||
icon: "document-open-folder"
|
||||
onClicked: iconDialog.open()
|
||||
}
|
||||
|
||||
PlasmaExtras.MenuItem {
|
||||
text: i18nc("@item:inmenu Reset icon to default", "Clear Icon")
|
||||
icon: "edit-clear"
|
||||
onClicked: configIcons.cfg_icon = "folder-symbolic";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
visible: configIcons.isPopup
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Arrangement section
|
||||
ComboBox {
|
||||
id: arrangement
|
||||
Layout.fillWidth: true
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label:listbox columns/rows", "Arrangement:")
|
||||
|
||||
model: [
|
||||
i18nc("@item:inlistbox arrangement of icons", "In Columns"),
|
||||
i18nc("@item:inlistbox arrangement of icons", "In Rows"),
|
||||
]
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: alignment
|
||||
Layout.fillWidth: true
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label:listbox, LtR/RtL", "Sort Alignment:")
|
||||
|
||||
model: {
|
||||
const ltrText = i18nc("@item:inlistbox alignment of icons", "Left-to-Right");
|
||||
const rtlText = i18nc("@item:inlistbox alignment of icons", "Right-to-Left");
|
||||
if (Application.layoutDirection === Qt.LeftToRight) {
|
||||
return [ltrText, rtlText];
|
||||
}
|
||||
else {
|
||||
return [rtlText, ltrText];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: locked
|
||||
visible: ("containmentType" in Plasmoid)
|
||||
checked: configIcons.cfg_locked || configIcons.lockedByKiosk
|
||||
enabled: !configIcons.lockedByKiosk
|
||||
|
||||
onCheckedChanged: {
|
||||
if (!configIcons.lockedByKiosk) {
|
||||
configIcons.cfg_locked = checked;
|
||||
}
|
||||
}
|
||||
|
||||
text: i18nc("@option:check lock icon positions", "Lock in place")
|
||||
}
|
||||
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
}
|
||||
|
||||
|
||||
// Sorting section
|
||||
ComboBox {
|
||||
id: sortMode
|
||||
Layout.fillWidth: true
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label:listbox sort items by field", "Sort by:")
|
||||
|
||||
property int mode
|
||||
// FIXME TODO HACK: This maps the combo box list model to the KDirModel::ModelColumns
|
||||
// enum, which should be done in C++.
|
||||
property var indexToMode: [-1, 0, 1, 6, 2]
|
||||
property var modeToIndex: {'-1': '0', '0': '1', '1': '2', '6': '3', '2': '4'}
|
||||
|
||||
model: [i18nc("@item:inlistbox sort icons manually", "Manual"),
|
||||
i18nc("@item:inlistbox sort icons by name", "Name"),
|
||||
i18nc("@item:inlistbox sort icons by size", "Size"),
|
||||
i18nc("@item:inlistbox sort icons by file type", "Type"),
|
||||
i18nc("@item:inlistbox sort icons by date", "Date")]
|
||||
|
||||
Component.onCompleted: currentIndex = modeToIndex[mode]
|
||||
onActivated: index => mode = indexToMode[index]
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: sortDesc
|
||||
|
||||
enabled: sortMode.currentIndex !== 0
|
||||
|
||||
text: i18nc("@option:check sort icons in descending order", "Descending")
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: sortDirsFirst
|
||||
|
||||
enabled: sortMode.currentIndex !== 0
|
||||
|
||||
text: i18nc("@option:check sort icons with folders first", "Folders first")
|
||||
}
|
||||
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
|
||||
|
||||
// View Mode section (only if we're a pop-up)
|
||||
ComboBox {
|
||||
id: viewMode
|
||||
visible: configIcons.isPopup
|
||||
Layout.fillWidth: true
|
||||
|
||||
Kirigami.FormData.label: i18nc("whether to use icon or list view", "View mode:")
|
||||
|
||||
model: [i18nc("@item:inlistbox show icons in a list", "List"),
|
||||
i18nc("@item:inlistbox show icons in a grid", "Grid")]
|
||||
}
|
||||
|
||||
|
||||
// Size section
|
||||
Slider {
|
||||
id: iconSize
|
||||
|
||||
Layout.fillWidth: true
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label:slider", "Icon size:")
|
||||
|
||||
from: 0
|
||||
to: 6
|
||||
stepSize: 1
|
||||
snapMode: Slider.SnapAlways
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
|
||||
text: i18nc("@item:inrange smallest icon size", "Small")
|
||||
}
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
Label {
|
||||
Layout.alignment: Qt.AlignRight
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
|
||||
text: i18nc("@item:inrange largest icon size", "Large")
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: labelWidth
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
Layout.fillWidth: true
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label:listbox", "Label width:")
|
||||
|
||||
model: [
|
||||
i18nc("@item:inlistbox how long a text label should be", "Narrow"),
|
||||
i18nc("@item:inlistbox how long a text label should be", "Medium"),
|
||||
i18nc("@item:inlistbox how long a text label should be", "Wide"),
|
||||
]
|
||||
}
|
||||
|
||||
SpinBox {
|
||||
id: textLines
|
||||
visible: !configIcons.isPopup || viewMode.currentIndex === 1 /* Icons mode */
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label:spinbox", "Text lines:")
|
||||
|
||||
from: 1
|
||||
to: 10
|
||||
stepSize: 1
|
||||
}
|
||||
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
|
||||
|
||||
// Features section
|
||||
CheckBox {
|
||||
id: toolTips
|
||||
|
||||
Kirigami.FormData.label: i18nc("@title:group prefix for checkbox group", "When hovering over icons:")
|
||||
|
||||
text: i18nc("@option:check When hovering over icons…", "Show tooltips")
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: selectionMarkers
|
||||
visible: Application.styleHints.singleClickActivation
|
||||
|
||||
text: i18nc("@option:check When hovering over icons…", "Show selection markers")
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: popups
|
||||
visible: !configIcons.isPopup
|
||||
|
||||
text: i18nc("@option:check When hovering over icons…", "Show folder preview popups")
|
||||
}
|
||||
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: renameInline
|
||||
|
||||
Kirigami.FormData.label: i18nc("@label prefix for checkbox", "Rename:")
|
||||
|
||||
visible: !selectionMarkers.visible
|
||||
|
||||
text: i18nc("@option:check", "Rename inline by clicking selected item's text")
|
||||
}
|
||||
|
||||
Item {
|
||||
Kirigami.FormData.isSection: true
|
||||
visible: renameInline.visible
|
||||
}
|
||||
|
||||
CheckBox {
|
||||
id: previews
|
||||
|
||||
Kirigami.FormData.label: i18nc("@title:group prefix for checkbox and button", "Previews:")
|
||||
|
||||
text: i18nc("@option:check", "Show preview thumbnails")
|
||||
}
|
||||
|
||||
Button {
|
||||
id: previewSettings
|
||||
Layout.fillWidth: true
|
||||
|
||||
icon.name: "configure"
|
||||
text: i18nc("@action:button opens dialog", "Configure Preview Plugins…")
|
||||
|
||||
onClicked: {
|
||||
const component = Qt.createComponent(Qt.resolvedUrl("FolderItemPreviewPluginsDialog.qml"));
|
||||
component.incubateObject(configIcons.Window.window.contentItem, {
|
||||
"previewPlugins": configIcons.cfg_previewPlugins,
|
||||
}, Qt.Asynchronous);
|
||||
component.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
|
||||
KCM.SimpleKCM {
|
||||
id: configLocation
|
||||
|
||||
property string cfg_url
|
||||
property alias cfg_labelMode: labelMode.currentIndex
|
||||
property alias cfg_labelText: labelText.text
|
||||
property bool titleVisible: Plasmoid.containment != Plasmoid
|
||||
|
||||
onCfg_urlChanged: applyConfig()
|
||||
|
||||
function applyConfig(force) {
|
||||
if (!force && locationGroup.checkedButton !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (cfg_url === "desktop:/") {
|
||||
locationDesktop.checked = true;
|
||||
locationCustomValue.text = "";
|
||||
} else if (cfg_url === "activities:/current/") {
|
||||
locationCurrentActivity.checked = true;
|
||||
locationCustomValue.text = "";
|
||||
} else {
|
||||
var placeForUrl = placesModel.indexForUrl(cfg_url);
|
||||
|
||||
if (placeForUrl !== -1) {
|
||||
locationPlaceValue.currentIndex = placeForUrl; // needs to happen before checking the radiobutton
|
||||
locationPlace.checked = true;
|
||||
locationCustomValue.text = "";
|
||||
} else {
|
||||
locationCustom.checked = true;
|
||||
locationCustomValue.text = cfg_url;
|
||||
}
|
||||
}
|
||||
|
||||
locationPlaceValue.enabled = locationPlace.checked;
|
||||
}
|
||||
|
||||
Folder.PlacesModel {
|
||||
id: placesModel
|
||||
showDesktopEntry: false
|
||||
|
||||
onPlacesChanged: configLocation.applyConfig(true)
|
||||
}
|
||||
|
||||
ButtonGroup {
|
||||
id: locationGroup
|
||||
|
||||
buttons: [locationDesktop, locationCurrentActivity, locationPlace, locationCustom]
|
||||
|
||||
onCheckedButtonChanged: {
|
||||
if (checkedButton === locationDesktop) {
|
||||
configLocation.cfg_url = "desktop:/";
|
||||
} else if (checkedButton === locationCurrentActivity) {
|
||||
configLocation.cfg_url = "activities:/current/";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Kirigami.FormLayout {
|
||||
|
||||
RadioButton {
|
||||
id: locationDesktop
|
||||
implicitHeight: locationCustomValue.implicitHeight
|
||||
|
||||
Kirigami.FormData.label: i18nc("@title:group form label for radiobutton group", "Show:")
|
||||
|
||||
text: i18nc("@option:radio", "Desktop folder")
|
||||
}
|
||||
|
||||
RadioButton {
|
||||
id: locationCurrentActivity
|
||||
visible: placesModel.activityLinkingEnabled
|
||||
implicitHeight: locationCustomValue.implicitHeight
|
||||
|
||||
text: i18nc("@option:radio", "Files linked to the current activity")
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
RadioButton {
|
||||
id: locationPlace
|
||||
|
||||
text: i18nc("@option:radio also label for combobox", "Places panel item:")
|
||||
Layout.minimumWidth: Math.max(locationPlace.implicitWidth, locationCustom.implicitWidth, labelMode.implicitWidth)
|
||||
|
||||
onCheckedChanged: {
|
||||
locationPlaceValue.enabled = checked;
|
||||
}
|
||||
}
|
||||
|
||||
ComboBox {
|
||||
id: locationPlaceValue
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
model: placesModel
|
||||
textRole: "display"
|
||||
|
||||
enabled: true
|
||||
|
||||
onEnabledChanged: {
|
||||
if (enabled && currentIndex !== -1) {
|
||||
configLocation.cfg_url = Folder.DesktopSchemeHelper.getDesktopUrl(placesModel.urlForIndex(currentIndex));
|
||||
}
|
||||
}
|
||||
|
||||
onActivated: index => {
|
||||
configLocation.cfg_url = Folder.DesktopSchemeHelper.getDesktopUrl(placesModel.urlForIndex(index));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
RadioButton {
|
||||
id: locationCustom
|
||||
Layout.minimumWidth: Math.max(locationPlace.implicitWidth, locationCustom.implicitWidth, labelMode.implicitWidth)
|
||||
|
||||
text: i18nc("@option:radio also label for text field", "Custom location:")
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: locationCustomValue
|
||||
enabled: locationCustom.checked
|
||||
Layout.fillWidth: true
|
||||
|
||||
placeholderText: i18nc("@info:placeholder custom location", "Type path or URL…")
|
||||
|
||||
inputMethodHints: Qt.ImhNoPredictiveText
|
||||
|
||||
onEnabledChanged: {
|
||||
if (enabled && text !== "") {
|
||||
configLocation.cfg_url = Folder.DesktopSchemeHelper.getDesktopUrl(text);
|
||||
}
|
||||
}
|
||||
|
||||
onTextChanged: {
|
||||
if (enabled) {
|
||||
configLocation.cfg_url = Folder.DesktopSchemeHelper.getDesktopUrl(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
Button {
|
||||
icon.name: "document-open"
|
||||
|
||||
enabled: locationCustom.checked
|
||||
|
||||
onClicked: {
|
||||
directoryPicker.open();
|
||||
}
|
||||
}
|
||||
Folder.DirectoryPicker {
|
||||
id: directoryPicker
|
||||
|
||||
onUrlChanged: {
|
||||
locationCustomValue.text = Folder.DesktopSchemeHelper.getDesktopUrl(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Item {
|
||||
visible: configLocation.titleVisible
|
||||
Kirigami.FormData.isSection: true
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
visible: configLocation.titleVisible
|
||||
Kirigami.FormData.label: i18nc("@label:textbox custom widget title", "Title:")
|
||||
|
||||
ComboBox {
|
||||
id: labelMode
|
||||
Layout.minimumWidth: Math.max(locationPlace.implicitWidth, locationCustom.implicitWidth, labelMode.implicitWidth)
|
||||
visible: configLocation.titleVisible
|
||||
|
||||
|
||||
model: [
|
||||
i18nc("@item:inlistbox no title", "None"),
|
||||
i18nc("@item:inlistbox default title", "Default"),
|
||||
i18nc("@item:inlistbox full path as title", "Full path"),
|
||||
i18nc("@item:inlistbox title from text input field", "Custom")
|
||||
]
|
||||
}
|
||||
|
||||
TextField {
|
||||
id: labelText
|
||||
Layout.fillWidth: true
|
||||
enabled: (labelMode.currentIndex === 3)
|
||||
|
||||
placeholderText: i18nc("@info:placeholder custom window title", "Enter title…")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,256 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.ksvg as KSvg
|
||||
|
||||
|
||||
import org.kde.plasma.private.containmentlayoutmanager as ContainmentLayoutManager
|
||||
|
||||
ContainmentLayoutManager.ConfigOverlayWithHandles {
|
||||
id: overlay
|
||||
|
||||
SequentialAnimation {
|
||||
id: removeAnim
|
||||
|
||||
NumberAnimation {
|
||||
target: overlay.itemContainer
|
||||
property: "scale"
|
||||
from: 1
|
||||
to: 0
|
||||
duration: Kirigami.Units.longDuration
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
ScriptAction {
|
||||
script: {
|
||||
appletContainer.applet.plasmoid.internalAction("remove").trigger();
|
||||
appletContainer.editMode = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: frame
|
||||
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
anchors.verticalCenterOffset: {
|
||||
let heightDifference = Math.round((frame.height - overlay.height) / 2)
|
||||
if (heightDifference > 0) {
|
||||
if (heightDifference > overlay.topAvailableSpace) {
|
||||
return heightDifference - overlay.topAvailableSpace
|
||||
}
|
||||
if (heightDifference > overlay.bottomAvailableSpace) {
|
||||
return overlay.bottomAvailableSpace - heightDifference
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
x: overlay.rightAvailableSpace > width + Kirigami.Units.gridUnit
|
||||
? parent.width + Kirigami.Units.gridUnit
|
||||
: -width - Kirigami.Units.gridUnit
|
||||
|
||||
// This MouseArea is used to block input between the applet and the handle, to not make it steal by other applets
|
||||
MouseArea {
|
||||
anchors {
|
||||
top: parent.top
|
||||
bottom: parent.bottom
|
||||
}
|
||||
z: -1
|
||||
x: overlay.rightAvailableSpace > parent.width + Kirigami.Units.gridUnit ? -Kirigami.Units.gridUnit : 0
|
||||
width: Kirigami.Units.gridUnit + parent.width
|
||||
hoverEnabled: true
|
||||
}
|
||||
transform: Translate {
|
||||
x: overlay.open ? 0 : (overlay.rightAvailableSpace > frame.width + Kirigami.Units.gridUnit ? -frame.width : frame.width)
|
||||
|
||||
Behavior on x {
|
||||
NumberAnimation {
|
||||
duration: Kirigami.Units.longDuration
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
}
|
||||
width: layout.implicitWidth + margins.left + margins.right
|
||||
height: Math.max(layout.implicitHeight + margins.top + margins.bottom, parent.height)
|
||||
imagePath: "widgets/background"
|
||||
|
||||
ColumnLayout {
|
||||
id: layout
|
||||
anchors {
|
||||
fill: parent
|
||||
topMargin: parent.margins.top
|
||||
leftMargin: parent.margins.left
|
||||
bottomMargin: parent.margins.bottom
|
||||
rightMargin: parent.margins.right
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
id: rotateButton
|
||||
icon.name: "object-rotate-left-symbolic"
|
||||
toolTip: !rotateHandle.pressed ? i18nc("@action:button tooltip rotate widget", "Click and drag to rotate") : ""
|
||||
action: applet ? applet.plasmoid.internalAction("rotate") : null
|
||||
down: rotateHandle.pressed
|
||||
Component.onCompleted: {
|
||||
if (action !== null) {
|
||||
action.enabled = true;
|
||||
}
|
||||
}
|
||||
MouseArea {
|
||||
id: rotateHandle
|
||||
anchors.fill: parent
|
||||
|
||||
property int startRotation
|
||||
property real startCenterRelativeAngle
|
||||
|
||||
function pointAngle(pos: point): real {
|
||||
var r = Math.sqrt(pos.x * pos.x + pos.y * pos.y);
|
||||
var cosine = pos.x / r;
|
||||
|
||||
if (pos.y >= 0) {
|
||||
return Math.acos(cosine) * (180/Math.PI);
|
||||
} else {
|
||||
return -Math.acos(cosine) * (180/Math.PI);
|
||||
}
|
||||
}
|
||||
|
||||
function centerRelativePos(x: real, y: real): point {
|
||||
var mousePos = overlay.itemContainer.parent.mapFromItem(rotateButton, x, y);
|
||||
var centerPos = overlay.itemContainer.parent.mapFromItem(overlay.itemContainer, overlay.itemContainer.width/2, overlay.itemContainer.height/2);
|
||||
|
||||
mousePos.x -= centerPos.x;
|
||||
mousePos.y -= centerPos.y;
|
||||
return mousePos;
|
||||
}
|
||||
|
||||
onPressed: mouse => {
|
||||
mouse.accepted = true;
|
||||
startRotation = overlay.itemContainer.rotation;
|
||||
startCenterRelativeAngle = pointAngle(centerRelativePos(mouse.x, mouse.y));
|
||||
}
|
||||
|
||||
onPositionChanged: mouse => {
|
||||
var rot = startRotation % 360;
|
||||
var snap = 4;
|
||||
var newRotation = Math.round(pointAngle(centerRelativePos(mouse.x, mouse.y)) - startCenterRelativeAngle + startRotation);
|
||||
|
||||
if (newRotation < 0) {
|
||||
newRotation = newRotation + 360;
|
||||
} else if (newRotation >= 360) {
|
||||
newRotation = newRotation % 360;
|
||||
}
|
||||
|
||||
snapIt(0);
|
||||
snapIt(90);
|
||||
snapIt(180);
|
||||
snapIt(270);
|
||||
|
||||
function snapIt(snapTo) {
|
||||
if (newRotation > (snapTo - snap) && newRotation < (snapTo + snap)) {
|
||||
newRotation = snapTo;
|
||||
}
|
||||
}
|
||||
|
||||
overlay.itemContainer.rotation = newRotation;
|
||||
}
|
||||
|
||||
onReleased: mouse => {
|
||||
// save rotation
|
||||
overlay.itemContainer.layout.save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon.name: "configure"
|
||||
visible: qAction && qAction.enabled && (applet && applet.plasmoid.hasConfigurationInterface)
|
||||
qAction: applet ? applet.plasmoid.internalAction("configure") : null
|
||||
Component.onCompleted: {
|
||||
if (qAction) {
|
||||
qAction.enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
icon.name: "show-background"
|
||||
toolTip: checked ? i18nc("@action:button tooltip hide widget background", "Hide Background") : i18nc("@action:button tooltip", "Show Background")
|
||||
visible: (applet.plasmoid.backgroundHints & PlasmaCore.Types.ConfigurableBackground)
|
||||
checked: applet.plasmoid.effectiveBackgroundHints & PlasmaCore.Types.StandardBackground || applet.plasmoid.effectiveBackgroundHints & PlasmaCore.Types.TranslucentBackground
|
||||
checkable: true
|
||||
onClicked: {
|
||||
if (checked) {
|
||||
if (applet.plasmoid.backgroundHints & PlasmaCore.Types.StandardBackground || applet.plasmoid.backgroundHints & PlasmaCore.Types.TranslucentBackground) {
|
||||
applet.plasmoid.userBackgroundHints = applet.plasmoid.backgroundHints;
|
||||
} else {
|
||||
applet.plasmoid.userBackgroundHints = PlasmaCore.Types.StandardBackground;
|
||||
}
|
||||
} else {
|
||||
if (applet.plasmoid.backgroundHints & PlasmaCore.Types.ShadowBackground || applet.plasmoid.backgroundHints & PlasmaCore.Types.NoBackground) {
|
||||
applet.plasmoid.userBackgroundHints = applet.plasmoid.backgroundHints;
|
||||
} else {
|
||||
applet.plasmoid.userBackgroundHints = PlasmaCore.Types.ShadowBackground;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
drag.target: overlay.itemContainer
|
||||
Layout.minimumHeight: Kirigami.Units.gridUnit * 3
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
cursorShape: containsPress ? Qt.DragMoveCursor : Qt.OpenHandCursor
|
||||
hoverEnabled: true
|
||||
onPressed: mouse => {
|
||||
overlay.itemContainer.layout.releaseSpace(overlay.itemContainer);
|
||||
}
|
||||
onPositionChanged: mouse => {
|
||||
if (!pressed) {
|
||||
return;
|
||||
}
|
||||
overlay.itemContainer.layout.showPlaceHolderForItem(overlay.itemContainer);
|
||||
var dragPos = mapToItem(overlay.itemContainer, mouse.x, mouse.y);
|
||||
overlay.itemContainer.userDrag(Qt.point(overlay.itemContainer.x, overlay.itemContainer.y), dragPos);
|
||||
}
|
||||
onReleased: mouse => {
|
||||
overlay.itemContainer.layout.hidePlaceHolder();
|
||||
overlay.itemContainer.layout.positionItem(overlay.itemContainer);
|
||||
}
|
||||
}
|
||||
|
||||
ActionButton {
|
||||
id: closeButton
|
||||
icon.name: "edit-delete-remove"
|
||||
toolTip: i18nc("@action:button tooltip remove widget", "Remove")
|
||||
visible: {
|
||||
if (!applet) {
|
||||
return false;
|
||||
}
|
||||
var a = applet.plasmoid.internalAction("remove");
|
||||
return a && a.enabled || false;
|
||||
}
|
||||
// we don't set action, since we want to catch the button click,
|
||||
// animate, and then trigger the "remove" action
|
||||
// Triggering the action is handled in the overlay.itemContainer, we just
|
||||
// Q_EMIT a signal here to avoid the applet-gets-removed-before-we-
|
||||
// can-animate it race condition.
|
||||
onClicked: {
|
||||
removeAnim.restart();
|
||||
}
|
||||
Component.onCompleted: {
|
||||
var a = applet.plasmoid.internalAction("remove");
|
||||
if (a) {
|
||||
a.enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.ksvg as KSvg
|
||||
|
||||
KSvg.SvgItem {
|
||||
id: actionButton
|
||||
|
||||
width: {
|
||||
if (!visible) {
|
||||
return 0;
|
||||
}
|
||||
switch (Plasmoid.configuration.iconSize) {
|
||||
case 0: return Kirigami.Units.iconSizes.small;
|
||||
case 1: return Kirigami.Units.iconSizes.small;
|
||||
case 2: return Kirigami.Units.iconSizes.smallMedium;
|
||||
case 3: return Kirigami.Units.iconSizes.smallMedium;
|
||||
case 4: return Kirigami.Units.iconSizes.smallMedium;
|
||||
case 5: return Kirigami.Units.iconSizes.medium;
|
||||
case 6: return Kirigami.Units.iconSizes.large;
|
||||
default: return Kirigami.Units.iconSizes.small;
|
||||
}
|
||||
}
|
||||
height: width
|
||||
|
||||
signal clicked()
|
||||
|
||||
property string element
|
||||
|
||||
svg: KSvg.Svg {
|
||||
imagePath: "widgets/action-overlays"
|
||||
multipleImages: true
|
||||
size: Qt.size(16, 16)
|
||||
}
|
||||
elementId: element + "-normal"
|
||||
|
||||
Behavior on opacity {
|
||||
NumberAnimation { duration: Kirigami.Units.shortDuration }
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: actionButtonMouseArea
|
||||
|
||||
anchors.fill: actionButton
|
||||
|
||||
acceptedButtons: Qt.LeftButton
|
||||
hoverEnabled: true
|
||||
|
||||
onClicked: mouse => actionButton.clicked()
|
||||
|
||||
states: [
|
||||
State {
|
||||
name: "hover"
|
||||
when: actionButtonMouseArea.containsMouse && !actionButtonMouseArea.pressed
|
||||
|
||||
PropertyChanges {
|
||||
actionButton.elementId: actionButton.element + "-hover"
|
||||
}
|
||||
},
|
||||
State {
|
||||
name: "pressed"
|
||||
when: actionButtonMouseArea.pressed
|
||||
|
||||
PropertyChanges {
|
||||
actionButton.elementId: actionButton.element + "-pressed"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,489 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Window
|
||||
import Qt5Compat.GraphicalEffects
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
|
||||
Item {
|
||||
id: main
|
||||
|
||||
required property var model
|
||||
|
||||
property int index: model.index
|
||||
property string name: model.blank ? "" : model.display
|
||||
property string nameWrapped: model.blank ? "" : model.displayWrapped
|
||||
property bool blank: model.blank
|
||||
property bool selected: model.blank ? false : model.selected
|
||||
property bool isDir: loader.item ? loader.item.isDir : false
|
||||
property bool isOnRootView: false
|
||||
property /*FolderViewDialog*/ Folder.SubDialog popupDialog: loader.item ? loader.item.popupDialog : null
|
||||
property Item iconArea: loader.item ? loader.item.iconArea : null
|
||||
property Item label: loader.item ? loader.item.label : null
|
||||
property Item labelArea: loader.item ? loader.item.labelArea : null
|
||||
property Item actionsOverlay: loader.item ? loader.item.actionsOverlay : null
|
||||
property Item hoverArea: loader.item ? loader.item.hoverArea : null
|
||||
property Item frame: loader.item ? loader.item.frame : null
|
||||
property PlasmaCore.ToolTipArea toolTip: loader.item ? loader.item.toolTip : null
|
||||
property real contentHeight: loader.item && !root.useListViewMode ? loader.item.contentHeight : null
|
||||
Accessible.name: name
|
||||
Accessible.role: Accessible.Canvas
|
||||
|
||||
// This MouseArea exists to intercept press and hold; preventing edit mode
|
||||
// from being triggered when pressing and holding on an icon (if there is one).
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
visible: !main.blank
|
||||
}
|
||||
|
||||
function openPopup() {
|
||||
if (isDir) {
|
||||
loader.item.openPopup();
|
||||
}
|
||||
}
|
||||
|
||||
function closePopup() {
|
||||
if (popupDialog && popupDialog.allowClosing) {
|
||||
(popupDialog as FolderViewDialog).requestDestroy();
|
||||
loader.item.popupDialog = null;
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: loader
|
||||
|
||||
// On the desktop we pad our cellSize to avoid a gap at the right/bottom of the screen.
|
||||
// The padding per item is quite small and causes the delegate to be positioned on fractional pixels
|
||||
// leading to blurry rendering. The Loader is offset to account for this.
|
||||
x: -main.x % 1
|
||||
y: -main.y % 1
|
||||
width: parent.width
|
||||
height: parent.height
|
||||
|
||||
visible: status === Loader.Ready
|
||||
|
||||
active: !main.model.blank
|
||||
|
||||
sourceComponent: delegateImplementation
|
||||
|
||||
asynchronous: true
|
||||
}
|
||||
|
||||
function updateDragImage() {
|
||||
if (selected && !blank) {
|
||||
loader.grabToImage(result => {
|
||||
dir.addItemDragImage(positioner.map(index), main.x + loader.x, main.y + loader.y, loader.width, loader.height, result.image);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: delegateImplementation
|
||||
|
||||
Item {
|
||||
id: impl
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
property bool blank: main.model.blank
|
||||
property bool isDir: main.model.blank ? false : main.model.isDir
|
||||
property bool hovered: (main.GridView.view.hoveredItem === main)
|
||||
property /*FolderViewDialog*/ Folder.SubDialog popupDialog: null
|
||||
property Item iconArea: icon
|
||||
property Item label: label
|
||||
property Item labelArea: label
|
||||
property Item actionsOverlay: actions
|
||||
property Item hoverArea: toolTip
|
||||
property Item frame: frameLoader
|
||||
property alias toolTip: toolTip
|
||||
property Item selectionButton: selectionButtonComponent.createObject(actions) as FolderItemActionButton
|
||||
property Item popupButton: null
|
||||
property int contentHeight: frameLoader.height + frameLoader.y * 2
|
||||
|
||||
readonly property bool iconAndLabelsShouldlookSelected: impl.hovered
|
||||
|
||||
|
||||
Connections {
|
||||
target: main.model
|
||||
|
||||
function onSelectedChanged() {
|
||||
if (dir.usedByContainment && main.model.selected) {
|
||||
gridView.currentIndex = main.model.index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onHoveredChanged: {
|
||||
if (hovered) {
|
||||
if (Plasmoid.configuration.selectionMarkers && Application.styleHints.singleClickActivation) {
|
||||
selectionButton.visible = true;
|
||||
}
|
||||
|
||||
if (main.model.isDir) {
|
||||
if (!main.GridView.view.isRootView || root.containsDrag) {
|
||||
hoverActivateTimer.restart();
|
||||
}
|
||||
|
||||
if (Plasmoid.configuration.popups && !root.useListViewMode) {
|
||||
popupButton = popupButtonComponent.createObject(actions);
|
||||
}
|
||||
}
|
||||
} else if (!hovered) {
|
||||
if (popupDialog != null) {
|
||||
main.closePopup();
|
||||
}
|
||||
|
||||
selectionButton.visible = false;
|
||||
|
||||
if (popupButton) {
|
||||
popupButton.destroy();
|
||||
popupButton = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function openPopup() {
|
||||
if (folderViewDialogComponent.status === Component.Ready) {
|
||||
impl.popupDialog = folderViewDialogComponent.createObject(impl);
|
||||
impl.popupDialog.visualParent = icon;
|
||||
impl.popupDialog.url = Folder.DesktopSchemeHelper.getDesktopUrl(main.model.linkDestinationUrl);
|
||||
impl.popupDialog.visible = true;
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaCore.ToolTipArea {
|
||||
id: toolTip
|
||||
anchors.fill: impl
|
||||
|
||||
active: (Plasmoid.configuration.toolTips || label.truncated)
|
||||
&& impl.popupDialog === null
|
||||
&& !main.model.blank
|
||||
interactive: false
|
||||
location: root.useListViewMode ? (Plasmoid.location === PlasmaCore.Types.LeftEdge ? PlasmaCore.Types.LeftEdge : PlasmaCore.Types.RightEdge) : Plasmoid.location
|
||||
|
||||
onContainsMouseChanged: {
|
||||
if (containsMouse && !main.model.blank) {
|
||||
if (toolTip.active) {
|
||||
toolTip.icon = main.model.decoration;
|
||||
toolTip.mainText = main.model.display;
|
||||
|
||||
if (main.model.size !== undefined) {
|
||||
toolTip.subText = main.model.type + "\n" + main.model.size;
|
||||
} else {
|
||||
toolTip.subText = main.model.type;
|
||||
}
|
||||
}
|
||||
|
||||
Qt.callLater(() => {
|
||||
// Workaround for Qt Bug: https://bugreports.qt.io/browse/QTBUG-117444
|
||||
// In some cases the signal order is reversed:
|
||||
// - first it's delivered to the new object with "true" value
|
||||
// - next it's delivered to the old object with "false" value
|
||||
// In this case when the signal is emitted with "false" (to the old object),
|
||||
// it's also delivered to the "FolderView" which sets the "hoveredItem" to
|
||||
// "null" right after we set it here.
|
||||
// The solution is to call later and check again to make sure if we still contains
|
||||
// mouse and next set the "hoveredItem". In this approach the "FolderView" sets the
|
||||
// old "hoveredItem" to "null" and next we set it to the new item here.
|
||||
if (containsMouse && !main.model.blank) {
|
||||
main.GridView.view.hoveredItem = main;
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
states: [
|
||||
State { // icon view
|
||||
when: !root.useListViewMode
|
||||
|
||||
AnchorChanges {
|
||||
target: toolTip
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
|
||||
PropertyChanges {
|
||||
toolTip.y: frameLoader.y + icon.y
|
||||
toolTip.width: Math.max(icon.paintedWidth, label.paintedWidth)
|
||||
toolTip.height: (label.y + label.paintedHeight) - y
|
||||
}
|
||||
},
|
||||
State { // list view
|
||||
when: root.useListViewMode
|
||||
|
||||
AnchorChanges {
|
||||
target: toolTip
|
||||
anchors.horizontalCenter: undefined
|
||||
}
|
||||
|
||||
PropertyChanges {
|
||||
toolTip.x: frameLoader.x
|
||||
toolTip.y: frameLoader.y
|
||||
toolTip.width: frameLoader.width
|
||||
toolTip.height: frameLoader.height
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: frameLoader
|
||||
|
||||
x: root.useListViewMode ? 0 : Kirigami.Units.smallSpacing
|
||||
y: root.useListViewMode ? 0 : Kirigami.Units.smallSpacing
|
||||
|
||||
property Item iconShadow: null
|
||||
property string prefix: ""
|
||||
|
||||
sourceComponent: frameComponent
|
||||
active: impl.iconAndLabelsShouldlookSelected || (main.model?.selected ?? false)
|
||||
asynchronous: true
|
||||
|
||||
width: {
|
||||
if (root.useListViewMode) {
|
||||
if (main.GridView.view.overflowing) {
|
||||
return parent.width - Kirigami.Units.smallSpacing;
|
||||
} else {
|
||||
return parent.width;
|
||||
}
|
||||
}
|
||||
|
||||
return parent.width - (Kirigami.Units.smallSpacing * 2);
|
||||
}
|
||||
|
||||
height: root.useListViewMode
|
||||
? parent.height
|
||||
// the smallSpacings are for padding
|
||||
: icon.height + label.implicitHeight + (Kirigami.Units.smallSpacing * 3)
|
||||
|
||||
Kirigami.Icon {
|
||||
id: icon
|
||||
|
||||
z: 2
|
||||
|
||||
states: [
|
||||
State { // icon view
|
||||
when: !root.useListViewMode
|
||||
|
||||
AnchorChanges {
|
||||
target: icon
|
||||
anchors.top: parent.top
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
},
|
||||
State { // list view
|
||||
when: root.useListViewMode
|
||||
|
||||
AnchorChanges {
|
||||
target: icon
|
||||
anchors.left: parent.left
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
anchors {
|
||||
topMargin: Kirigami.Units.smallSpacing
|
||||
leftMargin: Kirigami.Units.smallSpacing
|
||||
}
|
||||
|
||||
width: root.useListViewMode ? main.GridView.view.iconSize : (parent.width - 2 * Kirigami.Units.smallSpacing)
|
||||
height: main.GridView.view.iconSize
|
||||
|
||||
opacity: {
|
||||
if (root.useListViewMode && impl.selectionButton.visible) {
|
||||
return 0.3;
|
||||
}
|
||||
|
||||
if (main.model.isHidden) {
|
||||
return 0.6;
|
||||
}
|
||||
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
animated: false
|
||||
|
||||
source: main.model.decoration
|
||||
}
|
||||
|
||||
PlasmaExtras.ShadowedLabel {
|
||||
id: label
|
||||
|
||||
readonly property bool renaming: (editor && editor.targetItem === main)
|
||||
|
||||
z: 2 // So it's always above the highlight effect
|
||||
|
||||
states: [
|
||||
State { // icon view
|
||||
when: !root.useListViewMode
|
||||
|
||||
AnchorChanges {
|
||||
target: label
|
||||
anchors.top: icon.bottom
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
PropertyChanges {
|
||||
label.anchors.topMargin: Kirigami.Units.smallSpacing
|
||||
label.width: label.parent.width - Kirigami.Units.smallSpacing
|
||||
label.maximumLineCount: label.Plasmoid.configuration.textLines
|
||||
label.horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
},
|
||||
State { // list view
|
||||
when: root.useListViewMode
|
||||
|
||||
AnchorChanges {
|
||||
target: label
|
||||
anchors.left: icon.right
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
PropertyChanges {
|
||||
label.anchors.leftMargin: Kirigami.Units.smallSpacing * 2
|
||||
label.anchors.rightMargin: Kirigami.Units.smallSpacing * 2
|
||||
label.width: label.parent.width - icon.width - (Kirigami.Units.smallSpacing * 4)
|
||||
label.maximumLineCount: 1
|
||||
label.horizontalAlignment: Text.AlignLeft
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
color: {
|
||||
if (main.isOnRootView) {
|
||||
// In this situation there's a shadow or a background rect, both of which are always black
|
||||
return "white";
|
||||
}
|
||||
|
||||
if (main.model.selected) {
|
||||
return Kirigami.Theme.highlightedTextColor;
|
||||
}
|
||||
|
||||
return Kirigami.Theme.textColor;
|
||||
|
||||
}
|
||||
visible: !renaming
|
||||
renderShadow: main.isOnRootView && !renaming
|
||||
opacity: main.model.isHidden ? 0.6 : 1
|
||||
|
||||
text: main.nameWrapped
|
||||
font.italic: (main.model?.isLink ?? false)
|
||||
wrapMode: (maximumLineCount === 1) ? Text.NoWrap : Text.Wrap
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
}
|
||||
|
||||
Component {
|
||||
id: frameComponent
|
||||
|
||||
PlasmaExtras.Highlight {
|
||||
// Workaround for a bug where the frameComponent does not
|
||||
// get unloaded when items are dragged to a different
|
||||
// place on the desktop.
|
||||
visible: this === frameLoader.item
|
||||
hovered: impl.iconAndLabelsShouldlookSelected
|
||||
pressed: main.model.selected
|
||||
active: Window.active
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: selectionButtonComponent
|
||||
|
||||
FolderItemActionButton {
|
||||
element: main.model.selected ? "remove" : "add"
|
||||
|
||||
onClicked: {
|
||||
dir.toggleSelected(positioner.map(main.index));
|
||||
main.GridView.view.currentIndex = main.index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: popupButtonComponent
|
||||
|
||||
FolderItemActionButton {
|
||||
visible: main.GridView.view.isRootView && (impl.popupDialog == null)
|
||||
|
||||
element: "open"
|
||||
|
||||
onClicked: {
|
||||
dir.setSelected(positioner.map(main.index));
|
||||
main.GridView.view.currentIndex = main.index;
|
||||
main.openPopup();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: iconShadowComponent
|
||||
|
||||
DropShadow {
|
||||
anchors.fill: icon
|
||||
|
||||
z: 1
|
||||
|
||||
verticalOffset: 1
|
||||
|
||||
radius: 5.0
|
||||
samples: radius * 2 + 1
|
||||
spread: 0.05
|
||||
|
||||
color: "black"
|
||||
|
||||
opacity: main.model.isHidden ? 0.3 : 0.6
|
||||
|
||||
source: icon
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: actions
|
||||
|
||||
visible: {
|
||||
if (main.GridView.view.isRootView && root.containsDrag) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!main.GridView.view.isRootView && main.GridView.view.dialog && main.GridView.view.dialog.containsDrag) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (main.popupDialog) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
anchors {
|
||||
left: frameLoader.left
|
||||
top: frameLoader.top
|
||||
leftMargin: root.useListViewMode ? (icon.x + (icon.width / 2)) - (width / 2) : 0
|
||||
topMargin: root.useListViewMode ? (icon.y + (icon.height / 2)) - (height / 2) : 0
|
||||
}
|
||||
|
||||
width: implicitWidth
|
||||
height: implicitHeight
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
selectionButton.visible = false;
|
||||
if (Plasmoid.isContainment && main.GridView.view.isRootView && root.GraphicsInfo.api === GraphicsInfo.OpenGL) {
|
||||
frameLoader.iconShadow = iconShadowComponent.createObject(frameLoader);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
Kirigami.Dialog {
|
||||
id: dialog
|
||||
|
||||
required property var previewPlugins
|
||||
|
||||
title: i18nc("@title:window", "Preview Plugins")
|
||||
|
||||
preferredWidth: Kirigami.Units.gridUnit * 15
|
||||
implicitHeight: Math.round(parent.height * 0.8)
|
||||
standardButtons: Kirigami.Dialog.Ok | Kirigami.Dialog.Cancel
|
||||
|
||||
onAccepted: {
|
||||
configIcons.cfg_previewPlugins = previewPluginsModel.checkedPlugins;
|
||||
dialog.close();
|
||||
}
|
||||
onRejected: {
|
||||
dialog.close();
|
||||
destroy();
|
||||
}
|
||||
onClosed: destroy()
|
||||
|
||||
ListView {
|
||||
model: Folder.PreviewPluginsModel {
|
||||
id: previewPluginsModel
|
||||
}
|
||||
|
||||
delegate: CheckDelegate {
|
||||
required property var model // for display, which shadows a delegate property
|
||||
required checked
|
||||
width: ListView.view.width
|
||||
text: model.display
|
||||
|
||||
onToggled: model.checked = checked;
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
previewPluginsModel.checkedPlugins = dialog.previewPlugins;
|
||||
open();
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
|
||||
Folder.SubDialog {
|
||||
id: dialog
|
||||
|
||||
visible: false
|
||||
|
||||
property bool containsDrag: {
|
||||
if (folderViewDropArea.containsDrag) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (folderView.hoveredItem && folderView.hoveredItem.popupDialog) {
|
||||
return folderView.hoveredItem.popupDialog.containsDrag;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
property QtObject closeTimer: closeTimer
|
||||
property QtObject childDialog: (folderView.hoveredItem !== null) ? folderView.hoveredItem.popupDialog : null
|
||||
property bool containsMouse: folderView.containsMouse || (childDialog !== null && childDialog.containsMouse)
|
||||
|
||||
property alias url: folderView.url
|
||||
|
||||
location: PlasmaCore.Types.Floating
|
||||
hideOnWindowDeactivate: (allowClosing && (childDialog === null))
|
||||
|
||||
onContainsMouseChanged: {
|
||||
if (containsMouse) {
|
||||
closeTimer.stop();
|
||||
} else {
|
||||
closeTimer.start();
|
||||
}
|
||||
}
|
||||
|
||||
mainItem: FolderViewDropArea {
|
||||
id: folderViewDropArea
|
||||
|
||||
width: folderView.cellWidth * 3 + Kirigami.Units.gridUnit // FIXME HACK: Use actual scrollbar width.
|
||||
height: folderView.cellHeight * 2
|
||||
|
||||
folderView: folderView
|
||||
|
||||
FolderView {
|
||||
id: folderView
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
isRootView: false
|
||||
dialog: dialog
|
||||
|
||||
locked: true
|
||||
|
||||
sortMode: ((Plasmoid.configuration.sortMode === 0) ? 1 : Plasmoid.configuration.sortMode)
|
||||
filterMode: 0
|
||||
|
||||
// TODO: Bidi.
|
||||
flow: GridView.FlowLeftToRight
|
||||
layoutDirection: Qt.LeftToRight
|
||||
|
||||
onDragInProgressAnywhereChanged: {
|
||||
if (!dragInProgressAnywhere && !dialog.visible) {
|
||||
dialog.destroy();
|
||||
}
|
||||
}
|
||||
onCreatingNewItemsChanged: {
|
||||
dialog.allowClosing = !creatingNewItems;
|
||||
}
|
||||
}
|
||||
|
||||
Loader {
|
||||
anchors.centerIn: parent
|
||||
width: parent.width - (Kirigami.Units.gridUnit * 4)
|
||||
active: folderView.view.count === 0
|
||||
sourceComponent: PlasmaExtras.PlaceholderMessage {
|
||||
text: i18nc("@info:placeholder", "Folder is empty")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data: [
|
||||
Timer {
|
||||
id: closeTimer
|
||||
|
||||
interval: Kirigami.Units.humanMoment
|
||||
|
||||
onTriggered: {
|
||||
if (dialog.childDialog !== null) {
|
||||
dialog.childDialog.closeTimer.stop();
|
||||
dialog.childDialog.visible = false;
|
||||
}
|
||||
|
||||
dialog.visible = false;
|
||||
dialog.delayedDestroy();
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
function requestDestroy() {
|
||||
if (folderView.dragInProgressAnywhere) {
|
||||
visible = false;
|
||||
} else {
|
||||
destroy();
|
||||
}
|
||||
}
|
||||
|
||||
function delayedDestroy() {
|
||||
Qt.callLater(() => itemDialog.destroy());
|
||||
}
|
||||
|
||||
Component.onDestruction: {
|
||||
closeTimer.stop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014-2017 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.draganddrop as DragDrop
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
DragDrop.DropArea {
|
||||
id: dropArea
|
||||
|
||||
property FolderView folderView: null
|
||||
|
||||
function handleDragMove(folderView, pos) {
|
||||
// Trigger autoscroll.
|
||||
folderView.scrollLeft = (pos.x < (Kirigami.Units.gridUnit * 3));
|
||||
folderView.scrollRight = (pos.x > width - (Kirigami.Units.gridUnit * 3));
|
||||
folderView.scrollUp = (pos.y < (Kirigami.Units.gridUnit * 3));
|
||||
folderView.scrollDown = (pos.y > height - (Kirigami.Units.gridUnit * 3));
|
||||
|
||||
folderView.handleDragMove(pos.x, pos.y);
|
||||
}
|
||||
|
||||
function handleDragEnd(folderView) {
|
||||
// Cancel autoscroll.
|
||||
folderView.scrollLeft = false;
|
||||
folderView.scrollRight = false;
|
||||
folderView.scrollUp = false;
|
||||
folderView.scrollDown = false;
|
||||
|
||||
folderView.endDragMove();
|
||||
}
|
||||
|
||||
onDragMove: event => {
|
||||
// TODO: We should reject drag moves onto file items that don't accept drops
|
||||
// (cf. QAbstractItemModel::flags() here, but DeclarativeDropArea currently
|
||||
// is currently incapable of rejecting drag events.
|
||||
|
||||
if (folderView) {
|
||||
handleDragMove(folderView, mapToItem(folderView, event.x, event.y));
|
||||
}
|
||||
}
|
||||
|
||||
onDragLeave: event => {
|
||||
if (folderView) {
|
||||
handleDragEnd(folderView);
|
||||
}
|
||||
}
|
||||
|
||||
onDrop: event => {
|
||||
if (folderView) {
|
||||
handleDragEnd(folderView);
|
||||
|
||||
folderView.drop(folderView, event, mapToItem(folderView, event.x, event.y));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,385 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQml
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.components as PlasmaComponents
|
||||
import org.kde.config // for KAuthorized
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
|
||||
FocusScope {
|
||||
id: folderViewLayerComponent
|
||||
|
||||
// these need to be passed in from main, but required properties with Loaders are awkward
|
||||
/*required*/ property bool isPopup
|
||||
/*required*/ property bool useListViewMode
|
||||
|
||||
property var sharedActions: ["newMenu", "paste", "undo", "emptyTrash"]
|
||||
property Component folderViewDialogComponent: Qt.createComponent("FolderViewDialog.qml", Qt.Asynchronous, root)
|
||||
|
||||
property FolderView view: folderView
|
||||
property Item label: null
|
||||
property int labelHeight: Kirigami.Units.iconSizes.sizeForLabels + (Kirigami.Units.smallSpacing * 2)
|
||||
|
||||
property alias model: folderView.model
|
||||
property alias overflowing: folderView.overflowing
|
||||
property alias flow: folderView.flow
|
||||
|
||||
readonly property bool lockedByKiosk: !KAuthorized.authorize("editable_desktop_icons")
|
||||
|
||||
focus: true
|
||||
|
||||
function updateContextualActions() {
|
||||
folderView.model.updateActions();
|
||||
|
||||
for (let i = 0, len = sharedActions.length; i < len; i++) {
|
||||
const actionName = sharedActions[i];
|
||||
const appletAction = Plasmoid.internalAction(actionName);
|
||||
if (appletAction) {
|
||||
modelAction = folderView.model.action(actionName);
|
||||
appletAction.text = modelAction.text;
|
||||
appletAction.enabled = modelAction.enabled;
|
||||
appletAction.visible = modelAction.visible;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function cancelRename() {
|
||||
folderView.cancelRename();
|
||||
}
|
||||
|
||||
function goHome() {
|
||||
if (folderView.url !== Plasmoid.configuration.url) {
|
||||
folderView.url = Qt.binding(() => Plasmoid.configuration.url);
|
||||
folderView.history = [];
|
||||
folderView.historyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: Plasmoid
|
||||
property: "title"
|
||||
value: labelGenerator.displayLabel
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
|
||||
Folder.LabelGenerator {
|
||||
id: labelGenerator
|
||||
|
||||
folderModel: folderView.model
|
||||
rtl: (Application.layoutDirection === Qt.RightToLeft)
|
||||
labelMode: Plasmoid.configuration.labelMode || (Plasmoid.isContainment ? 0 : 1)
|
||||
labelText: Plasmoid.configuration.labelText
|
||||
}
|
||||
|
||||
Folder.ViewPropertiesMenu {
|
||||
id: viewPropertiesMenu
|
||||
|
||||
showLayoutActions: !folderViewLayerComponent.isPopup
|
||||
showLockAction: Plasmoid.isContainment
|
||||
showIconSizeActions: !folderViewLayerComponent.useListViewMode
|
||||
|
||||
lockedEnabled: !folderViewLayerComponent.lockedByKiosk
|
||||
|
||||
onArrangementChanged: {
|
||||
Plasmoid.configuration.arrangement = arrangement;
|
||||
}
|
||||
|
||||
onAlignmentChanged: {
|
||||
Plasmoid.configuration.alignment = alignment;
|
||||
}
|
||||
|
||||
onPreviewsChanged: {
|
||||
Plasmoid.configuration.previews = previews;
|
||||
}
|
||||
|
||||
onLockedChanged: {
|
||||
if (!folderViewLayerComponent.lockedByKiosk) {
|
||||
Plasmoid.configuration.locked = locked;
|
||||
}
|
||||
}
|
||||
|
||||
onSortModeChanged: {
|
||||
Plasmoid.configuration.sortMode = sortMode;
|
||||
}
|
||||
|
||||
onSortDescChanged: {
|
||||
Plasmoid.configuration.sortDesc = sortDesc;
|
||||
}
|
||||
|
||||
onSortDirsFirstChanged: {
|
||||
Plasmoid.configuration.sortDirsFirst = sortDirsFirst;
|
||||
}
|
||||
|
||||
onIconSizeChanged: {
|
||||
Plasmoid.configuration.iconSize = iconSize;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
arrangement = Plasmoid.configuration.arrangement;
|
||||
alignment = Plasmoid.configuration.alignment;
|
||||
previews = Plasmoid.configuration.previews;
|
||||
locked = Plasmoid.configuration.locked || folderViewLayerComponent.lockedByKiosk;
|
||||
sortMode = Plasmoid.configuration.sortMode;
|
||||
sortDesc = Plasmoid.configuration.sortDesc;
|
||||
sortDirsFirst = Plasmoid.configuration.sortDirsFirst;
|
||||
iconSize = Plasmoid.configuration.iconSize;
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
anchors.fill: parent
|
||||
|
||||
text: folderView.errorString
|
||||
textFormat: Text.PlainText
|
||||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
wrapMode: Text.Wrap
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root
|
||||
|
||||
function onExpandedChanged() {
|
||||
if (folderViewLayerComponent.isPopup) {
|
||||
if (root.expanded) {
|
||||
folderView.currentIndex = -1;
|
||||
folderView.forceActiveFocus();
|
||||
folderView.positionViewAtBeginning();
|
||||
} else {
|
||||
folderViewLayerComponent.goHome();
|
||||
|
||||
folderView.currentIndex = -1;
|
||||
folderView.model.clearSelection();
|
||||
folderView.cancelRename();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Plasmoid.configuration
|
||||
|
||||
function onArrangementChanged() {
|
||||
viewPropertiesMenu.arrangement = Plasmoid.configuration.arrangement;
|
||||
}
|
||||
|
||||
function onAlignmentChanged() {
|
||||
viewPropertiesMenu.alignment = Plasmoid.configuration.alignment;
|
||||
}
|
||||
|
||||
function onLockedChanged() {
|
||||
viewPropertiesMenu.locked = Plasmoid.configuration.locked;
|
||||
}
|
||||
|
||||
function onSortModeChanged() {
|
||||
folderView.sortMode = Plasmoid.configuration.sortMode;
|
||||
viewPropertiesMenu.sortMode = Plasmoid.configuration.sortMode;
|
||||
}
|
||||
|
||||
function onSortDescChanged() {
|
||||
viewPropertiesMenu.sortDesc = Plasmoid.configuration.sortDesc;
|
||||
}
|
||||
|
||||
function onSortDirsFirstChanged() {
|
||||
viewPropertiesMenu.sortDirsFirst = Plasmoid.configuration.sortDirsFirst;
|
||||
}
|
||||
|
||||
function onIconSizeChanged() {
|
||||
viewPropertiesMenu.iconSize = Plasmoid.configuration.iconSize;
|
||||
}
|
||||
}
|
||||
|
||||
FolderView {
|
||||
id: folderView
|
||||
|
||||
anchors.left: parent.left
|
||||
anchors.top: parent.top
|
||||
anchors.topMargin: folderViewLayerComponent.label !== null ? folderViewLayerComponent.label.height : 0
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
|
||||
focus: true
|
||||
isRootView: Plasmoid.isContainment
|
||||
positionerApplet: Plasmoid
|
||||
|
||||
url: Plasmoid.configuration.url
|
||||
locked: (Plasmoid.configuration.locked || !Plasmoid.isContainment || folderViewLayerComponent.lockedByKiosk)
|
||||
filterMode: Plasmoid.configuration.filterMode
|
||||
filterPattern: Plasmoid.configuration.filterPattern
|
||||
filterMimeTypes: Plasmoid.configuration.filterMimeTypes
|
||||
showHiddenFiles: Plasmoid.configuration.showHiddenFiles
|
||||
|
||||
flow: (Plasmoid.configuration.arrangement === 0) ? GridView.FlowLeftToRight : GridView.FlowTopToBottom
|
||||
layoutDirection: (Plasmoid.configuration.alignment === 0) ? Qt.LeftToRight : Qt.RightToLeft
|
||||
|
||||
onSortModeChanged: {
|
||||
Plasmoid.configuration.sortMode = sortMode;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
folderView.sortMode = Plasmoid.configuration.sortMode;
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: labelComponent
|
||||
|
||||
Item {
|
||||
id: label
|
||||
|
||||
// If we bind height to visible, it will be invisible initially (since "visible"
|
||||
// propagates recursively) and that confuses the Label, hence the temp property.
|
||||
readonly property bool active: (Plasmoid.configuration.labelMode !== 0)
|
||||
|
||||
readonly property bool showPin: folderViewLayerComponent.isPopup && root.compactRepresentationItem && root.compactRepresentationItem.visible
|
||||
|
||||
width: parent.width
|
||||
height: active ? folderViewLayerComponent.labelHeight : 0
|
||||
|
||||
visible: active
|
||||
|
||||
property Item windowPin: null
|
||||
property Item homeButton: null
|
||||
|
||||
onVisibleChanged: {
|
||||
if (folderViewLayerComponent.isPopup && !visible) {
|
||||
root.hideOnWindowDeactivate = true;
|
||||
}
|
||||
}
|
||||
|
||||
onShowPinChanged: {
|
||||
if (!windowPin && showPin) {
|
||||
windowPin = windowPinComponent.createObject(label);
|
||||
} else if (windowPin) {
|
||||
windowPin.destroy();
|
||||
windowPin = null;
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: folderView
|
||||
|
||||
function onUrlChanged() {
|
||||
if (!label.homeButton && folderView.url !== Plasmoid.configuration.url) {
|
||||
label.homeButton = homeButtonComponent.createObject(label);
|
||||
} else if (label.homeButton && folderView.url === Plasmoid.configuration.url) {
|
||||
label.homeButton.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: text
|
||||
|
||||
anchors {
|
||||
left: label.homeButton ? label.homeButton.right : parent.left
|
||||
right: label.windowPin ? label.windowPin.left : parent.right
|
||||
margins: Kirigami.Units.smallSpacing
|
||||
}
|
||||
height: parent.height
|
||||
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignTop
|
||||
elide: Text.ElideMiddle
|
||||
text: labelGenerator.displayLabel
|
||||
textFormat: Text.PlainText
|
||||
font.underline: labelMouseArea.containsMouse
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
id: labelMouseArea
|
||||
anchors {
|
||||
top: text.top
|
||||
horizontalCenter: text.horizontalCenter
|
||||
}
|
||||
width: text.contentWidth
|
||||
height: text.contentHeight
|
||||
hoverEnabled: true
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
|
||||
onClicked: {
|
||||
Folder.AppLauncher.openUrl(folderView.url)
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: windowPinComponent
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
id: windowPin
|
||||
|
||||
anchors.right: parent.right
|
||||
|
||||
visible: label.showPin
|
||||
|
||||
width: folderViewLayerComponent.isPopup ? Math.round(Kirigami.Units.gridUnit * 1.25) : 0
|
||||
height: width
|
||||
checkable: true
|
||||
icon.name: "window-pin"
|
||||
onCheckedChanged: root.hideOnWindowDeactivate = !checked
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: homeButtonComponent
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
id: homeButton
|
||||
|
||||
anchors.left: parent.left
|
||||
|
||||
visible: folderViewLayerComponent.isPopup && folderView.url !== Plasmoid.configuration.url
|
||||
|
||||
width: folderViewLayerComponent.isPopup ? Math.round(Kirigami.Units.gridUnit * 1.25) : 0
|
||||
height: width
|
||||
icon.name: "go-home"
|
||||
|
||||
onClicked: folderViewLayerComponent.goHome()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PlasmaCore.Action {
|
||||
id: viewPropertiesAction
|
||||
text: i18nc("@item:inmenu opens submenu with view options like sorting", "Icons")
|
||||
icon.name: "view-list-icons"
|
||||
menu: viewPropertiesMenu.menu
|
||||
}
|
||||
PlasmaCore.Action {
|
||||
id: actionSeparator
|
||||
isSeparator: true
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
if (!Plasmoid.isContainment) {
|
||||
label = labelComponent.createObject(folderViewLayerComponent);
|
||||
}
|
||||
|
||||
for (let i = 0, len = sharedActions.length; i < len; i++) {
|
||||
const actionName = sharedActions[i];
|
||||
const modelAction = folderView.model.action(actionName);
|
||||
Plasmoid.contextualActions.push(modelAction)
|
||||
if (actionName === "emptyTrash") {
|
||||
Plasmoid.contextualActions.push(viewPropertiesAction)
|
||||
}
|
||||
}
|
||||
|
||||
Plasmoid.contextualActions.push(actionSeparator);
|
||||
|
||||
Plasmoid.contextualActionsAboutToShow.connect(updateContextualActions);
|
||||
Plasmoid.contextualActionsAboutToShow.connect(folderView.model.clearSelection);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQml
|
||||
import QtQuick.Controls as QQC2
|
||||
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.components as PlasmaComponents
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
|
||||
PlasmaComponents.ScrollView {
|
||||
id: root
|
||||
|
||||
property alias text: editor.text
|
||||
property alias targetItem: editor.targetItem
|
||||
signal commit
|
||||
|
||||
onFocusChanged: {
|
||||
if (focus) {
|
||||
editor.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
|
||||
// We use QQC2.TextArea here to allow context menu to appear,
|
||||
// since PlasmaComponents.TextArea does not have a context menu
|
||||
// BUG:427292
|
||||
QQC2.TextArea {
|
||||
id: editor
|
||||
|
||||
wrapMode: root.useListViewMode ? TextEdit.NoWrap : TextEdit.Wrap
|
||||
|
||||
textMargin: 0
|
||||
|
||||
horizontalAlignment: root.useListViewMode ? TextEdit.AlignLeft : TextEdit.AlignHCenter
|
||||
|
||||
rightPadding: root.PlasmaComponents.ScrollBar.vertical.visible ? root.PlasmaComponents.ScrollBar.vertical.width : 0
|
||||
|
||||
Kirigami.SpellCheck.enabled: false
|
||||
|
||||
background: Rectangle {
|
||||
color: Kirigami.Theme.backgroundColor
|
||||
radius: Kirigami.Units.cornerRadius
|
||||
border.color: Kirigami.Theme.highlightColor
|
||||
border.width: 1
|
||||
}
|
||||
|
||||
property FolderItemDelegate targetItem: null
|
||||
|
||||
Binding {
|
||||
target: editor.background
|
||||
property: "width"
|
||||
value: root.width
|
||||
}
|
||||
Binding {
|
||||
target: editor.background
|
||||
property: "height"
|
||||
value: root.height
|
||||
}
|
||||
Component.onCompleted: root.contentItem.clip = false
|
||||
|
||||
onTargetItemChanged: {
|
||||
if (targetItem !== null) {
|
||||
var xy = getXY();
|
||||
root.x = xy[0];
|
||||
root.y = xy[1];
|
||||
root.width = getWidth();
|
||||
root.height = getInitHeight();
|
||||
text = targetItem.name;
|
||||
adjustSize();
|
||||
editor.select(0, dir.fileExtensionBoundary(positioner.map(targetItem.index)));
|
||||
if (isPopup) {
|
||||
root.contentItem.contentX = Math.max(root.contentItem.contentWidth - contentItem.width, 0);
|
||||
} else {
|
||||
root.contentItem.contentY = Math.max(root.contentItem.contentHeight - contentItem.height, 0);
|
||||
}
|
||||
root.visible = true;
|
||||
} else {
|
||||
root.x = 0;
|
||||
root.y = 0;
|
||||
root.visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onPressed: event => {
|
||||
switch (event.key) {
|
||||
case Qt.Key_Return:
|
||||
case Qt.Key_Enter:
|
||||
root.commit();
|
||||
break;
|
||||
case Qt.Key_Escape:
|
||||
if (targetItem) {
|
||||
targetItem = null;
|
||||
event.accepted = true;
|
||||
}
|
||||
break;
|
||||
case Qt.Key_Home:
|
||||
if (event.modifiers & Qt.ShiftModifier) {
|
||||
editor.select(0, cursorPosition);
|
||||
} else {
|
||||
editor.select(0, 0);
|
||||
}
|
||||
event.accepted = true;
|
||||
break;
|
||||
case Qt.Key_End:
|
||||
if (event.modifiers & Qt.ShiftModifier) {
|
||||
editor.select(cursorPosition, text.length);
|
||||
} else {
|
||||
editor.select(text.length, text.length);
|
||||
}
|
||||
event.accepted = true;
|
||||
break;
|
||||
default:
|
||||
adjustSize();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Keys.onReleased: event => {
|
||||
adjustSize();
|
||||
}
|
||||
|
||||
function getXY() {
|
||||
if (!targetItem) {
|
||||
return [0,0];
|
||||
}
|
||||
var pos = main.mapFromItem(targetItem, targetItem.labelArea.x, targetItem.labelArea.y);
|
||||
var _x, _y;
|
||||
if (root.useListViewMode) {
|
||||
_x = targetItem.labelArea.x - editor.leftPadding;
|
||||
_y = pos.y - editor.topPadding;
|
||||
} else {
|
||||
_x = targetItem.x + Math.abs(Math.min(gridView.contentX, gridView.originX));
|
||||
_x += editor.leftPadding;
|
||||
_x += scrollArea.viewport.x;
|
||||
if (root.PlasmaComponents.ScrollBar.vertical.policy === Qt.ScrollBarAlwaysOn
|
||||
&& gridView.effectiveLayoutDirection === Qt.RightToLeft) {
|
||||
_x -= root.PlasmaComponents.ScrollBar.vertical.width;
|
||||
}
|
||||
_y = pos.y + Kirigami.Units.smallSpacing - editor.topPadding;
|
||||
}
|
||||
return [ _x, _y ];
|
||||
}
|
||||
|
||||
function getWidth(addWidthVerticalScroller) {
|
||||
if (!targetItem) {
|
||||
return 0;
|
||||
}
|
||||
return(targetItem.label.parent.width - Kirigami.Units.smallSpacing +
|
||||
(root.useListViewMode ? -(editor.leftPadding + editor.rightPadding + Kirigami.Units.smallSpacing) : 0) +
|
||||
(addWidthVerticalScroller ? root.PlasmaComponents.ScrollBar.vertical.width : 0));
|
||||
}
|
||||
|
||||
function getHeight(addWidthHoriozontalScroller, init) {
|
||||
if (!targetItem) {
|
||||
return 0;
|
||||
}
|
||||
var _height;
|
||||
if (isPopup || init) {
|
||||
_height = targetItem.labelArea.height + editor.topPadding + editor.bottomPadding;
|
||||
} else {
|
||||
var realHeight = contentHeight + editor.topPadding + editor.bottomPadding;
|
||||
var maxHeight = Kirigami.Units.iconSizes.sizeForLabels * (Plasmoid.configuration.textLines + 1) + editor.topPadding + editor.bottomPadding;
|
||||
_height = Math.min(realHeight, maxHeight);
|
||||
}
|
||||
return _height + (addWidthHoriozontalScroller ? root.PlasmaComponents.ScrollBar.horizontal.height : 0);
|
||||
}
|
||||
|
||||
function getInitHeight() {
|
||||
return getHeight(false, true);
|
||||
}
|
||||
|
||||
function adjustSize() {
|
||||
if (isPopup) {
|
||||
if(contentWidth + editor.leftPadding + editor.rightPadding > root.width) {
|
||||
root.visible = targetItem !== null;
|
||||
root.PlasmaComponents.ScrollBar.horizontal.policy = Qt.ScrollBarAlwaysOn;
|
||||
root.height = getHeight(true);
|
||||
} else {
|
||||
root.PlasmaComponents.ScrollBar.horizontal.policy = Qt.ScrollBarAlwaysOff;
|
||||
root.height = getHeight();
|
||||
}
|
||||
} else {
|
||||
root.height = getHeight();
|
||||
if(contentHeight + editor.topPadding + editor.bottomPadding > root.height) {
|
||||
root.visible = targetItem !== null;
|
||||
root.PlasmaComponents.ScrollBar.vertical.policy = Qt.ScrollBarAlwaysOn;
|
||||
root.width = getWidth(true);
|
||||
} else {
|
||||
root.PlasmaComponents.ScrollBar.vertical.policy = Qt.ScrollBarAlwaysOff;
|
||||
root.width = getWidth();
|
||||
}
|
||||
}
|
||||
|
||||
var xy = getXY();
|
||||
root.x = xy[0];
|
||||
root.y = xy[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2014 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
|
||||
var iconSizes = [Kirigami.Units.iconSizes.smallMedium,
|
||||
Kirigami.Units.iconSizes.medium,
|
||||
Kirigami.Units.iconSizes.large,
|
||||
Kirigami.Units.iconSizes.huge,
|
||||
Kirigami.Units.iconSizes.large*2,
|
||||
Kirigami.Units.iconSizes.enormous,
|
||||
Kirigami.Units.iconSizes.enormous*2];
|
||||
|
||||
function iconSizeFromTheme(size) {
|
||||
return iconSizes[size];
|
||||
}
|
||||
|
||||
function effectiveNavDirection(flow, layoutDirection, direction) {
|
||||
if (direction == Qt.LeftArrow) {
|
||||
if (flow == GridView.FlowLeftToRight) {
|
||||
if (layoutDirection == Qt.LeftToRight) {
|
||||
return Qt.LeftArrow;
|
||||
} else {
|
||||
return Qt.RightArrow;
|
||||
}
|
||||
} else {
|
||||
if (layoutDirection == Qt.LeftToRight) {
|
||||
return Qt.UpArrow;
|
||||
} else {
|
||||
return Qt.DownArrow;
|
||||
}
|
||||
}
|
||||
} else if (direction == Qt.RightArrow) {
|
||||
if (flow == GridView.FlowLeftToRight) {
|
||||
if (layoutDirection == Qt.LeftToRight) {
|
||||
return Qt.RightArrow;
|
||||
} else {
|
||||
return Qt.LeftArrow;
|
||||
}
|
||||
} else {
|
||||
if (layoutDirection == Qt.LeftToRight) {
|
||||
return Qt.DownArrow;
|
||||
} else {
|
||||
return Qt.UpArrow;
|
||||
}
|
||||
}
|
||||
} else if (direction == Qt.UpArrow) {
|
||||
if (flow == GridView.FlowLeftToRight) {
|
||||
return Qt.UpArrow;
|
||||
} else {
|
||||
return Qt.LeftArrow;
|
||||
}
|
||||
} else if (direction == Qt.DownArrow) {
|
||||
if (flow == GridView.FlowLeftToRight) {
|
||||
return Qt.DownArrow;
|
||||
} else {
|
||||
return Qt.RightArrow
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isFileDrag(event) {
|
||||
var taskUrl = event.mimeData.formats.indexOf("text/x-orgkdeplasmataskmanager_taskurl") != -1;
|
||||
var arkService = event.mimeData.formats.indexOf("application/x-kde-ark-dndextract-service") != -1;
|
||||
var arkPath = event.mimeData.formats.indexOf("application/x-kde-ark-dndextract-path") != -1;
|
||||
|
||||
return (event.mimeData.hasUrls || taskUrl || (arkService && arkPath));
|
||||
}
|
||||
@@ -0,0 +1,473 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2011-2013 Sebastian Kügler <sebas@kde.org>
|
||||
SPDX-FileCopyrightText: 2011-2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
|
||||
|
||||
SPDX-License-Identifier: GPL-2.0-or-later
|
||||
*/
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.ksvg as KSvg
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.private.desktopcontainment.folder as Folder
|
||||
|
||||
import org.kde.plasma.private.containmentlayoutmanager as ContainmentLayoutManager
|
||||
|
||||
import "code/FolderTools.js" as FolderTools
|
||||
|
||||
ContainmentItem {
|
||||
id: root
|
||||
|
||||
switchWidth: { switchSize(); }
|
||||
switchHeight: { switchSize(); }
|
||||
|
||||
// Only exists because the default CompactRepresentation doesn't:
|
||||
// - open on drag
|
||||
// - allow defining a custom drop handler
|
||||
// TODO remove once it gains that feature (perhaps optionally?)
|
||||
compactRepresentation: (isFolder && !isContainment) ? compactRepresentation : null
|
||||
|
||||
objectName: isFolder ? "folder" : "desktop"
|
||||
|
||||
width: isPopup ? undefined : preferredWidth(false) // Initial size when adding to e.g. desktop.
|
||||
height: isPopup ? undefined : preferredHeight(false) // Initial size when adding to e.g. desktop.
|
||||
|
||||
function switchSize() {
|
||||
// Support expanding into the full representation on very thick vertical panels.
|
||||
if (isPopup && Plasmoid.formFactor === PlasmaCore.Types.Vertical) {
|
||||
return Kirigami.Units.gridUnit * 8;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
LayoutMirroring.enabled: Application.layoutDirection === Qt.RightToLeft
|
||||
LayoutMirroring.childrenInherit: true
|
||||
|
||||
property bool isFolder: (Plasmoid.pluginName === "org.kde.plasma.folder")
|
||||
property bool isContainment: Plasmoid.isContainment
|
||||
property bool isPopup: (Plasmoid.location !== PlasmaCore.Types.Floating)
|
||||
property bool useListViewMode: isPopup && Plasmoid.configuration.viewMode === 0
|
||||
|
||||
property Component appletAppearanceComponent
|
||||
|
||||
property int handleDelay: 800
|
||||
property real haloOpacity: 0.5
|
||||
|
||||
readonly property bool isUiReady: Plasmoid.containment.corona.isScreenUiReady(root.screen)
|
||||
|
||||
readonly property int hoverActivateDelay: 750 // Magic number that matches Dolphin's auto-expand folders delay.
|
||||
|
||||
readonly property FolderViewLayerLoader folderViewLayer: fullRepresentationItem.folderViewLayer
|
||||
readonly property ContainmentLayoutManager.AppletsLayout appletsLayout: fullRepresentationItem.appletsLayout
|
||||
|
||||
// Plasmoid.title is set by a Binding {} in FolderViewLayer
|
||||
toolTipSubText: ""
|
||||
Plasmoid.icon: (!Plasmoid.configuration.useCustomIcon && folderViewLayer.ready) ? symbolicizeIconName(folderViewLayer.view?.model.iconName) : Plasmoid.configuration.icon
|
||||
|
||||
// We want to do this here rather than in the model because we don't always want
|
||||
// symbolic icons everywhere, but we do know that we always want them in this
|
||||
// specific representation right here
|
||||
function symbolicizeIconName(iconName) {
|
||||
const symbolicSuffix = "-symbolic";
|
||||
if (iconName?.endsWith(symbolicSuffix)) {
|
||||
return iconName;
|
||||
}
|
||||
|
||||
return iconName + symbolicSuffix;
|
||||
}
|
||||
|
||||
function addLauncher(desktopUrl) {
|
||||
if (!isFolder) {
|
||||
return;
|
||||
}
|
||||
|
||||
folderViewLayer.view.linkHere(desktopUrl);
|
||||
}
|
||||
|
||||
function preferredWidth(forMinimumSize: bool): real {
|
||||
if ((isContainment || !folderViewLayer.ready) || (isPopup && !compactRepresentationItem.visible)) {
|
||||
return -1;
|
||||
} else if (useListViewMode) {
|
||||
return (forMinimumSize ? folderViewLayer.view.cellHeight * 4 : Kirigami.Units.gridUnit * 16);
|
||||
}
|
||||
|
||||
return (folderViewLayer.view.cellWidth * (forMinimumSize ? 1 : 3)) + (Kirigami.Units.gridUnit * 2);
|
||||
}
|
||||
|
||||
function preferredHeight(forMinimumSize: bool): real {
|
||||
let height;
|
||||
if ((isContainment || !folderViewLayer.ready) || (isPopup && !compactRepresentationItem.visible)) {
|
||||
return -1;
|
||||
} else if (useListViewMode) {
|
||||
height = (folderViewLayer.view.cellHeight * (forMinimumSize ? 1 : 15)) + Kirigami.Units.smallSpacing;
|
||||
} else {
|
||||
height = (folderViewLayer.view.cellHeight * (forMinimumSize ? 1 : 2)) + Kirigami.Units.gridUnit;
|
||||
}
|
||||
|
||||
if (Plasmoid.configuration.labelMode !== 0) {
|
||||
height += (folderViewLayer.item as FolderViewLayer).labelHeight;
|
||||
}
|
||||
|
||||
return height;
|
||||
}
|
||||
|
||||
function isDrag(fromX, fromY, toX, toY) {
|
||||
const length = Math.abs(fromX - toX) + Math.abs(fromY - toY);
|
||||
return length >= Application.styleHints.startDragDistance;
|
||||
}
|
||||
|
||||
onFocusChanged: {
|
||||
if (focus && isFolder) {
|
||||
(folderViewLayer.item as Item)?.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
|
||||
onExternalData: (mimetype, data) => {
|
||||
Plasmoid.configuration.url = data
|
||||
}
|
||||
|
||||
component ShortDropBehavior : Behavior {
|
||||
NumberAnimation {
|
||||
duration: Kirigami.Units.shortDuration
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
component LongDropBehavior : Behavior {
|
||||
NumberAnimation {
|
||||
duration: Kirigami.Units.longDuration
|
||||
easing.type: Easing.InOutQuad
|
||||
}
|
||||
}
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: highlightItemSvg
|
||||
|
||||
visible: false
|
||||
|
||||
imagePath: root.isPopup ? "widgets/viewitem" : ""
|
||||
prefix: "hover"
|
||||
}
|
||||
|
||||
KSvg.FrameSvgItem {
|
||||
id: listItemSvg
|
||||
|
||||
visible: false
|
||||
|
||||
imagePath: root.isPopup ? "widgets/viewitem" : ""
|
||||
prefix: "normal"
|
||||
}
|
||||
|
||||
KSvg.Svg {
|
||||
id: toolBoxSvg
|
||||
imagePath: "widgets/toolbox"
|
||||
property int rightBorder: elementSize("right").width
|
||||
property int topBorder: elementSize("top").height
|
||||
property int bottomBorder: elementSize("bottom").height
|
||||
property int leftBorder: elementSize("left").width
|
||||
}
|
||||
|
||||
// FIXME: the use and existence of this property is a workaround
|
||||
preloadFullRepresentation: true
|
||||
fullRepresentation: FolderViewDropArea {
|
||||
id: dropArea
|
||||
|
||||
anchors {
|
||||
fill: parent
|
||||
leftMargin: (root.isContainment && root.availableScreenRect) ? root.availableScreenRect.x : 0
|
||||
topMargin: (root.isContainment && root.availableScreenRect) ? root.availableScreenRect.y : 0
|
||||
|
||||
rightMargin: (root.isContainment && root.availableScreenRect && parent)
|
||||
? (parent.width - root.availableScreenRect.x - root.availableScreenRect.width) : 0
|
||||
|
||||
bottomMargin: (root.isContainment && root.availableScreenRect && parent)
|
||||
? (parent.height - root.availableScreenRect.y - root.availableScreenRect.height) : 0
|
||||
}
|
||||
|
||||
LongDropBehavior on anchors.topMargin { }
|
||||
LongDropBehavior on anchors.leftMargin { }
|
||||
LongDropBehavior on anchors.rightMargin { }
|
||||
LongDropBehavior on anchors.bottomMargin { }
|
||||
|
||||
property alias folderViewLayer: folderViewLayer
|
||||
property alias appletsLayout: appletsLayout
|
||||
|
||||
// Layout size bindings are set in Component.onCompleted
|
||||
|
||||
preventStealing: true
|
||||
|
||||
onDragEnter: event => {
|
||||
if (root.isContainment && Plasmoid.immutable && !(root.isFolder && FolderTools.isFileDrag(event))) {
|
||||
event.ignore();
|
||||
}
|
||||
|
||||
// Don't allow any drops while listing.
|
||||
if (root.isFolder && folderViewLayer.view.status === Folder.FolderModel.Listing) {
|
||||
event.ignore();
|
||||
}
|
||||
|
||||
// Firefox tabs are regular drags. Since all of our drop handling is asynchronous
|
||||
// we would accept this drop and have Firefox not spawn a new window. (Bug 337711)
|
||||
if (event.mimeData.formats.indexOf("application/x-moz-tabbrowser-tab") !== -1) {
|
||||
event.ignore();
|
||||
}
|
||||
}
|
||||
|
||||
onDragMove: event => {
|
||||
// TODO: We should reject drag moves onto file items that don't accept drops
|
||||
// (cf. QAbstractItemModel::flags() here, but DeclarativeDropArea currently
|
||||
// is currently incapable of rejecting drag events.
|
||||
|
||||
// Trigger autoscroll.
|
||||
if (root.isFolder && FolderTools.isFileDrag(event)) {
|
||||
handleDragMove(folderViewLayer.view, mapToItem(folderViewLayer.view, event.x, event.y));
|
||||
} else if (root.isContainment) {
|
||||
appletsLayout.showPlaceHolderAt(
|
||||
Qt.rect(event.x - appletsLayout.minimumItemWidth / 2,
|
||||
event.y - appletsLayout.minimumItemHeight / 2,
|
||||
appletsLayout.minimumItemWidth,
|
||||
appletsLayout.minimumItemHeight)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
onDragLeave: event => {
|
||||
// Cancel autoscroll.
|
||||
if (root.isFolder) {
|
||||
handleDragEnd(folderViewLayer.view);
|
||||
}
|
||||
|
||||
if (root.isContainment) {
|
||||
appletsLayout.hidePlaceHolder();
|
||||
}
|
||||
}
|
||||
|
||||
onDrop: event => {
|
||||
if (root.isFolder && FolderTools.isFileDrag(event)) {
|
||||
handleDragEnd(folderViewLayer.view);
|
||||
folderViewLayer.view.drop(root, event, mapToItem(folderViewLayer.view, event.x, event.y));
|
||||
} else if (root.isContainment) {
|
||||
root.processMimeData(event.mimeData,
|
||||
event.x - appletsLayout.placeHolder.width / 2,
|
||||
event.y - appletsLayout.placeHolder.height / 2);
|
||||
event.accept(event.proposedAction);
|
||||
appletsLayout.hidePlaceHolder();
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: compactRepresentation
|
||||
CompactRepresentation { folderView: folderViewLayer.view }
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: Plasmoid.containment.corona
|
||||
ignoreUnknownSignals: true
|
||||
|
||||
function onEditModeChanged() {
|
||||
appletsLayout.editMode = Plasmoid.containment.corona.editMode;
|
||||
}
|
||||
|
||||
// When adding panels, sizes change. We want to make sure all panels
|
||||
// are loaded, and when they all are loaded, we tell the folderViewLayer loader to start.
|
||||
function onScreenUiReadyChanged(screen: int, newLayoutReady: bool) {
|
||||
if (root.isContainment && root.isFolder && !folderViewLayer.ready && root.screen === screen && newLayoutReady){
|
||||
// We skip x and y since that is handled by the parent of folderViewLayer
|
||||
folderViewLayer.active = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ContainmentLayoutManager.AppletsLayout {
|
||||
id: appletsLayout
|
||||
anchors.fill: parent
|
||||
relayoutLock: width !== root.availableScreenRect.width || height !== root.availableScreenRect.height
|
||||
// NOTE: use root.availableScreenRect and not own width and height as they are updated not atomically
|
||||
configKey: "ItemGeometries-" + Math.round(root.screenGeometry.width) + "x" + Math.round(root.screenGeometry.height)
|
||||
fallbackConfigKey: root.availableScreenRect.width > root.availableScreenRect.height ? "ItemGeometriesHorizontal" : "ItemGeometriesVertical"
|
||||
|
||||
Binding on containment {
|
||||
value: Plasmoid
|
||||
when: Plasmoid.isContainment
|
||||
}
|
||||
containmentItem: root
|
||||
editModeCondition: Plasmoid.immutable
|
||||
? ContainmentLayoutManager.AppletsLayout.Locked
|
||||
: ContainmentLayoutManager.AppletsLayout.AfterPressAndHold
|
||||
|
||||
// Sets the containment in edit mode when we go in edit mode as well
|
||||
onEditModeChanged: Plasmoid.containment.corona.editMode = editMode;
|
||||
|
||||
minimumItemWidth: Kirigami.Units.gridUnit * 3
|
||||
minimumItemHeight: minimumItemWidth
|
||||
|
||||
cellWidth: Kirigami.Units.iconSizes.small
|
||||
cellHeight: cellWidth
|
||||
defaultItemWidth: cellWidth * 6
|
||||
defaultItemHeight: cellHeight * 6
|
||||
|
||||
eventManagerToFilter: (folderViewLayer.item as FolderViewLayer)?.view.view ?? null
|
||||
|
||||
appletContainerComponent: ContainmentLayoutManager.BasicAppletContainer {
|
||||
id: appletContainer
|
||||
|
||||
editModeCondition: Plasmoid.immutable
|
||||
? ContainmentLayoutManager.ItemContainer.Locked
|
||||
: ContainmentLayoutManager.ItemContainer.AfterPressAndHold
|
||||
|
||||
configOverlaySource: "ConfigOverlay.qml"
|
||||
|
||||
Connections {
|
||||
target: appletsLayout
|
||||
function onEditModeChanged(): void {
|
||||
if (!Plasmoid.containment.corona.editMode) {
|
||||
appletContainer.cancelEdit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onAppletChanged: {
|
||||
applet.visible = true
|
||||
}
|
||||
|
||||
Drag.dragType: Drag.Automatic
|
||||
Drag.active: false
|
||||
Drag.supportedActions: Qt.MoveAction
|
||||
Drag.mimeData: {
|
||||
"text/x-plasmoidinstanceid": Plasmoid.containment.id+':'+appletContainer.applet.plasmoid.id
|
||||
}
|
||||
Drag.onDragFinished: dropEvent => {
|
||||
if (dropEvent == Qt.MoveAction) {
|
||||
appletContainer.visible = true
|
||||
appletContainer.applet.visible = true
|
||||
//currentApplet.applet.plasmoid.internalAction("remove").trigger()
|
||||
} else {
|
||||
appletContainer.visible = true
|
||||
//appletsModel.insert(configurationArea.draggedItemIndex - 1, {applet: appletContainer.applet});
|
||||
}
|
||||
//appletContainer.destroy()
|
||||
//root.dragAndDropping = false
|
||||
//root.layoutManager.save()
|
||||
}
|
||||
|
||||
onUserDrag: (newPosition, dragCenter) => {
|
||||
const pos = mapToItem(root.parent, dragCenter.x, dragCenter.y);
|
||||
const newCont = root.containmentItemAt(pos.x, pos.y);
|
||||
// User likely touched screen edges, so ignore that.
|
||||
if (!newCont) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (newCont.plasmoid !== Plasmoid) {
|
||||
// First go out of applet edit mode, get rid of the config overlay, release mouse grabs in preparation of applet reparenting
|
||||
cancelEdit();
|
||||
appletsLayout.hidePlaceHolder();
|
||||
appletContainer.grabToImage(result => {
|
||||
appletContainer.Drag.imageSource = result.url
|
||||
appletContainer.visible = false
|
||||
appletContainer.Drag.active = true
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
ShortDropBehavior on x { }
|
||||
ShortDropBehavior on y { }
|
||||
}
|
||||
|
||||
placeHolder: ContainmentLayoutManager.PlaceHolder {}
|
||||
|
||||
component FolderViewLayerLoader: Loader {
|
||||
property bool ready: status === Loader.Ready
|
||||
property FolderView view: (item as FolderViewLayer)?.view ?? null
|
||||
property Folder.FolderModel model: (item as FolderViewLayer)?.model ?? null
|
||||
|
||||
source: "FolderViewLayer.qml"
|
||||
}
|
||||
|
||||
|
||||
FolderViewLayerLoader {
|
||||
id: folderViewLayer
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
focus: true
|
||||
|
||||
// Do not set this active by default for desktop, and disable it when folderMode is not used
|
||||
active: {
|
||||
if (root.isFolder){
|
||||
if (!root.isContainment) {
|
||||
// We are a folder widget
|
||||
return true;
|
||||
} else {
|
||||
// For desktop, test if the screen is ready
|
||||
return root.isUiReady;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
asynchronous: false
|
||||
|
||||
onFocusChanged: {
|
||||
if (!focus && model) {
|
||||
model.clearSelection();
|
||||
}
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: folderViewLayer.item
|
||||
property: "isPopup"
|
||||
value: root.isPopup
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: folderViewLayer.item
|
||||
property: "useListViewMode"
|
||||
value: root.useListViewMode
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: folderViewLayer.view
|
||||
|
||||
// `FolderViewDropArea` is not a FocusScope. We need to forward manually.
|
||||
function onPressed() {
|
||||
folderViewLayer.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaCore.Action {
|
||||
id: configAction
|
||||
text: i18nc("@action:inmenu opens config dialog", "Desktop and Wallpaper")
|
||||
icon.name: "preferences-desktop-wallpaper"
|
||||
shortcut:"Ctrl+Shift+D"
|
||||
onTriggered: Plasmoid.containment.configureRequested(Plasmoid)
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
// Layout bindings need to be set delayed; the intermediate steps as the other bindings happen cause loops
|
||||
Qt.callLater( () => {
|
||||
dropArea.Layout.minimumWidth = Qt.binding(() => root.preferredWidth(root.isPopup))
|
||||
dropArea.Layout.minimumHeight = Qt.binding(() => root.preferredHeight(root.isPopup))
|
||||
|
||||
dropArea.Layout.preferredWidth = Qt.binding(() => root.preferredWidth(false))
|
||||
dropArea.Layout.preferredHeight = Qt.binding(() => root.preferredHeight(false))
|
||||
|
||||
// Maximum size is intentionally unbounded
|
||||
})
|
||||
|
||||
if (!Plasmoid.isContainment) {
|
||||
return;
|
||||
}
|
||||
|
||||
Plasmoid.setInternalAction("configure", configAction)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,266 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "sebas@kde.org",
|
||||
"Name": "Sebastian Kügler",
|
||||
"Name[ar]": "سيباستيان كوغلر",
|
||||
"Name[az]": "Sebastian Kügler",
|
||||
"Name[be]": "Sebastian Kügler",
|
||||
"Name[bg]": "Sebastian Kügler",
|
||||
"Name[ca@valencia]": "Sebastian Kügler",
|
||||
"Name[ca]": "Sebastian Kügler",
|
||||
"Name[cs]": "Sebastian Kügler",
|
||||
"Name[da]": "Sebastian Kügler",
|
||||
"Name[de]": "Sebastian Kügler",
|
||||
"Name[el]": "Sebastian kügler",
|
||||
"Name[en_GB]": "Sebastian Kügler",
|
||||
"Name[eo]": "Sebastian Kügler",
|
||||
"Name[es]": "Sebastian Kügler",
|
||||
"Name[et]": "Sebastian Kügler",
|
||||
"Name[eu]": "Sebastian Kügler",
|
||||
"Name[fi]": "Sebastian Kügler",
|
||||
"Name[fr]": "Sebastian Kügler",
|
||||
"Name[ga]": "Sebastian Kügler",
|
||||
"Name[gl]": "Sebastian Kügler",
|
||||
"Name[he]": "סבסטיאן קיגלר",
|
||||
"Name[hu]": "Sebastian Kügler",
|
||||
"Name[ia]": "Sebastian Kügler",
|
||||
"Name[id]": "Sebastian Kügler",
|
||||
"Name[ie]": "Sebastian Kügler",
|
||||
"Name[is]": "Sebastian Kügler",
|
||||
"Name[it]": "Sebastian Kügler",
|
||||
"Name[ja]": "Sebastian Kügler",
|
||||
"Name[ka]": "სებასტიან კუგლერი",
|
||||
"Name[ko]": "Sebastian Kügler",
|
||||
"Name[lt]": "Sebastian Kügler",
|
||||
"Name[lv]": "Sebastian Kügler",
|
||||
"Name[nb]": "Sebastian Kügler",
|
||||
"Name[nl]": "Sebastian Kügler",
|
||||
"Name[nn]": "Sebastian Kügler",
|
||||
"Name[pl]": "Sebastian Kügler",
|
||||
"Name[pt]": "Sebastian Kügler",
|
||||
"Name[pt_BR]": "Sebastian Kügler",
|
||||
"Name[ro]": "Sebastian Kügler",
|
||||
"Name[ru]": "Sebastian Kügler",
|
||||
"Name[sa]": "सेबास्टियन कुग्लर",
|
||||
"Name[sk]": "Sebastian Kügler",
|
||||
"Name[sl]": "Sebastian Kügler",
|
||||
"Name[sv]": "Sebastian Kügler",
|
||||
"Name[ta]": "ஸெபாஸ்டியன் கூக்லர்",
|
||||
"Name[tr]": "Sebastian Kügler",
|
||||
"Name[uk]": "Sebastian Kügler",
|
||||
"Name[vi]": "Sebastian Kügler",
|
||||
"Name[zh_CN]": "Sebastian Kügler",
|
||||
"Name[zh_TW]": "Sebastian Kügler"
|
||||
},
|
||||
{
|
||||
"Email": "hein@kde.org",
|
||||
"Name": "Eike Hein",
|
||||
"Name[ar]": "إيكي هين",
|
||||
"Name[az]": "Eike Hein",
|
||||
"Name[be]": "Eike Hein",
|
||||
"Name[bg]": "Eike Hein",
|
||||
"Name[ca@valencia]": "Eike Hein",
|
||||
"Name[ca]": "Eike Hein",
|
||||
"Name[cs]": "Eike Hein",
|
||||
"Name[da]": "Eike Hein",
|
||||
"Name[de]": "Eike Hein",
|
||||
"Name[el]": "Eike Hein",
|
||||
"Name[en_GB]": "Eike Hein",
|
||||
"Name[eo]": "Eike Hein",
|
||||
"Name[es]": "Eike Hein",
|
||||
"Name[et]": "Eike Hein",
|
||||
"Name[eu]": "Eike Hein",
|
||||
"Name[fi]": "Eike Hein",
|
||||
"Name[fr]": "Eike Hein",
|
||||
"Name[ga]": "Eike Hein",
|
||||
"Name[gl]": "Eike Hein",
|
||||
"Name[he]": "אייק היין",
|
||||
"Name[hu]": "Eike Hein",
|
||||
"Name[ia]": "Eike Hein",
|
||||
"Name[id]": "Eike Hein",
|
||||
"Name[ie]": "Eike Hein",
|
||||
"Name[is]": "Eike Hein",
|
||||
"Name[it]": "Eike Hein",
|
||||
"Name[ja]": "Eike Hein",
|
||||
"Name[ka]": "აიკე ჰაინი",
|
||||
"Name[ko]": "Eike Hein",
|
||||
"Name[lt]": "Eike Hein",
|
||||
"Name[lv]": "Eike Hein",
|
||||
"Name[nb]": "Eike Hein",
|
||||
"Name[nl]": "Eike Hein",
|
||||
"Name[nn]": "Eike Hein",
|
||||
"Name[pa]": "ਇਕੀ ਹੀਇਨ",
|
||||
"Name[pl]": "Eike Hein",
|
||||
"Name[pt]": "Eike Hein",
|
||||
"Name[pt_BR]": "Eike Hein",
|
||||
"Name[ro]": "Eike Hein",
|
||||
"Name[ru]": "Eike Hein",
|
||||
"Name[sa]": "ऐके हेन",
|
||||
"Name[sk]": "Eike Hein",
|
||||
"Name[sl]": "Eike Hein",
|
||||
"Name[sv]": "Eike Hein",
|
||||
"Name[ta]": "எய்கே ஹைன்",
|
||||
"Name[tr]": "Eike Hein",
|
||||
"Name[uk]": "Eike Hein",
|
||||
"Name[vi]": "Eike Hein",
|
||||
"Name[zh_CN]": "Eike Hein",
|
||||
"Name[zh_TW]": "Eike Hein"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Desktop%20Containment",
|
||||
"Category": "Containments",
|
||||
"Description": "A clean and simple layout",
|
||||
"Description[ar]": "تخطيط نظيف وبسيط",
|
||||
"Description[az]": "Təmiz və Sadə şablon",
|
||||
"Description[be]": "Просты макет",
|
||||
"Description[bg]": "Едно изчистено и просто оформление",
|
||||
"Description[ca@valencia]": "Una disposició neta i senzilla",
|
||||
"Description[ca]": "Una disposició neta i senzilla",
|
||||
"Description[cs]": "Čisté a jednoduché rozvržení",
|
||||
"Description[da]": "Et rent og simpelt layout",
|
||||
"Description[de]": "Ein klares und einfaches Layout",
|
||||
"Description[el]": "Μια καθαρή και απλή διάταξη",
|
||||
"Description[en_GB]": "A clean and simple layout",
|
||||
"Description[eo]": "Pura kaj simpla aranĝo",
|
||||
"Description[es]": "Un esquema sencillo y claro",
|
||||
"Description[et]": "Puhas ja lihtne paigutus",
|
||||
"Description[eu]": "Antolaera garbi eta xumea",
|
||||
"Description[fi]": "Selkeä ja yksinkertainen asettelu",
|
||||
"Description[fr]": "Une disposition simple et épurée",
|
||||
"Description[ga]": "Leagan amach glan agus simplí",
|
||||
"Description[gl]": "Unha disposición sinxela e limpa.",
|
||||
"Description[he]": "פריסה פשוטה ונקיה",
|
||||
"Description[hu]": "Egy tiszta és egyszerű elrendezés",
|
||||
"Description[ia]": "Un disposition simple e munde",
|
||||
"Description[id]": "Sebuah tata letak yang bersih dan sederhana",
|
||||
"Description[ie]": "Un simplic e nett arangement",
|
||||
"Description[is]": "Skýr og einföld framsetning",
|
||||
"Description[it]": "Una disposizione semplice e pulita",
|
||||
"Description[ja]": "クリーンでシンプルなレイアウト",
|
||||
"Description[ka]": "სუფთა და მარტივი განლაგება",
|
||||
"Description[ko]": "깨끗하고 정돈된 레이아웃",
|
||||
"Description[lt]": "Tvarkingas ir paprastas išdėstymas",
|
||||
"Description[lv]": "Skaidrs un vienkāršs izkārtojums",
|
||||
"Description[nb]": "En ren og enkel utforming",
|
||||
"Description[nl]": "Een schone en simpele opmaak",
|
||||
"Description[nn]": "Ei enkel og stilrein utforming",
|
||||
"Description[pa]": "ਸਾਫ਼ ਅਤੇ ਸਧਾਰਨ ਲੇਆਉਟ",
|
||||
"Description[pl]": "Schludny i prosty układ",
|
||||
"Description[pt]": "Uma disposição limpa e simples",
|
||||
"Description[pt_BR]": "Um layout limpo e simples",
|
||||
"Description[ro]": "Aranjament curat și simplu",
|
||||
"Description[ru]": "Ясный и простой шаблон",
|
||||
"Description[sa]": "स्वच्छं सरलं च विन्यासः",
|
||||
"Description[sk]": "Čisté a jednoduché rozloženie",
|
||||
"Description[sl]": "Čist in preprost razpored",
|
||||
"Description[sv]": "En ren och enkel layout",
|
||||
"Description[ta]": "தெளிவான மற்றும் எளிய தளவமைப்பு",
|
||||
"Description[tr]": "Temiz ve basit bir yerleşim",
|
||||
"Description[uk]": "Просте компонування",
|
||||
"Description[vi]": "Một bố cục thoáng đãng và đơn giản",
|
||||
"Description[zh_CN]": "一款简洁的布局",
|
||||
"Description[zh_TW]": "乾淨、簡單的佈局",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "user-desktop",
|
||||
"Id": "org.kde.desktopcontainment",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Desktop",
|
||||
"Name[af]": "Werkskerm",
|
||||
"Name[ar]": "سطح المكتب",
|
||||
"Name[ast]": "Escritoriu",
|
||||
"Name[az]": "İş masası",
|
||||
"Name[be@latin]": "Rabočy stoł",
|
||||
"Name[be]": "Працоўны стол",
|
||||
"Name[bg]": "Работен плот",
|
||||
"Name[bn]": "ডেস্কটপ",
|
||||
"Name[bn_IN]": "ডেস্কটপ",
|
||||
"Name[br]": "Gorretaol",
|
||||
"Name[bs]": "Radna površina",
|
||||
"Name[ca@valencia]": "Escriptori",
|
||||
"Name[ca]": "Escriptori",
|
||||
"Name[cs]": "Pracovní plocha",
|
||||
"Name[csb]": "Pùlt",
|
||||
"Name[cy]": "Penbwrdd",
|
||||
"Name[da]": "Skrivebord",
|
||||
"Name[de]": "Arbeitsfläche",
|
||||
"Name[el]": "Επιφάνεια εργασίας",
|
||||
"Name[en_GB]": "Desktop",
|
||||
"Name[eo]": "Labortablo",
|
||||
"Name[es]": "Escritorio",
|
||||
"Name[et]": "Töölaud",
|
||||
"Name[eu]": "Mahaigaina",
|
||||
"Name[fa]": "رومیزی",
|
||||
"Name[fi]": "Työpöytä",
|
||||
"Name[fr]": "Bureau",
|
||||
"Name[fy]": "Buroblêd",
|
||||
"Name[ga]": "Deasc",
|
||||
"Name[gl]": "Escritorio",
|
||||
"Name[gu]": "ડેસ્કટોપ",
|
||||
"Name[he]": "שולחן עבודה",
|
||||
"Name[hi]": "डेस्कटॉप",
|
||||
"Name[hne]": "डेस्कटाप",
|
||||
"Name[hr]": "Radna površina",
|
||||
"Name[hsb]": "Dźěłowy powjerch",
|
||||
"Name[hu]": "Munkaasztal",
|
||||
"Name[ia]": "Scriptorio",
|
||||
"Name[id]": "Desktop",
|
||||
"Name[ie]": "Pupitre",
|
||||
"Name[is]": "Skjáborð",
|
||||
"Name[it]": "Desktop",
|
||||
"Name[ja]": "デスクトップ",
|
||||
"Name[ka]": "სამუშაო მაგიდა",
|
||||
"Name[kk]": "Жұмыс үстелі",
|
||||
"Name[kn]": "ಗಣಕತೆರೆ",
|
||||
"Name[ko]": "바탕 화면",
|
||||
"Name[ku]": "Sermasê",
|
||||
"Name[lt]": "Darbalaukis",
|
||||
"Name[lv]": "Darbvirsma",
|
||||
"Name[mai]": "डेस्कटाप",
|
||||
"Name[mk]": "Работна површина",
|
||||
"Name[ml]": "പണിയിടം",
|
||||
"Name[mr]": "डेस्कटॉप",
|
||||
"Name[ms]": "Ruang Kerja",
|
||||
"Name[nb]": "Skrivebord",
|
||||
"Name[nds]": "Schriefdisch",
|
||||
"Name[ne]": "डेस्कटप",
|
||||
"Name[nl]": "Bureaublad",
|
||||
"Name[nn]": "Skrivebord",
|
||||
"Name[oc]": "Burèu",
|
||||
"Name[or]": "ଡ଼େସ୍କଟପ",
|
||||
"Name[pa]": "ਡੈਸਕਟਾਪ",
|
||||
"Name[pl]": "Pulpit",
|
||||
"Name[pt]": "Ambiente de Trabalho",
|
||||
"Name[pt_BR]": "Área de trabalho",
|
||||
"Name[ro]": "Birou",
|
||||
"Name[ru]": "Рабочий стол",
|
||||
"Name[sa]": "डेस्कटॉप",
|
||||
"Name[se]": "Čállinbeavdi",
|
||||
"Name[si]": "වැඩතලය",
|
||||
"Name[sk]": "Plocha",
|
||||
"Name[sl]": "Namizje",
|
||||
"Name[sr@ijekavian]": "Површ",
|
||||
"Name[sr@ijekavianlatin]": "Površ",
|
||||
"Name[sr@latin]": "Površ",
|
||||
"Name[sr]": "Површ",
|
||||
"Name[sv]": "Skrivbord",
|
||||
"Name[ta]": "பணிமேடை",
|
||||
"Name[te]": "రంగస్ఠలం",
|
||||
"Name[tg]": "Мизи корӣ",
|
||||
"Name[th]": "พื้นที่ทำงาน",
|
||||
"Name[tr]": "Masaüstü",
|
||||
"Name[uk]": "Стільниця",
|
||||
"Name[uz@cyrillic]": "Иш столи",
|
||||
"Name[uz]": "Ish stoli",
|
||||
"Name[vi]": "Bàn làm việc",
|
||||
"Name[wa]": "Sicribanne",
|
||||
"Name[xh]": "Desktop",
|
||||
"Name[zh_CN]": "桌面",
|
||||
"Name[zh_TW]": "桌面",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-ContainmentType": "Desktop"
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "battery"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
readonly property bool charging: battery?.isCharging ?? false
|
||||
readonly property int charge: battery?.charge ?? -1
|
||||
|
||||
readonly property string displayString: {
|
||||
if (available && charge > -1) {
|
||||
if (charging) {
|
||||
return i18n("%1% charging", charge);
|
||||
} else {
|
||||
return i18n("%1%", charge);
|
||||
}
|
||||
} else {
|
||||
return i18n("No info");
|
||||
}
|
||||
}
|
||||
|
||||
property KDEConnect.BatteryDbusInterface battery
|
||||
|
||||
/**
|
||||
* Suggests an icon name to use for the current battery level
|
||||
*/
|
||||
readonly property string iconName: {
|
||||
if (charge < 0) {
|
||||
return "battery-missing-symbolic";
|
||||
} else if (charge < 10) {
|
||||
return charging
|
||||
? "battery-empty-charging-symbolic"
|
||||
: "battery-empty-symbolic";
|
||||
} else if (charge < 25) {
|
||||
return charging
|
||||
? "battery-caution-charging-symbolic"
|
||||
: "battery-caution-symbolic";
|
||||
} else if (charge < 50) {
|
||||
return charging
|
||||
? "battery-low-charging-symbolic"
|
||||
: "battery-low-symbolic";
|
||||
} else if (charge < 75) {
|
||||
return charging
|
||||
? "battery-good-charging-symbolic"
|
||||
: "battery-good-symbolic";
|
||||
} else {
|
||||
return charging
|
||||
? "battery-full-charging-symbolic"
|
||||
: "battery-full-symbolic";
|
||||
}
|
||||
}
|
||||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
battery = KDEConnect.DeviceBatteryDbusInterfaceFactory.create(device.id());
|
||||
} else {
|
||||
battery = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2021 Yaman Qalieh <ybq987@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "clipboard"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
property KDEConnect.ClipboardDbusInterface clipboard
|
||||
|
||||
function sendClipboard(): void {
|
||||
if (clipboard) {
|
||||
clipboard.sendClipboard();
|
||||
}
|
||||
}
|
||||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
clipboard = KDEConnect.ClipboardDbusInterfaceFactory.create(device.id());
|
||||
} else {
|
||||
clipboard = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2014-2015 Frederic St-Pierre <me@fredericstpierre.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
DropArea {
|
||||
id: root
|
||||
|
||||
required property PlasmoidItem plasmoidItem
|
||||
|
||||
onEntered: drag => {
|
||||
if (drag.hasUrls) {
|
||||
root.plasmoidItem.expanded = true;
|
||||
}
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
||||
property bool wasExpanded: false
|
||||
|
||||
onPressed: mouse => {
|
||||
wasExpanded = root.plasmoidItem.expanded;
|
||||
}
|
||||
|
||||
onClicked: mouse => {
|
||||
root.plasmoidItem.expanded = !root.plasmoidItem.expanded;
|
||||
}
|
||||
}
|
||||
|
||||
Kirigami.Icon {
|
||||
anchors.fill: parent
|
||||
source: Plasmoid.icon
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2021 David Shlemayev <david.shlemayev@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "connectivity_report"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
/**
|
||||
* Reports a string indicating the network type. Possible values:
|
||||
* 5G
|
||||
* LTE
|
||||
* HSPA
|
||||
* UMTS
|
||||
* CDMA2000
|
||||
* EDGE
|
||||
* GPRS
|
||||
* GSM
|
||||
* CDMA
|
||||
* iDEN
|
||||
*
|
||||
* The parsing from Android values into these strings is handled in the
|
||||
* [ConnectivityReportPlugin.networkTypeToString method](https://invent.kde.org/network/kdeconnect-android/-/blob/master/src/org/kde/kdeconnect/Plugins/ConnectivityReportPlugin/ConnectivityReportPlugin.java#L82)
|
||||
*/
|
||||
readonly property string networkType: connectivity?.cellularNetworkType ?? i18n("Unknown")
|
||||
|
||||
/**
|
||||
* Reports a value between 0 and 4 (inclusive) which represents the strength of the cellular connection
|
||||
*/
|
||||
readonly property int signalStrength: connectivity?.cellularNetworkStrength ?? -1
|
||||
|
||||
readonly property string displayString: {
|
||||
if (connectivity !== null) {
|
||||
return `${networkType} ${signalStrength}/4`;
|
||||
} else {
|
||||
return i18n("No signal");
|
||||
}
|
||||
}
|
||||
|
||||
property KDEConnect.ConnectivityReportDbusInterface connectivity
|
||||
|
||||
/**
|
||||
* Suggests an icon name to use for the current signal level
|
||||
*
|
||||
* Returns names which correspond to Plasma Framework's network.svg:
|
||||
* https://invent.kde.org/frameworks/plasma-framework/-/blob/master/src/desktoptheme/breeze/icons/network.svg
|
||||
*/
|
||||
readonly property string iconName: {
|
||||
// Firstly, get the name prefix which represents the signal strength
|
||||
const signalStrengthIconName =
|
||||
(signalStrength < 0 || connectivity === null) ?
|
||||
// As long as the signal strength is nonsense or the plugin reports as non-ready,
|
||||
// show us as disconnected
|
||||
"network-mobile-off" :
|
||||
(signalStrength === 0) ?
|
||||
"network-mobile-0" :
|
||||
(signalStrength === 1) ?
|
||||
"network-mobile-20" :
|
||||
(signalStrength === 2) ?
|
||||
"network-mobile-60" :
|
||||
(signalStrength === 3) ?
|
||||
"network-mobile-80" :
|
||||
(signalStrength === 4) ?
|
||||
"network-mobile-100" :
|
||||
// Since all possible values are enumerated above, this default case should never be hit.
|
||||
// However, I need it in order for my ternary syntax to be valid!
|
||||
"network-mobile-available";
|
||||
|
||||
// If we understand the network type, append to the icon name to show the type
|
||||
const networkTypeSuffix =
|
||||
(networkType === "5G") ?
|
||||
"-5g" :
|
||||
(networkType === "LTE") ?
|
||||
"-lte" :
|
||||
(networkType === "HSPA") ?
|
||||
"-hspa" :
|
||||
(networkType === "UMTS") ?
|
||||
"-umts" :
|
||||
(networkType === "CDMA2000") ?
|
||||
// GSconnect just uses the 3g icon
|
||||
// No icon for this case!
|
||||
"" :
|
||||
(networkType === "EDGE") ?
|
||||
"-edge" :
|
||||
(networkType === "GPRS") ?
|
||||
"-gprs" :
|
||||
(networkType === "GSM") ?
|
||||
// GSconnect just uses the 2g icon
|
||||
// No icon for this case!
|
||||
"" :
|
||||
(networkType === "CDMA") ?
|
||||
// GSconnect just uses the 2g icon
|
||||
// No icon for this case!
|
||||
"" :
|
||||
(networkType === "iDEN") ?
|
||||
// GSconnect just uses the 2g icon
|
||||
// No icon for this case!
|
||||
"" :
|
||||
""; // We didn't recognize the network type. Don't append anything.
|
||||
|
||||
return signalStrengthIconName + networkTypeSuffix;
|
||||
}
|
||||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
connectivity = KDEConnect.DeviceConnectivityReportDbusInterfaceFactory.create(device.id());
|
||||
} else {
|
||||
connectivity = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,490 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtCore
|
||||
import QtQuick
|
||||
import QtQuick.Dialogs as QtDialogs
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.plasma.components as PlasmaComponents
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
|
||||
PlasmaComponents.ItemDelegate {
|
||||
id: root
|
||||
|
||||
required property int index
|
||||
required property var model
|
||||
|
||||
readonly property KDEConnect.DeviceDbusInterface device: KDEConnect.DeviceDbusInterfaceFactory.create(model.deviceId)
|
||||
|
||||
hoverEnabled: false
|
||||
down: false
|
||||
|
||||
Battery {
|
||||
id: battery
|
||||
device: root.device
|
||||
}
|
||||
|
||||
Clipboard {
|
||||
id: clipboard
|
||||
device: root.device
|
||||
}
|
||||
|
||||
Connectivity {
|
||||
id: connectivity
|
||||
device: root.device
|
||||
}
|
||||
|
||||
FindMyPhone {
|
||||
id: findmyphone
|
||||
device: root.device
|
||||
}
|
||||
|
||||
RemoteCommands {
|
||||
id: remoteCommands
|
||||
device: root.device
|
||||
}
|
||||
|
||||
Sftp {
|
||||
id: sftp
|
||||
device: root.device
|
||||
}
|
||||
|
||||
Share {
|
||||
id: share
|
||||
device: root.device
|
||||
}
|
||||
|
||||
SMS {
|
||||
id: sms
|
||||
device: root.device
|
||||
}
|
||||
|
||||
VirtualMonitor {
|
||||
id: virtualmonitor
|
||||
device: root.device
|
||||
}
|
||||
|
||||
Kirigami.PromptDialog {
|
||||
id: prompt
|
||||
visible: false
|
||||
showCloseButton: true
|
||||
standardButtons: Kirigami.Dialog.NoButton
|
||||
title: i18n("Virtual Monitor is not available")
|
||||
}
|
||||
|
||||
QtDialogs.FileDialog {
|
||||
id: fileDialog
|
||||
title: i18n("Please choose a file")
|
||||
currentFolder: StandardPaths.writableLocation(StandardPaths.HomeLocation)
|
||||
modality: Qt.NonModal
|
||||
fileMode: QtDialogs.FileDialog.OpenFiles
|
||||
onAccepted: {
|
||||
selectedFiles.forEach(url => share.plugin.shareUrl(url));
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaExtras.Menu {
|
||||
id: menu
|
||||
|
||||
visualParent: overflowMenu
|
||||
placement: PlasmaExtras.Menu.BottomPosedLeftAlignedPopup
|
||||
|
||||
// Share
|
||||
PlasmaExtras.MenuItem {
|
||||
icon: "document-share"
|
||||
visible: share.available
|
||||
text: i18n("Share file")
|
||||
onClicked: fileDialog.open()
|
||||
}
|
||||
|
||||
// Clipboard
|
||||
PlasmaExtras.MenuItem {
|
||||
icon: "klipper"
|
||||
visible: clipboard.clipboard?.isAutoShareDisabled ?? false
|
||||
text: i18n("Send Clipboard")
|
||||
|
||||
onClicked: {
|
||||
clipboard.sendClipboard()
|
||||
}
|
||||
}
|
||||
|
||||
// Find my phone
|
||||
PlasmaExtras.MenuItem {
|
||||
icon: "irc-voice"
|
||||
visible: findmyphone.available
|
||||
text: i18n("Ring my phone")
|
||||
|
||||
onClicked: {
|
||||
findmyphone.ring()
|
||||
}
|
||||
}
|
||||
|
||||
// SFTP
|
||||
PlasmaExtras.MenuItem {
|
||||
icon: "document-open-folder"
|
||||
visible: sftp.available
|
||||
text: i18n("Browse this device")
|
||||
|
||||
onClicked: {
|
||||
sftp.browse()
|
||||
}
|
||||
}
|
||||
|
||||
// SMS
|
||||
PlasmaExtras.MenuItem {
|
||||
icon: "message-new"
|
||||
visible: sms.available
|
||||
text: i18n("SMS Messages")
|
||||
|
||||
onClicked: {
|
||||
sms.plugin.launchApp()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DropArea {
|
||||
id: fileDropArea
|
||||
anchors.fill: parent
|
||||
|
||||
onDropped: drop => {
|
||||
if (drop.hasUrls) {
|
||||
const urls = new Set(drop.urls.map(url => url.toString()));
|
||||
urls.forEach(url => share.plugin.shareUrl(url));
|
||||
}
|
||||
drop.accepted = true;
|
||||
}
|
||||
|
||||
PlasmaCore.ToolTipArea {
|
||||
id: dropAreaToolTip
|
||||
anchors.fill: parent
|
||||
active: true
|
||||
mainText: i18n("File Transfer")
|
||||
subText: i18n("Drop a file to transfer it onto your phone.")
|
||||
}
|
||||
}
|
||||
|
||||
contentItem: ColumnLayout {
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
RowLayout {
|
||||
width: parent.width
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: deviceName
|
||||
elide: Text.ElideRight
|
||||
text: root.model.name
|
||||
Layout.fillWidth: true
|
||||
textFormat: Text.PlainText
|
||||
}
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
icon.name: "krdc"
|
||||
visible: virtualmonitor.available
|
||||
text: i18n("Virtual Display")
|
||||
checked: visible && virtualmonitor.plugin.active
|
||||
checkable: true
|
||||
|
||||
onClicked: {
|
||||
if (virtualmonitor.plugin.active) {
|
||||
virtualmonitor.plugin.stop();
|
||||
prompt.visible = false;
|
||||
} else {
|
||||
virtualmonitor.plugin.requestVirtualMonitor();
|
||||
prompt.subtitle = virtualmonitor.plugin.lastError;
|
||||
prompt.visible = prompt.subtitle.length > 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: connectionInformation
|
||||
|
||||
visible: connectivity.available
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
// TODO: In the future, when the Connectivity Report plugin supports more than one
|
||||
// subscription, add more signal strength icons to represent all the available
|
||||
// connections.
|
||||
|
||||
Kirigami.Icon {
|
||||
id: celluarConnectionStrengthIcon
|
||||
source: connectivity.iconName
|
||||
Layout.preferredHeight: connectivityText.height
|
||||
Layout.preferredWidth: Layout.preferredHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
visible: valid
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
// Fallback plain-text label. Only show this if the icon doesn't work.
|
||||
id: connectivityText
|
||||
text: connectivity.displayString
|
||||
textFormat: Text.PlainText
|
||||
visible: !celluarConnectionStrengthIcon.visible
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
id: batteryInformation
|
||||
|
||||
visible: battery.available && battery.charge > -1
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Kirigami.Icon {
|
||||
id: batteryIcon
|
||||
source: battery.iconName
|
||||
// Make the icon the same size as the text so that it doesn't dominate
|
||||
Layout.preferredHeight: batteryPercent.height
|
||||
Layout.preferredWidth: Layout.preferredHeight
|
||||
Layout.alignment: Qt.AlignCenter
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: batteryPercent
|
||||
text: i18nc("Battery charge percentage", "%1%", battery.charge)
|
||||
textFormat: Text.PlainText
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
id: overflowMenu
|
||||
|
||||
icon.name: "application-menu"
|
||||
checked: menu.status === PlasmaExtras.Menu.Open
|
||||
|
||||
onPressed: menu.openRelative()
|
||||
}
|
||||
}
|
||||
|
||||
// RemoteKeyboard
|
||||
PlasmaComponents.ItemDelegate {
|
||||
visible: remoteKeyboard.remoteState
|
||||
Layout.fillWidth: true
|
||||
|
||||
contentItem: RowLayout {
|
||||
width: parent.width
|
||||
spacing: 5
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: remoteKeyboardLabel
|
||||
text: i18n("Remote Keyboard")
|
||||
}
|
||||
|
||||
KDEConnect.RemoteKeyboard {
|
||||
id: remoteKeyboard
|
||||
device: root.device
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Notifications
|
||||
PlasmaComponents.ItemDelegate {
|
||||
visible: notificationsModel.count > 0
|
||||
enabled: true
|
||||
Layout.fillWidth: true
|
||||
|
||||
contentItem: RowLayout {
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
PlasmaComponents.Label {
|
||||
text: i18n("Notifications:")
|
||||
}
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
enabled: true
|
||||
visible: notificationsModel.isAnyDimissable;
|
||||
Layout.alignment: Qt.AlignRight
|
||||
icon.name: "edit-clear-history"
|
||||
PlasmaComponents.ToolTip.text: i18n("Dismiss all notifications")
|
||||
onClicked: notificationsModel.dismissAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Repeater {
|
||||
id: notificationsView
|
||||
|
||||
model: KDEConnect.NotificationsModel {
|
||||
id: notificationsModel
|
||||
deviceId: root.model.deviceId
|
||||
}
|
||||
|
||||
delegate: PlasmaComponents.ItemDelegate {
|
||||
id: listitem
|
||||
|
||||
required property int index
|
||||
required property var model
|
||||
|
||||
enabled: true
|
||||
onClicked: checked = !checked
|
||||
Layout.fillWidth: true
|
||||
|
||||
property bool replying: false
|
||||
|
||||
contentItem: ColumnLayout {
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
RowLayout {
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
Kirigami.Icon {
|
||||
id: notificationIcon
|
||||
source: listitem.model.appIcon
|
||||
width: (valid && listitem.model.appIcon !== "") ? dismissButton.width : 0
|
||||
height: width
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
|
||||
PlasmaComponents.Label {
|
||||
id: notificationLabel
|
||||
text: {
|
||||
const { appName, notitext, title } = listitem.model;
|
||||
const description = title !== "" ? (appName === title ? notitext : `${title}: ${notitext}`) : notitext;
|
||||
return `${appName}: ${description}`;
|
||||
}
|
||||
elide: listitem.checked ? Text.ElideNone : Text.ElideRight
|
||||
maximumLineCount: listitem.checked ? 0 : 1
|
||||
wrapMode: Text.Wrap
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
id: replyButton
|
||||
visible: listitem.model.repliable
|
||||
enabled: listitem.model.repliable && !listitem.replying
|
||||
icon.name: "mail-reply-sender"
|
||||
PlasmaComponents.ToolTip.text: i18n("Reply")
|
||||
onClicked: {
|
||||
listitem.replying = true;
|
||||
replyTextField.forceActiveFocus();
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.ToolButton {
|
||||
id: dismissButton
|
||||
visible: notificationsModel.isAnyDimissable;
|
||||
enabled: listitem.model.dismissable
|
||||
Layout.alignment: Qt.AlignRight
|
||||
icon.name: "window-close"
|
||||
PlasmaComponents.ToolTip.text: i18n("Dismiss")
|
||||
onClicked: listitem.model.dbusInterface.dismiss();
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
visible: listitem.replying
|
||||
width: notificationLabel.width + replyButton.width + dismissButton.width + Kirigami.Units.smallSpacing * 2
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
PlasmaComponents.Button {
|
||||
id: replyCancelButton
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
text: i18n("Cancel")
|
||||
display: PlasmaComponents.AbstractButton.IconOnly
|
||||
PlasmaComponents.ToolTip {
|
||||
text: replyCancelButton.text
|
||||
}
|
||||
icon.name: "dialog-cancel"
|
||||
onClicked: {
|
||||
replyTextField.text = "";
|
||||
listitem.replying = false;
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.TextArea {
|
||||
id: replyTextField
|
||||
placeholderText: i18nc("@info:placeholder", "Reply to %1…", listitem.model.appName)
|
||||
wrapMode: TextEdit.Wrap
|
||||
Layout.fillWidth: true
|
||||
Keys.onPressed: event => {
|
||||
if ((event.key === Qt.Key_Return || event.key === Qt.Key_Enter) && !(event.modifiers & Qt.ShiftModifier)) {
|
||||
replySendButton.clicked();
|
||||
event.accepted = true;
|
||||
}
|
||||
if (event.key === Qt.Key_Escape) {
|
||||
replyCancelButton.clicked();
|
||||
event.accepted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.Button {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
id: replySendButton
|
||||
text: i18n("Send")
|
||||
icon.name: "document-send"
|
||||
enabled: replyTextField.text !== ""
|
||||
onClicked: {
|
||||
listitem.model.dbusInterface.sendReply(replyTextField.text);
|
||||
replyTextField.text = "";
|
||||
listitem.replying = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Commands
|
||||
RowLayout {
|
||||
visible: remoteCommands.available
|
||||
width: parent.width
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
PlasmaComponents.Label {
|
||||
text: i18n("Run command")
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
|
||||
PlasmaComponents.Button {
|
||||
id: addCommandButton
|
||||
icon.name: "list-add"
|
||||
PlasmaComponents.ToolTip.text: i18n("Add command")
|
||||
onClicked: remoteCommands.plugin.editCommands()
|
||||
visible: remoteCommands.plugin?.canAddCommand ?? false
|
||||
}
|
||||
}
|
||||
|
||||
Repeater {
|
||||
id: commandsView
|
||||
|
||||
visible: remoteCommands.available
|
||||
|
||||
model: KDEConnect.RemoteCommandsModel {
|
||||
id: commandsModel
|
||||
deviceId: root.model.deviceId
|
||||
}
|
||||
|
||||
delegate: PlasmaComponents.ItemDelegate {
|
||||
id: commandDelegate
|
||||
|
||||
required property int index
|
||||
required property var model
|
||||
|
||||
enabled: true
|
||||
|
||||
onClicked: {
|
||||
remoteCommands.plugin?.triggerCommand(commandDelegate.model.key);
|
||||
}
|
||||
|
||||
Layout.fillWidth: true
|
||||
|
||||
contentItem: PlasmaComponents.Label {
|
||||
text: `${commandDelegate.model.name}\n${commandDelegate.model.command}`
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "findmyphone"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
property KDEConnect.FindMyPhoneDbusInterface findMyPhone
|
||||
|
||||
function ring(): void {
|
||||
if (findMyPhone) {
|
||||
findMyPhone.ring();
|
||||
}
|
||||
}
|
||||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
findMyPhone = KDEConnect.FindMyPhoneDbusInterfaceFactory.create(device.id());
|
||||
} else {
|
||||
findMyPhone = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls as QQC2
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.config as KConfig
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.plasma.components as PlasmaComponents3
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
|
||||
PlasmaExtras.Representation {
|
||||
id: kdeconnect
|
||||
|
||||
property alias devicesModel: devicesView.model
|
||||
|
||||
collapseMarginsHint: true
|
||||
|
||||
KDEConnect.DevicesModel {
|
||||
id: allDevicesModel
|
||||
}
|
||||
|
||||
KDEConnect.DevicesModel {
|
||||
id: pairedDevicesModel
|
||||
displayFilter: KDEConnect.DevicesModel.Paired
|
||||
}
|
||||
|
||||
PlasmaComponents3.ScrollView {
|
||||
anchors.fill: parent
|
||||
|
||||
contentItem: ListView {
|
||||
id: devicesView
|
||||
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
clip: true
|
||||
|
||||
delegate: DeviceDelegate {
|
||||
width: ListView.view.width - ListView.view.leftMargin - ListView.view.rightMargin
|
||||
}
|
||||
|
||||
PlasmaExtras.PlaceholderMessage {
|
||||
width: parent.width - Kirigami.Units.gridUnit * 2
|
||||
anchors.centerIn: parent
|
||||
visible: devicesView.count === 0
|
||||
|
||||
iconName: {
|
||||
if (pairedDevicesModel.count >= 0) {
|
||||
return pairedDevicesModel.count === 0 ? "edit-none" : "network-disconnect";
|
||||
}
|
||||
return "kdeconnect";
|
||||
}
|
||||
|
||||
text: {
|
||||
if (pairedDevicesModel.count >= 0) {
|
||||
return pairedDevicesModel.count === 0 ? i18n("No paired devices") : i18np("Paired device is unavailable", "All paired devices are unavailable", pairedDevicesModel.count)
|
||||
} else if (allDevicesModel.count === 0) {
|
||||
return i18n("Install KDE Connect on your Android device to integrate it with Plasma!")
|
||||
}
|
||||
}
|
||||
helpfulAction: QQC2.Action {
|
||||
text: i18n("Pair a Device…")
|
||||
icon.name: "list-add"
|
||||
onTriggered: KDEConnect.OpenConfig.openConfiguration()
|
||||
enabled: pairedDevicesModel.count === 0
|
||||
}
|
||||
|
||||
PlasmaComponents3.Button {
|
||||
Layout.leftMargin: Kirigami.Units.gridUnit * 3
|
||||
Layout.rightMargin: Kirigami.Units.gridUnit * 3
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
visible: allDevicesModel.count === 0
|
||||
text: i18n("Install from Google Play")
|
||||
onClicked: Qt.openUrlExternally("https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp")
|
||||
}
|
||||
|
||||
PlasmaComponents3.Button {
|
||||
Layout.leftMargin: Kirigami.Units.gridUnit * 3
|
||||
Layout.rightMargin: Kirigami.Units.gridUnit * 3
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
Layout.fillWidth: true
|
||||
visible: allDevicesModel.count === 0
|
||||
text: i18n("Install from F-Droid")
|
||||
onClicked: Qt.openUrlExternally("https://f-droid.org/en/packages/org.kde.kdeconnect_tp/")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "remotecommands"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
property KDEConnect.RemoteCommandsDbusInterface plugin:
|
||||
available ? KDEConnect.RemoteCommandsDbusInterfaceFactory.create(device.id()) : null
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2019 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "sms"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
readonly property KDEConnect.SmsDbusInterface plugin:
|
||||
available ? KDEConnect.SmsDbusInterfaceFactory.create(device.id()) : null
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2014 Samoilenko Yuri <kinnalru@gmail.com>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "sftp"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
property KDEConnect.SftpDbusInterface sftp
|
||||
|
||||
function browse(): void {
|
||||
if (sftp) {
|
||||
sftp.startBrowsing();
|
||||
}
|
||||
}
|
||||
|
||||
onAvailableChanged: {
|
||||
if (available) {
|
||||
sftp = KDEConnect.SftpDbusInterfaceFactory.create(device.id());
|
||||
} else {
|
||||
sftp = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2018 Nicolas Fella <nicolas.fella@gmx.de>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "share"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
property KDEConnect.ShareDbusInterface plugin:
|
||||
available ? KDEConnect.ShareDbusInterfaceFactory.create(device.id()) : null
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
required property KDEConnect.DeviceDbusInterface device
|
||||
|
||||
readonly property alias available: checker.available
|
||||
|
||||
readonly property KDEConnect.PluginChecker pluginChecker: KDEConnect.PluginChecker {
|
||||
id: checker
|
||||
pluginName: "virtualmonitor"
|
||||
device: root.device
|
||||
}
|
||||
|
||||
readonly property KDEConnect.VirtualmonitorDbusInterface plugin:
|
||||
available ? KDEConnect.VirtualmonitorDbusInterfaceFactory.create(device.id()) : null
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* SPDX-FileCopyrightText: 2014 Aleix Pol Gonzalez <aleixpol@kde.org>
|
||||
* SPDX-FileCopyrightText: 2024 ivan tkachenko <me@ratijas.tk>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.config as KConfig
|
||||
import org.kde.kdeconnect as KDEConnect
|
||||
import org.kde.kquickcontrolsaddons as KQuickControlsAddons
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
PlasmoidItem {
|
||||
id: root
|
||||
|
||||
readonly property bool inPanel: [
|
||||
PlasmaCore.Types.TopEdge,
|
||||
PlasmaCore.Types.RightEdge,
|
||||
PlasmaCore.Types.BottomEdge,
|
||||
PlasmaCore.Types.LeftEdge,
|
||||
].includes(Plasmoid.location)
|
||||
|
||||
KDEConnect.DevicesModel {
|
||||
id: connectedDeviceModel
|
||||
displayFilter: KDEConnect.DevicesModel.Paired | KDEConnect.DevicesModel.Reachable
|
||||
}
|
||||
|
||||
KDEConnect.DevicesModel {
|
||||
id: pairedDeviceModel
|
||||
displayFilter: KDEConnect.DevicesModel.Paired
|
||||
}
|
||||
|
||||
Plasmoid.icon: inPanel
|
||||
? "kdeconnect-tray-symbolic"
|
||||
: "kdeconnect-tray"
|
||||
|
||||
Plasmoid.status: connectedDeviceModel.count > 0 ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus
|
||||
|
||||
fullRepresentation: FullRepresentation {
|
||||
devicesModel: connectedDeviceModel
|
||||
}
|
||||
|
||||
compactRepresentation: CompactRepresentation {
|
||||
plasmoidItem: root
|
||||
}
|
||||
|
||||
PlasmaCore.Action {
|
||||
id: configureAction
|
||||
text: i18n("KDE Connect Settings…")
|
||||
icon.name: "configure"
|
||||
onTriggered: KDEConnect.OpenConfig.openConfiguration()
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
Plasmoid.setInternalAction("configure", configureAction);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "albertvaka@gmail.com",
|
||||
"Name": "Albert Vaca Cintora",
|
||||
"Name[ar]": "ألبرت فاكا سينتورا",
|
||||
"Name[az]": "Albert Vaca Cintora",
|
||||
"Name[bg]": "Albert Vaca Cintora",
|
||||
"Name[ca@valencia]": "Albert Vaca Cintora",
|
||||
"Name[ca]": "Albert Vaca Cintora",
|
||||
"Name[cs]": "Albert Vaca Cintora",
|
||||
"Name[da]": "Albert Vaca Cintora",
|
||||
"Name[de]": "Albert Vaca Cintora",
|
||||
"Name[en_GB]": "Albert Vaca Cintora",
|
||||
"Name[eo]": "Albert Vaca Cintora",
|
||||
"Name[es]": "Albert Vaca Cintora",
|
||||
"Name[eu]": "Albert Vaca Cintora",
|
||||
"Name[fi]": "Albert Vaca Cintora",
|
||||
"Name[fr]": "Albert Vaca Cintora",
|
||||
"Name[ga]": "Albert Vaca Cintora",
|
||||
"Name[gl]": "Albert Vaca Cintora",
|
||||
"Name[he]": "אלברט ואקה סינטורה",
|
||||
"Name[hi]": "अल्बर्ट वाका सिंटोरा",
|
||||
"Name[hu]": "Albert Vaca Cintora",
|
||||
"Name[ia]": "Albert Vaca Cintora",
|
||||
"Name[is]": "Albert Vaca Cintora",
|
||||
"Name[it]": "Albert Vaca Cintora",
|
||||
"Name[ja]": "Albert Vaca Cintora",
|
||||
"Name[ka]": "Albert Vaca Cintora",
|
||||
"Name[ko]": "Albert Vaca Cintora",
|
||||
"Name[lt]": "Albert Vaca Cintora",
|
||||
"Name[lv]": "Albert Vaca Cintora",
|
||||
"Name[nl]": "Albert Vaca Cintora",
|
||||
"Name[nn]": "Albert Vaca Cintora",
|
||||
"Name[pl]": "Albert Vaca Cintora",
|
||||
"Name[pt]": "Albert Vaca Cintora",
|
||||
"Name[pt_BR]": "Albert Vaca Cintora",
|
||||
"Name[ro]": "Albert Vaca Cintora",
|
||||
"Name[ru]": "Albert Vaca Cintora",
|
||||
"Name[sa]": "अल्बर्ट वाका सिन्टोरा",
|
||||
"Name[sk]": "Albert Vaca Cintora",
|
||||
"Name[sl]": "Albert Vaca Cintora",
|
||||
"Name[sv]": "Albert Vaca Cintora",
|
||||
"Name[tr]": "Albert Vaca Cintora",
|
||||
"Name[uk]": "Albert Vaca Cintora",
|
||||
"Name[zh_CN]": "Albert Vaca Cintora",
|
||||
"Name[zh_TW]": "Albert Vaca Cintora"
|
||||
}
|
||||
],
|
||||
"Category": "System Information",
|
||||
"Description": "Manage connected devices",
|
||||
"Description[ar]": "تدير الأجهزة المتصلة",
|
||||
"Description[bg]": "Управление на свързани устройства",
|
||||
"Description[ca@valencia]": "Gestiona els dispositius connectats",
|
||||
"Description[ca]": "Gestiona els dispositius connectats",
|
||||
"Description[cs]": "Spravovat připojená zařízení",
|
||||
"Description[da]": "Håndtér forbundede enheder",
|
||||
"Description[de]": "Verbundene Geräte verwalten",
|
||||
"Description[en_GB]": "Manage connected devices",
|
||||
"Description[eo]": "Mastrumi konektitajn aparatojn",
|
||||
"Description[es]": "Administrar dispositivos conectados",
|
||||
"Description[eu]": "Konektatutako gailuak kudeatu",
|
||||
"Description[fi]": "Hallitse kytkettyjä laitteita",
|
||||
"Description[fr]": "Gérer les appareils connectés",
|
||||
"Description[ga]": "Bainistigh gléasanna ceangailte",
|
||||
"Description[gl]": "Xestionar os dispositivos conectados.",
|
||||
"Description[he]": "ניהול התקנים מחוברים",
|
||||
"Description[hu]": "Csatlakoztatott eszközök kezelése",
|
||||
"Description[ia]": "Gere dispositivos connectite",
|
||||
"Description[is]": "Stjórna tengdum tækjum",
|
||||
"Description[it]": "Gestisci i dispositivi connessi",
|
||||
"Description[ka]": "მიერთებული მოწყობილობების მართვა",
|
||||
"Description[ko]": "연결된 장치 관리",
|
||||
"Description[lt]": "Tvarkyti prijungtus įrenginius",
|
||||
"Description[lv]": "Pārvaldīt savienotās ierīces",
|
||||
"Description[nl]": "Verbonden apparaten beheren",
|
||||
"Description[nn]": "Handsam tilkopla einingar",
|
||||
"Description[pa]": "ਕਨੈਕਟ ਹੋਏ ਡਿਵਾਈਸਾਂ ਦਾ ਇੰਤਜ਼ਾਮ",
|
||||
"Description[pl]": "Zarządzaj podłączonymi urządzeniami",
|
||||
"Description[pt_BR]": "Gerenciar dispositivos conectados",
|
||||
"Description[ro]": "Gestionează dispozitivele conectate",
|
||||
"Description[ru]": "Управление подключёнными устройствами",
|
||||
"Description[sa]": "संयोजितयन्त्राणां प्रबन्धनं कुर्वन्तु",
|
||||
"Description[sl]": "Upravljaj povezane naprave",
|
||||
"Description[sv]": "Hantera anslutna apparater",
|
||||
"Description[ta]": "இணைந்துள்ள சாதனங்களை நிர்வகிக்க விடும்",
|
||||
"Description[tr]": "Bağlı aygıtları yönetin",
|
||||
"Description[uk]": "Керування з'єднаними пристроями",
|
||||
"Description[zh_CN]": "管理已连接的设备",
|
||||
"Description[zh_TW]": "管理已連線裝置",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "kdeconnect",
|
||||
"Id": "org.kde.kdeconnect",
|
||||
"License": "GPL",
|
||||
"Name": "KDE Connect",
|
||||
"Name[ar]": "جسر كِيدِي",
|
||||
"Name[az]": "KDE Connect",
|
||||
"Name[bg]": "KDE Connect",
|
||||
"Name[ca@valencia]": "KDE Connect",
|
||||
"Name[ca]": "KDE Connect",
|
||||
"Name[cs]": "KDE Connect",
|
||||
"Name[da]": "KDE Connect",
|
||||
"Name[de]": "KDE Connect",
|
||||
"Name[en_GB]": "KDE Connect",
|
||||
"Name[eo]": "KDE Konekti",
|
||||
"Name[es]": "KDE Connect",
|
||||
"Name[eu]": "KDE Connect",
|
||||
"Name[fi]": "KDE Connect",
|
||||
"Name[fr]": "KDEConnect",
|
||||
"Name[ga]": "KDE Connect",
|
||||
"Name[gl]": "KDE Connect",
|
||||
"Name[he]": "KDE Connect",
|
||||
"Name[hi]": "केडीई कनेक्ट",
|
||||
"Name[hu]": "KDE Connect",
|
||||
"Name[ia]": "KDE Connect",
|
||||
"Name[is]": "KDE Connect",
|
||||
"Name[it]": "KDE Connect",
|
||||
"Name[ja]": "KDE Connect",
|
||||
"Name[ka]": "KDE Connect",
|
||||
"Name[ko]": "KDE Connect",
|
||||
"Name[lt]": "KDE Connect",
|
||||
"Name[lv]": "KDE Connect",
|
||||
"Name[nl]": "KDE Connect",
|
||||
"Name[nn]": "KDE Connect",
|
||||
"Name[pa]": "KDE ਕਨੈਕਟ",
|
||||
"Name[pl]": "KDE Connect",
|
||||
"Name[pt]": "KDE Connect",
|
||||
"Name[pt_BR]": "KDE Connect",
|
||||
"Name[ro]": "KDE Connect",
|
||||
"Name[ru]": "KDE Connect",
|
||||
"Name[sa]": "KDE Connect इति",
|
||||
"Name[sk]": "KDE Connect",
|
||||
"Name[sl]": "KDE Connect",
|
||||
"Name[sv]": "KDE-anslut",
|
||||
"Name[ta]": "கே.டீ.யீ. கனெக்ட்",
|
||||
"Name[tr]": "KDE Bağlan",
|
||||
"Name[uk]": "KDE Connect",
|
||||
"Name[zh_CN]": "KDE Connect",
|
||||
"Name[zh_TW]": "KDE Connect",
|
||||
"Version": "0.1",
|
||||
"Website": "https://albertvaka.wordpress.com"
|
||||
},
|
||||
"X-Plasma-API": "declarativeappletscript",
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-MainScript": "ui/main.qml",
|
||||
"X-Plasma-NotificationArea": "true",
|
||||
"X-Plasma-NotificationAreaCategory": "Hardware"
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "plasma-devel@kde.org",
|
||||
"Name": "The Plasma Team",
|
||||
"Name[ar]": "فريق بلازما",
|
||||
"Name[ast]": "L'equipu de Plasma",
|
||||
"Name[az]": "Plasma komandası",
|
||||
"Name[be]": "Каманда Plasma",
|
||||
"Name[bg]": "Екипът на Plasma",
|
||||
"Name[ca@valencia]": "L'equip de Plasma",
|
||||
"Name[ca]": "L'equip del Plasma",
|
||||
"Name[cs]": "Team Plasma",
|
||||
"Name[da]": "Plasma-udviklingsholdet",
|
||||
"Name[de]": "Das Plasma-Team",
|
||||
"Name[el]": "Η ομάδα Plasma",
|
||||
"Name[en_GB]": "The Plasma Team",
|
||||
"Name[eo]": "La Teamo de Plasma",
|
||||
"Name[es]": "El equipo de Plasma",
|
||||
"Name[et]": "Plasma meeskond",
|
||||
"Name[eu]": "Plasmaren taldea",
|
||||
"Name[fi]": "Plasma-työryhmä",
|
||||
"Name[fr]": "L'équipe de Plasma",
|
||||
"Name[ga]": "An Fhoireann Plasma",
|
||||
"Name[gl]": "O equipo de Plasma",
|
||||
"Name[he]": "צוות פלזמה",
|
||||
"Name[hu]": "A Plasma fejlesztői",
|
||||
"Name[ia]": "Le equipa de Plasma",
|
||||
"Name[id]": "Tim Plasma",
|
||||
"Name[ie]": "Li equipe de Plasma",
|
||||
"Name[is]": "Plasma-þróunarhópurinn",
|
||||
"Name[it]": "La squadra di Plasma",
|
||||
"Name[ja]": "Plasma チーム",
|
||||
"Name[ka]": "Plasma-ის გუნდი",
|
||||
"Name[ko]": "Plasma 팀",
|
||||
"Name[lt]": "Plasma komanda",
|
||||
"Name[lv]": "„Plasma“ komanda",
|
||||
"Name[nb]": "Utviklingslaget for Plasma",
|
||||
"Name[nl]": "Het team van Plasma",
|
||||
"Name[nn]": "Utviklingslaget for Plasma",
|
||||
"Name[pa]": "ਪਲਾਜ਼ਮਾ ਟੀਮ",
|
||||
"Name[pl]": "Zespół Plazmy",
|
||||
"Name[pt]": "A Equipa do Plasma",
|
||||
"Name[pt_BR]": "A equipe do Plasma",
|
||||
"Name[ro]": "Echipa Plasma",
|
||||
"Name[ru]": "Команда разработчиков Plasma",
|
||||
"Name[sa]": "प्लाज्मादलम्",
|
||||
"Name[sk]": "Tím Plasma",
|
||||
"Name[sl]": "Ekipa Plasme",
|
||||
"Name[sv]": "Plasma-gruppen",
|
||||
"Name[ta]": "பிளாஸ்மா குழு",
|
||||
"Name[tr]": "Plasma Takımı",
|
||||
"Name[uk]": "Команда розробників Плазми",
|
||||
"Name[vi]": "Đội Plasma",
|
||||
"Name[zh_CN]": "Plasma 开发团队",
|
||||
"Name[zh_TW]": "Plasma 團隊"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Pager%20widget",
|
||||
"Category": "Windows and Tasks",
|
||||
"Description": "Switch between activities",
|
||||
"Description[ar]": "بدل بين الأنشطة",
|
||||
"Description[az]": "Otaqlar arası keçid",
|
||||
"Description[be]": "Пераключэнне паміж пакоямі",
|
||||
"Description[bg]": "Превключване между дейностите",
|
||||
"Description[ca@valencia]": "Canvia entre activitats",
|
||||
"Description[ca]": "Commuta entre activitats",
|
||||
"Description[cs]": "Přepnout mezi aktivitami",
|
||||
"Description[da]": "Skift mellem aktiviteter",
|
||||
"Description[de]": "Zwischen Aktivitäten umschalten",
|
||||
"Description[el]": "Εναλλαγή μεταξύ δραστηριοτήτων",
|
||||
"Description[en_GB]": "Switch between activities",
|
||||
"Description[eo]": "Komuti inter aktivecoj",
|
||||
"Description[es]": "Cambiar entre actividades",
|
||||
"Description[et]": "Lülitumine tegevuste vahel",
|
||||
"Description[eu]": "Jarduera artean trukatzea",
|
||||
"Description[fi]": "Vaihda aktiviteetista toiseen",
|
||||
"Description[fr]": "Basculer entre les activités",
|
||||
"Description[ga]": "Athraigh idir gníomhaíochtaí",
|
||||
"Description[gl]": "Cambia de actividade.",
|
||||
"Description[he]": "מעבר בין פעילויות",
|
||||
"Description[hu]": "Váltás az aktivitások között",
|
||||
"Description[ia]": "Commuta inter activitates",
|
||||
"Description[id]": "Beralih antar aktivitas",
|
||||
"Description[ie]": "Alterar li activitás",
|
||||
"Description[is]": "Skipt á milli athafna",
|
||||
"Description[it]": "Passa da un'attività all'altra",
|
||||
"Description[ja]": "アクティビティの切り替え",
|
||||
"Description[ka]": "აქტივობებს შორის გადართვა",
|
||||
"Description[ko]": "활동간 전환",
|
||||
"Description[lt]": "Perjungti tarp veiklų",
|
||||
"Description[lv]": "Pārslēgties starp aktivitātēm",
|
||||
"Description[nb]": "Bytt mellom aktiviteter",
|
||||
"Description[nl]": "Tussen activiteiten schakelen",
|
||||
"Description[nn]": "Byt mellom aktivitetar",
|
||||
"Description[pa]": "ਸਰਗਰਮੀਆਂ ਵਿਚਾਲੇ ਬਦਲੋ",
|
||||
"Description[pl]": "Przełącza między aktywnościami",
|
||||
"Description[pt]": "Mudar de actividades",
|
||||
"Description[pt_BR]": "Alternar entre as atividades",
|
||||
"Description[ro]": "Schimbă între activități",
|
||||
"Description[ru]": "Переключение между комнатами",
|
||||
"Description[sa]": "क्रियाकलापानाम् मध्ये परिवर्तनं कुर्वन्तु",
|
||||
"Description[sk]": "Prepínanie medzi aktivitami",
|
||||
"Description[sl]": "Preklopi med opravili",
|
||||
"Description[sv]": "Byt mellan aktiviteter",
|
||||
"Description[ta]": "செயல்பாடுகளுக்கிடையே தாவ உதவும்",
|
||||
"Description[tr]": "Etkinlikler arasında gezin",
|
||||
"Description[uk]": "Перемикання між просторами дій",
|
||||
"Description[vi]": "Chuyển giữa các Hoạt động",
|
||||
"Description[zh_CN]": "在不同活动之间切换",
|
||||
"Description[zh_TW]": "在活動間切換",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "org.kde.plasma.pager",
|
||||
"Id": "org.kde.plasma.activitypager",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Activity Pager",
|
||||
"Name[ar]": "مبوب الأنشطة",
|
||||
"Name[az]": "İş otağı dəyişdiricisi",
|
||||
"Name[be]": "Пэйджар пакояў",
|
||||
"Name[bg]": "Пейджър на дейностите",
|
||||
"Name[ca@valencia]": "Paginador d'activitats",
|
||||
"Name[ca]": "Paginador d'activitats",
|
||||
"Name[cs]": "Prohlížeč aktivit",
|
||||
"Name[da]": "Aktivitetssøger",
|
||||
"Name[de]": "Aktivitätenübersicht",
|
||||
"Name[el]": "Σελιδοποίηση δραστηριότητας",
|
||||
"Name[en_GB]": "Activity Pager",
|
||||
"Name[eo]": "Aktiveca Tabulpaĝilo",
|
||||
"Name[es]": "Paginador de actividades",
|
||||
"Name[et]": "Tegevuste lülitaja",
|
||||
"Name[eu]": "Jardueren orrialdekatzailea",
|
||||
"Name[fi]": "Aktiviteettisivutin",
|
||||
"Name[fr]": "Gestionnaire d'activités",
|
||||
"Name[ga]": "Leathanach Gníomhaíochta",
|
||||
"Name[gl]": "Paxinador de actividades",
|
||||
"Name[he]": "דפדפן פעילויות",
|
||||
"Name[hu]": "Aktivitásváltó",
|
||||
"Name[ia]": "Pager de activitate",
|
||||
"Name[id]": "Pager Aktivitas",
|
||||
"Name[ie]": "Paginator de activitás",
|
||||
"Name[is]": "Athafnaflettir",
|
||||
"Name[it]": "Paginatore attività",
|
||||
"Name[ja]": "アクティビティページャ",
|
||||
"Name[ka]": "აქტივობის პეიჯერი",
|
||||
"Name[ko]": "활동 호출기",
|
||||
"Name[lt]": "Veiklų perjungiklis",
|
||||
"Name[lv]": "Aktivitāšu lapotājs",
|
||||
"Name[nb]": "Aktivitetsbytter",
|
||||
"Name[nl]": "Pager van activiteiten",
|
||||
"Name[nn]": "Aktivitetsbytar",
|
||||
"Name[pa]": "ਸਰਗਰਮੀ ਪੇਜ਼ਰ",
|
||||
"Name[pl]": "Przełącznik aktywności",
|
||||
"Name[pt]": "Paginador de Actividades",
|
||||
"Name[pt_BR]": "Paginador de atividades",
|
||||
"Name[ro]": "Paginator de activități",
|
||||
"Name[ru]": "Переключение комнат",
|
||||
"Name[sa]": "गतिविधि पेजर",
|
||||
"Name[sk]": "Stránkovač aktivít",
|
||||
"Name[sl]": "Pager dejavnosti",
|
||||
"Name[sv]": "Aktivitetsbytare",
|
||||
"Name[ta]": "செயல்பாடு மாற்றி",
|
||||
"Name[tr]": "Etkinlik Sayfalayıcısı",
|
||||
"Name[uk]": "Пейджер просторів дій",
|
||||
"Name[vi]": "Tổng quan Hoạt động",
|
||||
"Name[zh_CN]": "活动切换器",
|
||||
"Name[zh_TW]": "活動管理器",
|
||||
"Website": "https://userbase.kde.org"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.virtualdesktops",
|
||||
"org.kde.plasma.activities"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.pager"
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "hein@kde.org",
|
||||
"Name": "Eike Hein",
|
||||
"Name[ar]": "إيكي هين",
|
||||
"Name[az]": "Eike Hein",
|
||||
"Name[be]": "Eike Hein",
|
||||
"Name[bg]": "Eike Hein",
|
||||
"Name[ca@valencia]": "Eike Hein",
|
||||
"Name[ca]": "Eike Hein",
|
||||
"Name[cs]": "Eike Hein",
|
||||
"Name[da]": "Eike Hein",
|
||||
"Name[de]": "Eike Hein",
|
||||
"Name[el]": "Eike Hein",
|
||||
"Name[en_GB]": "Eike Hein",
|
||||
"Name[eo]": "Eike Hein",
|
||||
"Name[es]": "Eike Hein",
|
||||
"Name[et]": "Eike Hein",
|
||||
"Name[eu]": "Eike Hein",
|
||||
"Name[fi]": "Eike Hein",
|
||||
"Name[fr]": "Eike Hein",
|
||||
"Name[ga]": "Eike Hein",
|
||||
"Name[gl]": "Eike Hein",
|
||||
"Name[he]": "אייק היין",
|
||||
"Name[hu]": "Eike Hein",
|
||||
"Name[ia]": "Eike Hein",
|
||||
"Name[id]": "Eike Hein",
|
||||
"Name[ie]": "Eike Hein",
|
||||
"Name[is]": "Eike Hein",
|
||||
"Name[it]": "Eike Hein",
|
||||
"Name[ja]": "Eike Hein",
|
||||
"Name[ka]": "აიკე ჰაინი",
|
||||
"Name[ko]": "Eike Hein",
|
||||
"Name[lt]": "Eike Hein",
|
||||
"Name[lv]": "Eike Hein",
|
||||
"Name[nb]": "Eike Hein",
|
||||
"Name[nl]": "Eike Hein",
|
||||
"Name[nn]": "Eike Hein",
|
||||
"Name[pa]": "ਇਕੀ ਹੀਇਨ",
|
||||
"Name[pl]": "Eike Hein",
|
||||
"Name[pt]": "Eike Hein",
|
||||
"Name[pt_BR]": "Eike Hein",
|
||||
"Name[ro]": "Eike Hein",
|
||||
"Name[ru]": "Eike Hein",
|
||||
"Name[sa]": "ऐके हेन",
|
||||
"Name[sk]": "Eike Hein",
|
||||
"Name[sl]": "Eike Hein",
|
||||
"Name[sv]": "Eike Hein",
|
||||
"Name[ta]": "எய்கே ஹைன்",
|
||||
"Name[tr]": "Eike Hein",
|
||||
"Name[uk]": "Eike Hein",
|
||||
"Name[vi]": "Eike Hein",
|
||||
"Name[zh_CN]": "Eike Hein",
|
||||
"Name[zh_TW]": "Eike Hein"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Folder",
|
||||
"Category": "File System",
|
||||
"Description": "Display the contents of folders",
|
||||
"Description[ar]": "اعرض محتويات المجلّدات",
|
||||
"Description[az]": "Qovluqların tərkibinə baxış",
|
||||
"Description[be]": "Паказваць змесціва каталогаў",
|
||||
"Description[bg]": "Показване на съдържанието на папки",
|
||||
"Description[ca@valencia]": "Mostra el contingut de les carpetes",
|
||||
"Description[ca]": "Mostra el contingut de les carpetes",
|
||||
"Description[cs]": "Zobrazit obsah složek",
|
||||
"Description[da]": "Vis indholdet af mapper",
|
||||
"Description[de]": "Ordnerinhalte anzeigen",
|
||||
"Description[el]": "Εμφάνιση των περιεχομένων των φακέλων",
|
||||
"Description[en_GB]": "Display the contents of folders",
|
||||
"Description[eo]": "Montri la enhavon de dosierujoj",
|
||||
"Description[es]": "Mostrar el contenido de carpetas",
|
||||
"Description[et]": "Kataloogide sisu näitamine",
|
||||
"Description[eu]": "Karpeten edukia erakustea",
|
||||
"Description[fi]": "Näyttää kansion sisällön",
|
||||
"Description[fr]": "Afficher le contenu des dossiers",
|
||||
"Description[ga]": "Taispeáin ábhar na bhfillteán",
|
||||
"Description[gl]": "Amosa o contido de cartafoles.",
|
||||
"Description[he]": "מציג תוכן של תיקייה",
|
||||
"Description[hu]": "Megjeleníti a mappák tartalmát",
|
||||
"Description[ia]": "Monstra le contentos de dossieres",
|
||||
"Description[id]": "Tampilkan konten folder",
|
||||
"Description[ie]": "Monstrar li contenete de fólderes",
|
||||
"Description[is]": "Sýna innihald í möppum",
|
||||
"Description[it]": "Visualizza il contenuto delle cartelle",
|
||||
"Description[ja]": "フォルダの内容を表示します",
|
||||
"Description[ka]": "საქაღალდეების შიგთავსის ჩვენება",
|
||||
"Description[ko]": "폴더의 내용 보기",
|
||||
"Description[lt]": "Rodyti aplankų turinį",
|
||||
"Description[lv]": "Parādīt mapju saturu",
|
||||
"Description[nb]": "Vis innholdet i mapper",
|
||||
"Description[nl]": "Toon de inhoud van mappen",
|
||||
"Description[nn]": "Vis innhaldet i mapper",
|
||||
"Description[pa]": "ਫੋਲਡਰਾਂ ਦੀ ਸਮੱਗਰੀ ਵੇਖਾਓ",
|
||||
"Description[pl]": "Wyświetla zawartość katalogów",
|
||||
"Description[pt]": "Mostrar o conteúdo das pastas",
|
||||
"Description[pt_BR]": "Mostra o conteúdo das pastas",
|
||||
"Description[ro]": "Afișează conținutul dosarelor",
|
||||
"Description[ru]": "Вывод содержимого папки",
|
||||
"Description[sa]": "पुटस्य सामग्रीं प्रदर्शयन्तु",
|
||||
"Description[sk]": "Zobraziť obsah priečinkov",
|
||||
"Description[sl]": "Pokaži vsebino map",
|
||||
"Description[sv]": "Visa innehåll i kataloger",
|
||||
"Description[ta]": "அடைவுகளின் உள்ளடக்கத்தை காட்டும்",
|
||||
"Description[tr]": "Klasörlerin içeriğini görüntüle",
|
||||
"Description[uk]": "Показ вмісту тек",
|
||||
"Description[vi]": "Hiển thị nội dung các thư mục",
|
||||
"Description[zh_CN]": "显示文件夹的内容",
|
||||
"Description[zh_TW]": "顯示資料夾內容",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "org.kde.plasma.folder",
|
||||
"Id": "org.kde.plasma.folder",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Folder View",
|
||||
"Name[ar]": "عرض المجلّد",
|
||||
"Name[az]": "Qovluqlara baxış",
|
||||
"Name[be]": "Каталогі",
|
||||
"Name[bg]": "Преглед на папка",
|
||||
"Name[ca@valencia]": "Vista de carpetes",
|
||||
"Name[ca]": "Vista de carpeta",
|
||||
"Name[cs]": "Pohled na složku",
|
||||
"Name[da]": "Mappevisning",
|
||||
"Name[de]": "Ordner-Ansicht",
|
||||
"Name[el]": "Προβολή φακέλου",
|
||||
"Name[en_GB]": "Folder View",
|
||||
"Name[eo]": "Dosieruja Vidigo",
|
||||
"Name[es]": "Vista de carpetas",
|
||||
"Name[et]": "Kataloogivaade",
|
||||
"Name[eu]": "Karpeta ikuspegia",
|
||||
"Name[fi]": "Kansionäkymä",
|
||||
"Name[fr]": "Vue de dossier",
|
||||
"Name[ga]": "Amharc Fillteán",
|
||||
"Name[gl]": "Vista de cartafoles",
|
||||
"Name[he]": "הצגת תיקיות",
|
||||
"Name[hu]": "Mappanézet",
|
||||
"Name[ia]": "Vista del Dossier",
|
||||
"Name[id]": "Tampilan Folder",
|
||||
"Name[ie]": "Vise de fólder",
|
||||
"Name[is]": "Möppuyfirlit",
|
||||
"Name[it]": "Vista delle cartelle",
|
||||
"Name[ja]": "フォルダビュー",
|
||||
"Name[ka]": "საქაღალდის ხედი",
|
||||
"Name[ko]": "폴더 보기",
|
||||
"Name[lt]": "Aplankų rodinys",
|
||||
"Name[lv]": "Mapes skats",
|
||||
"Name[nb]": "Mappevisning",
|
||||
"Name[nl]": "Mapweergave",
|
||||
"Name[nn]": "Mappevising",
|
||||
"Name[pa]": "ਫੋਲਡਰ ਝਲਕ",
|
||||
"Name[pl]": "Widok katalogu",
|
||||
"Name[pt]": "Vista da Pasta",
|
||||
"Name[pt_BR]": "Visualização de pastas",
|
||||
"Name[ro]": "Vizualizare dosare",
|
||||
"Name[ru]": "Просмотр папки",
|
||||
"Name[sa]": "समुच्चय दृश्यम्",
|
||||
"Name[se]": "Máhppačájeheapmi",
|
||||
"Name[sk]": "Pohľad priečinka",
|
||||
"Name[sl]": "Prikaz mape",
|
||||
"Name[sr@ijekavian]": "Приказ фасцикле",
|
||||
"Name[sr@ijekavianlatin]": "Prikaz fascikle",
|
||||
"Name[sr@latin]": "Prikaz fascikle",
|
||||
"Name[sr]": "Приказ фасцикле",
|
||||
"Name[sv]": "Katalogvy",
|
||||
"Name[ta]": "அடைவு பார்வை",
|
||||
"Name[tg]": "Намуди ҷузвадонҳо",
|
||||
"Name[tr]": "Klasör Görünümü",
|
||||
"Name[uk]": "Перегляд теки",
|
||||
"Name[vi]": "Xem thư mục",
|
||||
"Name[zh_CN]": "文件夹视图",
|
||||
"Name[zh_TW]": "資料夾檢視",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-ContainmentType": "Desktop",
|
||||
"X-Plasma-DropMimeTypes": [
|
||||
"inode/directory"
|
||||
],
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.filemanagement"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.desktopcontainment"
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "hein@kde.org",
|
||||
"Name": "Eike Hein",
|
||||
"Name[ar]": "إيكي هين",
|
||||
"Name[az]": "Eike Hein",
|
||||
"Name[be]": "Eike Hein",
|
||||
"Name[bg]": "Eike Hein",
|
||||
"Name[ca@valencia]": "Eike Hein",
|
||||
"Name[ca]": "Eike Hein",
|
||||
"Name[cs]": "Eike Hein",
|
||||
"Name[da]": "Eike Hein",
|
||||
"Name[de]": "Eike Hein",
|
||||
"Name[el]": "Eike Hein",
|
||||
"Name[en_GB]": "Eike Hein",
|
||||
"Name[eo]": "Eike Hein",
|
||||
"Name[es]": "Eike Hein",
|
||||
"Name[et]": "Eike Hein",
|
||||
"Name[eu]": "Eike Hein",
|
||||
"Name[fi]": "Eike Hein",
|
||||
"Name[fr]": "Eike Hein",
|
||||
"Name[ga]": "Eike Hein",
|
||||
"Name[gl]": "Eike Hein",
|
||||
"Name[he]": "אייק היין",
|
||||
"Name[hu]": "Eike Hein",
|
||||
"Name[ia]": "Eike Hein",
|
||||
"Name[id]": "Eike Hein",
|
||||
"Name[ie]": "Eike Hein",
|
||||
"Name[is]": "Eike Hein",
|
||||
"Name[it]": "Eike Hein",
|
||||
"Name[ja]": "Eike Hein",
|
||||
"Name[ka]": "აიკე ჰაინი",
|
||||
"Name[ko]": "Eike Hein",
|
||||
"Name[lt]": "Eike Hein",
|
||||
"Name[lv]": "Eike Hein",
|
||||
"Name[nb]": "Eike Hein",
|
||||
"Name[nl]": "Eike Hein",
|
||||
"Name[nn]": "Eike Hein",
|
||||
"Name[pa]": "ਇਕੀ ਹੀਇਨ",
|
||||
"Name[pl]": "Eike Hein",
|
||||
"Name[pt]": "Eike Hein",
|
||||
"Name[pt_BR]": "Eike Hein",
|
||||
"Name[ro]": "Eike Hein",
|
||||
"Name[ru]": "Eike Hein",
|
||||
"Name[sa]": "ऐके हेन",
|
||||
"Name[sk]": "Eike Hein",
|
||||
"Name[sl]": "Eike Hein",
|
||||
"Name[sv]": "Eike Hein",
|
||||
"Name[ta]": "எய்கே ஹைன்",
|
||||
"Name[tr]": "Eike Hein",
|
||||
"Name[uk]": "Eike Hein",
|
||||
"Name[vi]": "Eike Hein",
|
||||
"Name[zh_CN]": "Eike Hein",
|
||||
"Name[zh_TW]": "Eike Hein"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Task%20Manager%20and%20Icons-Only%20Task%20Manager%20widgets",
|
||||
"Category": "Windows and Tasks",
|
||||
"Description": "App bar displaying only icons",
|
||||
"Description[ar]": "شريط التطبيقات يعرض أيقونات فقط",
|
||||
"Description[az]": "Yalnız nişanları göstərən tətbiq paneli",
|
||||
"Description[be]": "На панэлі праграм паказваюцца толькі значкі",
|
||||
"Description[bg]": "Лента с приложения, показваща само икони",
|
||||
"Description[ca@valencia]": "Barra d'aplicacions que mostra només les icones",
|
||||
"Description[ca]": "Barra d'aplicacions que mostra només les icones",
|
||||
"Description[da]": "App-linjen viser kun ikoner",
|
||||
"Description[de]": "Nur Symbole werden auf der Anwendungsleiste angezeigt",
|
||||
"Description[el]": "Γραμμή εφαρμογών που εμφανίζει μόνο εικονίδια",
|
||||
"Description[en_GB]": "App bar displaying only icons",
|
||||
"Description[eo]": "Apobreto montranta nur piktogramojn",
|
||||
"Description[es]": "Barra de aplicaciones que solo muestra iconos",
|
||||
"Description[eu]": "Ikonoak bakarrik azaltzen dituen aplikazio-barra",
|
||||
"Description[fi]": "Vain kuvakkeet näyttävä sovelluspalkki",
|
||||
"Description[fr]": "Barre d'applications n'affichant que des icônes",
|
||||
"Description[ga]": "Barra aipeanna ag taispeáint deilbhíní amháin",
|
||||
"Description[gl]": "Barra de aplicacións que amosa só iconas.",
|
||||
"Description[he]": "סרגל היישומים מציג סמלים בלבד",
|
||||
"Description[hu]": "Csak ikonokat megjelenítő alkalmazássáv",
|
||||
"Description[ia]": "Barra de app monstrante solmente icones",
|
||||
"Description[id]": "Bilah app menampilkan ikon saja",
|
||||
"Description[is]": "Forritastika sem birtir eingöngu tákn",
|
||||
"Description[it]": "Barra dell'applicazione che mostra solo le icone",
|
||||
"Description[ja]": "アイコンのみを表示するアプリケーションバー",
|
||||
"Description[ka]": "აპის პანელი, მხოლოდ, ხატულებს აჩვენებს",
|
||||
"Description[ko]": "아이콘만 표시하는 앱 표시줄",
|
||||
"Description[lt]": "Programų juosta atvaizduojanti tik piktogramas",
|
||||
"Description[lv]": "Programmu josla, kurā ir tikai ikonas",
|
||||
"Description[nb]": "Oppgavelinje med bare ikoner",
|
||||
"Description[nl]": "Toepassingenbalk met alleen pictogrammen",
|
||||
"Description[nn]": "Oppgåvelinje med berre ikon",
|
||||
"Description[pl]": "Pasek aplikacji wyświetlający tylko ikony",
|
||||
"Description[pt_BR]": "Barra de aplicativos apenas com ícones",
|
||||
"Description[ro]": "Bară de aplicații ce afișează doar pictograme",
|
||||
"Description[ru]": "Панель задач, использующая только значки",
|
||||
"Description[sa]": "केवलं चिह्नानि प्रदर्शयति एप् बार",
|
||||
"Description[sk]": "Panel aplikácií zobrazujúci iba ikony",
|
||||
"Description[sl]": "Vrstica aplikacij, ki prikazuje samo ikone",
|
||||
"Description[sv]": "Programrad som bara visar ikoner",
|
||||
"Description[ta]": "சின்னங்களை மட்டும் காட்டும் பணிப்பட்டை",
|
||||
"Description[tr]": "Yalnızca simgeler görüntüleyen uygulama çubuğu",
|
||||
"Description[uk]": "Панель програм, де показано лише піктограми",
|
||||
"Description[zh_CN]": "应用栏仅显示图标",
|
||||
"Description[zh_TW]": "只顯示圖示的應用程式列",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "preferences-system-windows",
|
||||
"Id": "org.kde.plasma.icontasks",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Icons-Only Task Manager",
|
||||
"Name[ar]": "مدير مهامّ بأيقونات فقط",
|
||||
"Name[az]": "Yalnız nişanlı tapşırıq meneceri",
|
||||
"Name[be]": "Кіраўнік задач у выглядзе значкоў",
|
||||
"Name[bg]": "Мениджър на задачи (само икони)",
|
||||
"Name[ca@valencia]": "Gestor de tasques només amb icones",
|
||||
"Name[ca]": "Gestor de tasques només amb icones",
|
||||
"Name[cs]": "Správce úloh pouze s ikonami",
|
||||
"Name[da]": "Opgavelinje kun med ikoner",
|
||||
"Name[de]": "Fensterleiste nur mit Symbolen",
|
||||
"Name[el]": "Διαχείριση εργασιών μόνο με εικονίδια",
|
||||
"Name[en_GB]": "Icons-Only Task Manager",
|
||||
"Name[eo]": "Nur-Piktograma Taskadministrilo",
|
||||
"Name[es]": "Gestor de tareas con solo iconos",
|
||||
"Name[eu]": "Ikono-soileko ataza-kudeatzailea",
|
||||
"Name[fi]": "Kuvaketehtävienhallinta",
|
||||
"Name[fr]": "Gestionnaire de tâches uniquement par icônes",
|
||||
"Name[ga]": "Bainisteoir Tascanna Deilbhíní Amháin",
|
||||
"Name[gl]": "Xestor de tarefas de só iconas",
|
||||
"Name[he]": "מנהל משימות של סמלים בלבד",
|
||||
"Name[hu]": "Ikonos feladatkezelő",
|
||||
"Name[ia]": "Gerente de carga a sol icone",
|
||||
"Name[id]": "Pengelola Tugas Ikon Saja",
|
||||
"Name[is]": "Verkefnastjóri með táknum eingöngu",
|
||||
"Name[it]": "Gestore dei processi solo icone",
|
||||
"Name[ja]": "アイコンだけのタスクマネージャ",
|
||||
"Name[ka]": "მხოლოდ ხატულებიანი ამოცანების მმართველი",
|
||||
"Name[ko]": "아이콘 전용 작업 관리자",
|
||||
"Name[lt]": "Tik piktogramų užduočių tvarkytuvė",
|
||||
"Name[lv]": "Tikai ikonu uzdevumu pārvaldnieks",
|
||||
"Name[nb]": "Oppgavebehandler med bare ikoner",
|
||||
"Name[nl]": "Takenbeheer met alleen pictogrammen",
|
||||
"Name[nn]": "Oppgåvehandsamar med berre ikon",
|
||||
"Name[pa]": "ਸਿਰਫ਼-ਆਈਕਾਨ ਟਾਸਕ ਮੈਨੇਜਰ",
|
||||
"Name[pl]": "Ikonowy przełącznik zadań",
|
||||
"Name[pt_BR]": "Gerenciador de tarefas apenas com ícones",
|
||||
"Name[ro]": "Gestionar de sarcini numai cu pictograme",
|
||||
"Name[ru]": "Панель задач (только значки)",
|
||||
"Name[sa]": "चिह्न-केवलं कार्यप्रबन्धकम्",
|
||||
"Name[sk]": "Správca úloh iba s ikonami",
|
||||
"Name[sl]": "Upravljalnik opravil samo z ikonami",
|
||||
"Name[sv]": "Aktivitetshanterare med bara ikoner",
|
||||
"Name[ta]": "சின்னங்களை மட்டும் கொண்ட பணி மேலாளி",
|
||||
"Name[tr]": "Simgesel Görev Yöneticisi",
|
||||
"Name[uk]": "Керування задачами лише за допомогою піктограм",
|
||||
"Name[zh_CN]": "图标任务管理器",
|
||||
"Name[zh_TW]": "只有圖示的工作管理員",
|
||||
"Website": "https://userbase.kde.org/Plasma/Tasks"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.multitasking"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.taskmanager"
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "hein@kde.org",
|
||||
"Name": "Eike Hein",
|
||||
"Name[ar]": "إيكي هين",
|
||||
"Name[az]": "Eike Hein",
|
||||
"Name[bg]": "Eike Hein",
|
||||
"Name[ca@valencia]": "Eike Hein",
|
||||
"Name[ca]": "Eike Hein",
|
||||
"Name[cs]": "Eike Hein",
|
||||
"Name[da]": "Eike Hein",
|
||||
"Name[de]": "Eike Hein",
|
||||
"Name[en_GB]": "Eike Hein",
|
||||
"Name[eo]": "Eike Hein",
|
||||
"Name[es]": "Eike Hein",
|
||||
"Name[eu]": "Eike Hein",
|
||||
"Name[fi]": "Eike Hein",
|
||||
"Name[fr]": "Eike Hein",
|
||||
"Name[gl]": "Eike Hein",
|
||||
"Name[he]": "אייק היין",
|
||||
"Name[hu]": "Eike Hein",
|
||||
"Name[ia]": "Eike Hein",
|
||||
"Name[id]": "Eike Hein",
|
||||
"Name[is]": "Eike Hein",
|
||||
"Name[it]": "Eike Hein",
|
||||
"Name[ja]": "Eike Hein",
|
||||
"Name[ka]": "აიკე ჰაინი",
|
||||
"Name[ko]": "Eike Hein",
|
||||
"Name[lt]": "Eike Hein",
|
||||
"Name[lv]": "Eike Hein",
|
||||
"Name[nl]": "Eike Hein",
|
||||
"Name[nn]": "Eike Hein",
|
||||
"Name[pl]": "Eike Hein",
|
||||
"Name[pt]": "Eike Hein",
|
||||
"Name[pt_BR]": "Eike Hein",
|
||||
"Name[ro]": "Eike Hein",
|
||||
"Name[ru]": "Eike Hein",
|
||||
"Name[sa]": "ऐके हेन",
|
||||
"Name[sk]": "Eike Hein",
|
||||
"Name[sl]": "Eike Hein",
|
||||
"Name[sv]": "Eike Hein",
|
||||
"Name[ta]": "எய்கே ஹைன்",
|
||||
"Name[tr]": "Eike Hein",
|
||||
"Name[uk]": "Eike Hein",
|
||||
"Name[vi]": "Eike Hein",
|
||||
"Name[zh_CN]": "Eike Hein",
|
||||
"Name[zh_TW]": "Eike Hein"
|
||||
}
|
||||
],
|
||||
"Category": "Application Launchers",
|
||||
"Description": "A fullscreen application launcher",
|
||||
"Description[ar]": "مطلق تطبيقات ملء الشاشة ",
|
||||
"Description[az]": "Tam ekran tətbiq başladıcısı",
|
||||
"Description[bg]": "Стартер на приложения на цял екран",
|
||||
"Description[ca@valencia]": "Un iniciador d'aplicacions a pantalla completa",
|
||||
"Description[ca]": "Un llançador d'aplicacions a pantalla completa",
|
||||
"Description[cs]": "Spouštěč aplikací na celou obrazovku",
|
||||
"Description[da]": "En fuldskærms programstarter",
|
||||
"Description[de]": "Anwendungsstarter im Vollbildmodus",
|
||||
"Description[en_GB]": "A fullscreen application launcher",
|
||||
"Description[eo]": "Plenekrana aplikaĵlanĉilo",
|
||||
"Description[es]": "Lanzador de aplicaciones a pantalla completa",
|
||||
"Description[eu]": "Pantaila-osoko aplikazio abiarazle bat",
|
||||
"Description[fi]": "Koko näytön sovelluskäynnistin",
|
||||
"Description[fr]": "Un lanceur d'applications en plein écran",
|
||||
"Description[gl]": "Un iniciador de aplicacións a pantalla completa",
|
||||
"Description[he]": "משגר יישומים במסך מלא",
|
||||
"Description[hu]": "Teljes képernyős alkalmazásindító",
|
||||
"Description[ia]": "Un lanceator de application a schermo plen",
|
||||
"Description[id]": "Sebuah peluncur aplikasi layar penuh",
|
||||
"Description[is]": "Forritaræsir sem fyllir skjáinn",
|
||||
"Description[it]": "Un lanciatore di applicazioni a schermo intero",
|
||||
"Description[ja]": "フルスクリーンのアプリケーションランチャー",
|
||||
"Description[ka]": "აპლიკაციების მთელ ეკრანზე გამშვები",
|
||||
"Description[ko]": "전체 화면 앱 실행기",
|
||||
"Description[lt]": "Viso ekrano programų paleidyklė",
|
||||
"Description[lv]": "Pilnekrāna programmu palaidējs",
|
||||
"Description[nl]": "Een programmastarter met volledig scherm",
|
||||
"Description[nn]": "Fullskjerms programstartar",
|
||||
"Description[pl]": "Pełnoekranowe menu programów",
|
||||
"Description[pt]": "Um lançador de aplicações em ecrã completo",
|
||||
"Description[pt_BR]": "Lançador de aplicativos em tela cheia",
|
||||
"Description[ro]": "Lansator de aplicații pe tot ecranul",
|
||||
"Description[ru]": "Полноэкранное меню запуска приложений",
|
||||
"Description[sa]": "एकः पूर्णपर्दे अनुप्रयोगप्रक्षेपकः",
|
||||
"Description[sk]": "Spúšťač aplikácií na celú obrazovku",
|
||||
"Description[sl]": "Celozaslonski zaganjalnik aplikacij",
|
||||
"Description[sv]": "Ett fullskärmsverktyg för programstart",
|
||||
"Description[ta]": "முழுத்திரை செயலி ஏவி",
|
||||
"Description[tr]": "Tam ekran uygulama başlatıcısı",
|
||||
"Description[uk]": "Повноекранний засіб запуску програм",
|
||||
"Description[vi]": "Trình khởi chạy ứng dụng, với kích cỡ toàn màn hình",
|
||||
"Description[zh_CN]": "全屏应用程序启动器",
|
||||
"Description[zh_TW]": "一個全螢幕應用程式啟動器",
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "start-here-kde",
|
||||
"Id": "org.kde.plasma.kickerdash",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Application Dashboard",
|
||||
"Name[ar]": "لوحة معلومات التطبيق",
|
||||
"Name[az]": "Tətbiq tablosu",
|
||||
"Name[bg]": "Панел на приложения",
|
||||
"Name[ca@valencia]": "Tauler d'aplicacions",
|
||||
"Name[ca]": "Tauler d'aplicacions",
|
||||
"Name[cs]": "Pracovní plocha aplikace",
|
||||
"Name[da]": "Programoverblik",
|
||||
"Name[de]": "Anwendungsübersicht",
|
||||
"Name[en_GB]": "Application Dashboard",
|
||||
"Name[eo]": "Aplika Instrumentpanelo",
|
||||
"Name[es]": "Tablero de aplicaciones",
|
||||
"Name[eu]": "Aplikazioen Aginte-mahaia",
|
||||
"Name[fi]": "Sovelluskojelauta",
|
||||
"Name[fr]": "Tableau de bord des applications",
|
||||
"Name[gl]": "Cadro de control de aplicacións",
|
||||
"Name[he]": "לוח מחווני יישומים",
|
||||
"Name[hu]": "Alkalmazás irányítópult",
|
||||
"Name[ia]": "Pannello de instrumentos de Application",
|
||||
"Name[id]": "Dasbor Aplikasi",
|
||||
"Name[is]": "Hugbúnaðarborð",
|
||||
"Name[it]": "Cruscotto applicazioni",
|
||||
"Name[ja]": "アプリケーションダッシュボード",
|
||||
"Name[ka]": "აპლიკაციის სამუშაო დაფა",
|
||||
"Name[ko]": "앱 대시보드",
|
||||
"Name[lt]": "Programų skydelis",
|
||||
"Name[lv]": "Programmu panelis",
|
||||
"Name[nl]": "Toepassingendashboard",
|
||||
"Name[nn]": "Programkontrollpult",
|
||||
"Name[pl]": "Tablica programów",
|
||||
"Name[pt]": "Quadro da Aplicação",
|
||||
"Name[pt_BR]": "Painel de aplicativos",
|
||||
"Name[ro]": "Panou de bord pentru aplicații",
|
||||
"Name[ru]": "Доска приложений",
|
||||
"Name[sa]": "अनुप्रयोग डैशबोर्ड",
|
||||
"Name[sk]": "Hlavný panel aplikácií",
|
||||
"Name[sl]": "Application Dashboard",
|
||||
"Name[sv]": "Instrumentpanel för program",
|
||||
"Name[ta]": "செயலி கருவிப்பலகை",
|
||||
"Name[tr]": "Uygulama Gösterge Tablosu",
|
||||
"Name[uk]": "Панель приладів програм",
|
||||
"Name[vi]": "Bảng điều khiển ứng dụng",
|
||||
"Name[zh_CN]": "应用程序面板",
|
||||
"Name[zh_TW]": "應用程式儀表板",
|
||||
"Website": "https://kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.launchermenu"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.kicker"
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "sebas@kde.org",
|
||||
"Name": "Sebastian Kügler",
|
||||
"Name[ar]": "سيباستيان كوغلر",
|
||||
"Name[az]": "Sebastian Kügler",
|
||||
"Name[be]": "Sebastian Kügler",
|
||||
"Name[bg]": "Sebastian Kügler",
|
||||
"Name[ca@valencia]": "Sebastian Kügler",
|
||||
"Name[ca]": "Sebastian Kügler",
|
||||
"Name[cs]": "Sebastian Kügler",
|
||||
"Name[da]": "Sebastian Kügler",
|
||||
"Name[de]": "Sebastian Kügler",
|
||||
"Name[el]": "Sebastian kügler",
|
||||
"Name[en_GB]": "Sebastian Kügler",
|
||||
"Name[eo]": "Sebastian Kügler",
|
||||
"Name[es]": "Sebastian Kügler",
|
||||
"Name[et]": "Sebastian Kügler",
|
||||
"Name[eu]": "Sebastian Kügler",
|
||||
"Name[fi]": "Sebastian Kügler",
|
||||
"Name[fr]": "Sebastian Kügler",
|
||||
"Name[ga]": "Sebastian Kügler",
|
||||
"Name[gl]": "Sebastian Kügler",
|
||||
"Name[he]": "סבסטיאן קיגלר",
|
||||
"Name[hu]": "Sebastian Kügler",
|
||||
"Name[ia]": "Sebastian Kügler",
|
||||
"Name[id]": "Sebastian Kügler",
|
||||
"Name[ie]": "Sebastian Kügler",
|
||||
"Name[is]": "Sebastian Kügler",
|
||||
"Name[it]": "Sebastian Kügler",
|
||||
"Name[ja]": "Sebastian Kügler",
|
||||
"Name[ka]": "სებასტიან კუგლერი",
|
||||
"Name[ko]": "Sebastian Kügler",
|
||||
"Name[lt]": "Sebastian Kügler",
|
||||
"Name[lv]": "Sebastian Kügler",
|
||||
"Name[nb]": "Sebastian Kügler",
|
||||
"Name[nl]": "Sebastian Kügler",
|
||||
"Name[nn]": "Sebastian Kügler",
|
||||
"Name[pl]": "Sebastian Kügler",
|
||||
"Name[pt]": "Sebastian Kügler",
|
||||
"Name[pt_BR]": "Sebastian Kügler",
|
||||
"Name[ro]": "Sebastian Kügler",
|
||||
"Name[ru]": "Sebastian Kügler",
|
||||
"Name[sa]": "सेबास्टियन कुग्लर",
|
||||
"Name[sk]": "Sebastian Kügler",
|
||||
"Name[sl]": "Sebastian Kügler",
|
||||
"Name[sv]": "Sebastian Kügler",
|
||||
"Name[ta]": "ஸெபாஸ்டியன் கூக்லர்",
|
||||
"Name[tr]": "Sebastian Kügler",
|
||||
"Name[uk]": "Sebastian Kügler",
|
||||
"Name[vi]": "Sebastian Kügler",
|
||||
"Name[zh_CN]": "Sebastian Kügler",
|
||||
"Name[zh_TW]": "Sebastian Kügler"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=Show%20Desktop/Minimize%20All%20widget",
|
||||
"Category": "Windows and Tasks",
|
||||
"Description": "Shows the desktop by minimizing all windows",
|
||||
"Description[ar]": "تظهر سطح المكتب بتصغير كل النوافذ",
|
||||
"Description[az]": "Bütün pəncərələri kiçiltməklə İş Masasını göstərir",
|
||||
"Description[be]": "Згортвае ўсе вокны і паказвае пусты працоўны стол",
|
||||
"Description[bg]": "Показва работния плот, като минимизира всички прозорци",
|
||||
"Description[ca@valencia]": "Mostra l'escriptori minimitzant totes les finestres",
|
||||
"Description[ca]": "Mostra l'escriptori minimitzant totes les finestres",
|
||||
"Description[cs]": "Zobrazit plochu minimalizací všech oken",
|
||||
"Description[da]": "Viser skrivebordet ved at minimere alle vinduer",
|
||||
"Description[de]": "Zeigt die Arbeitsfläche an, indem alle Fenster minimiert werden",
|
||||
"Description[el]": "Εμφανίζει την επιφάνεια εργασίας ελαχιστοποιώντας όλα τα παράθυρα",
|
||||
"Description[en_GB]": "Shows the desktop by minimising all windows",
|
||||
"Description[eo]": "Montras la labortablon minimumigante ĉiujn fenestrojn",
|
||||
"Description[es]": "Muestra el escritorio minimizando todas las ventanas",
|
||||
"Description[et]": "Töölaua näitamine kõigi akende minimeerimise järel",
|
||||
"Description[eu]": "Mahaigaina erakusten du leiho guztiak ikonotuz",
|
||||
"Description[fi]": "Näyttää työpöydän pienentämällä kaikki ikkunat",
|
||||
"Description[fr]": "Afficher le bureau en minimisant toutes les fenêtres",
|
||||
"Description[ga]": "Taispeáin an deasc trí na fuinneoga go léir a íoslaghdú",
|
||||
"Description[gl]": "Minimiza todas as xanelas para amosar o escritorio.",
|
||||
"Description[he]": "מציג את שולחן העבודה על ידי מזעור כל החלונות",
|
||||
"Description[hu]": "Megjeleníti az asztalt az összes ablak minimalizálásával",
|
||||
"Description[ia]": "Monstra le scriptorio per minimisar omne fenestras",
|
||||
"Description[id]": "Menampilkan desktop dengan meminimalkan semua jendela",
|
||||
"Description[ie]": "Minimisar omni fenestres e monstrar li Pupitre",
|
||||
"Description[is]": "Sýnir skjáborðið með því að fela alla glugga",
|
||||
"Description[it]": "Mostra il desktop minimizzando tutte le finestre",
|
||||
"Description[ja]": "すべてのウィンドウを最小化してデスクトップを表示します",
|
||||
"Description[ka]": "ფანჯრების ჩაკეცვა და სამუშაო მაგიდის ჩვენება",
|
||||
"Description[ko]": "모든 창을 최소화하여 바탕 화면 표시",
|
||||
"Description[lt]": "Suskleisdamas visus langus, rodo darbalaukį",
|
||||
"Description[lv]": "Parāda darbvirsmu, minimizējot visus logus",
|
||||
"Description[nb]": "Vis skrivebordet ved å minimere alle vinduene",
|
||||
"Description[nl]": "Toont het bureaublad door alle vensters te minimaliseren",
|
||||
"Description[nn]": "Viser skrivebordet ved å minimera alle vindauga",
|
||||
"Description[pa]": "ਸਾਰੀਆਂ ਵਿੰਡੋਆਂ ਨੂੰ ਘੱਟੋ-ਘੱਟ ਕਰਕੇ ਡੈਸਕਟਾਪ ਵੇਖਾਓ",
|
||||
"Description[pl]": "Ukazuje pulpit minimalizując wszystkie okna",
|
||||
"Description[pt]": "Mostra o ecrã, minimizando todas as janelas",
|
||||
"Description[pt_BR]": "Mostra a área de trabalho ao minimizar todas as janelas",
|
||||
"Description[ro]": "Arată biroul prin minimizarea tuturor ferestrelor",
|
||||
"Description[ru]": "Показывает рабочий стол, свернув все окна",
|
||||
"Description[sa]": "सर्वाणि विण्डोस् न्यूनीकृत्य डेस्कटॉप् दर्शयति",
|
||||
"Description[sk]": "Zobrazí plochu minimalizovaním všetkých okien",
|
||||
"Description[sl]": "Prikaže namizje s strnjevanjem vseh oken",
|
||||
"Description[sv]": "Visar skrivbordet genom att minimera alla fönster",
|
||||
"Description[ta]": "அனைத்து சாளரங்களையும் ஒதுக்கி பணிமேடையை காட்டும்",
|
||||
"Description[tr]": "Bütün pencereleri küçülterek masaüstünü gösterir",
|
||||
"Description[uk]": "Показати стільницю, мінімізувавши усі вікна",
|
||||
"Description[vi]": "Hiện bàn làm việc bằng cách thu nhỏ tất cả các cửa sổ",
|
||||
"Description[zh_CN]": "最小化所有窗口以显示桌面",
|
||||
"Description[zh_TW]": "藉由將所有視窗最小化來顯示桌面",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "user-desktop",
|
||||
"Id": "org.kde.plasma.minimizeall",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Minimize All Windows",
|
||||
"Name[ar]": "صغّر كلّ النّوافذ",
|
||||
"Name[az]": "Bütün pəncərələri yığmaq",
|
||||
"Name[be]": "Згарнуць усе вокны",
|
||||
"Name[bg]": "Минимизиране на всички прозорци",
|
||||
"Name[ca@valencia]": "Minimitza totes les finestres",
|
||||
"Name[ca]": "Minimitza totes les finestres",
|
||||
"Name[cs]": "Minimalizovat všechna okna",
|
||||
"Name[da]": "Minimér alle vinduer",
|
||||
"Name[de]": "Alle Fenster minimieren",
|
||||
"Name[el]": "Ελαχιστοποίηση όλων των παραθύρων",
|
||||
"Name[en_GB]": "Minimise All Windows",
|
||||
"Name[eo]": "Minimumigi Ĉiujn Fenestrojn",
|
||||
"Name[es]": "Minimizar todas las ventanas",
|
||||
"Name[eu]": "Ikonotu leiho guztiak",
|
||||
"Name[fi]": "Pienennä kaikki ikkunat",
|
||||
"Name[fr]": "Minimiser toutes les fenêtres",
|
||||
"Name[ga]": "Íoslaghdaigh Gach Fuinneog",
|
||||
"Name[gl]": "Minimizar todas as xanelas",
|
||||
"Name[he]": "מזעור כל החלונות",
|
||||
"Name[hu]": "Összes ablak minimalizálása",
|
||||
"Name[ia]": "Minimisa omne fenestras",
|
||||
"Name[id]": "Minimalkan Semua Jendela",
|
||||
"Name[is]": "Fela alla glugga",
|
||||
"Name[it]": "Minimizza tutte le finestre",
|
||||
"Name[ja]": "ウィンドウ最小化",
|
||||
"Name[ka]": "ყველა ფანჯრის ჩაკეცვა",
|
||||
"Name[ko]": "모든 창 최소화",
|
||||
"Name[lt]": "Suskleisti visus langus",
|
||||
"Name[lv]": "Minimizēt visus logus",
|
||||
"Name[nb]": "Minimer alle vinduene",
|
||||
"Name[nl]": "Alle vensters minimaliseren",
|
||||
"Name[nn]": "Minimer alle vindauga",
|
||||
"Name[pa]": "ਸਭ ਵਿੰਡੋਆਂ ਨੂੰ ਘੱਟੋ-ਘੱਟ ਕਰੋ",
|
||||
"Name[pl]": "Zminimalizuj wszystkie okna",
|
||||
"Name[pt_BR]": "Minimizar todas as janelas",
|
||||
"Name[ro]": "Minimizează toate ferestrele",
|
||||
"Name[ru]": "Свернуть все окна",
|
||||
"Name[sa]": "सर्वाणि विण्डोजानि न्यूनीकरोतु",
|
||||
"Name[sk]": "Minimalizovať všetky okná",
|
||||
"Name[sl]": "Strni vsa okna",
|
||||
"Name[sv]": "Minimera alla fönster",
|
||||
"Name[ta]": "அனைத்து சாளரங்களையும் ஒதுக்கு",
|
||||
"Name[tr]": "Tüm Pencereleri Küçült",
|
||||
"Name[uk]": "Мінімізувати усі вікна",
|
||||
"Name[zh_CN]": "最小化所有窗口",
|
||||
"Name[zh_TW]": "最小化所有視窗",
|
||||
"Website": "https://kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.windowmanagement"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.showdesktop"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
[Config]
|
||||
chartFace=org.kde.ksysguard.piechart
|
||||
highPrioritySensorIds=["cpu/all/usage"]
|
||||
totalSensors=["cpu/all/usage"]
|
||||
lowPrioritySensorIds=["cpu/all/cpuCount","cpu/all/coreCount"]
|
||||
|
||||
[FaceConfig]
|
||||
rangeAuto=false
|
||||
rangeFrom=0
|
||||
rangeTo=100
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "kde@privat.broulik.de",
|
||||
"Name": "Kai Uwe Broulik",
|
||||
"Name[ar]": "كاي أووي بروتيك",
|
||||
"Name[ast]": "Kai Uwe Broulik",
|
||||
"Name[az]": "Kai Uwe Broulik",
|
||||
"Name[be]": "Kai Uwe Broulik",
|
||||
"Name[bg]": "Kai Uwe Broulik",
|
||||
"Name[ca@valencia]": "Kai Uwe Broulik",
|
||||
"Name[ca]": "Kai Uwe Broulik",
|
||||
"Name[cs]": "Kai Uwe Broulik",
|
||||
"Name[da]": "Kai Uwe Broulik",
|
||||
"Name[de]": "Kai Uwe Broulik",
|
||||
"Name[el]": "Kai Uwe Broulik",
|
||||
"Name[en_GB]": "Kai Uwe Broulik",
|
||||
"Name[eo]": "Kai Uwe Broulik",
|
||||
"Name[es]": "Kai Uwe Broulik",
|
||||
"Name[et]": "Kai Uwe Broulik",
|
||||
"Name[eu]": "Kai Uwe Broulik",
|
||||
"Name[fi]": "Kai Uwe Broulik",
|
||||
"Name[fr]": "Kai Uwe Broulik",
|
||||
"Name[ga]": "Kai Uwe Broulik",
|
||||
"Name[gl]": "Kai Uwe Broulik",
|
||||
"Name[he]": "קאי אווה ברוליק",
|
||||
"Name[hi]": "काई उवे ब्रोलिक",
|
||||
"Name[hu]": "Kai Uwe Broulik",
|
||||
"Name[ia]": "Kai Uwe Broulik",
|
||||
"Name[id]": "Kai Uwe Broulik",
|
||||
"Name[is]": "Kai Uwe Broulik",
|
||||
"Name[it]": "Kai Uwe Broulik",
|
||||
"Name[ja]": "Kai Uwe Broulik",
|
||||
"Name[ka]": "კაი უვე ბროულიკი",
|
||||
"Name[ko]": "Kai Uwe Broulik",
|
||||
"Name[lt]": "Kai Uwe Broulik",
|
||||
"Name[lv]": "Kai Uwe Broulik",
|
||||
"Name[nb]": "Kai Uwe Broulik",
|
||||
"Name[nl]": "Kai Uwe Broulik",
|
||||
"Name[nn]": "Kai Uwe Broulik",
|
||||
"Name[pa]": "ਕੋਈ ਉਵੇ ਬਰੋਉਲਿਕ",
|
||||
"Name[pl]": "Kai Uwe Broulik",
|
||||
"Name[pt]": "Kai Uwe Broulik",
|
||||
"Name[pt_BR]": "Kai Uwe Broulik",
|
||||
"Name[ro]": "Kai Uwe Broulik",
|
||||
"Name[ru]": "Kai Uwe Broulik",
|
||||
"Name[sa]": "कै उवे ब्रौलिक्",
|
||||
"Name[sk]": "Kai Uwe Broulik",
|
||||
"Name[sl]": "Kai Uwe Broulik",
|
||||
"Name[sv]": "Kai Uwe Broulik",
|
||||
"Name[ta]": "காய் ஊவே புரோலிக்",
|
||||
"Name[tr]": "Kai Uwe Broulik",
|
||||
"Name[uk]": "Kai Uwe Broulik",
|
||||
"Name[vi]": "Kai Uwe Broulik",
|
||||
"Name[zh_CN]": "Kai Uwe Broulik",
|
||||
"Name[zh_TW]": "Kai Uwe Broulik"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "System monitor widget that shows the total CPU usage",
|
||||
"Description[ar]": "أداة مراقبة النظام التي تعرض مجموع استخدام المعالج",
|
||||
"Description[az]": "Prosessorun ümumi istifadəsini göstərən sistem izləyici vidjeti",
|
||||
"Description[be]": "Віджэт сістэмнага назіральніка, які паказвае агульнае выкарыстанне працэсара",
|
||||
"Description[bg]": "Уиджет за системен монитор, което показва общото използване на процесора",
|
||||
"Description[ca@valencia]": "Giny del monitor del sistema que mostra l'ús total de la CPU",
|
||||
"Description[ca]": "Giny del monitor del sistema que mostra l'ús total de la CPU",
|
||||
"Description[cs]": "Widget monitoru systému, zobrazující celkové využití CPU",
|
||||
"Description[da]": "Systemovervågning-widget som viser den samlede CPU-brug",
|
||||
"Description[de]": "Systemmonitor-Miniprogramm, das die Auslastung des gesamten Prozessors anzeigt",
|
||||
"Description[el]": "Συστατικό παρακολούθησης συστήματος που εμφανίζει τη συνολική χρήση της ΚΜΕ",
|
||||
"Description[en_GB]": "System monitor widget that shows the total CPU usage",
|
||||
"Description[eo]": "Sistemmonitora fenestraĵo kiu montras la suman CPU-uzadon",
|
||||
"Description[es]": "Elemento gráfico del monitor del sistema que muestra el uso total de CPU",
|
||||
"Description[eu]": "PUZ erabileraren guztizkoa erakusten duen sistema gainbegiratzeko trepeta",
|
||||
"Description[fi]": "Suorittimen kokonaiskäytön näyttävä järjestelmänvalvontasovelma",
|
||||
"Description[fr]": "Composant graphique de surveillance du système, affichant l'utilisation globale du processeur.",
|
||||
"Description[gl]": "Trebello de vixilancia do sistema que mostra o uso total do procesador.",
|
||||
"Description[he]": "יישומון צג מערכת שמציג את ניצולת המעבד הכללית",
|
||||
"Description[hu]": "Rendszermonitor elem, amely a teljes processzorhasználatot mutatja",
|
||||
"Description[ia]": "Widget de supervision de systema que monstra le uso total de CPU",
|
||||
"Description[id]": "Widget pemantau sistem yang menampilkan penggunaan total CPU",
|
||||
"Description[is]": "Kerfisvöktunargræja sem sýnir heildarnotkun örgjörva",
|
||||
"Description[it]": "Oggetto di monitoraggio del sistema che mostra l'utilizzo totale del processore",
|
||||
"Description[ja]": "CPU 全体の使用率を表示するウィジェット",
|
||||
"Description[ka]": "სისტემური მონიტორის ვიჯეტი, რომელიც CPU-ის ჯამურ დატვირთვას აჩვენებს",
|
||||
"Description[ko]": "총 CPU 사용량을 표시하는 시스템 모니터 위젯",
|
||||
"Description[lt]": "Sistemos prižiūryklės valdiklis, kuris rodo bendrą procesoriaus naudojimą",
|
||||
"Description[lv]": "Sistēmas pārraudzības logdaļa, kas parāda CPU kopējo noslodzi",
|
||||
"Description[nb]": "Systemovervåking-element som viser bruk av alle prosessorkjernene",
|
||||
"Description[nl]": "Systeemmonitorwidget die het totale gebruik toont de CPU toont",
|
||||
"Description[nn]": "Systemovervaking som viser total prosessorlast",
|
||||
"Description[pa]": "ਕੁੱਲ CPU ਵਰਤੋਂ ਵਿਖਾਉਣ ਵਾਲਾ ਸਿਸਟਮ ਮਾਨੀਟਰ ਵਿਜੈੱਟ",
|
||||
"Description[pl]": "Element interfejsu, który pokazuje całkowite wykorzystanie procesora",
|
||||
"Description[pt_BR]": "Widget monitor do sistema que mostra o uso total da CPU",
|
||||
"Description[ro]": "Control grafic de monitorizare a sistemului ce arată utilizarea totală a procesorului",
|
||||
"Description[ru]": "Мониторинг общей загрузки процессора",
|
||||
"Description[sa]": "सङ्गणकतन्त्रस्य निरीक्षकस्य विजेट् यत् कुल CPU उपयोगं दर्शयति",
|
||||
"Description[sk]": "Miniaplikácia monitorovania systému, ktorá zobrazuje celkové využitie CPU",
|
||||
"Description[sl]": "Gradnik sistemskega monitorja, ki prikazuje celotno rabo CPE",
|
||||
"Description[sv]": "Grafisk systemövervakningskomponent som visar total processoranvändning",
|
||||
"Description[ta]": "மொத்த CPU பயன்பாட்டைக் காட்டும் பிளாஸ்மாய்ட்",
|
||||
"Description[tr]": "Toplam CPU kullanımını gösteren sistem monitörü araç takımı",
|
||||
"Description[uk]": "Віджет нагляду за системою, який показує загальне використання процесора",
|
||||
"Description[zh_CN]": "显示总 CPU 占用率的系统监视小部件",
|
||||
"Description[zh_TW]": "顯示總 CPU 用量的系統監控元件",
|
||||
"EnabledByDefault": true,
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "cpu",
|
||||
"Id": "org.kde.plasma.systemmonitor.cpu",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Total CPU Use",
|
||||
"Name[ar]": "مجموع استخدام المعالج",
|
||||
"Name[az]": "Ümumi MP istifadəsi",
|
||||
"Name[be]": "Агульнае выкарыстанне працэсара",
|
||||
"Name[bg]": "Общо използване на процесора",
|
||||
"Name[ca@valencia]": "Ús total de CPU",
|
||||
"Name[ca]": "Ús total de CPU",
|
||||
"Name[cs]": "Celkové použití CPU",
|
||||
"Name[da]": "Samlet CPU-brug",
|
||||
"Name[de]": "Gesamt-CPU-Auslastung",
|
||||
"Name[el]": "Συνολική χρήση ΚΜΕ",
|
||||
"Name[en_GB]": "Total CPU Use",
|
||||
"Name[eo]": "Suma Uzo de CPU",
|
||||
"Name[es]": "Uso total de CPU",
|
||||
"Name[et]": "Protsessori kogukasutus",
|
||||
"Name[eu]": "PUZ erabileraren guztizkoa",
|
||||
"Name[fi]": "Suorittimen kokonaiskäyttö",
|
||||
"Name[fr]": "Utilisation globale du processeur",
|
||||
"Name[gl]": "Uso de procesador total",
|
||||
"Name[he]": "ניצולת מעבד כוללת",
|
||||
"Name[hi]": "कुल सीपीयू उपयोग",
|
||||
"Name[hu]": "Teljes processzorhasználat",
|
||||
"Name[ia]": "Uso total de CPU",
|
||||
"Name[id]": "Total Penggunaan CPU",
|
||||
"Name[is]": "Heildarnotkun örgjörva",
|
||||
"Name[it]": "Utilizzo totale CPU",
|
||||
"Name[ja]": "全体の CPU 使用率",
|
||||
"Name[ka]": "CPU-ის ჯამური დატვირთვა",
|
||||
"Name[ko]": "총 CPU 사용량",
|
||||
"Name[lt]": "Bendras procesoriaus naudojimas",
|
||||
"Name[lv]": "Kopējā CPU noslodze",
|
||||
"Name[ml]": "ആകെ സിപിയു ഉപയോഗം",
|
||||
"Name[nb]": "Total prosessorbruk",
|
||||
"Name[nl]": "Totaal CPU-gebruik",
|
||||
"Name[nn]": "Total prosessorlast",
|
||||
"Name[pa]": "ਕੁੱਲ CPU ਵਰਤੋ",
|
||||
"Name[pl]": "Całkowite użycie procesora",
|
||||
"Name[pt]": "Carga Total do CPU",
|
||||
"Name[pt_BR]": "Uso total da CPU",
|
||||
"Name[ro]": "Utilizare totală procesor",
|
||||
"Name[ru]": "Общая загрузка ЦП",
|
||||
"Name[sa]": "कुल CPU उपयोगः",
|
||||
"Name[sk]": "Celkové využitie CPU",
|
||||
"Name[sl]": "Celotna raba CPE",
|
||||
"Name[sv]": "Total processoranvändning",
|
||||
"Name[ta]": "மொத்த CPU பயன்பாட்டு",
|
||||
"Name[tok]": "kepeken pi ilo nanpa ale",
|
||||
"Name[tr]": "Toplam CPU Kullanımı",
|
||||
"Name[uk]": "Загальне використання процесора",
|
||||
"Name[vi]": "Tổng lượng dùng CPU",
|
||||
"Name[zh_CN]": "总 CPU 使用率",
|
||||
"Name[zh_TW]": "總 CPU 用量",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.systemmonitor"
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
[Config]
|
||||
chartFace=org.kde.ksysguard.barchart
|
||||
highPrioritySensorIds=["cpu/cpu.*/usage"]
|
||||
totalSensors=["cpu/all/usage"]
|
||||
|
||||
[FaceConfig]
|
||||
rangeAuto=false
|
||||
rangeFrom=0
|
||||
rangeTo=100
|
||||
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "kde@privat.broulik.de",
|
||||
"Name": "Kai Uwe Broulik",
|
||||
"Name[ar]": "كاي أووي بروتيك",
|
||||
"Name[ast]": "Kai Uwe Broulik",
|
||||
"Name[az]": "Kai Uwe Broulik",
|
||||
"Name[be]": "Kai Uwe Broulik",
|
||||
"Name[bg]": "Kai Uwe Broulik",
|
||||
"Name[ca@valencia]": "Kai Uwe Broulik",
|
||||
"Name[ca]": "Kai Uwe Broulik",
|
||||
"Name[cs]": "Kai Uwe Broulik",
|
||||
"Name[da]": "Kai Uwe Broulik",
|
||||
"Name[de]": "Kai Uwe Broulik",
|
||||
"Name[el]": "Kai Uwe Broulik",
|
||||
"Name[en_GB]": "Kai Uwe Broulik",
|
||||
"Name[eo]": "Kai Uwe Broulik",
|
||||
"Name[es]": "Kai Uwe Broulik",
|
||||
"Name[et]": "Kai Uwe Broulik",
|
||||
"Name[eu]": "Kai Uwe Broulik",
|
||||
"Name[fi]": "Kai Uwe Broulik",
|
||||
"Name[fr]": "Kai Uwe Broulik",
|
||||
"Name[ga]": "Kai Uwe Broulik",
|
||||
"Name[gl]": "Kai Uwe Broulik",
|
||||
"Name[he]": "קאי אווה ברוליק",
|
||||
"Name[hi]": "काई उवे ब्रोलिक",
|
||||
"Name[hu]": "Kai Uwe Broulik",
|
||||
"Name[ia]": "Kai Uwe Broulik",
|
||||
"Name[id]": "Kai Uwe Broulik",
|
||||
"Name[is]": "Kai Uwe Broulik",
|
||||
"Name[it]": "Kai Uwe Broulik",
|
||||
"Name[ja]": "Kai Uwe Broulik",
|
||||
"Name[ka]": "კაი უვე ბროულიკი",
|
||||
"Name[ko]": "Kai Uwe Broulik",
|
||||
"Name[lt]": "Kai Uwe Broulik",
|
||||
"Name[lv]": "Kai Uwe Broulik",
|
||||
"Name[nb]": "Kai Uwe Broulik",
|
||||
"Name[nl]": "Kai Uwe Broulik",
|
||||
"Name[nn]": "Kai Uwe Broulik",
|
||||
"Name[pa]": "ਕੋਈ ਉਵੇ ਬਰੋਉਲਿਕ",
|
||||
"Name[pl]": "Kai Uwe Broulik",
|
||||
"Name[pt]": "Kai Uwe Broulik",
|
||||
"Name[pt_BR]": "Kai Uwe Broulik",
|
||||
"Name[ro]": "Kai Uwe Broulik",
|
||||
"Name[ru]": "Kai Uwe Broulik",
|
||||
"Name[sa]": "कै उवे ब्रौलिक्",
|
||||
"Name[sk]": "Kai Uwe Broulik",
|
||||
"Name[sl]": "Kai Uwe Broulik",
|
||||
"Name[sv]": "Kai Uwe Broulik",
|
||||
"Name[ta]": "காய் ஊவே புரோலிக்",
|
||||
"Name[tr]": "Kai Uwe Broulik",
|
||||
"Name[uk]": "Kai Uwe Broulik",
|
||||
"Name[vi]": "Kai Uwe Broulik",
|
||||
"Name[zh_CN]": "Kai Uwe Broulik",
|
||||
"Name[zh_TW]": "Kai Uwe Broulik"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "System monitor widget that shows usage of individual CPU cores",
|
||||
"Description[ar]": "أداة مراقبة النظام التي تعرض استخدام كل نواة من المعالج",
|
||||
"Description[az]": "Hər prosessorun istifadəsini göstərən sistem izləyici vidjeti",
|
||||
"Description[be]": "Віджэт сістэмнага назіральніка, які паказвае выкарыстанне ядзер працэсара паасобку",
|
||||
"Description[bg]": "Уиджет за системен монитор, който показва използването на отделни ядра на процесора",
|
||||
"Description[ca@valencia]": "Giny del monitor del sistema que mostra l'ús individual dels nuclis de la CPU",
|
||||
"Description[ca]": "Giny del monitor del sistema que mostra l'ús individual dels nuclis de la CPU",
|
||||
"Description[cs]": "Widget monitoru systému, zobrazující využití jednotlivých jader CPU",
|
||||
"Description[da]": "Systemovervågning-widget som viser brug af hver CPU-kerne",
|
||||
"Description[de]": "Systemmonitor-Miniprogramm, das die Auslastung einzelner CPU-Kerne anzeigt",
|
||||
"Description[el]": "Συστατικό παρακολούθησης συστήματος που δείχνει τη χρήση των πυρήνων ΚΜΕ ξεχωριστά",
|
||||
"Description[en_GB]": "System monitor widget that shows usage of individual CPU cores",
|
||||
"Description[eo]": "Sistemmonitora fenestraĵo kiu montras uzadon de individuaj CPU-kernoj",
|
||||
"Description[es]": "Elemento gráfico del monitor del sistema que muestra el uso de los núcleos individuales de la CPU",
|
||||
"Description[eu]": "PUZeko nukleoen banakako erabilera erakusten duen sistema gainbegiratzeko trepeta",
|
||||
"Description[fi]": "Yksittäisten järjestelmäydinten käytön näyttävä järjestelmänvalvontasovelma",
|
||||
"Description[fr]": "Composant graphique de surveillance du système, affichant l'utilisation de chaque cœur du processeur.",
|
||||
"Description[gl]": "Trebello de vixilancia do sistema que mostra o uso de núcleos de procesador individuais.",
|
||||
"Description[he]": "יישומון צג מערכת שמציג ניצולת של ליבות מעבד בנפרד",
|
||||
"Description[hu]": "Rendszermonitor elem, amely az egyes logikai processzorok használatát mutatja",
|
||||
"Description[ia]": "Widget de supervision de systema que monstra le uso del nucleos individual",
|
||||
"Description[id]": "Widget pemantau sistem yang menampilkan penggunaan core CPU individual",
|
||||
"Description[is]": "Kerfisvöktunargræja sem sýnir notkun á einstökum örgjörvakjörnum",
|
||||
"Description[it]": "Oggetto di monitoraggio del sistema che mostra l'utilizzo dei singoli core del processore",
|
||||
"Description[ja]": "CPU の各コアの使用率を表示するウィジェット",
|
||||
"Description[ka]": "სისტემური მონიტორის ვიჯეტი, რომელიც CPU-ის ბირთვების დატვირთვას სათითაოდ აჩვენებს",
|
||||
"Description[ko]": "개별 CPU 코어 사용량을 표시하는 시스템 모니터 위젯",
|
||||
"Description[lt]": "Sistemos prižiūryklės valdiklis, kuris rodo atskirų procesoriaus branduolių naudojimą",
|
||||
"Description[lv]": "Sistēmas pārraudzības logdaļa, kas parāda atsevišķu CPU kodolu noslodzi",
|
||||
"Description[nb]": "Systemovervåking-element som viser bruk av individuelle prosessorkjerner",
|
||||
"Description[nl]": "Systeemmonitorwidget die gebruik toont van individuele CPU-kernen",
|
||||
"Description[nn]": "Systemovervaking som viser bruk av einskilde prosessorkjernar",
|
||||
"Description[pa]": "ਵੱਖ-ਵੱਖ CPU ਕੋਰਾਂ ਦੀ ਵਰਤੋਂ ਵਿਖਾਉਣ ਵਾਲਾ ਸਿਸਟਮ ਮਾਨੀਟਰ ਵਿਜੈੱਟ",
|
||||
"Description[pl]": "Element interfejsu, który pokazuje wykorzystanie poszczególnych rdzeni procesora",
|
||||
"Description[pt_BR]": "Widget monitor do sistema que mostra o uso individual dos núcleos da CPU",
|
||||
"Description[ro]": "Control grafic de monitorizare a sistemului ce arată utilizarea nucleelor individuale ale procesorului",
|
||||
"Description[ru]": "Мониторинг загрузки процессора, предоставляющий сведения об индивидуальном использовании ядер",
|
||||
"Description[sa]": "सङ्गणकतन्त्रस्य निरीक्षकस्य विजेट् यत् व्यक्तिगत CPU कोर्स् इत्यस्य उपयोगं दर्शयति",
|
||||
"Description[sk]": "Miniaplikácia monitorovania systému, ktorá zobrazuje využitie jednotlivých jadier",
|
||||
"Description[sl]": "Gradnik sistemskega monitorja, ki prikazuje rabo posameznih jeder CPE",
|
||||
"Description[sv]": "Grafisk systemövervakningskomponent som visar användning av individuella processorkärnor",
|
||||
"Description[ta]": "தனிப்பட்ட CPU core-களின் பயன்பாட்டைக் காட்டும் பிளாஸ்மாய்ட்",
|
||||
"Description[tr]": "Tekil CPU çekirdeklerini gösteren sistem monitörü araç takımı",
|
||||
"Description[uk]": "Віджет нагляду за системою, який показує використання окремих ядер процесора",
|
||||
"Description[zh_CN]": "显示单个 CPU 核心占用率的系统监视小部件",
|
||||
"Description[zh_TW]": "顯示個別 CPU 核心用量的系統監控元件",
|
||||
"EnabledByDefault": true,
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "ksysguardd",
|
||||
"Id": "org.kde.plasma.systemmonitor.cpucore",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Individual Core Usage",
|
||||
"Name[ar]": "استخدام النوى الفردية",
|
||||
"Name[az]": "MP nüvəsinin yükü",
|
||||
"Name[be]": "Выкарыстанне ядзер працэсара",
|
||||
"Name[bg]": "Използване на ядрата на процесора",
|
||||
"Name[ca@valencia]": "Ús individual del nucli",
|
||||
"Name[ca]": "Ús individual del nucli",
|
||||
"Name[da]": "Brug af hver kerne",
|
||||
"Name[de]": "Auslastung einzelner Prozessorkerne",
|
||||
"Name[el]": "Ατομική χρήση πυρήνα",
|
||||
"Name[en_GB]": "Individual Core Usage",
|
||||
"Name[eo]": "Uzado de Individuaj Kernoj",
|
||||
"Name[es]": "Uso de núcleos individuales",
|
||||
"Name[et]": "Iga tuuma kasutus",
|
||||
"Name[eu]": "Nukleoen banakako erabilera",
|
||||
"Name[fi]": "Yksittäisten ydinten käyttö",
|
||||
"Name[fr]": "Utilisation de chaque cœur ",
|
||||
"Name[gl]": "Uso de núcleos individuais",
|
||||
"Name[he]": "ניצולת לליבה בודדת",
|
||||
"Name[hi]": "व्यक्तिगत कोर उपयोग ",
|
||||
"Name[hu]": "Logikai processzorok használata",
|
||||
"Name[ia]": "Uso de nucleo (core) individual",
|
||||
"Name[id]": "Penggunaan Core Individual",
|
||||
"Name[is]": "Notkun einstakra kjarna",
|
||||
"Name[it]": "Utilizzo del singolo core",
|
||||
"Name[ja]": "各コアの使用率",
|
||||
"Name[ka]": "თითოეული ბირთვის დატვირთვა",
|
||||
"Name[ko]": "개별 코어 사용량",
|
||||
"Name[lt]": "Atskirų branduolių naudojimas",
|
||||
"Name[lv]": "Atsevišķa kodola noslodze",
|
||||
"Name[ml]": "വ്യക്തിഗത കോർ ഉപയോഗം",
|
||||
"Name[nb]": "Individuell kjernebruk",
|
||||
"Name[nl]": "Individueel gebruik van kernen",
|
||||
"Name[nn]": "Einskildkjerne-bruk",
|
||||
"Name[pa]": "ਵੱਖੋ-ਵੱਖ ਕੋਰ ਵਰਤੋਂ",
|
||||
"Name[pl]": "Wykorzystanie na rdzeń",
|
||||
"Name[pt]": "Carga dos Núcleos Individuais",
|
||||
"Name[pt_BR]": "Uso individual do núcleo",
|
||||
"Name[ro]": "Utilizare individuală nuclee",
|
||||
"Name[ru]": "Загрузка ядер ЦП",
|
||||
"Name[sa]": "व्यक्तिगत मूलप्रयोग",
|
||||
"Name[sk]": "Využitie jednotlivých jadier",
|
||||
"Name[sl]": "Poraba posameznega jedra",
|
||||
"Name[sv]": "Användning av individuella kärnor",
|
||||
"Name[ta]": "தனிப்பட்ட கணிப்பி பயன்பாட்டு",
|
||||
"Name[tok]": "kepeken pi ilo nanpa wan",
|
||||
"Name[tr]": "Tekil Çekirdek Kullanımı",
|
||||
"Name[uk]": "Використання окремих ядер",
|
||||
"Name[vi]": "Lượng dùng mỗi lõi riêng lẻ",
|
||||
"Name[zh_CN]": "单个核心使用率",
|
||||
"Name[zh_TW]": "獨立核心用量",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.systemmonitor"
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
[Config]
|
||||
chartFace=org.kde.ksysguard.linechart
|
||||
highPrioritySensorIds=["disk/all/write","disk/all/read"]
|
||||
|
||||
[FaceConfig]
|
||||
rangeAuto=true
|
||||
lineChartStacked=true
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "mart@kde.org",
|
||||
"Name": "Marco Martin",
|
||||
"Name[ar]": "ماركو مارتن",
|
||||
"Name[ast]": "Marco Martin",
|
||||
"Name[az]": "Marco Martin",
|
||||
"Name[be]": "Marco Martin",
|
||||
"Name[bg]": "Марко Мартин",
|
||||
"Name[ca@valencia]": "Marco Martin",
|
||||
"Name[ca]": "Marco Martin",
|
||||
"Name[cs]": "Marco Martin",
|
||||
"Name[da]": "Marco Martin",
|
||||
"Name[de]": "Marco Martin",
|
||||
"Name[el]": "Marco Martin",
|
||||
"Name[en_GB]": "Marco Martin",
|
||||
"Name[eo]": "Marco Martin",
|
||||
"Name[es]": "Marco Martin",
|
||||
"Name[et]": "Marco Martin",
|
||||
"Name[eu]": "Marco Martin",
|
||||
"Name[fi]": "Marco Martin",
|
||||
"Name[fr]": "Marco Martin",
|
||||
"Name[ga]": "Marco Martin",
|
||||
"Name[gl]": "Marco Martin",
|
||||
"Name[he]": "מרקו מרטין",
|
||||
"Name[hi]": "मार्को मार्टिन",
|
||||
"Name[hu]": "Marco Martin",
|
||||
"Name[ia]": "Marco Martin",
|
||||
"Name[id]": "Marco Martin",
|
||||
"Name[is]": "Marco Martin",
|
||||
"Name[it]": "Marco Martin",
|
||||
"Name[ja]": "Marco Martin",
|
||||
"Name[ka]": "მაკრო მარტინი",
|
||||
"Name[ko]": "Marco Martin",
|
||||
"Name[lt]": "Marco Martin",
|
||||
"Name[lv]": "Marco Martin",
|
||||
"Name[nb]": "Marco Martin",
|
||||
"Name[nl]": "Marco Martin",
|
||||
"Name[nn]": "Marco Martin",
|
||||
"Name[pa]": "ਮਾਰਕੋ ਮਾਰਟਿਨ",
|
||||
"Name[pl]": "Marco Martin",
|
||||
"Name[pt]": "Marco Martin",
|
||||
"Name[pt_BR]": "Marco Martin",
|
||||
"Name[ro]": "Marco Martin",
|
||||
"Name[ru]": "Marco Martin",
|
||||
"Name[sa]": "मार्को मार्टिन्",
|
||||
"Name[sk]": "Marco Martin",
|
||||
"Name[sl]": "Marco Martin",
|
||||
"Name[sv]": "Marco Martin",
|
||||
"Name[ta]": "மார்க்கோ மார்ட்டின்",
|
||||
"Name[tr]": "Marco Martin",
|
||||
"Name[uk]": "Marco Martin",
|
||||
"Name[vi]": "Marco Martin",
|
||||
"Name[zh_CN]": "Marco Martin",
|
||||
"Name[zh_TW]": "Marco Martin"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "An applet that monitors hard disk throughput and input/output",
|
||||
"Description[ar]": "بُريْمج يراقب استخدام إنتاجيّة القرص الصلب ودَخْله/خَرْجه",
|
||||
"Description[az]": "Sərt Diskdə verilənlərin ötürmələsini və giriş/çıxışını izləyən tətbiq",
|
||||
"Description[be]": "Аплет, які назірае за прапускной здольнасцю цвёрдага дыска і аперацыямі з ім",
|
||||
"Description[bg]": "Аплет, който следи пропускателната способност и вход/изход на твърдия диск",
|
||||
"Description[ca@valencia]": "Una miniaplicació que controla la velocitat de transferència, així com l'entrada/eixida de les dades en el disc dur",
|
||||
"Description[ca]": "Una miniaplicació que controla la velocitat de transferència, així com l'entrada/sortida de les dades al disc dur",
|
||||
"Description[cs]": "Aplet, jenž monitoruje propustnost disku a vstup/výstup",
|
||||
"Description[da]": "En applet som overvåger gennemgang og input/output for harddisken",
|
||||
"Description[de]": "Ein Miniprogramm, das den Festplattendurchsatz und die Festplattenein- und -ausgabe überwacht",
|
||||
"Description[el]": "Μικροεφαρμογή που εποπτεύει την ρυθμοαπόδοση του σκληρού δίσκου και την είσοδο/έξοδο",
|
||||
"Description[en_GB]": "An applet that monitors hard disk throughput and input/output",
|
||||
"Description[eo]": "Apleto kiu monitoras durdiskan trairon kaj enigon/eligon",
|
||||
"Description[es]": "Una miniaplicación que monitoriza el rendimiento y la entrada/salida del disco duro",
|
||||
"Description[et]": "Kõvaketta läbilaset ja sisendit/väljundit jälgiv aplett",
|
||||
"Description[eu]": "Disko zurrunaren transferentzia tasa eraginkorra («throughput») eta sarrera/irteera gainbegiratzen dituen aplikaziotxo bat",
|
||||
"Description[fi]": "Tarkkailee levyjen suoritustehoa ja siirtomäärää",
|
||||
"Description[fr]": "Une applet surveillant le débit des disques durs et leurs entrées / sorties.",
|
||||
"Description[gl]": "Un trebello que vixía o rendemento e a entrada e saída do disco duro.",
|
||||
"Description[he]": "יישומונית למעקב אחר תעבורת הכונן וקלט/פלט",
|
||||
"Description[hi]": "एक एप्लेट जो हार्ड डिस्क प्रवाह क्षमता और इनपुट/आउटपुट की निगरानी करता है",
|
||||
"Description[hu]": "Egy kisalkalmazás, amely figyeli a merevlemez átvitelét és a bemenetet/kimenetet",
|
||||
"Description[ia]": "Un applet que que monitora le prestation (throughput) e ingresso/egresso de disco dur",
|
||||
"Description[id]": "Sebuah applet yang memantau lalu-lalang dan input/output hard disk",
|
||||
"Description[is]": "Smáforrit sem fylgist með afköstum harðra diska og inntaki/úttaki",
|
||||
"Description[it]": "Un'applet che controlla le prestazioni e l'uso del disco fisso",
|
||||
"Description[ja]": "ハードディスクのスループットと入力/出力を監視するウィジェット",
|
||||
"Description[ka]": "აპლეტი, რომელიც მყარი დისკის გამტარობასა და შეტანა/გამოტანას უყურებს",
|
||||
"Description[ko]": "하드 디스크 대역폭 및 I/O 상태를 보여 주는 애플릿",
|
||||
"Description[lt]": "Programėlė, kuri stebi disko apkrovą ir įvedimą/išvedimą",
|
||||
"Description[lv]": "Sīklietotne, kas pārrauga cietā diska caurlaidspēju un ievadi/izvadi",
|
||||
"Description[nb]": "Skjermelement som overvåker dataflyt til og fra harddisk",
|
||||
"Description[nl]": "Een applet die de activiteit van de harde schijf volgt",
|
||||
"Description[nn]": "Skjermelement som overvaker dataflyt til og frå harddisk",
|
||||
"Description[pa]": "ਹਾਰਡ ਡਿਸਕ ਥਰੂਪੁੱਟ ਅਤੇ ਇੰਪੁੱਟ/ਆਉਟਪੁੱਟ ਦੀ ਨਿਗਰਾਨੀ ਲਈ ਐਪਲਿਟ",
|
||||
"Description[pl]": "Monitoruje przepustowość WE/WY dysku twardego",
|
||||
"Description[pt]": "Uma 'applet' que vigia o rendimento e o fluxo de entrada-saída do disco",
|
||||
"Description[pt_BR]": "Monitora a taxa de transferência e entrada/saída do disco rígido",
|
||||
"Description[ro]": "Miniaplicație ce monitorizează traficul de intrare și cel de ieșire pentru discul dur",
|
||||
"Description[ru]": "Мониторинг пропускной способности и процессов ввода/вывода жёстких дисков",
|
||||
"Description[sa]": "एकं एप्लेट् यत् हार्डडिस्क सम्पादनक्षमता तथा निवेशः/निर्गमः निरीक्षते",
|
||||
"Description[sk]": "Applet, ktorý monitoruje priepustnosť pevného disku a vstup/výstup",
|
||||
"Description[sl]": "Programček, ki nadzoruje prepustnost in vhod/izhod trdega diska",
|
||||
"Description[sv]": "Ett miniprogram som övervakar hårddiskprestanda samt in- och utmatning",
|
||||
"Description[ta]": "வட்டின் உள்ளீடு/வெளியீடு மற்றும் செயல் வீதம் ஆகியவற்றை கண்காணிக்கும் பிளாஸ்மாய்ட்",
|
||||
"Description[tr]": "Sabit disk girişini/çıkışını izleyen bir uygulamacık",
|
||||
"Description[uk]": "Аплет, який стежить за даними, які записуються на жорсткий диск та читаються з жорсткого диска",
|
||||
"Description[vi]": "Một tiểu ứng dụng giám sát vào/ra và thông lượng của đĩa cứng",
|
||||
"Description[zh_CN]": "监视硬盘吞吐量和输入输出情况的小程序",
|
||||
"Description[zh_TW]": "監視硬碟效能與 I/O 的小程式",
|
||||
"EnabledByDefault": true,
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "drive-harddisk",
|
||||
"Id": "org.kde.plasma.systemmonitor.diskactivity",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Hard Disk Activity",
|
||||
"Name[ar]": "نشاط القرص الصلب",
|
||||
"Name[az]": "Sərt Disk istifadəsi",
|
||||
"Name[be]": "Актыўнасць цвёрдага дыска",
|
||||
"Name[bg]": "Активност на твърдия диск",
|
||||
"Name[ca@valencia]": "Activitat del disc dur",
|
||||
"Name[ca]": "Activitat del disc dur",
|
||||
"Name[cs]": "Aktivita pevného disku",
|
||||
"Name[da]": "Harddisk-aktivitet",
|
||||
"Name[de]": "Festplattenaktivität",
|
||||
"Name[el]": "Δραστηριότητα σκληρού δίσκου",
|
||||
"Name[en_GB]": "Hard Disk Activity",
|
||||
"Name[eo]": "Malmoldiska Aktiveco",
|
||||
"Name[es]": "Actividad del disco duro",
|
||||
"Name[et]": "Kõvaketta tegevus",
|
||||
"Name[eu]": "Disko zurruneko jarduera",
|
||||
"Name[fi]": "Kiintolevyn toiminta",
|
||||
"Name[fr]": "Activité des disques durs",
|
||||
"Name[gl]": "Actividade do disco duro",
|
||||
"Name[he]": "פעילות כונן קשיח",
|
||||
"Name[hi]": "हार्ड डिस्क गतिविधि",
|
||||
"Name[hsb]": "Monitor, kiž pokazuje aktiwitu kruteje tačele",
|
||||
"Name[hu]": "Merevlemez-aktivitás",
|
||||
"Name[ia]": "Activitate del disco dur",
|
||||
"Name[id]": "Aktivitas Hard Disk",
|
||||
"Name[is]": "Virkni harðdiska",
|
||||
"Name[it]": "Attività disco fisso",
|
||||
"Name[ja]": "ディスクの状態",
|
||||
"Name[ka]": "მყარი დისკის აქტივობა",
|
||||
"Name[ko]": "하드 디스크 활동",
|
||||
"Name[lt]": "Standžiojo disko veikla",
|
||||
"Name[lv]": "Cietā diska noslodze",
|
||||
"Name[ml]": "ഹാർഡ് ഡിസ്ക് പ്രവർത്തനം",
|
||||
"Name[nb]": "Harddiskaktivitet",
|
||||
"Name[nl]": "Activiteit van de vaste schijf",
|
||||
"Name[nn]": "Harddiskaktivitet",
|
||||
"Name[pa]": "ਹਾਰਡ ਡਿਸਕ ਸਰਗਰਮੀ",
|
||||
"Name[pl]": "Ruch na dysku twardym",
|
||||
"Name[pt]": "Actividade do Disco Rígido",
|
||||
"Name[pt_BR]": "Atividade do disco rígido",
|
||||
"Name[ro]": "Activitate disc dur",
|
||||
"Name[ru]": "Загрузка дисковой подсистемы",
|
||||
"Name[sa]": "हार्ड् डिस्क् गतिविधि",
|
||||
"Name[sk]": "Aktivita pevného disku",
|
||||
"Name[sl]": "Nadzornik aktivnosti trdega diska",
|
||||
"Name[sv]": "Hårddiskaktivitet",
|
||||
"Name[ta]": "வட்டு செயல்பாட்டு",
|
||||
"Name[tg]": "Фаъолияти диски компютерӣ",
|
||||
"Name[tok]": "pali poki",
|
||||
"Name[tr]": "Sabit Disk Etkinliği",
|
||||
"Name[uk]": "Робота із жорстким диском",
|
||||
"Name[vi]": "Hoạt động của đĩa cứng",
|
||||
"Name[zh_CN]": "磁盘活动",
|
||||
"Name[zh_TW]": "硬碟活動",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.systemmonitor"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
[Config]
|
||||
chartFace=org.kde.ksysguard.horizontalbars
|
||||
highPrioritySensorIds=["disk/.*/usedPercent"]
|
||||
totalSensors=["disk/all/usedPercent"]
|
||||
lowPrioritySensorIds=["disk/all/total"]
|
||||
|
||||
[FaceConfig]
|
||||
rangeAuto=true
|
||||
rangeFrom=0
|
||||
rangeTo=100
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "mart@kde.org",
|
||||
"Name": "Marco Martin",
|
||||
"Name[ar]": "ماركو مارتن",
|
||||
"Name[ast]": "Marco Martin",
|
||||
"Name[az]": "Marco Martin",
|
||||
"Name[be]": "Marco Martin",
|
||||
"Name[bg]": "Марко Мартин",
|
||||
"Name[ca@valencia]": "Marco Martin",
|
||||
"Name[ca]": "Marco Martin",
|
||||
"Name[cs]": "Marco Martin",
|
||||
"Name[da]": "Marco Martin",
|
||||
"Name[de]": "Marco Martin",
|
||||
"Name[el]": "Marco Martin",
|
||||
"Name[en_GB]": "Marco Martin",
|
||||
"Name[eo]": "Marco Martin",
|
||||
"Name[es]": "Marco Martin",
|
||||
"Name[et]": "Marco Martin",
|
||||
"Name[eu]": "Marco Martin",
|
||||
"Name[fi]": "Marco Martin",
|
||||
"Name[fr]": "Marco Martin",
|
||||
"Name[ga]": "Marco Martin",
|
||||
"Name[gl]": "Marco Martin",
|
||||
"Name[he]": "מרקו מרטין",
|
||||
"Name[hi]": "मार्को मार्टिन",
|
||||
"Name[hu]": "Marco Martin",
|
||||
"Name[ia]": "Marco Martin",
|
||||
"Name[id]": "Marco Martin",
|
||||
"Name[is]": "Marco Martin",
|
||||
"Name[it]": "Marco Martin",
|
||||
"Name[ja]": "Marco Martin",
|
||||
"Name[ka]": "მაკრო მარტინი",
|
||||
"Name[ko]": "Marco Martin",
|
||||
"Name[lt]": "Marco Martin",
|
||||
"Name[lv]": "Marco Martin",
|
||||
"Name[nb]": "Marco Martin",
|
||||
"Name[nl]": "Marco Martin",
|
||||
"Name[nn]": "Marco Martin",
|
||||
"Name[pa]": "ਮਾਰਕੋ ਮਾਰਟਿਨ",
|
||||
"Name[pl]": "Marco Martin",
|
||||
"Name[pt]": "Marco Martin",
|
||||
"Name[pt_BR]": "Marco Martin",
|
||||
"Name[ro]": "Marco Martin",
|
||||
"Name[ru]": "Marco Martin",
|
||||
"Name[sa]": "मार्को मार्टिन्",
|
||||
"Name[sk]": "Marco Martin",
|
||||
"Name[sl]": "Marco Martin",
|
||||
"Name[sv]": "Marco Martin",
|
||||
"Name[ta]": "மார்க்கோ மார்ட்டின்",
|
||||
"Name[tr]": "Marco Martin",
|
||||
"Name[uk]": "Marco Martin",
|
||||
"Name[vi]": "Marco Martin",
|
||||
"Name[zh_CN]": "Marco Martin",
|
||||
"Name[zh_TW]": "Marco Martin"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "System monitor widget that shows the usage of the root partition",
|
||||
"Description[ar]": "أداة مراقبة النظام التي تعرض استخدام قسم الجذر",
|
||||
"Description[az]": "Kök bölməsinin istifadəsini göstərən sistem izləyici vidjeti",
|
||||
"Description[be]": "Віджэт сістэмнага назіральніка, які паказвае выкарыстанне каранёвага раздзела",
|
||||
"Description[bg]": "Уиджет за системен монитор, който показва използването на основния дял",
|
||||
"Description[ca@valencia]": "Giny del monitor del sistema que mostra l'ús de la partició arrel",
|
||||
"Description[ca]": "Giny del monitor del sistema que mostra l'ús de la partició arrel",
|
||||
"Description[cs]": "Widget monitoru systému, zobrazující celkové využití kořenového oddílu",
|
||||
"Description[da]": "Systemovervågning-widget som viser brug af rod-partitionen",
|
||||
"Description[de]": "Systemmonitor-Miniprogramm, das die Belegung der Systempartition anzeigt",
|
||||
"Description[el]": "Συστατικό παρακολούθησης συστήματος που δείχνει τη χρήση της ριζικής κατάτμησης",
|
||||
"Description[en_GB]": "System monitor widget that shows the usage of the root partition",
|
||||
"Description[eo]": "Sistemmonitora fenestraĵo kiu montras la uzadon de la radika sekcio",
|
||||
"Description[es]": "Elemento gráfico del monitor del sistema que muestra el uso de la partición raíz",
|
||||
"Description[eu]": "Erro partizioaren erabilera erakusten duen sistema gainbegiratzeko trepeta",
|
||||
"Description[fi]": "Juuriosion käyttöasteen näyttävä järjestelmänvalvontasovelma",
|
||||
"Description[fr]": "Composant graphique de surveillance du système, affichant l'utilisation de la partition « Système ».",
|
||||
"Description[gl]": "Trebello de vixilancia do sistema que mostra o uso da partición raíz.",
|
||||
"Description[he]": "יישומון צג מערכת שמציג את ניצולת מחיצת העל",
|
||||
"Description[hu]": "Rendszermonitor elem, amely a root partíció használatát mutatja",
|
||||
"Description[ia]": "Widget de supervision de systema que monstra le uso del partition de root (radice)",
|
||||
"Description[id]": "Widget pemantau sistem yang menampilkan penggunaan partisi root",
|
||||
"Description[is]": "Kerfisvöktunargræja sem sýnir notkunina á rótarsneiðinni",
|
||||
"Description[it]": "Oggetto di monitoraggio del sistema che mostra l'utilizzo della partizione radice",
|
||||
"Description[ja]": "root パーティションの使用率を表示するウィジェット",
|
||||
"Description[ka]": "სისტემური მონიტორის ვიჯეტი, რომელიც საწყისი დანაყოფის გამოყენებას გაჩვენებთ",
|
||||
"Description[ko]": "루트 파티션 사용량을 표시하는 시스템 모니터 위젯",
|
||||
"Description[lt]": "Sistemos prižiūryklės valdiklis, kuris rodo šaknies skaidinio naudojimą",
|
||||
"Description[lv]": "Sistēmas pārraudzības logdaļa, kas parāda saknes nodalījuma lietojumu",
|
||||
"Description[nb]": "Systemovervåking-element som viser bruk av rotpartisjonen",
|
||||
"Description[nl]": "Systeemmonitorwidget die het totale gebruik toont van de root-partitie",
|
||||
"Description[nn]": "Systemovervaking som viser bruk av rotpartisjonen",
|
||||
"Description[pa]": "ਰੂਟ ਪਾਰਟੀਸ਼ਨ ਦੀ ਵਰਤੋਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਦਿਖਾਉਣ ਵਾਲਾ ਸਿਸਟਮ ਮਾਨੀਟਰ ਵਿਜੈਟ ",
|
||||
"Description[pl]": "Element interfejsu, który pokazuje wykorzystanie głównej partycji",
|
||||
"Description[pt_BR]": "Widget monitor do sistema que mostra o uso da partição raiz",
|
||||
"Description[ro]": "Control grafic de monitorizare a sistemului ce arată utilizarea partiției root",
|
||||
"Description[ru]": "Мониторинг использования дискового пространства корневым разделом",
|
||||
"Description[sa]": "सङ्गणकतन्त्रस्य निरीक्षकस्य विजेट् यत् मूलविभाजनस्य उपयोगं दर्शयति",
|
||||
"Description[sk]": "Miniaplikácia monitorovania systému, ktorá zobrazuje využitie koreňovej partície",
|
||||
"Description[sl]": "Gradnik sistemskega monitorja, ki prikazuje rabo korenske particije",
|
||||
"Description[sv]": "Grafisk systemövervakningskomponent som visar användning av rotpartitionen",
|
||||
"Description[ta]": "ரூட் வகிர்வின் பயன்பாட்டைக் காட்டும் பிளாஸ்மாய்ட்",
|
||||
"Description[tr]": "Kök bölüntünün kullanımını gösteren sistem monitörü araç takımı",
|
||||
"Description[uk]": "Віджет нагляду за системою, який показує використання кореневого розділу",
|
||||
"Description[zh_CN]": "显示根分区占用率的系统监视小部件",
|
||||
"Description[zh_TW]": "顯示 root 分割區用量的系統監控元件",
|
||||
"EnabledByDefault": true,
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "cpu",
|
||||
"Id": "org.kde.plasma.systemmonitor.diskusage",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Disk Usage",
|
||||
"Name[ar]": "استخدام القرص",
|
||||
"Name[az]": "Disk sahəsnin İstifadəsi",
|
||||
"Name[be]": "Выкарыстанне дыска",
|
||||
"Name[bg]": "Използване на диска",
|
||||
"Name[ca@valencia]": "Ús del disc",
|
||||
"Name[ca]": "Ús del disc",
|
||||
"Name[cs]": "Zaplnění Disku",
|
||||
"Name[da]": "Diskforbrug",
|
||||
"Name[de]": "Datenträgerbelegung",
|
||||
"Name[el]": "Χρήση δίσκου",
|
||||
"Name[en_GB]": "Disk Usage",
|
||||
"Name[eo]": "Disk-Uzado",
|
||||
"Name[es]": "Uso del disco duro",
|
||||
"Name[et]": "Kettakasutus",
|
||||
"Name[eu]": "Diskoaren erabilera",
|
||||
"Name[fi]": "Levyn käyttö",
|
||||
"Name[fr]": "Utilisation des disques",
|
||||
"Name[ga]": "Úsáid Diosca",
|
||||
"Name[gl]": "Uso de disco",
|
||||
"Name[he]": "ניצולת כונן",
|
||||
"Name[hi]": "डिस्क उपयोग",
|
||||
"Name[hsb]": "Wužiwanje tačele",
|
||||
"Name[hu]": "Lemezhasználat",
|
||||
"Name[ia]": "Uso de disco",
|
||||
"Name[id]": "Penggunaan Disk",
|
||||
"Name[is]": "Notkun diska",
|
||||
"Name[it]": "Utilizzo disco",
|
||||
"Name[ja]": "ディスク使用率",
|
||||
"Name[ka]": "დისკის გამოყენება",
|
||||
"Name[ko]": "디스크 사용량",
|
||||
"Name[lt]": "Disko naudojimas",
|
||||
"Name[lv]": "Diska noslodze",
|
||||
"Name[ml]": "ഡിസ്ക് ഉപയോഗം",
|
||||
"Name[nb]": "Diskbruk",
|
||||
"Name[nl]": "Schijfgebruik",
|
||||
"Name[nn]": "Diskbruk",
|
||||
"Name[pa]": "ਡਿਸਕ ਥਾਂ ਦੀ ਵਰਤੋਂ",
|
||||
"Name[pl]": "Wykorzystanie dysku",
|
||||
"Name[pt]": "Utilização do Disco",
|
||||
"Name[pt_BR]": "Uso do disco",
|
||||
"Name[ro]": "Utilizare disc",
|
||||
"Name[ru]": "Использование дискового пространства",
|
||||
"Name[sa]": "डिस्कस्य उपयोगः",
|
||||
"Name[sk]": "Využitie disku",
|
||||
"Name[sl]": "Uporaba diska",
|
||||
"Name[sv]": "Diskanvändning",
|
||||
"Name[ta]": "வட்டு பயன்பாட்டு",
|
||||
"Name[tg]": "Истифодабарии диск",
|
||||
"Name[tok]": "kepeken poki",
|
||||
"Name[tr]": "Disk Kullanımı",
|
||||
"Name[uk]": "Використання диска",
|
||||
"Name[vi]": "Lượng dùng đĩa",
|
||||
"Name[zh_CN]": "磁盘使用率",
|
||||
"Name[zh_TW]": "磁碟用量",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.systemmonitor"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
[Config]
|
||||
chartFace=org.kde.ksysguard.piechart
|
||||
highPrioritySensorIds=["memory/physical/used"]
|
||||
totalSensors=["memory/physical/usedPercent"]
|
||||
lowPrioritySensorIds=["memory/physical/total"]
|
||||
|
||||
[FaceConfig]
|
||||
rangeAuto=true
|
||||
rangeFrom=0
|
||||
rangeTo=100
|
||||
|
||||
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "kde@privat.broulik.de",
|
||||
"Name": "Kai Uwe Broulik",
|
||||
"Name[ar]": "كاي أووي بروتيك",
|
||||
"Name[ast]": "Kai Uwe Broulik",
|
||||
"Name[az]": "Kai Uwe Broulik",
|
||||
"Name[be]": "Kai Uwe Broulik",
|
||||
"Name[bg]": "Kai Uwe Broulik",
|
||||
"Name[ca@valencia]": "Kai Uwe Broulik",
|
||||
"Name[ca]": "Kai Uwe Broulik",
|
||||
"Name[cs]": "Kai Uwe Broulik",
|
||||
"Name[da]": "Kai Uwe Broulik",
|
||||
"Name[de]": "Kai Uwe Broulik",
|
||||
"Name[el]": "Kai Uwe Broulik",
|
||||
"Name[en_GB]": "Kai Uwe Broulik",
|
||||
"Name[eo]": "Kai Uwe Broulik",
|
||||
"Name[es]": "Kai Uwe Broulik",
|
||||
"Name[et]": "Kai Uwe Broulik",
|
||||
"Name[eu]": "Kai Uwe Broulik",
|
||||
"Name[fi]": "Kai Uwe Broulik",
|
||||
"Name[fr]": "Kai Uwe Broulik",
|
||||
"Name[ga]": "Kai Uwe Broulik",
|
||||
"Name[gl]": "Kai Uwe Broulik",
|
||||
"Name[he]": "קאי אווה ברוליק",
|
||||
"Name[hi]": "काई उवे ब्रोलिक",
|
||||
"Name[hu]": "Kai Uwe Broulik",
|
||||
"Name[ia]": "Kai Uwe Broulik",
|
||||
"Name[id]": "Kai Uwe Broulik",
|
||||
"Name[is]": "Kai Uwe Broulik",
|
||||
"Name[it]": "Kai Uwe Broulik",
|
||||
"Name[ja]": "Kai Uwe Broulik",
|
||||
"Name[ka]": "კაი უვე ბროულიკი",
|
||||
"Name[ko]": "Kai Uwe Broulik",
|
||||
"Name[lt]": "Kai Uwe Broulik",
|
||||
"Name[lv]": "Kai Uwe Broulik",
|
||||
"Name[nb]": "Kai Uwe Broulik",
|
||||
"Name[nl]": "Kai Uwe Broulik",
|
||||
"Name[nn]": "Kai Uwe Broulik",
|
||||
"Name[pa]": "ਕੋਈ ਉਵੇ ਬਰੋਉਲਿਕ",
|
||||
"Name[pl]": "Kai Uwe Broulik",
|
||||
"Name[pt]": "Kai Uwe Broulik",
|
||||
"Name[pt_BR]": "Kai Uwe Broulik",
|
||||
"Name[ro]": "Kai Uwe Broulik",
|
||||
"Name[ru]": "Kai Uwe Broulik",
|
||||
"Name[sa]": "कै उवे ब्रौलिक्",
|
||||
"Name[sk]": "Kai Uwe Broulik",
|
||||
"Name[sl]": "Kai Uwe Broulik",
|
||||
"Name[sv]": "Kai Uwe Broulik",
|
||||
"Name[ta]": "காய் ஊவே புரோலிக்",
|
||||
"Name[tr]": "Kai Uwe Broulik",
|
||||
"Name[uk]": "Kai Uwe Broulik",
|
||||
"Name[vi]": "Kai Uwe Broulik",
|
||||
"Name[zh_CN]": "Kai Uwe Broulik",
|
||||
"Name[zh_TW]": "Kai Uwe Broulik"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "System monitor widget that shows physical memory usage",
|
||||
"Description[ar]": "أداة مراقبة النظام التي تعرض استخدام الذاكرة الفعلية",
|
||||
"Description[az]": "Fiziki yaddaşın istifadəsini gösərən sistem izləyici vidjeti",
|
||||
"Description[be]": "Віджэт сістэмнага назіральніка, які паказвае выкарыстанне фізічнай памяці",
|
||||
"Description[bg]": "Уиджет за системен монитор, което показва използването на физическа памет",
|
||||
"Description[ca@valencia]": "Giny del monitor del sistema que mostra l'ús de la memòria física",
|
||||
"Description[ca]": "Giny del monitor del sistema que mostra l'ús de la memòria física",
|
||||
"Description[cs]": "Widget monitoru systému, zobrazující celkové využití paměti",
|
||||
"Description[da]": "Systemovervågning-widget som viser brug af den fysiske hukommelse",
|
||||
"Description[de]": "Systemmonitor-Miniprogramm, das die Auslastung des Arbeitsspeichers anzeigt",
|
||||
"Description[el]": "Συστατικό παρακολούθησης συστήματος που δείχνει τη χρήση φυσικής μνήμης",
|
||||
"Description[en_GB]": "System monitor widget that shows physical memory usage",
|
||||
"Description[eo]": "Sistemmonitora fenestraĵo kiu montras fizikan memoruzon",
|
||||
"Description[es]": "Elemento gráfico del monitor del sistema que muestra el uso de la memoria física",
|
||||
"Description[eu]": "Memoria fisikoaren erabilera erakusten duen sistema gainbegiratzeko trepeta",
|
||||
"Description[fi]": "Fyysisen muistin käytön näyttävä järjestelmänvalvontasovelma",
|
||||
"Description[fr]": "Composant graphique de surveillance du système, affichant l'utilisation de la mémoire physique.",
|
||||
"Description[gl]": "Trebello de vixilancia do sistema que mostra o uso da memoria física.",
|
||||
"Description[he]": "יישומון צג מערכת שמציג את ניצולת הזיכרון הפיזי",
|
||||
"Description[hu]": "A fizikai memória használati statisztikáit megjelenítő elem",
|
||||
"Description[ia]": "Widget de supervision de systema que monstra le uso de memoria physic",
|
||||
"Description[id]": "Widget pemantau sistem yang menampilkan penggunaan memori fisik",
|
||||
"Description[is]": "Kerfisvöktunargræja sem sýnir notkun á innra minninu",
|
||||
"Description[it]": "Oggetto di monitoraggio del sistema che mostra l'utilizzo della memoria fisica",
|
||||
"Description[ja]": "物理メモリの使用率を表示するウィジェット",
|
||||
"Description[ka]": "სისტემური მონიტორის ვიჯეტი, რომელიც ფიზიკური მეხსიერების გამოყენებას აჩვენებს",
|
||||
"Description[ko]": "물리적 메모리 사용량을 표시하는 시스템 모니터 위젯",
|
||||
"Description[lt]": "Sistemos prižiūryklės valdiklis, kuris rodo fizinės atminties naudojimą",
|
||||
"Description[lv]": "Sistēmas pārraudzības logdaļa, kas parāda fiziskās atmiņas lietojumu",
|
||||
"Description[nb]": "Systemovervåking-element som viser bruk av fysisk minne",
|
||||
"Description[nl]": "Systeemmonitorwidget die het gebruik van fysiek geheugen toont",
|
||||
"Description[nn]": "Systemovervaking som viser bruk av fysisk minne",
|
||||
"Description[pa]": "ਕੁੱਲ ਫਿਜ਼ੀਕਲ ਮੈਮੋਰੀ ਵਰਤੋਂ ਦਿਖਾਉਣ ਵਾਲਾ ਸਿਸਟਮ ਮਾਨੀਟਰ ਵਿਜੈੱਟ",
|
||||
"Description[pl]": "Element interfejsu, który pokazuje wykorzystanie pamięci fizycznej",
|
||||
"Description[pt_BR]": "Widget monitor do sistema que mostra o uso da memória física",
|
||||
"Description[ro]": "Control grafic de monitorizare a sistemului ce arată utilizarea memoriei fizice",
|
||||
"Description[ru]": "Мониторинг использования физической памяти",
|
||||
"Description[sa]": "सङ्गणकतन्त्रस्य निरीक्षकस्य विजेट् यत् भौतिकस्मृतिप्रयोगं दर्शयति",
|
||||
"Description[sk]": "Miniaplikácia monitorovania systému, ktorá zobrazuje využitie fyzickej pamäte",
|
||||
"Description[sl]": "Gradnik sistemskega monitorja, ki prikazuje rabo fizičnega pomnilnika",
|
||||
"Description[sv]": "Grafisk systemövervakningskomponent som fysisk minnesanvändning",
|
||||
"Description[ta]": "நினைவகத்தின் பயன்பாட்டைக் காட்டும் பிளாஸ்மாய்ட்",
|
||||
"Description[tr]": "Fiziksel bellek kullanımını gösteren sistem monitörü araç takımı",
|
||||
"Description[uk]": "Віджет нагляду за системою, який показує використання фізичної пам'яті",
|
||||
"Description[zh_CN]": "显示物理内存占用率的系统监视小部件",
|
||||
"Description[zh_TW]": "顯示實體記憶體用量的系統監控元件",
|
||||
"EnabledByDefault": true,
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "ksysguardd",
|
||||
"Id": "org.kde.plasma.systemmonitor.memory",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Memory Usage",
|
||||
"Name[ar]": "استخدام الذاكرة",
|
||||
"Name[ast]": "Usu de la memoria",
|
||||
"Name[az]": "Yaddaş İstifadəsi",
|
||||
"Name[be]": "Выкарыстанне памяці",
|
||||
"Name[bg]": "Използване на паметта",
|
||||
"Name[ca@valencia]": "Ús de memòria",
|
||||
"Name[ca]": "Ús de memòria",
|
||||
"Name[cs]": "Spotřeba paměti",
|
||||
"Name[da]": "Hukommelsesforbrug",
|
||||
"Name[de]": "Speicherbelegung",
|
||||
"Name[el]": "Χρήση μνήμης",
|
||||
"Name[en_GB]": "Memory Usage",
|
||||
"Name[eo]": "Memor-Uzado",
|
||||
"Name[es]": "Uso de memoria",
|
||||
"Name[et]": "Mälukasutus",
|
||||
"Name[eu]": "Memoria erabilera",
|
||||
"Name[fi]": "Muistin käyttö",
|
||||
"Name[fr]": "Utilisation de la mémoire",
|
||||
"Name[gl]": "Uso de memoria",
|
||||
"Name[he]": "ניצולת זיכרון",
|
||||
"Name[hi]": "मेमोरी उपयोग",
|
||||
"Name[hsb]": "Wužiwanje pomjatka",
|
||||
"Name[hu]": "Memóriahasználat",
|
||||
"Name[ia]": "Uso de Memoria",
|
||||
"Name[id]": "Penggunaan Memori",
|
||||
"Name[is]": "Minnisnotkun",
|
||||
"Name[it]": "Utilizzo memoria",
|
||||
"Name[ja]": "メモリ使用率",
|
||||
"Name[ka]": "მეხსიერების გამოყენება",
|
||||
"Name[ko]": "메모리 사용량",
|
||||
"Name[lt]": "Atminties naudojimas",
|
||||
"Name[lv]": "Atmiņas lietojums",
|
||||
"Name[ml]": "മെമ്മറി ഉപയോഗം",
|
||||
"Name[nb]": "Minnebruk",
|
||||
"Name[nl]": "Geheugengebruik",
|
||||
"Name[nn]": "Minnebruk",
|
||||
"Name[pa]": "ਮੈਮੋਰੀ ਦੀ ਵਰਤੋਂ",
|
||||
"Name[pl]": "Wykorzystanie pamięci",
|
||||
"Name[pt]": "Utilização da Memória",
|
||||
"Name[pt_BR]": "Uso da memória",
|
||||
"Name[ro]": "Utilizare memorie",
|
||||
"Name[ru]": "Использование памяти",
|
||||
"Name[sa]": "स्मृतिप्रयोगः",
|
||||
"Name[sk]": "Využitie pamäte",
|
||||
"Name[sl]": "Raba pomnilnika",
|
||||
"Name[sv]": "Minnesanvändning",
|
||||
"Name[ta]": "நினைவு பயன்பாட்டு",
|
||||
"Name[tg]": "Истифодабарии ҳофиза",
|
||||
"Name[tok]": "kepeken sona",
|
||||
"Name[tr]": "Bellek Kullanımı",
|
||||
"Name[uk]": "Використання пам'яті",
|
||||
"Name[vi]": "Lượng dùng bộ nhớ",
|
||||
"Name[zh_CN]": "内存使用率",
|
||||
"Name[zh_TW]": "記憶體用量",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.systemmonitor"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
[Config]
|
||||
chartFace=org.kde.ksysguard.linechart
|
||||
highPrioritySensorIds=["network/all/download","network/all/upload"]
|
||||
|
||||
[FaceConfig]
|
||||
lineChartSmooth=true
|
||||
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "mart@kde.org",
|
||||
"Name": "Marco Martin",
|
||||
"Name[ar]": "ماركو مارتن",
|
||||
"Name[ast]": "Marco Martin",
|
||||
"Name[az]": "Marco Martin",
|
||||
"Name[be]": "Marco Martin",
|
||||
"Name[bg]": "Марко Мартин",
|
||||
"Name[ca@valencia]": "Marco Martin",
|
||||
"Name[ca]": "Marco Martin",
|
||||
"Name[cs]": "Marco Martin",
|
||||
"Name[da]": "Marco Martin",
|
||||
"Name[de]": "Marco Martin",
|
||||
"Name[el]": "Marco Martin",
|
||||
"Name[en_GB]": "Marco Martin",
|
||||
"Name[eo]": "Marco Martin",
|
||||
"Name[es]": "Marco Martin",
|
||||
"Name[et]": "Marco Martin",
|
||||
"Name[eu]": "Marco Martin",
|
||||
"Name[fi]": "Marco Martin",
|
||||
"Name[fr]": "Marco Martin",
|
||||
"Name[ga]": "Marco Martin",
|
||||
"Name[gl]": "Marco Martin",
|
||||
"Name[he]": "מרקו מרטין",
|
||||
"Name[hi]": "मार्को मार्टिन",
|
||||
"Name[hu]": "Marco Martin",
|
||||
"Name[ia]": "Marco Martin",
|
||||
"Name[id]": "Marco Martin",
|
||||
"Name[is]": "Marco Martin",
|
||||
"Name[it]": "Marco Martin",
|
||||
"Name[ja]": "Marco Martin",
|
||||
"Name[ka]": "მაკრო მარტინი",
|
||||
"Name[ko]": "Marco Martin",
|
||||
"Name[lt]": "Marco Martin",
|
||||
"Name[lv]": "Marco Martin",
|
||||
"Name[nb]": "Marco Martin",
|
||||
"Name[nl]": "Marco Martin",
|
||||
"Name[nn]": "Marco Martin",
|
||||
"Name[pa]": "ਮਾਰਕੋ ਮਾਰਟਿਨ",
|
||||
"Name[pl]": "Marco Martin",
|
||||
"Name[pt]": "Marco Martin",
|
||||
"Name[pt_BR]": "Marco Martin",
|
||||
"Name[ro]": "Marco Martin",
|
||||
"Name[ru]": "Marco Martin",
|
||||
"Name[sa]": "मार्को मार्टिन्",
|
||||
"Name[sk]": "Marco Martin",
|
||||
"Name[sl]": "Marco Martin",
|
||||
"Name[sv]": "Marco Martin",
|
||||
"Name[ta]": "மார்க்கோ மார்ட்டின்",
|
||||
"Name[tr]": "Marco Martin",
|
||||
"Name[uk]": "Marco Martin",
|
||||
"Name[vi]": "Marco Martin",
|
||||
"Name[zh_CN]": "Marco Martin",
|
||||
"Name[zh_TW]": "Marco Martin"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "System monitor widget that shows the download and upload data rate",
|
||||
"Description[ar]": "أداة مراقبة النظام التي تعرض سرعة تنزيل ورفع البيانات",
|
||||
"Description[az]": "Verilənlərin endirmə və yükləmə sürətini göstərən sistem izləyici vidjeti",
|
||||
"Description[be]": "Віджэт сістэмнага назіральніка, які паказвае хуткасць спампоўвання і запампоўвання даных",
|
||||
"Description[bg]": "Уиджет за системен монитор, който показва скоростта на изтегляне и качване на данни",
|
||||
"Description[ca@valencia]": "Giny del monitor del sistema que mostra la velocitat de baixada i pujada de les dades",
|
||||
"Description[ca]": "Giny del monitor del sistema que mostra la velocitat de baixada i pujada de les dades",
|
||||
"Description[cs]": "Widget monitoru systému, zobrazující přenosovou rychlost stahování a odesílání",
|
||||
"Description[da]": "Systemovervågning-widget som viser download- og uploadhastighed",
|
||||
"Description[de]": "Systemmonitor-Miniprogramm, das die Download- und Upload-Datenrate anzeigt",
|
||||
"Description[el]": "Συστατικό παρακολούθησης συστήματος που δείχνει το ρυθμό λήψης και μεταφόρτωσης δεδομένων",
|
||||
"Description[en_GB]": "System monitor widget that shows the download and upload data rate",
|
||||
"Description[eo]": "Sistemmonitora fenestraĵo kiu montras la elŝutan kaj alŝutan datumrapidecon",
|
||||
"Description[es]": "Elemento gráfico del monitor del sistema que muestra las velocidades de subida y bajada de datos",
|
||||
"Description[eu]": "Zama-jaiste eta -igotze datuen emaria erakusten duen sistema gainbegiratzeko trepeta",
|
||||
"Description[fi]": "Lataus- ja lähetysnopeuden näyttävä järjestelmänvalvontasovelma",
|
||||
"Description[fr]": "Composant graphique de surveillance du système, affichant le débit pour les envois et les téléchargements de données.",
|
||||
"Description[gl]": "Trebello de vixilancia do sistema que amosa a velocidade de descarga e envío de datos.",
|
||||
"Description[he]": "יישומון צג מערכת שמציג את קצב ההורדה וההעלאה",
|
||||
"Description[hu]": "A le- és feltöltési sebességet megjelenítő elem",
|
||||
"Description[ia]": "Widget de supervision de systema que monstra le velocitate de discargar e incargar datos",
|
||||
"Description[id]": "Widget pemantau sistem yang menampilkan laju data unggah dan unduh",
|
||||
"Description[is]": "Kerfisvöktunargræja sem sýnir gagnahraða fyrir sóttar skrár og upphleðslur",
|
||||
"Description[it]": "Oggetto di monitoraggio del sistema che mostra la velocità di ricezione e invio dei dati",
|
||||
"Description[ja]": "ダウンロード/アップロード速度を表示するウィジェット",
|
||||
"Description[ka]": "სისტემური მონიტორის ვიჯეტი, რომელიც გადმოწერისა და ატვირთვის სიჩქარეს გაჩვენებთ",
|
||||
"Description[ko]": "데이터 다운로드 및 업로드 전송률을 표시하는 시스템 모니터 위젯",
|
||||
"Description[lt]": "Sistemos prižiūryklės valdiklis, kuris rodo duomenų atsiuntimo ir išsiuntimo spartą",
|
||||
"Description[lv]": "Sistēmas pārraudzības logdaļa, kas parāda datu lejupielādes un augšupielādes ātrumu",
|
||||
"Description[nb]": "Systemovervåking-element som viser ned- og opplastingshastighet",
|
||||
"Description[nl]": "Systeemmonitorwidget die gegevenssnelheid van down- en uploaden toont",
|
||||
"Description[nn]": "Systemovervaking som viser ned- og opplastingsratar",
|
||||
"Description[pa]": "ਡਾਊਨਲੋਡ ਅਤੇ ਅੱਪਲੋਡ ਡਾਟਾ ਦਰ ਵਿਖਾਉਣ ਵਾਲਾ ਸਿਸਟਮ ਮਾਨੀਟਰ ਵਿਜੈੱਟ",
|
||||
"Description[pl]": "Element interfejsu, który pokazuje szybkość wysyłania i pobierania danych",
|
||||
"Description[pt_BR]": "Widget monitor do sistema que mostra a taxa de download e upload",
|
||||
"Description[ro]": "Control grafic de monitorizare a sistemului ce arată rata de încărcare și descărcare a datelor",
|
||||
"Description[ru]": "Мониторинг скорости получения и передачи данных по сети",
|
||||
"Description[sa]": "सङ्गणकतन्त्रस्य निरीक्षकस्य विजेट् यत् अवारोपण उपारोपण च दत्तांशदरः दर्शयति",
|
||||
"Description[sk]": "Miniaplikácia monitorovania systému, ktorá zobrazuje množstvo sťahovaných a odosielaných dát",
|
||||
"Description[sl]": "Gradnik sistemskega monitorja, ki prikazuje podatke prenosa podatkov noter in ven",
|
||||
"Description[sv]": "Grafisk systemövervakningskomponent som visar nerladdnings- och uppladdningshastighet för data",
|
||||
"Description[ta]": "பதிவிறக்க மற்றும் பதிவேற்ற விகிதத்தைக் காட்டும் பிளாஸ்மாய்ட்",
|
||||
"Description[tr]": "Veri indirme ve karşıya yükleme hızını gösteren sistem monitörü araç takımı",
|
||||
"Description[uk]": "Віджет нагляду за системою, який показує швидкість отримання та вивантаження даних",
|
||||
"Description[zh_CN]": "显示下载和上传速率的系统监视小部件",
|
||||
"Description[zh_TW]": "顯示下載與上傳之資料速率的系統監控元件",
|
||||
"EnabledByDefault": true,
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "network-workgroup",
|
||||
"Id": "org.kde.plasma.systemmonitor.net",
|
||||
"License": "GPL-2.0+",
|
||||
"Name": "Network Speed",
|
||||
"Name[ar]": "سرعة الشبكة",
|
||||
"Name[az]": "Şəbəkə sürəti",
|
||||
"Name[be]": "Хуткасць сеткі",
|
||||
"Name[bg]": "Скорост на мрежата",
|
||||
"Name[ca@valencia]": "Velocitat de xarxa",
|
||||
"Name[ca]": "Velocitat de xarxa",
|
||||
"Name[cs]": "Rychlost sítě",
|
||||
"Name[da]": "Netværkshastighed",
|
||||
"Name[de]": "Netzwerkgeschwindigkeit",
|
||||
"Name[el]": "Ταχύτητα δικτύου",
|
||||
"Name[en_GB]": "Network Speed",
|
||||
"Name[eo]": "Reta Rapideco",
|
||||
"Name[es]": "Velocidad de la red",
|
||||
"Name[eu]": "Sareko abiadura",
|
||||
"Name[fi]": "Verkon nopeus",
|
||||
"Name[fr]": "Débit du réseau",
|
||||
"Name[gl]": "Velocidade de rede",
|
||||
"Name[he]": "מהירות רשת",
|
||||
"Name[hu]": "Hálózati sebesség",
|
||||
"Name[ia]": "Velocitate de Rete",
|
||||
"Name[id]": "Kecepatan Jaringan",
|
||||
"Name[is]": "Nethraði",
|
||||
"Name[it]": "Velocità di rete",
|
||||
"Name[ja]": "ネットワーク速度",
|
||||
"Name[ka]": "ქსელის სიჩქარე",
|
||||
"Name[ko]": "네트워크 속도",
|
||||
"Name[lt]": "Tinklo greitis",
|
||||
"Name[lv]": "Tīkla ātrums",
|
||||
"Name[nb]": "Nettverkshastighet",
|
||||
"Name[nl]": "Netwerksnelheid",
|
||||
"Name[nn]": "Nettverksfart",
|
||||
"Name[pa]": "ਨੈੱਟਵਰਕ ਸਪੀਡ",
|
||||
"Name[pl]": "Szybkość sieci",
|
||||
"Name[pt_BR]": "Velocidade de rede",
|
||||
"Name[ro]": "Viteza rețelei",
|
||||
"Name[ru]": "Скорость передачи данных по сети",
|
||||
"Name[sa]": "संजालस्य गतिः",
|
||||
"Name[sk]": "Rýchlosť siete",
|
||||
"Name[sl]": "Hitrost omrežja",
|
||||
"Name[sv]": "Nätverkshastighet",
|
||||
"Name[ta]": "பிணைய வேகம்",
|
||||
"Name[tr]": "Ağ Hızı",
|
||||
"Name[uk]": "Швидкість мережі",
|
||||
"Name[zh_CN]": "网络速度",
|
||||
"Name[zh_TW]": "網路速度",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
],
|
||||
"X-Plasma-RootPath": "org.kde.plasma.systemmonitor"
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
import QtQuick
|
||||
import org.kde.ksysguard.sensors as Sensors
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.configuration
|
||||
|
||||
ConfigModel {
|
||||
ConfigCategory {
|
||||
name: i18n("Appearance")
|
||||
icon: "preferences-desktop-color"
|
||||
source: "config/ConfigAppearance.qml"
|
||||
}
|
||||
ConfigCategory {
|
||||
name: i18n("%1 Details", Plasmoid.faceController.name)
|
||||
icon: Plasmoid.faceController.icon
|
||||
visible: Plasmoid.faceController.faceConfigUi !== null
|
||||
source: "config/FaceDetails.qml"
|
||||
}
|
||||
ConfigCategory {
|
||||
name: i18n("Sensors Details")
|
||||
icon: "ksysguardd"
|
||||
source: "config/ConfigSensors.qml"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
<?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="Appearance">
|
||||
<entry name="title" type="String"/>
|
||||
<entry name="chartFace" type="String">
|
||||
<default>org.kde.ksysguard.piechart</default>
|
||||
</entry>
|
||||
</group>
|
||||
|
||||
<group name="Sensors">
|
||||
<entry name="totalSensor" type="String">
|
||||
</entry>
|
||||
<entry name="sensorIds" type="StringList">
|
||||
</entry>
|
||||
<entry name="sensorColors" type="StringList"/>
|
||||
|
||||
<entry name="textOnlySensorIds" type="StringList"/>
|
||||
</group>
|
||||
|
||||
</kcfg>
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import QtQml
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
|
||||
import org.kde.ksysguard.faces as Faces
|
||||
|
||||
Control {
|
||||
id: chartFace
|
||||
Layout.fillWidth: contentItem ? contentItem.Layout.fillWidth : false
|
||||
Layout.fillHeight: contentItem ? contentItem.Layout.fillHeight : false
|
||||
|
||||
Layout.minimumWidth: (contentItem ? contentItem.Layout.minimumWidth : 0) + leftPadding + rightPadding
|
||||
Layout.minimumHeight: (contentItem ? contentItem.Layout.minimumHeight : 0) + leftPadding + rightPadding
|
||||
|
||||
Layout.preferredWidth: (contentItem ? contentItem.Layout.preferredWidth : 0) + leftPadding + rightPadding
|
||||
Layout.preferredHeight: (contentItem ? contentItem.Layout.preferredHeight : 0) + leftPadding + rightPadding
|
||||
|
||||
Layout.maximumWidth: (contentItem ? contentItem.Layout.maximumWidth : 0) + leftPadding + rightPadding
|
||||
Layout.maximumHeight: (contentItem ? contentItem.Layout.maximumHeight : 0) + leftPadding + rightPadding
|
||||
|
||||
leftPadding: 0
|
||||
topPadding: 0
|
||||
rightPadding: 0
|
||||
bottomPadding: 0
|
||||
|
||||
anchors.fill: parent
|
||||
contentItem: Plasmoid.faceController.compactRepresentation
|
||||
|
||||
Binding {
|
||||
target: Plasmoid.faceController.compactRepresentation
|
||||
property: "formFactor"
|
||||
value: {
|
||||
switch (Plasmoid.formFactor) {
|
||||
case PlasmaCore.Types.Horizontal:
|
||||
return Faces.SensorFace.Horizontal;
|
||||
case PlasmaCore.Types.Vertical:
|
||||
return Faces.SensorFace.Vertical;
|
||||
default:
|
||||
return Faces.SensorFace.Planar;
|
||||
}
|
||||
}
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
parent: chartFace
|
||||
anchors.fill: parent
|
||||
onClicked: root.expanded = !root.expanded
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Window
|
||||
import Qt5Compat.GraphicalEffects
|
||||
import QtQml
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
import org.kde.ksysguard.faces as Faces
|
||||
|
||||
|
||||
Control {
|
||||
id: chartFace
|
||||
|
||||
Layout.minimumWidth: (contentItem ? contentItem.Layout.minimumWidth : 0) + leftPadding + rightPadding
|
||||
Layout.minimumHeight: (contentItem ? contentItem.Layout.minimumHeight : 0) + leftPadding + rightPadding
|
||||
Layout.preferredWidth: (contentItem
|
||||
? (contentItem.Layout.preferredWidth > 0 ? contentItem.Layout.preferredWidth : contentItem.implicitWidth)
|
||||
: 0) + leftPadding + rightPadding
|
||||
Layout.preferredHeight: (contentItem
|
||||
? (contentItem.Layout.preferredHeight > 0 ? contentItem.Layout.preferredHeight: contentItem.implicitHeight)
|
||||
: 0) + leftPadding + rightPadding
|
||||
Layout.maximumWidth: (contentItem ? contentItem.Layout.maximumWidth : 0) + leftPadding + rightPadding
|
||||
Layout.maximumHeight: (contentItem ? contentItem.Layout.maximumHeight : 0) + leftPadding + rightPadding
|
||||
|
||||
contentItem: Plasmoid.faceController.fullRepresentation
|
||||
|
||||
// This empty mousearea serves for the sole purpose of refusing touch events
|
||||
// which otherwise are eaten by Control stealing the event from any of its parents
|
||||
// TODO KF6: Check if this is still needed as Qt6 doesn't accept touch by default on Control
|
||||
MouseArea {
|
||||
parent: chartFace
|
||||
anchors.fill:parent
|
||||
}
|
||||
|
||||
Binding {
|
||||
target: Plasmoid.faceController.fullRepresentation
|
||||
property: "formFactor"
|
||||
value: {
|
||||
switch (Plasmoid.formFactor) {
|
||||
case PlasmaCore.Types.Horizontal:
|
||||
return Faces.SensorFace.Horizontal;
|
||||
case PlasmaCore.Types.Vertical:
|
||||
return Faces.SensorFace.Vertical;
|
||||
default:
|
||||
return Faces.SensorFace.Planar;
|
||||
}
|
||||
}
|
||||
restoreMode: Binding.RestoreBinding
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
KCM.SimpleKCM {
|
||||
id: root
|
||||
|
||||
signal configurationChanged
|
||||
|
||||
function saveConfig() {
|
||||
configUi.saveConfig()
|
||||
Plasmoid.faceController.reloadConfig()
|
||||
}
|
||||
|
||||
// Workaround for Bug 424458, when reusing the controller/item things break
|
||||
readonly property Item configUi: Plasmoid.workaroundController(root).appearanceConfigUi
|
||||
|
||||
// We cannot directly override the contentItem since SimpleKCM is a
|
||||
// Kirigami.ScrollablePage which breaks if we override the contentItem. So
|
||||
// instead use a placeholder item and reparent the config UI into that item,
|
||||
// making sure to bind the required properties so sizing is correct.
|
||||
Item {
|
||||
id: contents
|
||||
|
||||
implicitWidth: root.configUi.implicitWidth
|
||||
implicitHeight: root.configUi.implicitHeight
|
||||
|
||||
children: root.configUi
|
||||
|
||||
Binding {
|
||||
target: root.configUi
|
||||
property: "width"
|
||||
value: contents.width
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root.configUi
|
||||
function onConfigurationChanged() {
|
||||
root.configurationChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
KCM.SimpleKCM {
|
||||
id: root
|
||||
|
||||
signal configurationChanged
|
||||
|
||||
function saveConfig() {
|
||||
configUi.saveConfig();
|
||||
}
|
||||
|
||||
readonly property Item configUi: Plasmoid.faceController.sensorsConfigUi
|
||||
|
||||
// We cannot directly override the contentItem since SimpleKCM is a
|
||||
// Kirigami.ScrollablePage which breaks if we override the contentItem. So
|
||||
// instead use a placeholder item and reparent the config UI into that item,
|
||||
// making sure to bind the required properties so sizing is correct.
|
||||
Item {
|
||||
id: contents
|
||||
|
||||
implicitWidth: root.configUi.implicitWidth
|
||||
implicitHeight: root.configUi.implicitHeight
|
||||
|
||||
children: root.configUi
|
||||
|
||||
Binding {
|
||||
target: root.configUi
|
||||
property: "width"
|
||||
value: contents.width
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root.configUi
|
||||
function onConfigurationChanged() {
|
||||
root.configurationChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kcmutils as KCM
|
||||
|
||||
KCM.SimpleKCM {
|
||||
id: root
|
||||
|
||||
signal configurationChanged
|
||||
|
||||
function saveConfig() {
|
||||
configUi.saveConfig();
|
||||
}
|
||||
|
||||
readonly property Item configUi: Plasmoid.faceController.faceConfigUi
|
||||
|
||||
// We cannot directly override the contentItem since SimpleKCM is a
|
||||
// Kirigami.ScrollablePage which breaks if we override the contentItem. So
|
||||
// instead use a placeholder item and reparent the config UI into that item,
|
||||
// making sure to bind the required properties so sizing is correct.
|
||||
Item {
|
||||
id: contents
|
||||
|
||||
implicitWidth: root.configUi.implicitWidth
|
||||
implicitHeight: root.configUi.implicitHeight
|
||||
|
||||
children: root.configUi
|
||||
|
||||
Binding {
|
||||
target: root.configUi
|
||||
property: "width"
|
||||
value: contents.width
|
||||
}
|
||||
}
|
||||
|
||||
Connections {
|
||||
target: root.configUi
|
||||
function onConfigurationChanged() {
|
||||
root.configurationChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 David Edmundson <davidedmundson@kde.org>
|
||||
SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
|
||||
SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
*/
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Window
|
||||
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.plasmoid
|
||||
import org.kde.kirigami as Kirigami
|
||||
|
||||
import org.kde.ksysguard.sensors as Sensors
|
||||
|
||||
|
||||
PlasmoidItem {
|
||||
id: root
|
||||
Plasmoid.backgroundHints: PlasmaCore.Types.DefaultBackground | PlasmaCore.Types.ConfigurableBackground
|
||||
|
||||
// Determine the right value to use for representation switching
|
||||
function switchSizeFromSize(formFactor, compactMax, fullMin) {
|
||||
// If we are planar (aka on the desktop), do not do any switching
|
||||
if (Plasmoid.formFactor === PlasmaCore.Types.Planar) {
|
||||
return -1
|
||||
}
|
||||
|
||||
// If we are in a form factor where we can extend freely one way, don't
|
||||
// use that for determining switching.
|
||||
if (Plasmoid.formFactor === formFactor) {
|
||||
// 0 or less is considered as "no switching" so return the smallest
|
||||
// possible still valid value.
|
||||
return 1
|
||||
}
|
||||
|
||||
// Layout.maximumWidth will return Infinity if it isn't set, so handle that.
|
||||
if (!Number.isFinite(compactMax)) {
|
||||
// This is the default maximum size for compact reps, with 1 subtracted
|
||||
// to ensure we switch if the maximum is reached.
|
||||
compactMax = Kirigami.Units.iconSizes.enormous - 1
|
||||
}
|
||||
|
||||
// Layout.minimumWidth will return -1 if it is not set, handle that.
|
||||
if (fullMin <= 0) {
|
||||
fullMin = Kirigami.Units.iconSizes.enormous - 1
|
||||
}
|
||||
|
||||
// Use the larger of the two sizes to ensure we switch when the compact
|
||||
// rep reaches its maximum but we don't try to cram in a full rep that
|
||||
// won't actually fit.
|
||||
return Math.max(compactMax, fullMin)
|
||||
}
|
||||
|
||||
switchWidth: switchSizeFromSize(PlasmaCore.Types.Horizontal, compactRepresentationItem?.Layout.maximumWidth ?? Infinity, fullRepresentationItem?.Layout.minimumWidth ?? -1)
|
||||
switchHeight: switchSizeFromSize(PlasmaCore.Types.Vertical, compactRepresentationItem?.Layout.maximumHeight ?? Infinity, fullRepresentationItem?.Layout.minimumHeight ?? -1)
|
||||
|
||||
preferredRepresentation: Plasmoid.formFactor === PlasmaCore.Types.Planar ? fullRepresentation : null
|
||||
|
||||
Plasmoid.title: Plasmoid.faceController?.title || i18n("System Monitor")
|
||||
toolTipSubText: totalSensor.sensorId ? i18nc("Sensor name: value", "%1: %2", totalSensor.name, totalSensor.formattedValue) : ""
|
||||
|
||||
compactRepresentation: CompactRepresentation {
|
||||
}
|
||||
fullRepresentation: FullRepresentation {
|
||||
}
|
||||
|
||||
Plasmoid.configurationRequired: (Plasmoid.faceController ?? false) &&
|
||||
Plasmoid.faceController.highPrioritySensorIds.length == 0 &&
|
||||
Plasmoid.faceController.lowPrioritySensorIds.length == 0 &&
|
||||
Plasmoid.faceController.totalSensors.length == 0 &&
|
||||
! (["org.kde.ksysguard.applicationstable",
|
||||
"org.kde.ksysguard.processtable"].includes(Plasmoid.faceController.faceId))
|
||||
|
||||
Sensors.Sensor {
|
||||
id: totalSensor
|
||||
sensorId: Plasmoid.faceController?.totalSensors[0] || ""
|
||||
updateRateLimit: Plasmoid.faceController?.updateRateLimit
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
acceptedButtons: Qt.MiddleButton
|
||||
onClicked: Plasmoid.openSystemMonitor()
|
||||
}
|
||||
|
||||
Plasmoid.contextualActions: [
|
||||
PlasmaCore.Action {
|
||||
text: i18nc("@action", "Open System Monitor…")
|
||||
icon.name: "utilities-system-monitor"
|
||||
onTriggered: Plasmoid.openSystemMonitor()
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Name": "Marco Martin",
|
||||
"Name[ar]": "ماركو مارتن",
|
||||
"Name[ast]": "Marco Martin",
|
||||
"Name[az]": "Marco Martin",
|
||||
"Name[be]": "Marco Martin",
|
||||
"Name[bg]": "Марко Мартин",
|
||||
"Name[ca@valencia]": "Marco Martin",
|
||||
"Name[ca]": "Marco Martin",
|
||||
"Name[cs]": "Marco Martin",
|
||||
"Name[da]": "Marco Martin",
|
||||
"Name[de]": "Marco Martin",
|
||||
"Name[el]": "Marco Martin",
|
||||
"Name[en_GB]": "Marco Martin",
|
||||
"Name[eo]": "Marco Martin",
|
||||
"Name[es]": "Marco Martin",
|
||||
"Name[et]": "Marco Martin",
|
||||
"Name[eu]": "Marco Martin",
|
||||
"Name[fi]": "Marco Martin",
|
||||
"Name[fr]": "Marco Martin",
|
||||
"Name[ga]": "Marco Martin",
|
||||
"Name[gl]": "Marco Martin",
|
||||
"Name[he]": "מרקו מרטין",
|
||||
"Name[hi]": "मार्को मार्टिन",
|
||||
"Name[hu]": "Marco Martin",
|
||||
"Name[ia]": "Marco Martin",
|
||||
"Name[id]": "Marco Martin",
|
||||
"Name[is]": "Marco Martin",
|
||||
"Name[it]": "Marco Martin",
|
||||
"Name[ja]": "Marco Martin",
|
||||
"Name[ka]": "მაკრო მარტინი",
|
||||
"Name[ko]": "Marco Martin",
|
||||
"Name[lt]": "Marco Martin",
|
||||
"Name[lv]": "Marco Martin",
|
||||
"Name[nb]": "Marco Martin",
|
||||
"Name[nl]": "Marco Martin",
|
||||
"Name[nn]": "Marco Martin",
|
||||
"Name[pa]": "ਮਾਰਕੋ ਮਾਰਟਿਨ",
|
||||
"Name[pl]": "Marco Martin",
|
||||
"Name[pt]": "Marco Martin",
|
||||
"Name[pt_BR]": "Marco Martin",
|
||||
"Name[ro]": "Marco Martin",
|
||||
"Name[ru]": "Marco Martin",
|
||||
"Name[sa]": "मार्को मार्टिन्",
|
||||
"Name[sk]": "Marco Martin",
|
||||
"Name[sl]": "Marco Martin",
|
||||
"Name[sv]": "Marco Martin",
|
||||
"Name[ta]": "மார்க்கோ மார்ட்டின்",
|
||||
"Name[tr]": "Marco Martin",
|
||||
"Name[uk]": "Marco Martin",
|
||||
"Name[vi]": "Marco Martin",
|
||||
"Name[zh_CN]": "Marco Martin",
|
||||
"Name[zh_TW]": "Marco Martin"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=plasmashell&component=System%20Monitor%20widgets",
|
||||
"Category": "System Information",
|
||||
"Description": "Displays a configurable chart of a system monitor sensor",
|
||||
"Description[ar]": "يعرض مخططًا قابلًا للضبط لمتحسسات مراقبة النظام",
|
||||
"Description[az]": "Sistem monitoru sensorunun ayarlana bilən zolaqlarını göstərir",
|
||||
"Description[be]": "Паказвае наладжвальную дыяграму сэнсара сістэмнага назіральніка",
|
||||
"Description[bg]": "Показва конфигурируема диаграма на сензор за системен монитор",
|
||||
"Description[ca@valencia]": "Mostra un diagrama configurable d'un sensor del monitor del sistema",
|
||||
"Description[ca]": "Mostra un diagrama configurable d'un sensor del monitor del sistema",
|
||||
"Description[da]": "Viser et konfigurerbart diagram over en systemovervågning-sensor",
|
||||
"Description[de]": "Zeigt ein anpassbares Diagramm eines Systemmonitor-Sensors an",
|
||||
"Description[el]": "Εμφανίζει ένα διαμορφώσιμο διάγραμμα ενός αισθητήρα παρακολούθησης συστήματος",
|
||||
"Description[en_GB]": "Displays a configurable chart of a system monitor sensor",
|
||||
"Description[eo]": "Montras agordeblan diagramon de sistemmonitora sensilo",
|
||||
"Description[es]": "Muestra un gráfico configurable de un sensor del monitor del sistema",
|
||||
"Description[et]": "Süsteemi jälgija sensori seadistatava diagrammi näitamine",
|
||||
"Description[eu]": "Sistema gainbegiratzeko sentsore baten diagrama konfiguragarri bat azaltzen du",
|
||||
"Description[fi]": "Näyttää mukautettavissa olevan kaavion järjestelmänvalvonnan anturista",
|
||||
"Description[fr]": "Affiche un graphique configurable du senseur de surveillance du système.",
|
||||
"Description[gl]": "Amosa un gráfico configurábel dun sensor de vixilancia do sistema",
|
||||
"Description[he]": "יישומון צג מערכת שמציג את חיישן צג המערכת",
|
||||
"Description[hi]": "तंत्र परिवीक्षक सेंसर का विन्यास करने योग्य लेखा-चित्र प्रदर्शित करता है ",
|
||||
"Description[hu]": "Testre szabható szenzorokat megjelenítő elem",
|
||||
"Description[ia]": "Monstra un graphico configurabile de un sensor de supervision de systema",
|
||||
"Description[id]": "Menampilkan sebuah bagan yang bisa dikonfigurasi pada sebuah sensor pemantau sistem",
|
||||
"Description[is]": "Sýnir stillanlegt myndrit yfir kerfisvöktunarskynjara",
|
||||
"Description[it]": "Visualizza un grafico configurabile di un sensore di monitoraggio del sistema",
|
||||
"Description[ja]": "カスタム可能なチャートを表示します",
|
||||
"Description[ka]": "სისტემური მონიტორის სენსორის მორგებადი ცხვრილის ჩვენება",
|
||||
"Description[ko]": "설정 가능한 시스템 모니터 센서 차트 표시",
|
||||
"Description[lt]": "Rodo konfigūruojamą sistemos prižiūryklės jutiklio diagramą",
|
||||
"Description[lv]": "Parāda sistēmas pārraudzības sensoru konfigurējamu diagrammu",
|
||||
"Description[nb]": "Viser et tilpassbart diagram for en systemovervåkingssensor",
|
||||
"Description[nl]": "Toont een te configureren grafiek van een systeemmonitorsensor",
|
||||
"Description[nn]": "Viser eit tilpassbart diagram for ein systemovervakingssensor",
|
||||
"Description[pa]": "ਸਿਸਟਮ ਮਾਨੀਟਰ ਸੈਂਸਰ ਦੀ ਸੰਰਚਨਾ-ਯੋਗ ਚਾਰਟ ਦਿਖਾਉਂਦਾ ਹੈ",
|
||||
"Description[pl]": "Wyświetla wykres miernika monitora systemowego",
|
||||
"Description[pt]": "Mostra um gráfico configurável de um sensor de monitorização do sistema",
|
||||
"Description[pt_BR]": "Mostra um gráfico configurável do sensor do monitor do sistema",
|
||||
"Description[ro]": "Afișează un grafic configurabil al unui senzor de monitorizare a sistemului",
|
||||
"Description[ru]": "Настраиваемый график датчика системного монитора",
|
||||
"Description[sa]": "प्रणालीनिरीक्षकसंवेदकस्य विन्यासयोग्यं चित्रपट प्रदर्शयति",
|
||||
"Description[sk]": "Zobrazuje konfigurovateľný graf senzoru monitorovania systému",
|
||||
"Description[sl]": "Prikaže nastavljiv grafikon sistemskega monitorja senzorja",
|
||||
"Description[sv]": "Visar ett anpassningsbart diagram av en systemövervakningssensor",
|
||||
"Description[ta]": "ஏதாவதொரு கணினி கண்காணிப்பு உணரியைக் காட்டும்",
|
||||
"Description[tr]": "Sistem monitörü algılayıcısının yapılandırılabilir bir grafiğini görüntüler",
|
||||
"Description[uk]": "Показує придатну до налаштовування діаграму на основі даних датчика нагляду за системою",
|
||||
"Description[vi]": "Hiển thị một biểu đồ cấu hình được của một cảm biến giám sát hệ thống",
|
||||
"Description[zh_CN]": "显示系统监视器的可配置图表",
|
||||
"Description[zh_TW]": "顯示一個可自訂的系統監控偵測器圖表",
|
||||
"FormFactors": [
|
||||
"desktop"
|
||||
],
|
||||
"Icon": "ksysguardd",
|
||||
"Id": "org.kde.plasma.systemmonitor",
|
||||
"License": "GPL",
|
||||
"Name": "System Monitor Sensor",
|
||||
"Name[ar]": "مستشعر مراقبة النظام",
|
||||
"Name[az]": "Sistem İzləməsi Sensoru",
|
||||
"Name[be]": "Сэнсар сістэмнага назіральніка",
|
||||
"Name[bg]": "Сензор на системния монитор",
|
||||
"Name[ca@valencia]": "Sensor del monitor del sistema",
|
||||
"Name[ca]": "Sensor del monitor del sistema",
|
||||
"Name[cs]": "Senzor monitoru systému",
|
||||
"Name[da]": "Systemovervågning-sensor",
|
||||
"Name[de]": "Systemmonitor-Sensor",
|
||||
"Name[el]": "Αισθητήρας παρακολούθησης συστήματος",
|
||||
"Name[en_GB]": "System Monitor Sensor",
|
||||
"Name[eo]": "Sistemmonitora Sentilo",
|
||||
"Name[es]": "Sensor del monitor del sistema",
|
||||
"Name[eu]": "Sistema gainbegiratzeko sentsorea",
|
||||
"Name[fi]": "Järjestelmävalvonnan anturi",
|
||||
"Name[fr]": "Senseur de surveillance du système",
|
||||
"Name[gl]": "Sensores de vixilancia do sistema",
|
||||
"Name[he]": "חיישן צג המערכת",
|
||||
"Name[hu]": "Rendszermonitor-szenzor",
|
||||
"Name[ia]": "Sensor de Monitor (supervisor) de systema",
|
||||
"Name[id]": "Sensor Pemantau Sistem",
|
||||
"Name[is]": "Skynjari kerfiseftirlits",
|
||||
"Name[it]": "Sensori di monitoraggio del sistema",
|
||||
"Name[ja]": "システムモニタセンサー",
|
||||
"Name[ka]": "სისტემური მონიტორის სენსორი",
|
||||
"Name[ko]": "시스템 모니터 센서",
|
||||
"Name[lt]": "Sistemos prižiūryklės jutiklis",
|
||||
"Name[lv]": "Sistēmās pārraudzības sensors",
|
||||
"Name[nb]": "Systemovervåkingssensor",
|
||||
"Name[nl]": "Systeemmonitorsensor",
|
||||
"Name[nn]": "Systemovervakingssensor",
|
||||
"Name[pa]": "ਸਿਸਟਮ ਮਾਨੀਟਰ ਸੈਂਸਰ",
|
||||
"Name[pl]": "Miernik monitora systemowego",
|
||||
"Name[pt_BR]": "Sensor do monitor do sistema ",
|
||||
"Name[ro]": "Senzor de monitorizare a sistemului",
|
||||
"Name[ru]": "Датчик системного монитора",
|
||||
"Name[sa]": "प्रणालीनिरीक्षकस्य संवेदक",
|
||||
"Name[sk]": "Senzor monitorovania systému",
|
||||
"Name[sl]": "Sistemski nadzornik senzorja",
|
||||
"Name[sv]": "Systemövervakningssensor",
|
||||
"Name[ta]": "கணினி கண்காணிப்பு உணரி",
|
||||
"Name[tr]": "Sistem Monitörü Algılayıcısı",
|
||||
"Name[uk]": "Датчик нагляду за системою",
|
||||
"Name[zh_CN]": "系统监视传感器",
|
||||
"Name[zh_TW]": "系統監控感測器",
|
||||
"Website": "https://www.kde.org/plasma-desktop"
|
||||
},
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-Provides": [
|
||||
"org.kde.plasma.systemmonitor"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017, 2018, 2019 Ivan Cukic <ivan.cukic (at) kde.org>
|
||||
* SPDX-FileCopyrightText: 2020 Nate Graham <nate@kde.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls as QQC2
|
||||
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
PlasmaExtras.ExpandableListItem {
|
||||
id: root
|
||||
|
||||
required index
|
||||
required property var model
|
||||
|
||||
readonly property var vaultsModelActions: Plasmoid.vaultsModel.actionsModel()
|
||||
|
||||
icon: model.icon
|
||||
iconEmblem: {
|
||||
if (model.message.length !== 0) {
|
||||
return "emblem-error";
|
||||
} else if (model.isOpened) {
|
||||
return "emblem-mounted";
|
||||
} else if (model.isOfflineOnly) {
|
||||
return "network-disconnect-symbolic";
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
title: model.name
|
||||
subtitle: model.message
|
||||
subtitleCanWrap: true
|
||||
defaultActionButtonAction: QQC2.Action {
|
||||
icon.name: root.model.isOpened ? "lock-symbolic" : "unlock-symbolic"
|
||||
text: root.model.isOpened ? i18nd("plasmavault-kde", "Lock Vault") : i18nd("plasmavault-kde", "Unlock and Open")
|
||||
onTriggered: source => {
|
||||
if (root.model.isOpened) {
|
||||
root.vaultsModelActions.toggle(root.model.device);
|
||||
} else {
|
||||
root.vaultsModelActions.openInFileManager(root.model.device);
|
||||
}
|
||||
}
|
||||
}
|
||||
isBusy: Plasmoid.busy
|
||||
enabled: model.isEnabled
|
||||
contextualActions: [
|
||||
QQC2.Action {
|
||||
enabled: root.model.isOpened
|
||||
icon.name: "document-open-folder-symbolic"
|
||||
text: i18nd("plasmavault-kde", "Show in File Manager")
|
||||
onTriggered: source => {
|
||||
root.vaultsModelActions.openInFileManager(root.model.device);
|
||||
}
|
||||
},
|
||||
QQC2.Action {
|
||||
icon.name: root.model.isOpened ? "window-close-symbolic" : "unlock-symbolic"
|
||||
text: root.model.isOpened ? i18nd("plasmavault-kde", "Forcefully Lock Vault") : i18nd("plasmavault-kde", "Unlock Vault")
|
||||
onTriggered: source => {
|
||||
if (root.model.isOpened) {
|
||||
root.vaultsModelActions.forceClose(root.model.device);
|
||||
} else {
|
||||
root.vaultsModelActions.toggle(root.model.device);
|
||||
}
|
||||
}
|
||||
},
|
||||
QQC2.Action {
|
||||
icon.name: "configure-symbolic"
|
||||
text: i18nd("plasmavault-kde", "Configure Vault…")
|
||||
onTriggered: source => root.vaultsModelActions.configure(root.model.device);
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2017, 2018, 2019 Ivan Cukic <ivan.cukic (at) kde.org>
|
||||
*
|
||||
* SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
|
||||
*/
|
||||
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import QtQuick.Controls as QQC2
|
||||
import QtQuick.Layouts
|
||||
|
||||
import org.kde.kirigami as Kirigami
|
||||
import org.kde.kitemmodels as KItemModels
|
||||
import org.kde.plasma.components as PlasmaComponents3
|
||||
import org.kde.plasma.core as PlasmaCore
|
||||
import org.kde.plasma.extras as PlasmaExtras
|
||||
import org.kde.plasma.plasmoid
|
||||
|
||||
PlasmoidItem {
|
||||
id: root
|
||||
|
||||
readonly property var vaultsModelActions: Plasmoid.vaultsModel.actionsModel()
|
||||
|
||||
readonly property bool inPanel: [
|
||||
PlasmaCore.Types.TopEdge,
|
||||
PlasmaCore.Types.RightEdge,
|
||||
PlasmaCore.Types.BottomEdge,
|
||||
PlasmaCore.Types.LeftEdge,
|
||||
].includes(Plasmoid.location)
|
||||
|
||||
Plasmoid.busy: vaultsModelActions.isBusy
|
||||
|
||||
Plasmoid.icon: {
|
||||
let iconName = (vaultsModelActions.hasError ? "plasmavault_error" : "plasmavault");
|
||||
|
||||
if (inPanel) {
|
||||
return iconName += "-symbolic"
|
||||
}
|
||||
|
||||
return iconName;
|
||||
}
|
||||
|
||||
Plasmoid.status: vaultsModelActions.hasOpenVaults ? PlasmaCore.Types.ActiveStatus : PlasmaCore.Types.PassiveStatus
|
||||
|
||||
onExpandedChanged: {
|
||||
Plasmoid.vaultsModel.reloadDevices();
|
||||
}
|
||||
|
||||
Plasmoid.contextualActions: [
|
||||
PlasmaCore.Action {
|
||||
id: createAction
|
||||
text: i18nd("plasmavault-kde", "Create a New Vault…")
|
||||
icon.name: "list-add-symbolic"
|
||||
onTriggered: checked => root.vaultsModelActions.requestNewVault()
|
||||
}
|
||||
]
|
||||
|
||||
fullRepresentation: PlasmaExtras.Representation {
|
||||
|
||||
Layout.minimumWidth: Kirigami.Units.gridUnit * 18
|
||||
Layout.minimumHeight: Kirigami.Units.gridUnit * 12
|
||||
|
||||
collapseMarginsHint: true
|
||||
|
||||
PlasmaComponents3.ScrollView {
|
||||
anchors.fill: parent
|
||||
|
||||
// HACK: workaround for https://bugreports.qt.io/browse/QTBUG-83890
|
||||
PlasmaComponents3.ScrollBar.horizontal.policy: PlasmaComponents3.ScrollBar.AlwaysOff
|
||||
|
||||
contentWidth: availableWidth - vaultsList.leftMargin - vaultsList.rightMargin
|
||||
|
||||
contentItem: ListView {
|
||||
id: vaultsList
|
||||
|
||||
model: KItemModels.KSortFilterProxyModel {
|
||||
sortRoleName: "name"
|
||||
sourceModel: Plasmoid.vaultsModel
|
||||
}
|
||||
|
||||
clip: true
|
||||
currentIndex: -1
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
topMargin: Kirigami.Units.largeSpacing
|
||||
leftMargin: Kirigami.Units.largeSpacing
|
||||
rightMargin: Kirigami.Units.largeSpacing
|
||||
bottomMargin: Kirigami.Units.largeSpacing
|
||||
|
||||
highlight: PlasmaExtras.Highlight {}
|
||||
highlightMoveDuration: Kirigami.Units.shortDuration
|
||||
highlightResizeDuration: Kirigami.Units.shortDuration
|
||||
delegate: VaultItem {}
|
||||
|
||||
PlasmaExtras.PlaceholderMessage {
|
||||
id: noVaultsMessage
|
||||
|
||||
anchors.centerIn: parent
|
||||
width: parent.width - (Kirigami.Units.gridUnit * 4)
|
||||
|
||||
visible: vaultsList.count === 0
|
||||
|
||||
iconName: "plasmavault"
|
||||
text: i18nd("plasmavault-kde", "No Vaults have been set up")
|
||||
|
||||
helpfulAction: QQC2.Action {
|
||||
text: createAction.text
|
||||
icon.name: createAction.icon.name
|
||||
|
||||
onTriggered: source => createAction.trigger()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
footer: PlasmaExtras.PlasmoidHeading {
|
||||
visible: vaultsList.count > 0 && !(Plasmoid.containmentDisplayHints & PlasmaCore.Types.ContainmentDrawsPlasmoidHeading)
|
||||
|
||||
contentItem: RowLayout {
|
||||
spacing: Kirigami.Units.smallSpacing
|
||||
|
||||
PlasmaComponents3.ToolButton {
|
||||
|
||||
text: createAction.text
|
||||
icon.name: createAction.icon.name
|
||||
|
||||
onClicked: createAction.trigger()
|
||||
Layout.alignment: Qt.AlignLeft
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
{
|
||||
"KPackageStructure": "Plasma/Applet",
|
||||
"KPlugin": {
|
||||
"Authors": [
|
||||
{
|
||||
"Email": "ivan.cukic at kde.org",
|
||||
"Name": "Ivan Čukić",
|
||||
"Name[ar]": "إيفان أووكيتش",
|
||||
"Name[ast]": "Ivan Čukić",
|
||||
"Name[az]": "Ivan Čukić",
|
||||
"Name[be]": "Ivan Čukić",
|
||||
"Name[bg]": "Ivan Čukić",
|
||||
"Name[ca@valencia]": "Ivan Čukić",
|
||||
"Name[ca]": "Ivan Čukić",
|
||||
"Name[cs]": "Ivan Čukić",
|
||||
"Name[da]": "Ivan Čukić",
|
||||
"Name[de]": "Ivan Čukić",
|
||||
"Name[en_GB]": "Ivan Čukić",
|
||||
"Name[eo]": "Ivan Čukić",
|
||||
"Name[es]": "Ivan Čukić",
|
||||
"Name[eu]": "Ivan Čukić",
|
||||
"Name[fi]": "Ivan Čukić",
|
||||
"Name[fr]": "Ivan Čukić",
|
||||
"Name[gl]": "Ivan Čukić",
|
||||
"Name[he]": "איוון צ׳וקיץ׳",
|
||||
"Name[hu]": "Ivan Čukić",
|
||||
"Name[ia]": "Ivan Čukić",
|
||||
"Name[is]": "Ivan Čukić",
|
||||
"Name[it]": "Ivan Čukić",
|
||||
"Name[ka]": "Ivan Čukić",
|
||||
"Name[ko]": "Ivan Čukić",
|
||||
"Name[lt]": "Ivan Čukić",
|
||||
"Name[lv]": "Ivan Čukić",
|
||||
"Name[nl]": "Ivan Čukić",
|
||||
"Name[nn]": "Ivan Čukić",
|
||||
"Name[pl]": "Ivan Čukić",
|
||||
"Name[pt_BR]": "Ivan Čukić",
|
||||
"Name[ro]": "Ivan Čukić",
|
||||
"Name[ru]": "Ivan Čukić",
|
||||
"Name[sa]": "इवान चुकिच्",
|
||||
"Name[sk]": "Ivan Čukić",
|
||||
"Name[sl]": "Ivan Čukić",
|
||||
"Name[sv]": "Ivan Čukić",
|
||||
"Name[tr]": "Ivan Čukić",
|
||||
"Name[uk]": "Ivan Čukić",
|
||||
"Name[zh_CN]": "Ivan Čukić",
|
||||
"Name[zh_TW]": "Ivan Čukić"
|
||||
}
|
||||
],
|
||||
"BugReportUrl": "https://bugs.kde.org/enter_bug.cgi?product=Plasma%20Vault",
|
||||
"Category": "Utilities",
|
||||
"Description": "Create encrypted vaults",
|
||||
"Description[ar]": "أنشئ خزنات معمّاة",
|
||||
"Description[ast]": "Crea arques cifraes",
|
||||
"Description[az]": "Şifrələnmiş seyflər yaratmaq",
|
||||
"Description[be]": "Стварыць зашыфраваныя сховішчы",
|
||||
"Description[bg]": "Създаване на криптирани трезори",
|
||||
"Description[ca@valencia]": "Crea caixes fortes encriptades",
|
||||
"Description[ca]": "Crea caixes fortes encriptades",
|
||||
"Description[cs]": "Vytvářejte šifrované sejfy",
|
||||
"Description[da]": "Opretter krypterede sikkerhedsbokse",
|
||||
"Description[de]": "Verschlüsselte Tresore erstellen",
|
||||
"Description[en_GB]": "Create encrypted vaults",
|
||||
"Description[eo]": "Krei ĉifritajn trezorejojn",
|
||||
"Description[es]": "Crear cajas fuertes cifradas",
|
||||
"Description[eu]": "Sortu zifratutako kutxa-gotorrak",
|
||||
"Description[fi]": "Luo salattuja holveja",
|
||||
"Description[fr]": "Créer des coffres-forts chiffrés",
|
||||
"Description[gl]": "Crear caixas fortes cifradas.",
|
||||
"Description[he]": "יצירת כספות מוצפנות",
|
||||
"Description[hu]": "Titkos tárolók létrehozása",
|
||||
"Description[ia]": "Crea cellarios cryptate",
|
||||
"Description[is]": "Setja upp dulritaðar öryggisgeymslur",
|
||||
"Description[it]": "Crea caveau criptati",
|
||||
"Description[ka]": "დაშიფრული სარდაფების შექმნა",
|
||||
"Description[ko]": "암호화된 비밀 공간 생성",
|
||||
"Description[lt]": "Sukurti šifruotas slėptuves",
|
||||
"Description[lv]": "Izveidojiet šifrētus seifus",
|
||||
"Description[nl]": "Versleutelde kluizen aanmaken",
|
||||
"Description[nn]": "Lag krypterte datakvelv",
|
||||
"Description[pa]": "ਇੰਕ੍ਰਿਪਟ ਕੀਤੇ ਵਾਲਟ ਬਣਾਓ",
|
||||
"Description[pl]": "Tworzy zaszyfrowane sejfy",
|
||||
"Description[pt_BR]": "Criar cofres criptografados",
|
||||
"Description[ro]": "Creează bolți criptate",
|
||||
"Description[ru]": "Создание зашифрованных папок",
|
||||
"Description[sa]": "एन्क्रिप्टेड् वॉल्ट्स् रचयन्तु",
|
||||
"Description[sk]": "Vytvoriť šifrované trezory",
|
||||
"Description[sl]": "Ustvari šifrirane trezorje",
|
||||
"Description[sv]": "Skapa krypterade valv",
|
||||
"Description[tr]": "Şifrelenmiş kasalar oluşturun",
|
||||
"Description[uk]": "Створення зашифрованих сховищ",
|
||||
"Description[zh_CN]": "创建加密的保险库",
|
||||
"Description[zh_TW]": "建立加密儲存庫",
|
||||
"EnabledByDefault": true,
|
||||
"Icon": "plasmavault",
|
||||
"Id": "org.kde.plasma.vault",
|
||||
"License": "GPL",
|
||||
"Name": "Vaults",
|
||||
"Name[ar]": "الخزنات",
|
||||
"Name[ast]": "Arques",
|
||||
"Name[az]": "Seyflər",
|
||||
"Name[be]": "Сховішчы",
|
||||
"Name[bg]": "Трезори",
|
||||
"Name[ca@valencia]": "Caixes fortes",
|
||||
"Name[ca]": "Caixes fortes",
|
||||
"Name[cs]": "Sejfy",
|
||||
"Name[da]": "Sikkerhedsbokse",
|
||||
"Name[de]": "Tresore",
|
||||
"Name[en_GB]": "Vaults",
|
||||
"Name[eo]": "Trezorejoj",
|
||||
"Name[es]": "Cajas fuertes",
|
||||
"Name[eu]": "Kutxa-gotorrak",
|
||||
"Name[fi]": "Holvi",
|
||||
"Name[fr]": "Coffre-forts",
|
||||
"Name[gl]": "Caixas fortes",
|
||||
"Name[he]": "כספות",
|
||||
"Name[hu]": "Titkos tárolók",
|
||||
"Name[ia]": "Cellarios (Vaults)",
|
||||
"Name[is]": "Öryggisgeymslur",
|
||||
"Name[it]": "Caveau",
|
||||
"Name[ka]": "საცავები",
|
||||
"Name[ko]": "비밀 공간",
|
||||
"Name[lt]": "Slėptuvės",
|
||||
"Name[lv]": "Seifi",
|
||||
"Name[nl]": "Kluizen",
|
||||
"Name[nn]": "Datakvelv",
|
||||
"Name[pa]": "ਵਾਲਟ",
|
||||
"Name[pl]": "Sejfy",
|
||||
"Name[pt_BR]": "Cofres",
|
||||
"Name[ro]": "Bolți",
|
||||
"Name[ru]": "Зашифрованные папки",
|
||||
"Name[sa]": "तिजोरियाः",
|
||||
"Name[sk]": "Trezory",
|
||||
"Name[sl]": "Trezorji",
|
||||
"Name[sv]": "Valv",
|
||||
"Name[tr]": "Kasalar",
|
||||
"Name[uk]": "Сховища",
|
||||
"Name[zh_CN]": "保险库",
|
||||
"Name[zh_TW]": "儲存庫",
|
||||
"Version": "1.0",
|
||||
"Website": "https://kde.org/plasma-desktop/"
|
||||
},
|
||||
"X-Plasma-API": "declarativeappletscript",
|
||||
"X-Plasma-API-Minimum-Version": "6.0",
|
||||
"X-Plasma-MainScript": "ui/main.qml",
|
||||
"X-Plasma-NotificationArea": "true",
|
||||
"X-Plasma-NotificationAreaCategory": "SystemServices"
|
||||
}
|
||||
Reference in New Issue
Block a user