Commit b2a8000b authored by Cyril Rossi's avatar Cyril Rossi
Browse files

KCMs Port KCM to use SettingStateBinding

Port the following KCM to use SettingStateBinding introduced by frameworks/kdeclarative!4
and also to support highlight of non default settings
see breeze!12

* workspace
* baloo
* colors
* fonts
* ksplash
* launchfeedback
* lookandfeel
* notifications
* widget style
* cursor theme
parent 8ba63d3a
......@@ -23,7 +23,7 @@ import QtQuick.Layouts 1.1
import QtQuick.Controls 2.11 as QQC2
import QtQuick.Dialogs 1.2 as QtDialogs
import org.kde.kirigami 2.4 as Kirigami
import org.kde.kcm 1.1 as KCM
import org.kde.kcm 1.3 as KCM
KCM.SimpleKCM {
id: root
......@@ -43,11 +43,15 @@ KCM.SimpleKCM {
QQC2.CheckBox {
id: fileSearchEnabled
text: i18n("Enable File Search")
enabled: !kcm.balooSettings.isImmutable("indexingEnabled")
checked: kcm.balooSettings.indexingEnabled
onCheckStateChanged: {
kcm.balooSettings.indexingEnabled = checked
}
KCM.SettingStateBinding {
configObject: kcm.balooSettings
settingName: "indexingEnabled"
}
}
RowLayout {
......@@ -61,16 +65,26 @@ KCM.SimpleKCM {
QQC2.CheckBox {
id: indexFileContents
text: i18n("Also index file content")
enabled: fileSearchEnabled.checked && !kcm.balooSettings.isImmutable("onlyBasicIndexing")
checked: !kcm.balooSettings.onlyBasicIndexing
onCheckStateChanged: kcm.balooSettings.onlyBasicIndexing = !checked
KCM.SettingStateBinding {
configObject: kcm.balooSettings
settingName: "onlyBasicIndexing"
extraEnabledConditions: fileSearchEnabled.checked
}
}
QQC2.CheckBox {
id: indexHiddenFolders
text: i18n("Index hidden files and folders")
enabled: fileSearchEnabled.checked && !kcm.balooSettings.isImmutable("indexHiddenFolders")
checked: kcm.balooSettings.indexHiddenFolders
onCheckStateChanged: kcm.balooSettings.indexHiddenFolders = checked
KCM.SettingStateBinding {
configObject: kcm.balooSettings
settingName: "indexHiddenFolders"
extraEnabledConditions: fileSearchEnabled.checked
}
}
}
}
......
......@@ -25,7 +25,7 @@ import QtQuick.Dialogs 1.0 as QtDialogs
import QtQuick.Controls 2.3 as QtControls
import org.kde.kirigami 2.8 as Kirigami
import org.kde.newstuff 1.62 as NewStuff
import org.kde.kcm 1.1 as KCM
import org.kde.kcm 1.3 as KCM
import org.kde.private.kcms.colors 1.0 as Private
KCM.GridViewKCM {
......@@ -47,7 +47,11 @@ KCM.GridViewKCM {
value: filterCombo.model[filterCombo.currentIndex].filter
}
enabled: !kcm.downloadingFile && !kcm.colorsSettings.isImmutable("colorScheme")
KCM.SettingStateBinding {
configObject: kcm.colorsSettings
settingName: "colorScheme"
extraEnabledConditions: !kcm.downloadingFile
}
Component.onCompleted: {
// The thumbnails are a bit more elaborate and need more room, especially when translated
......
......@@ -23,11 +23,12 @@ import QtQuick.Controls 2.2 as QtControls
import QtQuick.Dialogs 1.1 as QtDialogs
import org.kde.kirigami 2.4 as Kirigami
import org.kde.newstuff 1.62 as NewStuff
import org.kde.kcm 1.1 as KCM
import org.kde.kcm 1.3 as KCM
import org.kde.private.kcm_cursortheme 1.0
KCM.GridViewKCM {
id: root
KCM.ConfigModule.quickHelp: i18n("This module lets you choose the mouse cursor theme.")
view.model: kcm.cursorsModel
......@@ -43,7 +44,11 @@ KCM.GridViewKCM {
view.positionViewAtIndex(view.currentIndex, GridView.Beginning);
}
enabled: !kcm.downloadingFile
KCM.SettingStateBinding {
configObject: kcm.cursorThemeSettings
settingName: "cursorTheme"
extraEnabledConditions: !kcm.downloadingFile
}
DropArea {
anchors.fill: parent
......@@ -94,7 +99,13 @@ KCM.GridViewKCM {
RowLayout {
id: comboLayout
enabled: kcm.canResize
KCM.SettingStateBinding {
configObject: kcm.cursorThemeSettings
settingName: "cursorSize"
extraEnabledConditions: kcm.canResize
}
QtControls.Label {
text: i18n("Size:")
}
......
......@@ -103,6 +103,11 @@ public:
m_excludeTo = excludeTo;
}
bool isImmutable() const
{
return m_isImmutable;
}
bool antiAliasing() const
{
return m_antiAliasing;
......@@ -228,6 +233,8 @@ public:
KSharedConfig::Ptr config = KSharedConfig::openConfig("kdeglobals");
KConfigGroup cg(config, "General");
m_isImmutable = cg.isEntryImmutable("XftAntialias");
const auto aaState = xft.getAntiAliasing();
setAntiAliasing(aaState != KXftConfig::AntiAliasing::Disabled);
......@@ -238,6 +245,7 @@ public:
private:
FontsAASettings *m_settings;
bool m_isImmutable;
bool m_antiAliasing;
bool m_antiAliasingChanged;
KXftConfig::SubPixel::Type m_subPixel;
......@@ -249,7 +257,6 @@ private:
int m_excludeTo;
};
FontsAASettings::FontsAASettings(QObject *parent)
: FontsAASettingsBase(parent)
, m_fontAASettingsStore(new FontAASettingsStore(this))
......@@ -349,6 +356,16 @@ KXftConfig::Hint::Style FontsAASettings::hinting() const
return findItem("hinting")->property().value<KXftConfig::Hint::Style>();
}
bool FontsAASettings::isAaImmutable() const
{
return m_fontAASettingsStore->isImmutable();
}
bool FontsAASettings::excludeStateProxy() const
{
return false;
}
void FontsAASettings::setHinting(KXftConfig::Hint::Style hinting)
{
findItem("hinting")->setProperty(hinting);
......
......@@ -35,6 +35,8 @@ class FontsAASettings : public FontsAASettingsBase
Q_PROPERTY(int dpi READ dpi WRITE setDpi NOTIFY dpiChanged)
Q_PROPERTY(KXftConfig::SubPixel::Type subPixel READ subPixel WRITE setSubPixel NOTIFY subPixelChanged)
Q_PROPERTY(KXftConfig::Hint::Style hinting READ hinting WRITE setHinting NOTIFY hintingChanged)
Q_PROPERTY(bool isAaImmutable READ isAaImmutable CONSTANT)
Q_PROPERTY(bool excludeStateProxy READ excludeStateProxy NOTIFY excludeStateProxyChanged)
public:
FontsAASettings(QObject *parent = nullptr);
......@@ -46,6 +48,8 @@ public:
int dpi() const;
KXftConfig::SubPixel::Type subPixel() const;
KXftConfig::Hint::Style hinting() const;
bool isAaImmutable() const;
bool excludeStateProxy() const;
void setExclude(bool exclude);
void setExcludeFrom(int excludeFrom);
......@@ -64,9 +68,11 @@ signals:
void subPixelChanged();
void hintingChanged();
void aliasingChangeApplied();
void excludeStateProxyChanged();
private:
FontAASettingsStore *m_fontAASettingsStore;
bool m_isAaImmutable = false;
bool usrSave() override;
using NotifySignalType = void (FontsAASettings::*)();
......
......@@ -26,7 +26,7 @@ import QtQuick.Dialogs 1.2 as QtDialogs
// For KCMShell.open()
import org.kde.kquickcontrolsaddons 2.0
import org.kde.kirigami 2.4 as Kirigami
import org.kde.kcm 1.1 as KCM
import org.kde.kcm 1.3 as KCM
KCM.SimpleKCM {
id: root
......@@ -107,41 +107,65 @@ KCM.SimpleKCM {
label: i18n("General:")
category: "font"
font: kcm.fontsSettings.font
enabled: !kcm.fontsSettings.isImmutable("font")
KCM.SettingStateBinding {
configObject: kcm.fontsSettings
settingName: "font"
}
}
FontWidget {
id: fixedWidthFontWidget
label: i18n("Fixed width:")
category: "fixed"
font: kcm.fontsSettings.fixed
enabled: !kcm.fontsSettings.isImmutable("fixed")
KCM.SettingStateBinding {
configObject: kcm.fontsSettings
settingName: "fixed"
}
}
FontWidget {
id: smallFontWidget
label: i18n("Small:")
category: "smallestReadableFont"
font: kcm.fontsSettings.smallestReadableFont
enabled: !kcm.fontsSettings.isImmutable("smallestReadableFont")
KCM.SettingStateBinding {
configObject: kcm.fontsSettings
settingName: "smallestReadableFont"
}
}
FontWidget {
id: toolbarFontWidget
label: i18n("Toolbar:")
category: "toolBarFont"
font: kcm.fontsSettings.toolBarFont
enabled: !kcm.fontsSettings.isImmutable("toolBarFont")
KCM.SettingStateBinding {
configObject: kcm.fontsSettings
settingName: "toolBarFont"
}
}
FontWidget {
id: menuFontWidget
label: i18n("Menu:")
category: "menuFont"
font: kcm.fontsSettings.menuFont
enabled: !kcm.fontsSettings.isImmutable("menuFont")
KCM.SettingStateBinding {
configObject: kcm.fontsSettings
settingName: "menuFont"
}
}
FontWidget {
label: i18n("Window title:")
category: "activeFont"
font: kcm.fontsSettings.activeFont
enabled: !kcm.fontsSettings.isImmutable("activeFont")
KCM.SettingStateBinding {
configObject: kcm.fontsSettings
settingName: "activeFont"
}
}
Kirigami.Separator {
......@@ -160,6 +184,12 @@ KCM.SimpleKCM {
ContextualHelpButton {
toolTipText: xi18nc("@info:tooltip Anti-Aliasing", "Pixels on displays are generally aligned in a grid. Therefore shapes of fonts that do not align with this grid will look blocky and wrong unless <emphasis>anti-aliasing</emphasis> techniques are used to reduce this effect. You generally want to keep this option enabled unless it causes problems.")
}
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "antiAliasing"
extraEnabledConditions: !kcm.fontsAASettings.isAaImmutable
}
}
QtControls.CheckBox {
......@@ -168,13 +198,19 @@ KCM.SimpleKCM {
onCheckedChanged: kcm.fontsAASettings.exclude = checked;
text: i18n("Exclude range from anti-aliasing")
Layout.fillWidth: true
enabled: antiAliasingCheckBox.checked
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "exclude"
extraEnabledConditions: !kcm.fontsAASettings.isAaImmutable && antiAliasingCheckBox.checked
}
}
RowLayout {
id: excludeField
Layout.preferredWidth: formLayout.maxImplicitWidth
enabled: antiAliasingCheckBox.checked
enabled: antiAliasingCheckBox.enabled && antiAliasingCheckBox.checked
QtControls.SpinBox {
id: excludeFromSpinBox
stepSize: 1
......@@ -182,8 +218,13 @@ KCM.SimpleKCM {
textFromValue: function(value, locale) { return i18n("%1 pt", value)}
valueFromText: function(text, locale) { return parseInt(text) }
editable: true
enabled: excludeCheckBox.checked
value: kcm.fontsAASettings.excludeFrom
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "excludeFrom"
extraEnabledConditions: excludeCheckBox.checked
}
}
QtControls.Label {
......@@ -200,8 +241,13 @@ KCM.SimpleKCM {
textFromValue: function(value, locale) { return i18n("%1 pt", value)}
valueFromText: function(text, locale) { return parseInt(text) }
editable: true
enabled: excludeCheckBox.checked
value: kcm.fontsAASettings.excludeTo
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "excludeTo"
extraEnabledConditions: excludeCheckBox.checked
}
}
Connections {
target: kcm.fontsAASettings
......@@ -219,7 +265,6 @@ KCM.SimpleKCM {
onCurrentIndexChanged: kcm.subPixelCurrentIndex = currentIndex;
model: kcm.subPixelOptionsModel
textRole: "display"
enabled: antiAliasingCheckBox.checked
popup.height: popup.implicitHeight
delegate: QtControls.ItemDelegate {
id: subPixelDelegate
......@@ -246,6 +291,12 @@ KCM.SimpleKCM {
}
}
}
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "subPixel"
extraEnabledConditions: antiAliasingCheckBox.checked && !kcm.fontsAASettings.isAaImmutable
}
}
ContextualHelpButton {
toolTipText: xi18nc("@info:tooltip Sub-pixel rendering", "<para>On TFT or LCD screens every single pixel is actually composed of three or four smaller monochrome lights. These <emphasis>sub-pixels</emphasis> can be changed independently to further improve the quality of displayed fonts.</para> <para>The rendering quality is only improved if the selection matches the manner in which the sub-pixels of your display are aligned. Most displays have a linear ordering of <emphasis>RGB</emphasis> sub-pixels, some have <emphasis>BGR</emphasis> and some exotic orderings are not supported by this feature.</para>This does not work with CRT monitors.")
......@@ -261,7 +312,6 @@ KCM.SimpleKCM {
onCurrentTextChanged: kcm.hintingCurrentIndex = currentIndex;
model: kcm.hintingOptionsModel
textRole: "display"
enabled: antiAliasingCheckBox.checked
popup.height: popup.implicitHeight
delegate: QtControls.ItemDelegate {
id: hintingDelegate
......@@ -288,6 +338,11 @@ KCM.SimpleKCM {
}
}
}
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "hinting"
extraEnabledConditions: antiAliasingCheckBox.checked && !kcm.fontsAASettings.isAaImmutable
}
}
ContextualHelpButton {
toolTipText: xi18nc("@info:tooltip Hinting", "Hinting is a technique in which hints embedded in a font are used to enhance the rendering quality especially at small sizes. Stronger hinting generally leads to sharper edges but the small letters will less closely resemble their shape at big sizes.")
......@@ -295,6 +350,8 @@ KCM.SimpleKCM {
}
RowLayout {
Layout.preferredWidth: formLayout.maxImplicitWidth
QtControls.CheckBox {
id: dpiCheckBox
checked: kcm.fontsAASettings.dpi !== 0
......@@ -303,16 +360,41 @@ KCM.SimpleKCM {
kcm.fontsAASettings.dpi = checked ? dpiSpinBox.value : 0
dpiTwiddledMessage.visible = checked
}
// dpiSpinBox will set forceFontDPI or forceFontDPIWayland,
// so only one SettingStateBinding will be activated at a time.
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "forceFontDPIWayland"
extraEnabledConditions: antiAliasingCheckBox.checked && !kcm.fontsAASettings.isAaImmutable
}
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "forceFontDPI"
extraEnabledConditions: antiAliasingCheckBox.checked && !kcm.fontsAASettings.isAaImmutable
}
}
QtControls.SpinBox {
id: dpiSpinBox
editable: true
enabled: dpiCheckBox.checked
value: kcm.fontsAASettings.dpi !== 0 ? kcm.fontsAASettings.dpi : 96
onValueModified: kcm.fontsAASettings.dpi = value
to: 999
from: 1
// dpiSpinBox will set forceFontDPI or forceFontDPIWayland,
// so only one SettingStateBinding will be activated at a time.
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "forceFontDPIWayland"
extraEnabledConditions: dpiCheckBox.enabled && dpiCheckBox.checked
}
KCM.SettingStateBinding {
configObject: kcm.fontsAASettings
settingName: "forceFontDPI"
extraEnabledConditions: dpiCheckBox.enabled && dpiCheckBox.checked
}
}
ContextualHelpButton {
toolTipText: xi18nc("@info:tooltip Force fonts DPI", "<para>This option forces a specific DPI value for fonts. It may be useful when the real DPI of the hardware is not detected properly and it is also often misused when poor quality fonts are used that do not look well with DPI values other than 96 or 120 DPI.</para><para>The use of this option is generally discouraged.</para><para>If you are using the <emphasis>X Window System</emphasis>, for selecting the proper DPI value a better option is explicitly configuring it for the whole X server if possible (e.g. DisplaySize in xorg.conf). When fonts do not render properly with the real DPI value better fonts should be used or configuration of font hinting should be checked.</para>")
......
......@@ -22,12 +22,17 @@ import QtQuick.Layouts 1.1
import QtQuick.Controls 1.0 as QtControls
import org.kde.kirigami 2.4 as Kirigami
import org.kde.newstuff 1.62 as NewStuff
import org.kde.kcm 1.1 as KCM
import org.kde.kcm 1.3 as KCM
KCM.GridViewKCM {
id: root
KCM.ConfigModule.quickHelp: i18n("This module lets you choose the splash screen theme.")
enabled: !kcm.testing && !kcm.splashScreenSettings.isImmutable("theme")
KCM.SettingStateBinding {
configObject: kcm.splashScreenSettings
settingName: "theme"
extraEnabledConditions: !kcm.testing
}
view.model: kcm.splashModel
//NOTE: pay attention to never break this binding
......
......@@ -3,9 +3,9 @@ add_definitions(-DTRANSLATION_DOMAIN=\"kcm_launchfeedback\")
########### next target ###############
set(kcm_launchfeedback_PART_SRCS launchfeedback.cpp)
set(kcm_launchfeedback_PART_SRCS launchfeedback.cpp launchfeedbacksettings.cpp)
kconfig_add_kcfg_files(kcm_launchfeedback_PART_SRCS launchfeedbacksettings.kcfgc GENERATE_MOC)
kconfig_add_kcfg_files(kcm_launchfeedback_PART_SRCS launchfeedbacksettingsbase.kcfgc GENERATE_MOC)
add_library(kcm_launchfeedback MODULE ${kcm_launchfeedback_PART_SRCS})
......@@ -20,7 +20,7 @@ kcoreaddons_desktop_to_json(kcm_launchfeedback "kcm_launchfeedback.desktop")
########### install files ###############
install(FILES launchfeedbacksettings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR})
install(FILES launchfeedbacksettingsbase.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR})
install(TARGETS kcm_launchfeedback DESTINATION ${KDE_INSTALL_PLUGINDIR}/kcms)
install(FILES kcm_launchfeedback.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR})
kpackage_install_package(package kcm_launchfeedback kcms)
......@@ -31,8 +31,9 @@ LaunchFeedback::LaunchFeedback(QObject *parent, const QVariantList &args)
: KQuickAddons::ManagedConfigModule(parent, args)
, m_settings(new LaunchFeedbackSettings(this))
{
qmlRegisterUncreatableType<LaunchFeedback>("org.kde.private.kcms.launchfeedback", 1, 0, "KCM", QStringLiteral("Cannot create instances of KCM"));
qmlRegisterType<LaunchFeedbackSettings>();
constexpr char uri[] = "org.kde.private.kcms.launchfeedback";
qmlRegisterUncreatableType<LaunchFeedback>(uri, 1, 0, "KCM", QStringLiteral("Cannot create instances of KCM"));
qmlRegisterAnonymousType<LaunchFeedbackSettings>(uri, 1);
KAboutData *about = new KAboutData(QStringLiteral("kcm_launchfeedback"),
i18n("Configure application launch feedback"),
......
/**
* Copyright 2020 Cyril Rossi <cyril.rossi@enioka.com>
*
* 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 2 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "launchfeedbacksettings.h"
class LaunchFeedbackSettingsStore : public QObject
{
Q_OBJECT
Q_PROPERTY(bool busyCursorDisabled READ busyCursorDisabled WRITE setBusyCursorDisabled)
Q_PROPERTY(bool busyCursorStatic READ busyCursorStatic WRITE setBusyCursorStatic)
Q_PROPERTY(bool busyCursorBlinking READ busyCursorBlinking WRITE setBusyCursorBlinking)
Q_PROPERTY(bool busyCursorBouncing READ busyCursorBouncing WRITE setBusyCursorBouncing)
public:
LaunchFeedbackSettingsStore(LaunchFeedbackSettings *parent = nullptr)
: QObject(parent)
, m_settings(parent)
{
setBusyCursorDisabled(!m_settings->busyCursor() && !m_settings->blinking() && !m_settings->bouncing());
setBusyCursorStatic(m_settings->busyCursor() && !m_settings->blinking() && !m_settings->bouncing());
setBusyCursorBlinking(m_settings->busyCursor() && m_settings->blinking() && !m_settings->bouncing());
setBusyCursorBouncing(m_settings->busyCursor() && !m_settings->blinking() && m_settings->bouncing());
}
void setBusyCursorDisabled(bool busyCursorDisabled)
{
m_busyCursorDisabled = busyCursorDisabled;
}
bool busyCursorDisabled() const
{
return m_busyCursorDisabled;
}
bool busyCursorDisabledDefault() const
{
return !m_settings->defaultBusyCursorValue() && !m_settings->defaultBlinkingValue() && !m_settings->defaultBouncingValue();
}
void setBusyCursorStatic(bool busyCursorStatic)
{
m_busyCursorStatic = busyCursorStatic;
}
bool busyCursorStatic() const
{
return m_busyCursorStatic;
}
bool busyCursorStaticDefault()
{
return m_settings->defaultBusyCursorValue() && !m_settings->defaultBlinkingValue() && !m_settings->defaultBouncingValue();
}
void setBusyCursorBlinking(bool busyCursorBlinking)
{
m_busyCursorBlinking = busyCursorBlinking;
}
bool busyCursorBlinking() const
{
return m_busyCursorBlinking;
}
bool busyCursorBlinkingDefault()
{
return m_settings->defaultBusyCursorValue() && m_settings->defaultBlinkingValue() && !m_settings->defaultBouncingValue();
}
void setBusyCursorBouncing(bool busyCursorBouncing)
{
m_busyCursorBouncing = busyCursorBouncing;
}
bool busyCursorBouncing() const
{
return m_busyCursorBouncing;
}
bool busyCursorBouncingcDefault()
{
return m_settings->defaultBusyCursorValue() && !m_settings->defaultBlinkingValue() && m_settings->defaultBouncingValue();
}
private:
LaunchFeedbackSettings *m_settings;
bool m_busyCursorDisabled;
bool m_busyCursorStatic;
bool m_busyCursorBlinking;
bool m_busyCursorBouncing;
};
LaunchFeedbackSettings::LaunchFeedbackSettings(QObject *parent)
: LaunchFeedbackSettingsBase(parent)
, m_settingsStore(new LaunchFeedbackSettingsStore(this))
{
addItemInternal("busyCursorDisabled", m_settingsStore->busyCursorDisabledDefault(), &LaunchFeedbackSettings::busyCursorDisabledChanged);
addItemInternal("busyCursorStatic", m_settingsStore->busyCursorStaticDefault(), &LaunchFeedbackSettings::busyCursorStaticChanged);
addItemInternal("busyCursorBlinking", m_settingsStore->busyCursorBlinkingDefault(), &LaunchFeedbackSettings::busyCursorBlinkingChanged);
addItemInternal("busyCursorBouncing", m_settingsStore->busyCursorBouncingcDefault(), &LaunchFeedbackSettings::busyCursorBouncingChanged);
}
void LaunchFeedbackSettings::addItemInternal(const QByteArray &propertyName, const QVariant &defaultValue, NotifySignalType notifySignal)
{
auto item = new KPropertySkeletonItem(m_settingsStore, propertyName, defaultValue);