From 9457abf76e5aedbc54cd479724fb669db7867139 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Sun, 25 Apr 2021 14:58:49 +0200 Subject: [PATCH 1/4] Add button to add events --- .../package/contents/ui/CalendarView.qml | 28 +++++++++++++------ applets/digital-clock/plugin/CMakeLists.txt | 2 ++ .../plugin/applicationintegration.cpp | 22 +++++++++++++++ .../plugin/applicationintegration.h | 18 ++++++++++++ .../plugin/digitalclockplugin.cpp | 5 ++++ 5 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 applets/digital-clock/plugin/applicationintegration.cpp create mode 100644 applets/digital-clock/plugin/applicationintegration.h diff --git a/applets/digital-clock/package/contents/ui/CalendarView.qml b/applets/digital-clock/package/contents/ui/CalendarView.qml index 8bf93401f..2d18d7ffa 100644 --- a/applets/digital-clock/package/contents/ui/CalendarView.qml +++ b/applets/digital-clock/package/contents/ui/CalendarView.qml @@ -25,6 +25,7 @@ import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.calendar 2.0 as PlasmaCalendar import org.kde.plasma.components 3.0 as PlasmaComponents3 import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.plasma.private.digitalclock 1.0 // Top-level layout containing: // - Left column with world clock and agenda view @@ -80,18 +81,27 @@ PlasmaExtras.Representation { text: monthView.currentDate.toLocaleDateString(Qt.locale(), Locale.LongFormat) } } - // Heading text - PlasmaExtras.Heading { - visible: agenda.visible + RowLayout { + // Heading text + PlasmaExtras.Heading { + visible: agenda.visible - Layout.fillWidth: true - Layout.leftMargin: calendar.paddings + Layout.fillWidth: true + Layout.leftMargin: calendar.paddings - level: 2 + level: 2 - text: i18n("Events") - maximumLineCount: 1 - elide: Text.ElideRight + text: i18n("Events") + maximumLineCount: 1 + elide: Text.ElideRight + } + PlasmaComponents3.ToolButton { + visible: agenda.visible && ApplicationIntegration.korganizerInstalled + text: i18nc("Add event", "Add") + Layout.rightMargin: calendar.paddings + icon.name: "list-add" + onClicked: ApplicationIntegration.launchKorganizer() + } } } diff --git a/applets/digital-clock/plugin/CMakeLists.txt b/applets/digital-clock/plugin/CMakeLists.txt index 332bde8de..114af3262 100644 --- a/applets/digital-clock/plugin/CMakeLists.txt +++ b/applets/digital-clock/plugin/CMakeLists.txt @@ -12,6 +12,7 @@ set(digitalclockplugin_SRCS timezonesi18n.cpp digitalclockplugin.cpp clipboardmenu.cpp + applicationintegration.cpp ) add_library(digitalclockplugin SHARED ${digitalclockplugin_SRCS}) @@ -19,6 +20,7 @@ target_link_libraries(digitalclockplugin Qt::Core Qt::Qml Qt::Widgets # for QAction... KF5::CoreAddons + KF5::KIOWidgets KF5::I18n) install(TARGETS digitalclockplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/digitalclock) diff --git a/applets/digital-clock/plugin/applicationintegration.cpp b/applets/digital-clock/plugin/applicationintegration.cpp new file mode 100644 index 000000000..2c413d7b9 --- /dev/null +++ b/applets/digital-clock/plugin/applicationintegration.cpp @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: 2021 Carl Schwan +// SPDX-Licence-Identifier: SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL + +#include "applicationintegration.h" +#include +#include + +ApplicationIntegration::ApplicationIntegration(QObject *parent) + : QObject(parent) +{ +} + +bool ApplicationIntegration::korganizerInstalled() const +{ + return KService::serviceByDesktopName(QStringLiteral("org.kde.korganizer")) != nullptr; +} + +void ApplicationIntegration::launchKorganizer() const +{ + auto job = new KIO::CommandLauncherJob("korganizer"); + job->start(); +} diff --git a/applets/digital-clock/plugin/applicationintegration.h b/applets/digital-clock/plugin/applicationintegration.h new file mode 100644 index 000000000..f3c5e8dcb --- /dev/null +++ b/applets/digital-clock/plugin/applicationintegration.h @@ -0,0 +1,18 @@ +// SPDX-FileCopyrightText: 2021 Carl Schwan +// SPDX-Licence-Identifier: SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL + +#pragma once +#include + +class ApplicationIntegration : public QObject +{ + Q_OBJECT + Q_PROPERTY(bool korganizerInstalled READ korganizerInstalled CONSTANT) + +public: + explicit ApplicationIntegration(QObject *parent = nullptr); + ~ApplicationIntegration() = default; + + bool korganizerInstalled() const; + Q_INVOKABLE void launchKorganizer() const; +}; diff --git a/applets/digital-clock/plugin/digitalclockplugin.cpp b/applets/digital-clock/plugin/digitalclockplugin.cpp index 6d70750fa..1df035952 100644 --- a/applets/digital-clock/plugin/digitalclockplugin.cpp +++ b/applets/digital-clock/plugin/digitalclockplugin.cpp @@ -17,6 +17,7 @@ */ #include "digitalclockplugin.h" +#include "applicationintegration.h" #include "clipboardmenu.h" #include "timezonemodel.h" #include "timezonesi18n.h" @@ -48,4 +49,8 @@ void DigitalClockPlugin::registerTypes(const char *uri) qmlRegisterSingletonType(uri, 1, 0, "TimezonesI18n", timezonesi18n_singletontype_provider); qmlRegisterSingletonType(uri, 1, 0, "ClipboardMenu", clipboardMenu_singletontype_provider); + + qmlRegisterSingletonType(uri, 1, 0, "ApplicationIntegration", [](QQmlEngine *engine, QJSEngine *scriptEngine) { + return new ApplicationIntegration(); + }); } -- GitLab From 16b7a24eb3fdfedcccfc2c01b014adbccc4f8bed Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Sun, 25 Apr 2021 16:11:18 +0200 Subject: [PATCH 2/4] Port to ApplicationLauncherJob --- applets/digital-clock/plugin/CMakeLists.txt | 16 ++++++++++------ .../plugin/applicationintegration.cpp | 11 +++++++---- .../plugin/applicationintegration.h | 4 ++++ .../digital-clock/plugin/digitalclockplugin.cpp | 2 ++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/applets/digital-clock/plugin/CMakeLists.txt b/applets/digital-clock/plugin/CMakeLists.txt index 114af3262..1d4f54f9c 100644 --- a/applets/digital-clock/plugin/CMakeLists.txt +++ b/applets/digital-clock/plugin/CMakeLists.txt @@ -16,12 +16,16 @@ set(digitalclockplugin_SRCS ) add_library(digitalclockplugin SHARED ${digitalclockplugin_SRCS}) -target_link_libraries(digitalclockplugin Qt::Core - Qt::Qml - Qt::Widgets # for QAction... - KF5::CoreAddons - KF5::KIOWidgets - KF5::I18n) +target_link_libraries(digitalclockplugin + PUBLIC + Qt::Core + Qt::Qml + Qt::Widgets # for QAction... + KF5::CoreAddons + KF5::KIOWidgets + KF5::KIOCore + KF5::KIOGui + KF5::I18n) install(TARGETS digitalclockplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/digitalclock) diff --git a/applets/digital-clock/plugin/applicationintegration.cpp b/applets/digital-clock/plugin/applicationintegration.cpp index 2c413d7b9..faac9b0d0 100644 --- a/applets/digital-clock/plugin/applicationintegration.cpp +++ b/applets/digital-clock/plugin/applicationintegration.cpp @@ -2,21 +2,24 @@ // SPDX-Licence-Identifier: SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL #include "applicationintegration.h" -#include -#include +#include ApplicationIntegration::ApplicationIntegration(QObject *parent) : QObject(parent) + , m_korganizerService(KService::serviceByDesktopName(QStringLiteral("org.kde.korganizer"))) { } bool ApplicationIntegration::korganizerInstalled() const { - return KService::serviceByDesktopName(QStringLiteral("org.kde.korganizer")) != nullptr; + return m_korganizerService != nullptr; } void ApplicationIntegration::launchKorganizer() const { - auto job = new KIO::CommandLauncherJob("korganizer"); + Q_ASSERT(m_korganizerService); + + auto job = new KIO::ApplicationLauncherJob(m_korganizerService); job->start(); } + diff --git a/applets/digital-clock/plugin/applicationintegration.h b/applets/digital-clock/plugin/applicationintegration.h index f3c5e8dcb..f235d355c 100644 --- a/applets/digital-clock/plugin/applicationintegration.h +++ b/applets/digital-clock/plugin/applicationintegration.h @@ -3,6 +3,7 @@ #pragma once #include +#include class ApplicationIntegration : public QObject { @@ -15,4 +16,7 @@ public: bool korganizerInstalled() const; Q_INVOKABLE void launchKorganizer() const; + +private: + KService::Ptr m_korganizerService; }; diff --git a/applets/digital-clock/plugin/digitalclockplugin.cpp b/applets/digital-clock/plugin/digitalclockplugin.cpp index 1df035952..ee574a691 100644 --- a/applets/digital-clock/plugin/digitalclockplugin.cpp +++ b/applets/digital-clock/plugin/digitalclockplugin.cpp @@ -51,6 +51,8 @@ void DigitalClockPlugin::registerTypes(const char *uri) qmlRegisterSingletonType(uri, 1, 0, "ClipboardMenu", clipboardMenu_singletontype_provider); qmlRegisterSingletonType(uri, 1, 0, "ApplicationIntegration", [](QQmlEngine *engine, QJSEngine *scriptEngine) { + Q_UNUSED(engine); + Q_UNUSED(scriptEngine); return new ApplicationIntegration(); }); } -- GitLab From 4a9aa8083270b000f3a490425fd3ca01da8b9528 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Sun, 25 Apr 2021 16:34:06 +0200 Subject: [PATCH 3/4] Improve cmake code --- applets/digital-clock/plugin/CMakeLists.txt | 4 +--- applets/digital-clock/plugin/applicationintegration.cpp | 1 - applets/digital-clock/plugin/applicationintegration.h | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/applets/digital-clock/plugin/CMakeLists.txt b/applets/digital-clock/plugin/CMakeLists.txt index 1d4f54f9c..0c19f6938 100644 --- a/applets/digital-clock/plugin/CMakeLists.txt +++ b/applets/digital-clock/plugin/CMakeLists.txt @@ -17,13 +17,11 @@ set(digitalclockplugin_SRCS add_library(digitalclockplugin SHARED ${digitalclockplugin_SRCS}) target_link_libraries(digitalclockplugin - PUBLIC + PRIVATE Qt::Core Qt::Qml Qt::Widgets # for QAction... KF5::CoreAddons - KF5::KIOWidgets - KF5::KIOCore KF5::KIOGui KF5::I18n) diff --git a/applets/digital-clock/plugin/applicationintegration.cpp b/applets/digital-clock/plugin/applicationintegration.cpp index faac9b0d0..5931b0106 100644 --- a/applets/digital-clock/plugin/applicationintegration.cpp +++ b/applets/digital-clock/plugin/applicationintegration.cpp @@ -22,4 +22,3 @@ void ApplicationIntegration::launchKorganizer() const auto job = new KIO::ApplicationLauncherJob(m_korganizerService); job->start(); } - diff --git a/applets/digital-clock/plugin/applicationintegration.h b/applets/digital-clock/plugin/applicationintegration.h index f235d355c..1573d0e96 100644 --- a/applets/digital-clock/plugin/applicationintegration.h +++ b/applets/digital-clock/plugin/applicationintegration.h @@ -2,8 +2,8 @@ // SPDX-Licence-Identifier: SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL #pragma once -#include #include +#include class ApplicationIntegration : public QObject { -- GitLab From c1254713027f206353649dbca8a7c50177f94e37 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Mon, 26 Apr 2021 14:16:19 +0000 Subject: [PATCH 4/4] Apply 1 suggestion(s) to 1 file(s) --- applets/digital-clock/package/contents/ui/CalendarView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applets/digital-clock/package/contents/ui/CalendarView.qml b/applets/digital-clock/package/contents/ui/CalendarView.qml index 2d18d7ffa..bce64e357 100644 --- a/applets/digital-clock/package/contents/ui/CalendarView.qml +++ b/applets/digital-clock/package/contents/ui/CalendarView.qml @@ -97,7 +97,7 @@ PlasmaExtras.Representation { } PlasmaComponents3.ToolButton { visible: agenda.visible && ApplicationIntegration.korganizerInstalled - text: i18nc("Add event", "Add") + text: i18nc("@action:button Add event", "Add...") Layout.rightMargin: calendar.paddings icon.name: "list-add" onClicked: ApplicationIntegration.launchKorganizer() -- GitLab