diff --git a/kcms/CMakeLists.txt b/kcms/CMakeLists.txt --- a/kcms/CMakeLists.txt +++ b/kcms/CMakeLists.txt @@ -47,6 +47,7 @@ add_subdirectory(spellchecking) add_subdirectory(phonon) add_subdirectory(runners) +add_subdirectory(qtquicksettings) add_subdirectory(workspaceoptions) if (KF5Baloo_FOUND) diff --git a/kcms/qtquicksettings/CMakeLists.txt b/kcms/qtquicksettings/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/CMakeLists.txt @@ -0,0 +1,20 @@ +add_definitions(-DTRANSLATION_DOMAIN=\"kcmqtquicksettings\") + +set(kcm_qtquicksettings_PART_SRCS kcmqtquicksettings.cpp) +kconfig_add_kcfg_files(kcm_qtquicksettings_PART_SRCS renderersettings.kcfgc) + +ki18n_wrap_ui(kcm_qtquicksettings_PART_SRCS kcmqtquicksettingswidget.ui) + +add_library(kcm_qtquicksettings ${kcm_qtquicksettings_PART_SRCS}) + +target_link_libraries(kcm_qtquicksettings + Qt5::Widgets + KF5::WidgetsAddons + KF5::KCMUtils + KF5::I18n +) + +########### install files ############### + +install(TARGETS kcm_qtquicksettings DESTINATION ${PLUGIN_INSTALL_DIR}) +install(FILES qtquicksettings.desktop DESTINATION ${SERVICES_INSTALL_DIR}) diff --git a/kcms/qtquicksettings/Messages.sh b/kcms/qtquicksettings/Messages.sh new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/Messages.sh @@ -0,0 +1,4 @@ +#! /usr/bin/env bash +$EXTRACTRC *.ui >> rc.cpp +$XGETTEXT *.cpp -o $podir/kcmqtquicksettings.pot +rm -f rc.cpp diff --git a/kcms/qtquicksettings/kcmqtquicksettings.h b/kcms/qtquicksettings/kcmqtquicksettings.h new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/kcmqtquicksettings.h @@ -0,0 +1,55 @@ +/* This file is part of the KDE's Plasma desktop + * Copyright 2017 David Edmundson + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#pragma once + +#include +#include +#include + +namespace Ui +{ +class KCMQtQuickSettingsWidget; +} + +namespace PlasmaQtQuickSettings +{ +class RendererSettings; +} + +/** + * @short A KCM to configure Plasma QtQuick settings + */ +class KCMQtQuickSettingsModule : public KCModule +{ + Q_OBJECT + +public: + KCMQtQuickSettingsModule(QWidget *parent, const QVariantList &); + virtual ~KCMQtQuickSettingsModule(); + + void load() Q_DECL_OVERRIDE; + void save() Q_DECL_OVERRIDE; + void defaults() Q_DECL_OVERRIDE; + +private: + QScopedPointer m_ui; + QScopedPointer m_settings; +}; + diff --git a/kcms/qtquicksettings/kcmqtquicksettings.cpp b/kcms/qtquicksettings/kcmqtquicksettings.cpp new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/kcmqtquicksettings.cpp @@ -0,0 +1,85 @@ +/* This file is part of the KDE's Plasma desktop + * Copyright 2017 David Edmundson + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public License + * along with this library; see the file COPYING.LIB. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "kcmqtquicksettings.h" + +#include +#include +#include + +#include "ui_kcmqtquicksettingswidget.h" +#include "renderersettings.h" + +K_PLUGIN_FACTORY(KCMQtQuickSettingsFactory, registerPlugin();) + +KCMQtQuickSettingsModule::KCMQtQuickSettingsModule(QWidget *parent, const QVariantList &args) + : KCModule(parent, args), + m_ui(new Ui::KCMQtQuickSettingsWidget), + m_settings(new PlasmaQtQuickSettings::RendererSettings(KSharedConfig::openConfig(QStringLiteral("kdeglobals")))) +{ + KAboutData *about = new KAboutData(QStringLiteral("Plasma QtQuick Settings"), + i18n("Plasma QtQuick Settings"), + QString(), + i18n("Configure Plasma QtQuick Settings"), + KAboutLicense::GPL); + about->addAuthor(i18n("David Edmundson"), i18n("Maintainer"), QStringLiteral("davidedmundson@kde.org")); + setAboutData(about); + + m_ui->setupUi(this); + m_ui->backendCombo->addItem(i18n("Automatic"), QVariant(QStringLiteral()));//so data matches empty config + m_ui->backendCombo->addItem(i18n("Open GL"), QVariant("opengl")); + m_ui->backendCombo->addItem(i18n("Software"), QVariant("software")); + + m_ui->renderLoopCombo->addItem(i18n("Automatic"), QVariant(QStringLiteral())); + m_ui->renderLoopCombo->addItem(i18n("Basic"), QVariant(QStringLiteral("basic"))); + m_ui->renderLoopCombo->addItem(i18n("Threaded"), QVariant(QStringLiteral("threaded"))); + + connect(m_ui->backendCombo, static_cast(&QComboBox::currentIndexChanged), this, static_cast(&KCMQtQuickSettingsModule::changed)); + connect(m_ui->renderLoopCombo, static_cast(&QComboBox::currentIndexChanged), this, static_cast(&KCMQtQuickSettingsModule::changed)); + + connect(m_ui->glCoreProfiileCheckbox, &QCheckBox::stateChanged, this, static_cast(&KCMQtQuickSettingsModule::changed)); +} + +KCMQtQuickSettingsModule::~KCMQtQuickSettingsModule() +{ +} + +void KCMQtQuickSettingsModule::load() +{ + m_ui->backendCombo->setCurrentIndex(m_ui->backendCombo->findData(m_settings->sceneGraphBackend())); + m_ui->renderLoopCombo->setCurrentIndex(m_ui->renderLoopCombo->findData(m_settings->renderLoop())); + m_ui->glCoreProfiileCheckbox->setChecked(m_settings->forceGlCoreProfile()); +} + +void KCMQtQuickSettingsModule::save() +{ + m_settings->setSceneGraphBackend(m_ui->backendCombo->currentData().toString()); + m_settings->setRenderLoop(m_ui->renderLoopCombo->currentData().toString()); + m_settings->setForceGlCoreProfile(m_ui->glCoreProfiileCheckbox->isChecked()); + m_settings->save(); +} + +void KCMQtQuickSettingsModule::defaults() +{ + m_ui->backendCombo->setCurrentIndex(0); + m_ui->renderLoopCombo->setCurrentIndex(0); + m_ui->glCoreProfiileCheckbox->setChecked(false); +} + +#include "kcmqtquicksettings.moc" diff --git a/kcms/qtquicksettings/kcmqtquicksettingswidget.ui b/kcms/qtquicksettings/kcmqtquicksettingswidget.ui new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/kcmqtquicksettingswidget.ui @@ -0,0 +1,95 @@ + + + KCMQtQuickSettingsWidget + + + + 0 + 0 + 687 + 333 + + + + + 0 + 0 + + + + + + + These settings adjust the QtQuick settings used by Plasma. Only adjust if you know what you are doing. + + + true + + + KMessageWidget::Information + + + + + + + + + Rendering Backend: + + + + + + + + + + GL Core Profile: + + + + + + + Render Loop: + + + + + + + + + + Force + + + + + + + + + Qt::Vertical + + + + 20 + 143 + + + + + + + + + KMessageWidget + QFrame +
kmessagewidget.h
+
+
+ + +
diff --git a/kcms/qtquicksettings/qtquicksettings.desktop b/kcms/qtquicksettings/qtquicksettings.desktop new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/qtquicksettings.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Exec=kcmshell5 qtquicksettings +Icon=preferences-desktop-locale +Type=Service +X-KDE-ServiceTypes=KCModule +X-DocPath=kcontrol/qtquicksettings/index.html + +X-KDE-Library=kcm_qtquicksettings +X-KDE-ParentApp=kcontrol + +X-KDE-System-Settings-Parent-Category=display +X-KDE-Weight=60 + +Name=Plasma Rendererer + +Categories=Qt;KDE;X-KDE-settings-qtquicksettings; diff --git a/kcms/qtquicksettings/renderer.kcfg b/kcms/qtquicksettings/renderer.kcfg new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/renderer.kcfg @@ -0,0 +1,18 @@ + + + + + + + + + + + + false + + + diff --git a/kcms/qtquicksettings/renderersettings.kcfgc b/kcms/qtquicksettings/renderersettings.kcfgc new file mode 100644 --- /dev/null +++ b/kcms/qtquicksettings/renderersettings.kcfgc @@ -0,0 +1,5 @@ +File=renderer.kcfg +NameSpace=PlasmaQtQuickSettings +ClassName=RendererSettings +UseEnumTypes=true +Mutators=true