Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:seral79:dkms
kargos
kargos.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File kargos.patch of Package kargos
diff --git a/CMakeLists.txt b/CMakeLists.txt index d8da261..58735b4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,16 +1,21 @@ # Set minimum CMake version (required for CMake 3.0 or later) -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.16 FATAL_ERROR) + +project(plasmoid-kargos VERSION 0.6.80) + +set(KF6_MIN_VERSION "5.240.0") +set(PLASMA_MIN_VERSION "5.27.80") # Use Extra CMake Modules (ECM) for common functionality. # See http://api.kde.org/ecm/manual/ecm.7.html # and http://api.kde.org/ecm/manual/ecm-kde-modules.7.html -find_package(ECM REQUIRED NO_MODULE) +find_package(ECM ${KF6_MIN_VERSION} REQUIRED NO_MODULE) # Needed by find_package(KF5Plasma) below. -set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_MODULE_PATH}) +set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) # Locate plasma_install_package macro. -find_package(KF5Plasma REQUIRED) +find_package(Plasma ${PLASMA_MIN_VERSION} REQUIRED COMPONENTS) # Add installatation target ("make install"). -plasma_install_package(plasmoid org.kde.kargos) +plasma_install_package(package org.kde.kargos) diff --git a/plasmoid/contents/config/config.qml b/package/contents/config/config.qml similarity index 98% rename from plasmoid/contents/config/config.qml rename to package/contents/config/config.qml index e17b5dc..4b0161b 100755 --- a/plasmoid/contents/config/config.qml +++ b/package/contents/config/config.qml @@ -17,7 +17,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ -import QtQuick 2.0 +import QtQuick 2.15 import org.kde.plasma.configuration 2.0 diff --git a/plasmoid/contents/config/main.xml b/package/contents/config/main.xml similarity index 100% rename from plasmoid/contents/config/main.xml rename to package/contents/config/main.xml diff --git a/plasmoid/contents/ui/CompactRepresentation.qml b/package/contents/ui/CompactRepresentation.qml similarity index 82% rename from plasmoid/contents/ui/CompactRepresentation.qml rename to package/contents/ui/CompactRepresentation.qml index 87f4151..20aa113 100644 --- a/plasmoid/contents/ui/CompactRepresentation.qml +++ b/package/contents/ui/CompactRepresentation.qml @@ -19,18 +19,17 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. */ -import QtQuick 2.0 -import org.kde.plasma.components 2.0 as PlasmaComponents -import QtQuick.Controls 1.4 -import QtQuick.Layouts 1.1 -import org.kde.plasma.core 2.0 as PlasmaCore +import QtQuick 2.15 +import QtQuick.Layouts 1.5 +import org.kde.kirigami as Kirigami +import org.kde.ksvg as KSvg +import org.kde.plasma.core as PlasmaCore Item { - id: compactRoot - Layout.preferredWidth: rotator.implicitWidth + (dropdownButton.visible?dropdownButton.implicitWidth + 5 : 0) + Layout.preferredWidth: rotator.implicitWidth + (dropdownButton.visible ? dropdownButton.implicitWidth + 5 : 0) property var mouseIsInside: false; @@ -40,7 +39,7 @@ Item { anchors.fill : parent onEntered: { - mouseIsInside = true; + compactRoot.mouseIsInside = true; mouseExitDelayer.stop(); } @@ -58,7 +57,7 @@ Item { id: mouseExitDelayer interval: 1000 onTriggered: { - mouseIsInside = false; + compactRoot.mouseIsInside = false; } } @@ -82,13 +81,16 @@ Item { Item { id: dropdownButton - width: units.iconSizes.smallMedium - height: units.iconSizes.smallMedium + width: Kirigami.Units.iconSizes.smallMedium + height: Kirigami.Units.iconSizes.smallMedium - implicitWidth: units.iconSizes.smallMedium - implicitHeight: units.iconSizes.smallMedium + implicitWidth: Kirigami.Units.iconSizes.smallMedium + implicitHeight: Kirigami.Units.iconSizes.smallMedium - visible: (root.dropdownItemsCount > 0) && (!plasmoid.configuration.d_ArrowNeverVisible) && (mouseIsInside || plasmoid.expanded || plasmoid.configuration.d_ArrowAlwaysVisible) + visible: (root.dropdownItemsCount > 0) && + (!plasmoid.configuration.d_ArrowNeverVisible) && + (mouseIsInside || plasmoid.expanded || + plasmoid.configuration.d_ArrowAlwaysVisible) anchors { right: parent.right @@ -102,14 +104,14 @@ Item { mousearea.doDropdown() } - readonly property int arrowAnimationDuration: units.shortDuration * 3 + readonly property int arrowAnimationDuration: Kirigami.Units.shortDuration * 3 - PlasmaCore.Svg { + KSvg.Svg { id: arrowSvg imagePath: "widgets/arrows" } - PlasmaCore.SvgItem { + KSvg.SvgItem { id: arrow anchors.centerIn: parent @@ -143,7 +145,7 @@ Item { } } - PlasmaCore.SvgItem { + KSvg.SvgItem { anchors.centerIn: parent width: arrow.width height: arrow.height @@ -179,8 +181,8 @@ Item { Component.onCompleted: { // more compact - rotator.mousearea.goButton.text=''; - rotator.mousearea.runButton.text=''; + rotator.mousearea.goButton.text = ''; + rotator.mousearea.runButton.text = ''; rotator.mousearea.buttonsAlwaysVisible = true rotator.mousearea.iconMode = true } diff --git a/plasmoid/contents/ui/FirstLinesRotator.qml b/package/contents/ui/FirstLinesRotator.qml similarity index 85% rename from plasmoid/contents/ui/FirstLinesRotator.qml rename to package/contents/ui/FirstLinesRotator.qml index 858048d..6247390 100644 --- a/plasmoid/contents/ui/FirstLinesRotator.qml +++ b/package/contents/ui/FirstLinesRotator.qml @@ -18,11 +18,11 @@ * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. */ -import QtQuick 2.0 -import org.kde.plasma.components 2.0 as PlasmaComponents -import QtQuick.Controls 1.4 -import QtQuick.Layouts 1.1 -import org.kde.plasma.core 2.0 as PlasmaCore +import QtQuick 2.15 +import QtQuick.Controls as QQC2 + +import org.kde.kirigami as Kirigami + import "../vendor/FontAwesome" Row { @@ -30,14 +30,14 @@ Row { spacing: 2 anchors.left: parent.left anchors.right: parent.right - + height: label.implicitHeight + 20 property bool buttonHidingDelay: false - + property var rotatingItems : [] property var currentMessage : -1 property int labelMaxWidth: 0 - + readonly property alias icon: icon readonly property alias image: image readonly property alias label: label @@ -46,7 +46,7 @@ Row { function getCurrentItem() { return (rotatingItems.length > 0 && currentMessage != -1) ? rotatingItems[currentMessage] : null; } - + function updateItems(){ image.update(); label.update(); @@ -55,10 +55,9 @@ Row { } function update(stdout) { - - var beforeSeparator = true; - var newItems = []; - + let beforeSeparator = true; + let newItems = []; + stdout.split('\n').forEach(function(line) { if (line.trim().length === 0) { return; @@ -67,14 +66,14 @@ Row { beforeSeparator = false; return; } - var parsedItem = root.parseLine(line); + let parsedItem = root.parseLine(line); if (beforeSeparator) { newItems.push(parsedItem); } else if (parsedItem.dropdown !== undefined && parsedItem.dropdown === 'false') { newItems.push(parsedItem); } }); - + if (newItems.length == 0) { currentMessage = -1; } else if (currentMessage >= newItems.length) { @@ -82,18 +81,35 @@ Row { } else if (currentMessage === -1) { currentMessage = 0; } - + rotatingItems = newItems; - - + + if (root.command == '') { label.text = 'No command configured. Go to settings...'; } else { updateItems(); } - } - PlasmaCore.IconItem { + + function rotateNext() { + if (control.rotatingItems.length > 0) { + control.currentMessage = (control.currentMessage + 1) % control.rotatingItems.length; + updateItems(); + } + } + + function rotatePrev() { + if (control.rotatingItems.length > 0) { + control.currentMessage = control.currentMessage - 1; + if (control.currentMessage == -1) { + control.currentMessage = control.rotatingItems.length - 1; + } + updateItems(); + } + } + + Kirigami.Icon { id: icon visible: false source: 'dialog-ok' @@ -101,7 +117,7 @@ Row { height: control.height * 0.75 function update() { - var item = getCurrentItem(); + let item = control.getCurrentItem(); if (item !== null) { source = (item.iconName !== undefined)? item.iconName: null } @@ -118,12 +134,12 @@ Row { anchors.fill: parent onClicked: { - var item = getCurrentItem(); + let item = control.getCurrentItem(); root.doItemClick(item); } } } - + Image { id: image fillMode: Image.PreserveAspectFit @@ -132,7 +148,7 @@ Row { height: control.height * 0.6 function update() { - var item = getCurrentItem(); + let item = control.getCurrentItem(); if (item !== null) { if (item.image !== undefined) { createImageFile(item.image, function(filename) { @@ -157,7 +173,7 @@ Row { image.source = ''; } - imageMouseArea.cursorShape = root.isClickable(item) ? Qt.PointingHandCursor: Qt.ArrowCursor; + imageMouseArea.cursorShape = root.isClickable(item) ? Qt.PointingHandCursor : Qt.ArrowCursor; } } @@ -170,7 +186,7 @@ Row { anchors.fill: parent onClicked: { - var item = getCurrentItem(); + let item = control.getCurrentItem(); root.doItemClick(item); } } @@ -179,16 +195,17 @@ Row { Item { id: labelAndButtons - implicitWidth: label.width + (mousearea.goButton.visible? mousearea.goButton.implicitWidth + 5 :0) + (mousearea.runButton.visible?mousearea.runButton.implicitWidth + 5 : 0) + implicitWidth: label.width + (mousearea.goButton.visible? mousearea.goButton.implicitWidth + 5 : 0) + (mousearea.runButton.visible?mousearea.runButton.implicitWidth + 5 : 0) implicitHeight: label.implicitHeight anchors.verticalCenter: parent.verticalCenter readonly property bool labelTooSmall: label.implicitWidth < mousearea.runButton.implicitWidth + mousearea.goButton.implicitWidth + 10 - PlasmaComponents.Label { + QQC2.Label { id: label text: 'starting...' textFormat: Text.RichText + color: Kirigami.Theme.textColor property var defaultFontFamily; property var defaultFontSize; @@ -196,8 +213,8 @@ Row { anchors.verticalCenter: parent.verticalCenter - elide: (labelMaxWidth > 0)? Text.ElideRight: Text.ElideNonde - width: (labelMaxWidth > 0)? labelMaxWidth: label.implicitWidth + elide: (control.labelMaxWidth > 0) ? Text.ElideRight : Text.ElideNone + width: (control.labelMaxWidth > 0) ? control.labelMaxWidth : label.implicitWidth Component.onCompleted: { defaultFontFamily = font.family; @@ -208,7 +225,7 @@ Row { } function update() { - var item = getCurrentItem(); + let item = control.getCurrentItem(); if (item !== null) { if (item["kargos.fa_icon"]) { text = FontAwesome[item["kargos.fa_icon"]] + " " + item.title; @@ -229,60 +246,43 @@ Row { if (item.color !== undefined) { color = item.color; } else { - color = label.defaultColor - } + color = Kirigami.Theme.textColor + } } else { text = 'starting...'; } mousearea.item = item; - var _correctedMaxWidth = label.implicitWidth + let _correctedMaxWidth = label.implicitWidth } } ItemTextMouseArea { id: mousearea buttonHidingDelay: control.buttonHidingDelay - + onEntered: { rotationTimer.running = false; } - + onExited: { rotationTimer.running = true; } onWheel: { if (wheel.angleDelta.y < 0) { - rotateNext(); + control.rotateNext(); } else if (wheel.angleDelta.y > 0) { - rotatePrev(); + control.rotatePrev(); } } } } Connections { - target: commandResultsDS - onExited: { - control.update(stdout); - } - } - - function rotateNext() { - if (control.rotatingItems.length > 0) { - control.currentMessage = (control.currentMessage + 1) % control.rotatingItems.length; - updateItems(); - } - } - - function rotatePrev() { - if (control.rotatingItems.length > 0) { - control.currentMessage = control.currentMessage - 1; - if (control.currentMessage == -1) { - control.currentMessage = control.rotatingItems.length - 1; - } - updateItems(); + target: commandResultsDS //Prevent root.commandResultsDS + onExited: (cmd, stdout) => { + control.update(stdout); } } @@ -292,7 +292,7 @@ Row { running: false repeat: true onTriggered: { - rotateNext(); + control.rotateNext(); } } } diff --git a/plasmoid/contents/ui/FullRepresentation.qml b/package/contents/ui/FullRepresentation.qml similarity index 84% rename from plasmoid/contents/ui/FullRepresentation.qml rename to package/contents/ui/FullRepresentation.qml index b602365..254fad1 100644 --- a/plasmoid/contents/ui/FullRepresentation.qml +++ b/package/contents/ui/FullRepresentation.qml @@ -18,40 +18,82 @@ * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. */ -import QtQuick 2.0 -import org.kde.plasma.components 2.0 as PlasmaComponents -import QtQuick.Controls 1.4 -import QtQuick.Layouts 1.1 -import org.kde.plasma.core 2.0 as PlasmaCore +import QtQuick 2.15 +import QtQuick.Controls as QQC2 +import QtQuick.Layouts 1.5 + +import org.kde.kirigami as Kirigami Item { id: fullRoot - + Layout.preferredWidth: plasmoid.configuration.width Layout.preferredHeight: plasmoid.configuration.height - + + function copyObject(object) { + let copy = {}; + + Object.keys(object).forEach(function(prop) { + copy[prop] = object[prop]; + }); + + return copy; + } + + function createTitleText(item) { + let titleText = '<div>'+item.title.replace(/\\n/g, '<br>').replace(/ /g, ' ') + '</div>'; + + return titleText; + + } + + function update(stdout) { + kargosModel.clear(); + + let items = root.parseItems(stdout); + + items.forEach(function(item) { + if (item.dropdown === undefined || item.dropdown === 'true') { + if (item.category !== undefined) { + if (fullRoot.categories[item.category] === undefined) { + fullRoot.categories[item.category] = {visible : false, items: [], rows: []}; + } + + if (item.category !== undefined) { + fullRoot.categories[item.category].items.push(item); + } + } + } + }); + + items.forEach(function(item) { + if (item.dropdown === undefined || item.dropdown === true) { + kargosModel.append(item); + } + }); + } + ListModel { id: kargosModel } - - Component.onCompleted: { + + Component.onCompleted: { //first update - root.update(); + root.update(); } - // Info for submenus. // This structure has information of all submenus and their visibility status. // Since on each update the listview is regenerated, we use this structure to preserve the open/closed // status of submenus property var categories: ({}); - - ListView { + + ListView { id: listView anchors.fill: parent model: kargosModel header: createHeader(); - + function createHeader() { if (!root.isConstrained()) { @@ -59,28 +101,26 @@ Item { } else { return null; } - } - + delegate: Row { - id: row height: (typeof category === 'undefined' || (fullRoot.categories[category].visible)) ? row.visibleHeight: 0 visible: (typeof category === 'undefined') ? true : (fullRoot.categories[category].visible) spacing: 2 - - PlasmaCore.IconItem { + + Kirigami.Icon { id: icon - source: (typeof iconName !== 'undefined')? iconName: '' + source: (typeof iconifiable.iconName !== 'undefined') ? iconifiable.iconName : '' anchors.verticalCenter: row.verticalCenter Component.onCompleted: { - if (typeof iconName === 'undefined') { + if (typeof iconifiable.iconName === 'undefined') { icon.width = 0 } } } - + Image { id: image anchors.verticalCenter: row.verticalCenter @@ -94,7 +134,7 @@ Item { } } } - + Component.onCompleted: { if (typeof category !== 'undefined') { fullRoot.categories[category].rows.push(row); @@ -122,14 +162,14 @@ Item { image.width = 0; } } - + Item { id: labelAndButtons width: fullRoot.width - icon.width - arrow_icon.width - image.width//some right margin height: itemLabel.implicitHeight + 10 anchors.verticalCenter: row.verticalCenter - PlasmaComponents.Label { + QQC2.Label { id: itemLabel text: fullRoot.createTitleText(model); width: labelAndButtons.width - (mousearea.goButton.width) - (mousearea.runButton.width) @@ -148,7 +188,7 @@ Item { } } } - + ItemTextMouseArea { id: mousearea item: model @@ -156,22 +196,22 @@ Item { } // expand-collapse icon - PlasmaCore.IconItem { + Kirigami.Icon { id: arrow_icon - source: (fullRoot.categories[model.title] !== undefined && fullRoot.categories[model.title].visible) ? 'arrow-down': 'arrow-up' - visible: (typeof model.category === 'undefined' && fullRoot.categories[model.title] !== undefined && fullRoot.categories[model.title].items.length > 0) ? true:false + source: (fullRoot.categories[model.title] !== undefined && fullRoot.categories[model.title].visible) ? 'arrow-down' : 'arrow-up' + visible: (typeof model.category === 'undefined' && fullRoot.categories[model.title] !== undefined && fullRoot.categories[model.title].items.length > 0) ? true : false - width: (visible) ? units.iconSizes.smallMedium : 0 - height: units.iconSizes.smallMedium + width: (visible) ? Kirigami.Units.iconSizes.smallMedium : 0 + height: Kirigami.Units.iconSizes.smallMedium MouseArea { cursorShape: Qt.PointingHandCursor anchors.fill: parent onClicked: { // In order to notify binding of fullRoot.categories property, we clone it, and then reassign it. - var newState = fullRoot.copyObject(fullRoot.categories); + let newState = fullRoot.copyObject(fullRoot.categories); newState[model.title].visible = !newState[model.title].visible - + fullRoot.categories = newState; } @@ -179,66 +219,25 @@ Item { onEntered: { // avoid flikering on each update - timer.running = false; + root.timer.running = false; } onExited: { // avoid flikering on each update - timer.running = true; + root.timer.running = true; } } - } + } } } - + Connections { target: commandResultsDS - onExited: { - update(stdout); + + // onExited: (cmd, stdout) => { + function onExited(cmd, stdout) { + fullRoot.update(stdout); } } - - function copyObject(object) { - var copy = {}; - - Object.keys(object).forEach(function(prop) { - copy[prop] = object[prop]; - - }); - - return copy; - } - - function createTitleText(item) { - var titleText = '<div>'+item.title.replace(/\\n/g, '<br>').replace(/ /g, ' ') + '</div>'; - - return titleText; - - } - function update(stdout) { - kargosModel.clear(); - - var items = parseItems(stdout); - - items.forEach(function(item) { - if (item.dropdown === undefined || item.dropdown === 'true') { - if (item.category !== undefined) { - if (fullRoot.categories[item.category] === undefined) { - fullRoot.categories[item.category] = {visible : false, items: [], rows: []}; - } - - if (item.category !== undefined) { - fullRoot.categories[item.category].items.push(item); - } - } - } - }); - - items.forEach(function(item) { - if (item.dropdown === undefined || item.dropdown === true) { - kargosModel.append(item); - } - }); - } } diff --git a/package/contents/ui/IconifiableButton.qml b/package/contents/ui/IconifiableButton.qml new file mode 100644 index 0000000..b06798c --- /dev/null +++ b/package/contents/ui/IconifiableButton.qml @@ -0,0 +1,86 @@ +/* + * + * kargos + * + * Copyright (C) 2017 - 2020 Daniel Glez-Peña + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + */ +import QtQuick 2.15 +import QtQuick.Controls as QQC2 + +import org.kde.kirigami as Kirigami + +Item { + id: iconifiable + property string text: '' + property string iconName: '' + + + width: iconMode ? controlInnerIcon.implicitWidth : controlInnerButton.implicitWidth + height: iconMode ? controlInnerIcon.implicitHeight : controlInnerButton.implicitHeight + + property bool iconMode: true + + signal clicked() + + implicitWidth: iconMode ? controlInnerIcon.implicitWidth : controlInnerButton.implicitWidth + implicitHeight: iconMode ? controlInnerIcon.implicitHeight : controlInnerButton.implicitHeight + + + QQC2.Button { + id: controlInnerButton + visible: !iconifiable.iconMode + icon.name: iconifiable.iconName + anchors.fill: parent + + text: iconifiable.text + QQC2.ToolTip.text: text + QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay + QQC2.ToolTip.visible: hovered + + onClicked: iconifiable.clicked() + } + + Kirigami.Icon { + id: controlInnerIcon + visible: iconifiable.iconMode + source: iconifiable.iconName + //anchors.fill: parent + anchors.topMargin: 5 + anchors.bottomMargin: 5 + + + width: controlInnerIcon.implicitWidth * 0.95 + + // opacity: 0.5 + MouseArea { + /*hoverEnabled: true + + onEntered: { + controlInnerIcon.opacity = 1.0 + } + + onExited: { + controlInnerIcon.opacity = 0.5 + }*/ + + anchors.fill: parent + + onClicked: iconifiable.clicked() + } + + } +} diff --git a/plasmoid/contents/ui/ItemTextMouseArea.qml b/package/contents/ui/ItemTextMouseArea.qml similarity index 71% rename from plasmoid/contents/ui/ItemTextMouseArea.qml rename to package/contents/ui/ItemTextMouseArea.qml index 8cf7bb5..b0c697a 100644 --- a/plasmoid/contents/ui/ItemTextMouseArea.qml +++ b/package/contents/ui/ItemTextMouseArea.qml @@ -18,23 +18,17 @@ * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. */ -import QtQuick 2.0 -import org.kde.plasma.components 2.0 as PlasmaComponents -import QtQuick.Controls 1.4 -import QtQuick.Layouts 1.1 -import org.kde.plasma.core 2.0 as PlasmaCore - +import QtQuick 2.15 MouseArea { - id: mousearea anchors.fill: parent propagateComposedEvents: true hoverEnabled: true - cursorShape: hasClickAction ? Qt.PointingHandCursor: Qt.ArrowCursor + cursorShape: hasClickAction ? Qt.PointingHandCursor : Qt.ArrowCursor - property bool hasClickAction: isClickable(item) + property bool hasClickAction: root.isClickable(item) property var item: null; property bool buttonHidingDelay: false @@ -52,36 +46,35 @@ MouseArea { mouse.accepted = false } - + onEntered: { if (buttonHidingDelay) buttonHidder.stop(); buttonsShouldHide = false; if (goButton.visible || runButton.visible) { // avoid buttons to disappear on each update - timer.running = false; + root.timer.running = false; } } - + onExited: { if (!buttonsAlwaysVisible) { if (buttonHidingDelay) buttonHidder.restart(); else hideButtons(); } - timer.running = true; + root.timer.running = true; } - + function reset() { if (!buttonsAlwaysVisible) { - buttonsShouldHide = true + mousearea.buttonsShouldHide = true } } function hideButtons() { buttonsShouldHide = true } - // workaround. When the compact representation is used (kargos in a panel) // the buttons disappear just before being clicked. This is caused by the @@ -91,9 +84,9 @@ MouseArea { // capture the click event Timer { id: buttonHidder - interval: 1000 + interval: 1000 onTriggered: { - buttonsShouldHide = true + mousearea.buttonsShouldHide = true } } @@ -101,52 +94,54 @@ MouseArea { id: goButton iconMode: mousearea.iconMode - text: visible? 'Go to: '+item.href : '' + text: visible ? 'Go to: ' + mousearea.item.href : '' iconName: 'edit-link' anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter - visible: item !== null && (buttonsAlwaysVisible || !buttonsShouldHide) && (typeof item.href !== 'undefined') && (typeof item.onclick === 'undefined' || item.onclick !== 'href') + visible: mousearea.item !== null && + (mousearea.buttonsAlwaysVisible || !mousearea.buttonsShouldHide) && + (typeof mousearea.item.href !== 'undefined') && + (typeof item.onclick === 'undefined' || item.onclick !== 'href') onClicked: { - - if (item !== null && item.href !== undefined) { - executable.exec('xdg-open '+item.href); + if (mousearea.item !== null && mousearea.item.href !== undefined) { + executable.exec('xdg-open ' + mousearea.item.href); } doRefreshIfNeeded(item); - } - } IconifiableButton { id: runButton iconMode: mousearea.iconMode - text: visible? 'Run: '+item.bash : '' + text: visible ? 'Run: ' + mousearea.item.bash : '' iconName: 'run-build' anchors.right: goButton.visible? goButton.left: parent.right anchors.rightMargin: goButton.visible? (mousearea.iconMode ? 0 : 2): 0 anchors.verticalCenter: parent.verticalCenter - visible: item!==null && (buttonsAlwaysVisible || !buttonsShouldHide) && (typeof item.bash !== 'undefined') && (typeof item.onclick === 'undefined' || item.onclick !== 'bash') + visible: mousearea.item !== null && + (mousearea.buttonsAlwaysVisible || !mousearea.buttonsShouldHide) && + (typeof mousearea.item.bash !== 'undefined') && + (typeof item.onclick === 'undefined' || item.onclick !== 'bash') onClicked: { - if (item !== null && item.bash !== undefined) { + if (mousearea.item !== null && mousearea.item.bash !== undefined) { if (item.terminal !== undefined && item.terminal === 'true') { executable.exec('konsole --noclose -e '+item.bash, function() { root.doRefreshIfNeeded(item); - }); } else { executable.exec(item.bash, function() { - root.doRefreshIfNeeded(item); + root.doRefreshIfNeeded(item); }); } } - + } } -} \ No newline at end of file +} diff --git a/package/contents/ui/config/ConfigAppearance.qml b/package/contents/ui/config/ConfigAppearance.qml new file mode 100644 index 0000000..3670540 --- /dev/null +++ b/package/contents/ui/config/ConfigAppearance.qml @@ -0,0 +1,90 @@ +import QtQuick 2.15 +import QtQuick.Controls as QQC2 +import QtQuick.Layouts 1.5 + +import org.kde.kirigami as Kirigami +import org.kde.plasma.core as PlasmaCore +import org.kde.plasma.extras 2.0 as PlasmaExtras + +Kirigami.ScrollablePage { + id: appearancePage + + property alias cfg_width: width.value + property alias cfg_compactLabelMaxWidth: compactLabelMaxWidth.value + property alias cfg_height: height.value + property alias cfg_d_ArrowNeverVisible: d_ArrowNeverVisible.checked + property alias cfg_d_ArrowAlwaysVisible: d_ArrowAlwaysVisible.checked + property alias cfg_d_ArrowVisibleAsNeeded: d_ArrowVisibleAsNeeded.checked + + Kirigami.FormLayout { + QQC2.SpinBox { + Kirigami.FormData.label: i18n("Preferred width:") + + id: width + from: 0 + to: 10000 + + valueFromText: function(text, locale) { + return parseInt(text); + } + textFromValue: function(value, locale) { + return i18np("%1 px.", "%1 pixels", value); + } + } + + QQC2.SpinBox { + Kirigami.FormData.label: i18n("Preferred height:") + + id: height + from: 0 + to: 10000 + + valueFromText: function(text, locale) { + return parseInt(text); + } + textFromValue: function(value, locale) { + return i18np("%1 px.", "%1 pixels", value); + } + } + + Item { + Kirigami.FormData.isSection: true + } + + RowLayout { + Kirigami.FormData.label: i18n("Compact (on panel):") + + QQC2.SpinBox { + id: compactLabelMaxWidth + from: 0 + to: 10000 + } + + QQC2.Label { + text: i18n("Fixed text width (0: unlimited)") + } + } + + Item { + Kirigami.FormData.isSection: true + } + + ColumnLayout { + Kirigami.FormData.label: i18n("Dropdown arrow visible option:") + + QQC2.RadioButton { + id: d_ArrowAlwaysVisible + text: i18n('Always visible') + } + QQC2.RadioButton { + id: d_ArrowVisibleAsNeeded + text: i18n('Visible as needed') + } + QQC2.RadioButton { + id: d_ArrowNeverVisible + text: i18n('Never visible') + } + } + } + +} diff --git a/package/contents/ui/config/ConfigGeneral.qml b/package/contents/ui/config/ConfigGeneral.qml new file mode 100644 index 0000000..708c8c6 --- /dev/null +++ b/package/contents/ui/config/ConfigGeneral.qml @@ -0,0 +1,89 @@ +import QtQuick 2.15 +import QtQuick.Controls as QQC2 +import QtQuick.Layouts 1.5 + +import org.kde.kirigami as Kirigami +import org.kde.plasma.core as PlasmaCore +import org.kde.plasma.extras 2.0 as PlasmaExtras + +Kirigami.ScrollablePage { + id: generalPage + Layout.fillWidth: true + + property alias cfg_command: command.text + property alias cfg_interval: interval.value + property alias cfg_rotation: rotation.value + + readonly property real maxWidth: 0.5 * parent.width + + Kirigami.FormLayout { + QQC2.TextField { + Kirigami.FormData.label: i18n("Command or executable path:") + + Layout.minimumWidth: generalPage.maxWidth + Layout.maximumWidth: Layout.minimumWidth + + id: command + } + + QQC2.Label { + Layout.minimumWidth: interval.width + Layout.preferredWidth: generalPage.maxWidth + Layout.maximumWidth: Layout.preferredWidth + + wrapMode: Text.WordWrap + text: i18n("The output of this command will be parsed following the Argos/Bitbar convention") + } + + Item { + Kirigami.FormData.isSection: true + } + + QQC2.SpinBox { + Kirigami.FormData.label: i18n("Interval:") + id: interval + from: 0 + to: 3600 + + valueFromText: function(text, locale) { + return parseInt(text); + } + textFromValue: function(value, locale) { + return i18np("%1 second", "%1 seconds", value); + } + } + + QQC2.Label { + Layout.minimumWidth: interval.width + Layout.preferredWidth: generalPage.maxWidth + Layout.maximumWidth: Layout.preferredWidth + + wrapMode: Text.WordWrap + text: i18n("Ignored if the previous property is an executable with the interval on its name. ex: myplugin.1s.sh") + } + + Item { + Kirigami.FormData.isSection: true + } + + QQC2.SpinBox { + Kirigami.FormData.label: i18n("Rotation delay:") + + id: rotation + from: 0 + to: 60 + + valueFromText: function(text, locale) { + return parseInt(text); + } + textFromValue: function(value, locale) { + return i18np("%1 second", "%1 seconds", value); + } + } + + QQC2.Label { + text: i18n("Rotation interval of the lines before the \"---\"") + } + } + +} diff --git a/plasmoid/contents/ui/main.qml b/package/contents/ui/main.qml similarity index 72% rename from plasmoid/contents/ui/main.qml rename to package/contents/ui/main.qml index 3210027..3455d7f 100644 --- a/plasmoid/contents/ui/main.qml +++ b/package/contents/ui/main.qml @@ -1,45 +1,43 @@ /* - * + * * kargos - * + * * Copyright (C) 2017 - 2020 Daniel Glez-Peña - * + * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. + * <http://www.gnu.org/licenses/gpl-3.0.html> */ -import QtQuick 2.0 -import QtQuick.Layouts 1.1 -import QtQuick.Controls 1.4 +import QtQuick 2.15 -import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.plasmoid 2.0 +import org.kde.plasma.core as PlasmaCore +import org.kde.plasma.plasma5support as Plasma5Support +import org.kde.plasma.plasmoid import org.kde.kquickcontrolsaddons 2.0 -Item { +PlasmoidItem { id: root - + // status bar only show icon, no words if constrained - Plasmoid.preferredRepresentation: isConstrained() ? Plasmoid.compactRepresentation : Plasmoid.fullRepresentation - //Plasmoid.preferredRepresentation: Plasmoid.compactRepresentation + preferredRepresentation: isConstrained() ? Plasmoid.compactRepresentation : Plasmoid.fullRepresentation - Plasmoid.compactRepresentation: CompactRepresentation {} - Plasmoid.fullRepresentation: FullRepresentation {} - - property int interval; + compactRepresentation: CompactRepresentation {} + fullRepresentation: FullRepresentation {} + + property int interval; property int dropdownItemsCount: -1; - + property var imagesIndex: ({}) + function isConstrained() { return (plasmoid.formFactor == PlasmaCore.Types.Vertical || plasmoid.formFactor == PlasmaCore.Types.Horizontal); } @@ -50,31 +48,24 @@ Item { update(); } - Component.onCompleted: { - timer.running = true; + Component.onCompleted: { + timer.running = true; } - + function update() { - if (command === '') { - plasmoid.setConfigurationRequired(true, 'You need to provide a command'); - - } else { - plasmoid.setConfigurationRequired(false); - } //dropdownItemsCount = 0; commandResultsDS.exec(command); updateInterval(); } - + function updateInterval() { - var commandTokens = command.split('.'); - + let commandTokens = command.split('.'); + if (commandTokens.length >= 3) { - var intervalToken = commandTokens[commandTokens.length - 2]; //ex: 1s - - + let intervalToken = commandTokens[commandTokens.length - 2]; //ex: 1s + if (/^[0-9]+[smhd]$/.test(intervalToken)) { - var lastChar = intervalToken.charAt(intervalToken.length-1); + let lastChar = intervalToken.charAt(intervalToken.length-1); switch (lastChar) { case 's': timer.interval = parseInt(intervalToken.slice(0, -1)) * 1000; break; case 'm': timer.interval = parseInt(intervalToken.slice(0, -1)) * 1000 * 60; break; @@ -86,19 +77,18 @@ Item { timer.interval = plasmoid.configuration.interval * 1000 } } - - + function parseLine(line, currentCategory) { - var parsedObject = {title: line}; - + let parsedObject = {title: line}; + if (line.indexOf('|') != -1) { parsedObject.title = line.split('|')[0].replace(/\s+$/, ''); - - var attributesToken = line.split('|')[1].trim(); - + + let attributesToken = line.split('|')[1].trim(); + // replace \' to string __ESCAPED_QUOTE__ attributesToken = attributesToken.replace(/\\'/g, '__ESCAPED_QUOTE__'); - var tokens = attributesToken.match(/([^\s']+=[^\s']+|[^\s']+='[^']*')+/g) + let tokens = attributesToken.match(/([^\s']+=[^\s']+|[^\s']+='[^']*')+/g) tokens.forEach(function(attribute_value) { if (attribute_value.indexOf('=')!=-1) { parsedObject[attribute_value.split('=')[0]] = attribute_value.substring(attribute_value.indexOf('=') + 1).replace(/'/g, '').replace(/__ESCAPED_QUOTE__/g, "'"); @@ -117,40 +107,35 @@ Item { } function parseItems(stdout) { - var items = []; - var currentCategory = null; - - var menuGroupsStrings = stdout.split("---"); - - var totalItems = 0; + let items = []; + let currentCategory = null; + let menuGroupsStrings = stdout.split("---"); + let totalItems = 0; + if (menuGroupsStrings.length > 1) { - - for (var i = 1; i < menuGroupsStrings.length; i++) { - var groupString = menuGroupsStrings[i]; - - var groupTokens = groupString.trim().split('\n'); - groupTokens.forEach(function (groupToken) { - var parsedItem = root.parseLine(groupToken, currentCategory); + for (let i = 1; i < menuGroupsStrings.length; i++) { + let groupString = menuGroupsStrings[i]; + let groupTokens = groupString.trim().split('\n'); + groupTokens.forEach(function (groupToken) { + let parsedItem = root.parseLine(groupToken, currentCategory); if (parsedItem.category === undefined) { currentCategory = parsedItem.title; } items.push(parsedItem); totalItems ++; - - }); - } + }); + } } return items; } - + function doRefreshIfNeeded(item) { if (item !== null && item.refresh == 'true') { root.update(); } } - + function doItemClick(item) { - if (item !== null && item.href !== undefined && item.onclick === 'href') { executable.exec('xdg-open '+item.href); } @@ -169,77 +154,74 @@ Item { doRefreshIfNeeded(item); } } - + function isClickable(item) { return item !==null && (item.refresh == 'true' || item.onclick == 'href' || item.onclick == 'bash'); } - + + function createImageFile(base64, callback) { + let filename = imagesIndex[base64]; + if (filename === undefined) { + executable.exec('/bin/bash -c \'file=$(mktemp /tmp/kargos.image.XXXXXX); echo "'+base64+'" | base64 -d > $file; echo -n $file\'', function(filename) { + imagesIndex[base64] = filename; + callback(filename); + }); + } else { + callback(filename); + } + + } + // DataSource for the user command execution results - PlasmaCore.DataSource { + Plasma5Support.DataSource { id: commandResultsDS engine: "executable" connectedSources: [] - onNewData: { - var stdout = data["stdout"] + onNewData: (sourceName, data) => { + let stdout = data["stdout"] exited(sourceName, stdout) disconnectSource(sourceName) // cmd finished } - + function exec(cmd) { - connectSource(cmd) + connectSource(cmd) } signal exited(string sourceName, string stdout) } - + // Generic DataSource to execute internal kargo commands (like running bash // attribute or open the browser with href) - PlasmaCore.DataSource { + Plasma5Support.DataSource { id: executable engine: "executable" connectedSources: [] property var callbacks: ({}) - onNewData: { - var stdout = data["stdout"] - + onNewData: (sourceName, data) => { + let stdout = data["stdout"] + if (callbacks[sourceName] !== undefined) { callbacks[sourceName](stdout); } - + exited(sourceName, stdout) disconnectSource(sourceName) // cmd finished } - + function exec(cmd, onNewDataCallback) { if (onNewDataCallback !== undefined){ callbacks[cmd] = onNewDataCallback } connectSource(cmd) - } signal exited(string sourceName, string stdout) - } - - property var imagesIndex: ({}) - - function createImageFile(base64, callback) { - var filename = imagesIndex[base64]; - if (filename === undefined) { - executable.exec('/bin/bash -c \'file=$(mktemp /tmp/kargos.image.XXXXXX); echo "'+base64+'" | base64 -d > $file; echo -n $file\'', function(filename) { - imagesIndex[base64] = filename; - callback(filename); - }); - } else { - callback(filename); - } - - } - + Connections { target: commandResultsDS - onExited: { - dropdownItemsCount = parseItems(stdout).filter( + + function onExited(cmd, stdout) { + dropdownItemsCount = root.parseItems(stdout).filter( function(item) { return item.dropdown === undefined || item.dropdown !== 'false' }).length; @@ -257,9 +239,9 @@ Item { // So, for development we can do: // $ plasmoidviewer -a ./plasmoid "echo hello world" // and this will set the command as "echo hello world". - onExternalData: function (mimeType, data) { + onExternalData: (mimeType, data) => { console.debug("Got externalData: " + data); - if (!command) { + if (!root.command) { command = data; } } @@ -270,6 +252,6 @@ Item { interval: plasmoid.configuration.interval * 1000 running: false repeat: true - onTriggered: update() - } + onTriggered: root.update() + } } diff --git a/plasmoid/contents/vendor/FontAwesome/FontAwesome.qml b/package/contents/vendor/FontAwesome/FontAwesome.qml similarity index 99% rename from plasmoid/contents/vendor/FontAwesome/FontAwesome.qml rename to package/contents/vendor/FontAwesome/FontAwesome.qml index 6d978cf..efc13ba 100644 --- a/plasmoid/contents/vendor/FontAwesome/FontAwesome.qml +++ b/package/contents/vendor/FontAwesome/FontAwesome.qml @@ -1,5 +1,5 @@ pragma Singleton -import QtQuick 2.0 +import QtQuick 2.15 Object { diff --git a/plasmoid/contents/vendor/FontAwesome/Object.qml b/package/contents/vendor/FontAwesome/Object.qml similarity index 87% rename from plasmoid/contents/vendor/FontAwesome/Object.qml rename to package/contents/vendor/FontAwesome/Object.qml index 3e2c6cf..e250f7f 100644 --- a/plasmoid/contents/vendor/FontAwesome/Object.qml +++ b/package/contents/vendor/FontAwesome/Object.qml @@ -1,4 +1,4 @@ -import QtQuick 2.0 +import QtQuick 2.15 QtObject { id: object diff --git a/plasmoid/contents/vendor/FontAwesome/README.txt b/package/contents/vendor/FontAwesome/README.txt similarity index 100% rename from plasmoid/contents/vendor/FontAwesome/README.txt rename to package/contents/vendor/FontAwesome/README.txt diff --git a/plasmoid/contents/vendor/FontAwesome/fontawesome-webfont.ttf b/package/contents/vendor/FontAwesome/fontawesome-webfont.ttf similarity index 100% rename from plasmoid/contents/vendor/FontAwesome/fontawesome-webfont.ttf rename to package/contents/vendor/FontAwesome/fontawesome-webfont.ttf diff --git a/plasmoid/contents/vendor/FontAwesome/qmldir b/package/contents/vendor/FontAwesome/qmldir similarity index 100% rename from plasmoid/contents/vendor/FontAwesome/qmldir rename to package/contents/vendor/FontAwesome/qmldir diff --git a/package/metadata.json b/package/metadata.json new file mode 100644 index 0000000..fb1e57f --- /dev/null +++ b/package/metadata.json @@ -0,0 +1,24 @@ +{ + "KPlugin": { + "Authors": [ + { + "Email": "lipido@gmail.com", + "Name": "lipido" + } + ], + "Category": "Windows and Tasks", + "Description": "Argos port to KDE Plasma", + "Icon": "utilities-system-monitor", + "Id": "org.kde.kargos", + "License": "GPL", + "Name": "kargos", + "ServiceTypes": [ + "Plasma/Applet" + ], + "Version": "0.6.0", + "Website": "https://github.com/lipido/kargos" + }, + "X-KDE-ParentApp": "", + "X-Plasma-RemoteLocation": "", + "X-Plasma-API-Minimum-Version": "6.0" +} diff --git a/plasmoid/contents/ui/IconifiableButton.qml b/plasmoid/contents/ui/IconifiableButton.qml deleted file mode 100644 index 6f7ad64..0000000 --- a/plasmoid/contents/ui/IconifiableButton.qml +++ /dev/null @@ -1,84 +0,0 @@ -/* - * - * kargos - * - * Copyright (C) 2017 - 2020 Daniel Glez-Peña - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - */ -import QtQuick 2.0 -import org.kde.plasma.components 2.0 as PlasmaComponents -import QtQuick.Controls 1.4 -import QtQuick.Layouts 1.1 -import org.kde.plasma.core 2.0 as PlasmaCore - -Item { - id: control - property string text: '' - property string iconName: '' - - - width: iconMode ? controlInnerIcon.implicitWidth: controlInnerButton.implicitWidth - height: iconMode ? controlInnerIcon.implicitHeight: controlInnerButton.implicitHeight - - property bool iconMode: true - - signal clicked() - - implicitWidth: iconMode ? controlInnerIcon.implicitWidth: controlInnerButton.implicitWidth - implicitHeight: iconMode ? controlInnerIcon.implicitHeight: controlInnerButton.implicitHeight - - - Button { - id: controlInnerButton - visible: !control.iconMode - tooltip: control.text - iconName: control.iconName - anchors.fill: parent - - onClicked: control.clicked() - } - - PlasmaCore.IconItem { - id: controlInnerIcon - visible: control.iconMode - source: control.iconName - //anchors.fill: parent - anchors.topMargin: 5 - anchors.bottomMargin: 5 - - - width: controlInnerIcon.implicitWidth * 0.95 - - // opacity: 0.5 - MouseArea { - - /*hoverEnabled: true - - onEntered: { - controlInnerIcon.opacity = 1.0 - } - - onExited: { - controlInnerIcon.opacity = 0.5 - }*/ - - anchors.fill: parent - - onClicked: control.clicked() - } - - } - } \ No newline at end of file diff --git a/plasmoid/contents/ui/config/ConfigAppearance.qml b/plasmoid/contents/ui/config/ConfigAppearance.qml deleted file mode 100644 index 830603a..0000000 --- a/plasmoid/contents/ui/config/ConfigAppearance.qml +++ /dev/null @@ -1,77 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Controls 1.0 -import QtQuick.Layouts 1.0 -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.plasma.extras 2.0 as PlasmaExtras - -ConfigPage { - id: page - - property alias cfg_width: width.value - property alias cfg_compactLabelMaxWidth: compactLabelMaxWidth.value - property alias cfg_height: height.value - property alias cfg_d_ArrowNeverVisible: d_ArrowNeverVisible.checked - property alias cfg_d_ArrowAlwaysVisible: d_ArrowAlwaysVisible.checked - property alias cfg_d_ArrowVisibleAsNeeded: d_ArrowVisibleAsNeeded.checked - - - ConfigSection { - label: i18n("Preferred width in px") - - SpinBox { - id: width - Layout.fillWidth: true - maximumValue: 10000 - } - } - - ConfigSection { - label: i18n("Preferred height in px") - - SpinBox { - id: height - Layout.fillWidth: true - maximumValue: 10000 - } - } - - ConfigSection { - label: i18n("Compact (on panel) fixed text width (0: unlimited)") - - SpinBox { - id: compactLabelMaxWidth - Layout.fillWidth: true - maximumValue: 10000 - } - } - - ConfigSection { - - GroupBox { - title: i18n('Dropdown arrow visible option: ') - anchors.left: parent.left - Layout.columnSpan: 2 - - ColumnLayout { - ExclusiveGroup { id: dropdownArrowVisibleGroup } - RadioButton { - id: d_ArrowAlwaysVisible - text: i18n('Always visible') - exclusiveGroup: dropdownArrowVisibleGroup - } - RadioButton { - id: d_ArrowVisibleAsNeeded - text: i18n('Visible as needed') - exclusiveGroup: dropdownArrowVisibleGroup - } - RadioButton { - id: d_ArrowNeverVisible - text: i18n('Never visible') - exclusiveGroup: dropdownArrowVisibleGroup - } - } - } - - } -} diff --git a/plasmoid/contents/ui/config/ConfigGeneral.qml b/plasmoid/contents/ui/config/ConfigGeneral.qml deleted file mode 100644 index 9550d1c..0000000 --- a/plasmoid/contents/ui/config/ConfigGeneral.qml +++ /dev/null @@ -1,43 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Controls 1.0 -import QtQuick.Layouts 1.0 -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents -import org.kde.plasma.extras 2.0 as PlasmaExtras - -ConfigPage { - id: page - - property alias cfg_command: command.text - property alias cfg_interval: interval.value - property alias cfg_rotation: rotation.value - - ConfigSection { - label: i18n("Command line or executable path. The output of this command will be parsed following the Argos/Bitbar convention") - - TextField { - id: command - Layout.fillWidth: true - } - } - - ConfigSection { - label: i18n("Interval in seconds (ignored if the previous property is an executable with the interval on its name. ex: myplugin.1s.sh)") - - SpinBox { - id: interval - Layout.fillWidth: true - maximumValue: 99999 - } - } - - ConfigSection { - label: i18n("Rotation delay in seconds (rotation interval of the lines before the ---)") - - SpinBox { - id: rotation - Layout.fillWidth: true - maximumValue: 60 - } - } -} diff --git a/plasmoid/contents/ui/config/ConfigPage.qml b/plasmoid/contents/ui/config/ConfigPage.qml deleted file mode 100755 index 95a52b1..0000000 --- a/plasmoid/contents/ui/config/ConfigPage.qml +++ /dev/null @@ -1,24 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Layouts 1.0 - -ColumnLayout { - id: page - Layout.fillWidth: true - default property alias _contentChildren: content.data - - - ColumnLayout { - id: content - Layout.fillWidth: true - Layout.alignment: Qt.AlignTop - - // Workaround for crash when using default on a Layout. - // https://bugreports.qt.io/browse/QTBUG-52490 - // Still affecting Qt 5.7.0 - Component.onDestruction: { - while (children.length > 0) { - children[children.length - 1].parent = page; - } - } - } -} diff --git a/plasmoid/contents/ui/config/ConfigSection.qml b/plasmoid/contents/ui/config/ConfigSection.qml deleted file mode 100755 index fdf7038..0000000 --- a/plasmoid/contents/ui/config/ConfigSection.qml +++ /dev/null @@ -1,54 +0,0 @@ -import QtQuick 2.0 -import QtQuick.Controls 1.0 -import QtQuick.Layouts 1.0 - -// Alternative to GroupBox for when we want the title to always be left aligned. -Rectangle { - id: control - Layout.fillWidth: true - default property alias _contentChildren: content.children - property string label: "" - - color: "#0c000000" - border.width: 2 - border.color: "#10000000" - // radius: 5 - property int padding: 8 - height: childrenRect.height + padding + padding - property alias spacing: content.spacing - - Label { - id: title - visible: control.label - text: control.label - anchors.leftMargin: padding - // anchors.topMargin: padding - anchors.left: parent.left - anchors.top: parent.top - anchors.right: parent.right - height: visible ? implicitHeight : padding - Layout.fillWidth: true - wrapMode: Text.WordWrap - width: control.width - - } - - ColumnLayout { - id: content - anchors.top: title.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.margins: padding - // spacing: 0 - // height: childrenRect.height - - // Workaround for crash when using default on a Layout. - // https://bugreports.qt.io/browse/QTBUG-52490 - // Still affecting Qt 5.7.0 - Component.onDestruction: { - while (children.length > 0) { - children[children.length - 1].parent = control; - } - } - } -} diff --git a/plasmoid/metadata.desktop b/plasmoid/metadata.desktop deleted file mode 100644 index 4c1edc3..0000000 --- a/plasmoid/metadata.desktop +++ /dev/null @@ -1,19 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Name=kargos -Comment=Argos port to KDE Plasma -Type=Service - -X-KDE-ParentApp= -X-KDE-PluginInfo-Author=lipido -X-KDE-PluginInfo-Email=lipido@gmail.com -X-KDE-PluginInfo-License=GPL -X-KDE-PluginInfo-Name=org.kde.kargos -X-KDE-PluginInfo-Version=0.6.0 -X-KDE-PluginInfo-Website=https://github.com/lipido/kargos -X-KDE-ServiceTypes=Plasma/Applet -X-Plasma-API=declarativeappletscript -X-Plasma-MainScript=ui/main.qml -X-Plasma-RemoteLocation= -X-KDE-PluginInfo-Category=Windows and Tasks -
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor