From cbac07b29e1c60253b18578229b13cbfa8ad87b4 Mon Sep 17 00:00:00 2001 From: arcan1s Date: Tue, 30 Dec 2014 14:39:25 +0300 Subject: [PATCH] move method from original one --- sources/plasmoid/CMakeLists.txt | 44 ++-- .../plasmoid/plasmoid/contents/ui/about.qml | 60 ++++- .../plasmoid/plasmoid/contents/ui/main.qml | 3 +- sources/plasmoid/plugin/CMakeLists.txt | 3 +- sources/plasmoid/plugin/netctladds.cpp | 226 ++++++++++++++++++ sources/plasmoid/plugin/netctladds.h | 31 +++ 6 files changed, 340 insertions(+), 27 deletions(-) diff --git a/sources/plasmoid/CMakeLists.txt b/sources/plasmoid/CMakeLists.txt index c152176..192f1e3 100644 --- a/sources/plasmoid/CMakeLists.txt +++ b/sources/plasmoid/CMakeLists.txt @@ -40,21 +40,24 @@ message (STATUS "Subproject ${SUBPROJECT}") # install (FILES ${CMAKE_CURRENT_BINARY_DIR}/${SUBPROJECT_DESKTOP} DESTINATION ${SERVICES_INSTALL_DIR}) # install (FILES ${SUBPROJECT_NOTIFY} DESTINATION ${DATA_INSTALL_DIR}/${PLUGIN_NAME}) # plasma_install_package(plasmoid org.kde.plasma.netctl) -find_package (Qt5 REQUIRED COMPONENTS Core Qml Widgets) +find_package (Qt5 REQUIRED COMPONENTS Core DBus Qml Widgets) find_package (ECM 0.0.12 REQUIRED NO_MODULE) set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) -find_package(KF5 REQUIRED I18n Service WidgetsAddons KIO CoreAddons Notifications Plasma) +find_package(KF5 REQUIRED COMPONENTS I18n Service WidgetsAddons KIO CoreAddons Notifications Plasma) +find_package(KF5I18n CONFIG REQUIRED) include (KDEInstallDirs) include (KDECMakeSettings) include (KDECompilerSettings) -add_definitions (${Qt5Core_DEFINITIONS} ${Qt5Qml_DEFINITIONS}) +add_definitions (${Qt5Core_DEFINITIONS} ${Qt5DBus_DEFINITIONS} ${Qt5Qml_DEFINITIONS}) set (Qt_INCLUDE ${Qt5Core_INCLUDE_DIRS} + ${Qt5DBus_INCLUDE_DIRS} ${Qt5Qml_INCLUDE_DIRS}) set (Kf5_INCLUDE ${ConfigCore_INCLUDE_DIR} ${CoreAddons_INCLUDE_DIR} ${I18n_INCLUDE_DIR} + ${INTERFACE_INCLUDE_DIRECTORIES} ${Notifications_INCLUDE_DIR} ${Plasma_INCLUDE_DIR} ${Service_INCLUDE_DIR}) @@ -62,20 +65,21 @@ set (Kf5_INCLUDE ${ConfigCore_INCLUDE_DIR} set (PLUGIN_NAME netctlplugin) add_subdirectory (plugin) -set(dir plasmoid) -set(component org.kde.plasma.netctl) -set(root ${ARGV2}) - set(type ${ARGV3}) - if(NOT root) - set(root plasmoids) - endif() - if(NOT type) - set(type applet) - endif() - install(DIRECTORY ${dir}/ DESTINATION ${PLASMA_DATA_INSTALL_DIR}/${root}/${component} - PATTERN CMakeLists.txt EXCLUDE - PATTERN README.txt EXCLUDE - PATTERN Messages.sh EXCLUDE - PATTERN dummydata EXCLUDE) - - install(FILES ${dir}/metadata.desktop DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-${type}-${component}.desktop) +# set(dir plasmoid) +# set(component org.kde.plasma.netctl) +# set(root ${ARGV2}) +# set(type ${ARGV3}) +# if(NOT root) +# set(root plasmoids) +# endif() +# if(NOT type) +# set(type applet) +# endif() +# install(DIRECTORY ${dir}/ DESTINATION ${PLASMA_DATA_INSTALL_DIR}/${root}/${component} +# PATTERN CMakeLists.txt EXCLUDE +# PATTERN README.txt EXCLUDE +# PATTERN Messages.sh EXCLUDE +# PATTERN dummydata EXCLUDE) +# +# install(FILES ${dir}/metadata.desktop DESTINATION ${SERVICES_INSTALL_DIR} RENAME plasma-${type}-${component}.desktop) +plasma_install_package (plasmoid org.kde.plasma.netctl) diff --git a/sources/plasmoid/plasmoid/contents/ui/about.qml b/sources/plasmoid/plasmoid/contents/ui/about.qml index 0a5b9f7..bdcd2a6 100644 --- a/sources/plasmoid/plasmoid/contents/ui/about.qml +++ b/sources/plasmoid/plasmoid/contents/ui/about.qml @@ -16,20 +16,70 @@ ***************************************************************************/ import QtQuick 2.0 -import QtQuick.Controls 1.0 as QtControls +import QtQuick.Controls 1.3 as QtControls import QtQuick.Layouts 1.0 as QtLayouts +import org.kde.plasma.private.netctl 1.0 + Item { id: aboutPage width: childrenRect.width height: childrenRect.height + Grid { + QtControls.TabView { + QtControls.Tab { + title: i18n("About") - QtLayouts.ColumnLayout { - QtControls.Label { - horizontalAlignment: Text.AlignHCenter - text: i18n("Some text") + QtLayouts.ColumnLayout { + QtControls.Label { + QtLayouts.Layout.fillWidth: true + horizontalAlignment: Text.AlignHCenter + text: NetctlAdds.getAboutText("header") + } + + QtControls.Label { + QtLayouts.Layout.fillWidth: true + horizontalAlignment: Text.AlignJustify + text: NetctlAdds.getAboutText("description") + } + + QtControls.Label { + QtLayouts.Layout.fillWidth: true + horizontalAlignment: Text.AlignLeft + textFormat: Text.RichText + text: NetctlAdds.getAboutText("links") + } + + QtControls.Label { + QtLayouts.Layout.fillWidth: true + font.capitalization: Font.SmallCaps + horizontalAlignment: Text.AlignHCenter + textFormat: Text.RichText + text: NetctlAdds.getAboutText("copy") + } + } + } + + QtControls.Tab { + title: i18n("Acknowledgment") + + QtLayouts.ColumnLayout { + QtControls.Label { + QtLayouts.Layout.fillWidth: true + horizontalAlignment: Text.AlignJustify + text: NetctlAdds.getAboutText("translators") + } + + QtControls.Label { + QtLayouts.Layout.fillWidth: true + horizontalAlignment: Text.AlignJustify + textFormat: Text.RichText + text: NetctlAdds.getAboutText("3rdparty") + } + } + } } } } diff --git a/sources/plasmoid/plasmoid/contents/ui/main.qml b/sources/plasmoid/plasmoid/contents/ui/main.qml index 01c8039..994b19b 100644 --- a/sources/plasmoid/plasmoid/contents/ui/main.qml +++ b/sources/plasmoid/plasmoid/contents/ui/main.qml @@ -97,13 +97,14 @@ Item { } } + // ui Grid { id: mainGrid columns: 2 Image { id: icon - source: iconPath["inactive"] + source: iconPath["false"] } Text { id: text diff --git a/sources/plasmoid/plugin/CMakeLists.txt b/sources/plasmoid/plugin/CMakeLists.txt index a9cd708..bea8154 100644 --- a/sources/plasmoid/plugin/CMakeLists.txt +++ b/sources/plasmoid/plugin/CMakeLists.txt @@ -9,7 +9,8 @@ include_directories (${CMAKE_SOURCE_DIR} file (GLOB SUBPROJECT_SOURCE *.cpp) add_library (${PLUGIN_NAME} SHARED ${SUBPROJECT_SOURCE}) -target_link_libraries (${PLUGIN_NAME} ${Qt5Core_LIBRARIES} ${Qt5Qml_LIBRARIES} ${I18n_LIBRARIES} ${Plasma_LIBRARIES}) +target_link_libraries (${PLUGIN_NAME} ${Qt5Core_LIBRARIES} ${Qt5DBus_LIBRARIES} ${Qt5Qml_LIBRARIES} ${I18n_LIBRARIES} ${Plasma_LIBRARIES} + KF5::I18n KF5::Notifications) install (TARGETS ${PLUGIN_NAME} DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl) install (FILES qmldir DESTINATION ${QML_INSTALL_DIR}/org/kde/plasma/private/netctl) diff --git a/sources/plasmoid/plugin/netctladds.cpp b/sources/plasmoid/plugin/netctladds.cpp index 816a33a..fe7c538 100644 --- a/sources/plasmoid/plugin/netctladds.cpp +++ b/sources/plasmoid/plugin/netctladds.cpp @@ -15,6 +15,11 @@ * along with netctl-gui. If not, see http://www.gnu.org/licenses/ * ***************************************************************************/ +#include +#include + +#include +#include #include #include @@ -40,6 +45,83 @@ NetctlAdds::~NetctlAdds() } +bool NetctlAdds::checkHelperStatus(const bool useHelper) +{ + if (debug) qDebug() << PDEBUG; + + if (useHelper) + return !sendDBusRequest(QString("Active"), QList()).isEmpty(); + else + return useHelper; +} + + +void NetctlAdds::startHelper(const QString cmd) +{ + if (debug) qDebug() << PDEBUG; + + QProcess command; + + command.startDetached(cmd); +} + + +QList NetctlAdds::sendDBusRequest(const QString cmd, const QList args) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "cmd" << cmd; + if (debug) qDebug() << PDEBUG << ":" << "args" << args; + + QDBusConnection bus = QDBusConnection::systemBus(); + QDBusMessage request = QDBusMessage::createMethodCall(DBUS_HELPER_SERVICE, DBUS_CTRL_PATH, + DBUS_HELPER_INTERFACE, cmd); + if (!args.isEmpty()) + request.setArguments(args); + QDBusMessage response = bus.call(request, QDBus::BlockWithGui); + QList arguments = response.arguments(); + if (arguments.size() == 0) + if (debug) qDebug() << PDEBUG << ":" << "Error message" << response.errorMessage(); + + return arguments; +} + + +QString NetctlAdds::getAboutText(const QString type) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Type" << type; + + QString text; + if (type == QString("header")) + text = QString(NAME); + else if (type == QString("description")) + text = i18n("KDE widget which interacts with netctl."); + else if (type == QString("links")) + text = i18n("Links:") + QString("
") + + QString("%2
").arg(QString(HOMEPAGE)).arg(i18n("Homepage")) + + QString("%2
").arg(QString(REPOSITORY)).arg(i18n("Repository")) + + QString("%2
").arg(QString(BUGTRACKER)).arg(i18n("Bugtracker")) + + QString("%2
").arg(QString(TRANSLATION)).arg(i18n("Translation issue")) + + QString("%2").arg(QString(AUR_PACKAGES)).arg(i18n("AUR packages")); + else if (type == QString("copy")) + text = QString("© %1 %3
").arg(QString(DATE)).arg(QString(EMAIL)).arg(QString(AUTHOR)) + + i18n("This software is licensed under %1", QString(LICENSE)) + QString("
"); + else if (type == QString("translators")) + text = i18n("Translators: %1", QString(TRANSLATORS)); + else if (type == QString("3rdparty")) { + QStringList trdPartyList = QString(TRDPARTY_LICENSE).split(QChar(';'), QString::SkipEmptyParts); + for (int i=0; i%1 (%2 license)") + .arg(trdPartyList[i].split(QChar(','))[0]) + .arg(trdPartyList[i].split(QChar(','))[1]) + .arg(trdPartyList[i].split(QChar(','))[2]); + text = i18n("This software uses: %1", trdPartyList.join(QString(", "))); + } + + return text; +} + + QString NetctlAdds::getInfo(const QString current, const QString status) { if (debug) qDebug() << PDEBUG; @@ -69,3 +151,147 @@ QString NetctlAdds::parsePattern(const QString pattern, const QMap dict, const bool useHelper, + const QString cmd, const QString sudoCmd) +{ + if (debug) qDebug() << PDEBUG; + + QString enableStatus = QString(""); + if (dict[QString("status")].toString().contains(QString("enabled"))) { + enableStatus = QString(" disable "); + sendNotification(QString("Info"), i18n("Set profile %1 disabled", dict[QString("current")].toString())); + } else { + enableStatus = QString(" enable "); + sendNotification(QString("Info"), i18n("Set profile %1 enabled", dict[QString("current")].toString())); + } + if (useHelper) { + QList args; + args.append(dict[QString("current")].toString()); + sendDBusRequest(QString("Enable"), args); + } else { + QProcess command; + QString commandLine = sudoCmd + QString(" ") + cmd + enableStatus + dict[QString("current")].toString(); + command.startDetached(commandLine); + } +} + + +void NetctlAdds::restartProfileSlot(const QMap dict, const bool useHelper, + const QString cmd, const QString sudoCmd) +{ + if (debug) qDebug() << PDEBUG; + + sendNotification(QString("Info"), i18n("Restart profile %1", dict[QString("current")].toString())); + if (useHelper) { + QList args; + args.append(dict[QString("current")].toString()); + sendDBusRequest(QString("Restart"), args); + } else { + QProcess command; + QString commandLine = sudoCmd + QString(" ") + cmd + QString(" restart ") + dict[QString("current")].toString(); + command.startDetached(commandLine); + } +} + + +void NetctlAdds::startProfileSlot(QString profile, const bool status, + const bool useHelper, const QString cmd, const QString sudoCmd) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; + + profile.remove(QChar('&')); + sendNotification(QString("Info"), i18n("Start profile %1", profile)); + if (useHelper) { + QList args; + args.append(profile); + if (status) + sendDBusRequest(QString("SwitchTo"), args); + else + sendDBusRequest(QString("Start"), args); + } else { + QProcess command; + QString commandLine = sudoCmd + QString(" ") + cmd; + if (status) + commandLine += QString(" switch-to ") + profile; + else + commandLine += QString(" start ") + profile; + command.startDetached(commandLine); + } +} + + +void NetctlAdds::stopProfileSlot(const QMap dict, const bool useHelper, + const QString cmd, const QString sudoCmd) +{ + if (debug) qDebug() << PDEBUG; + + sendNotification(QString("Info"), i18n("Stop profile %1", dict[QString("current")].toString())); + if (useHelper) { + QList args; + args.append(dict[QString("current")].toString()); + sendDBusRequest(QString("Start"), args); + } else { + QProcess command; + QString commandLine = sudoCmd + QString(" ") + cmd + QString(" stop ") + dict[QString("current")].toString(); + command.startDetached(commandLine); + } +} + + +void NetctlAdds::stopAllProfilesSlot(const bool useHelper, const QString cmd, const QString sudoCmd) +{ + if (debug) qDebug() << PDEBUG; + + sendNotification(QString("Info"), i18n("Stop all profiles")); + if (useHelper) + sendDBusRequest(QString("StopAll"), QList()); + else { + QProcess command; + QString commandLine = sudoCmd + QString(" ") + cmd + QString(" stop-all"); + command.startDetached(commandLine); + } +} + + +void NetctlAdds::switchToProfileSlot(QString profile, const bool useHelper, + const QString cmd) +{ + if (debug) qDebug() << PDEBUG; + if (debug) qDebug() << PDEBUG << ":" << "Profile" << profile; + + profile.remove(QChar('&')); + sendNotification(QString("Info"), i18n("Switch to profile %1", profile)); + if (useHelper) { + QList args; + args.append(profile); + sendDBusRequest(QString("autoStart"), args); + } else { + QProcess command; + QString commandLine = cmd + QString(" switch-to ") + profile; + command.startDetached(commandLine); + } +} diff --git a/sources/plasmoid/plugin/netctladds.h b/sources/plasmoid/plugin/netctladds.h index f5dfea5..733aad9 100644 --- a/sources/plasmoid/plugin/netctladds.h +++ b/sources/plasmoid/plugin/netctladds.h @@ -32,11 +32,42 @@ public: NetctlAdds(QObject *parent = 0); ~NetctlAdds(); + Q_INVOKABLE QString getAboutText(const QString type = "header"); Q_INVOKABLE QString getInfo(const QString current, const QString status); Q_INVOKABLE QString parsePattern(const QString pattern, const QMap dict); + Q_INVOKABLE void runCmd(const QString cmd); + Q_INVOKABLE void sendNotification(const QString eventId, const QString message); + // context menu + Q_INVOKABLE void enableProfileSlot(const QMap dict, + const bool useHelper = true, + const QString cmd = QString("/usr/bin/netctl"), + const QString sudoCmd = QString("")); + Q_INVOKABLE void restartProfileSlot(const QMap dict, + const bool useHelper = true, + const QString cmd = QString("/usr/bin/netctl"), + const QString sudoCmd = QString("")); + Q_INVOKABLE void startProfileSlot(QString profile, const bool status, + const bool useHelper = true, + const QString cmd = QString("/usr/bin/netctl"), + const QString sudoCmd = QString("")); + Q_INVOKABLE void stopProfileSlot(const QMap dict, + const bool useHelper = true, + const QString cmd = QString("/usr/bin/netctl"), + const QString sudoCmd = QString("")); + Q_INVOKABLE void stopAllProfilesSlot(const bool useHelper = true, + const QString cmd = QString("/usr/bin/netctl"), + const QString sudoCmd = QString("")); + Q_INVOKABLE void switchToProfileSlot(QString profile, + const bool useHelper = true, + const QString cmd = QString("/usr/bin/netctl-auto")); private: bool debug = false; + // helper + bool checkHelperStatus(const bool useHelper = true); + void startHelper(const QString cmd = QString("/usr/bin/netctlgui-helper")); + // dbus + QList sendDBusRequest(const QString cmd, const QList args = QList()); };