summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThorbjørn Lindeijer <bjorn@lindeijer.nl>2013-04-10 23:36:59 +0200
committerThorbjørn Lindeijer <bjorn@lindeijer.nl>2013-07-08 14:18:57 +0200
commit4ac977553f2b04a54feb74ebcbc90ef255d38895 (patch)
treeb426ed887797419a41994ab20e68e2e0454d52cb
parent4d83ff38ad836e507730034293d092df40b6d034 (diff)
QtPropertyBrowser: Allow controlling whether to show text for bool values
This was a rather involved patch, but it avoids the need for using private API or duplicating QtBoolEdit (which is in a private header). Apart from adding support for this QtBoolEdit option to the QtCheckBoxFactory and the QtBoolPropertyManager, the setting can also be controlled via the 'textVisible' attribute associated with QtVariantProperty instances. Change-Id: Ia0c694ca852449c74cbe25429df69413211b45a5 Reviewed-by: Jarek Kobus <jaroslaw.kobus@digia.com>
-rw-r--r--qtpropertybrowser/src/qteditorfactory.cpp22
-rw-r--r--qtpropertybrowser/src/qteditorfactory.h1
-rw-r--r--qtpropertybrowser/src/qtpropertymanager.cpp68
-rw-r--r--qtpropertybrowser/src/qtpropertymanager.h3
-rw-r--r--qtpropertybrowser/src/qtvariantproperty.cpp26
-rw-r--r--qtpropertybrowser/src/qtvariantproperty.h1
6 files changed, 109 insertions, 12 deletions
diff --git a/qtpropertybrowser/src/qteditorfactory.cpp b/qtpropertybrowser/src/qteditorfactory.cpp
index afd1520..c9a371d 100644
--- a/qtpropertybrowser/src/qteditorfactory.cpp
+++ b/qtpropertybrowser/src/qteditorfactory.cpp
@@ -631,6 +631,7 @@ class QtCheckBoxFactoryPrivate : public EditorFactoryPrivate<QtBoolEdit>
Q_DECLARE_PUBLIC(QtCheckBoxFactory)
public:
void slotPropertyChanged(QtProperty *property, bool value);
+ void slotTextVisibleChanged(QtProperty *property, bool textVisible);
void slotSetValue(bool value);
};
@@ -648,6 +649,22 @@ void QtCheckBoxFactoryPrivate::slotPropertyChanged(QtProperty *property, bool va
}
}
+void QtCheckBoxFactoryPrivate::slotTextVisibleChanged(QtProperty *property, bool textVisible)
+{
+ if (!m_createdEditors.contains(property))
+ return;
+
+ QtBoolPropertyManager *manager = q_ptr->propertyManager(property);
+ if (!manager)
+ return;
+
+ QListIterator<QtBoolEdit *> itEditor(m_createdEditors[property]);
+ while (itEditor.hasNext()) {
+ QtBoolEdit *editor = itEditor.next();
+ editor->setTextVisible(textVisible);
+ }
+}
+
void QtCheckBoxFactoryPrivate::slotSetValue(bool value)
{
QObject *object = q_ptr->sender();
@@ -702,6 +719,8 @@ void QtCheckBoxFactory::connectPropertyManager(QtBoolPropertyManager *manager)
{
connect(manager, SIGNAL(valueChanged(QtProperty *, bool)),
this, SLOT(slotPropertyChanged(QtProperty *, bool)));
+ connect(manager, SIGNAL(textVisibleChanged(QtProperty *, bool)),
+ this, SLOT(slotTextVisibleChanged(QtProperty *, bool)));
}
/*!
@@ -714,6 +733,7 @@ QWidget *QtCheckBoxFactory::createEditor(QtBoolPropertyManager *manager, QtPrope
{
QtBoolEdit *editor = d_ptr->createEditor(property, parent);
editor->setChecked(manager->value(property));
+ editor->setTextVisible(manager->textVisible(property));
connect(editor, SIGNAL(toggled(bool)), this, SLOT(slotSetValue(bool)));
connect(editor, SIGNAL(destroyed(QObject *)),
@@ -730,6 +750,8 @@ void QtCheckBoxFactory::disconnectPropertyManager(QtBoolPropertyManager *manager
{
disconnect(manager, SIGNAL(valueChanged(QtProperty *, bool)),
this, SLOT(slotPropertyChanged(QtProperty *, bool)));
+ disconnect(manager, SIGNAL(textVisibleChanged(QtProperty *, bool)),
+ this, SLOT(slotTextVisibleChanged(QtProperty *, bool)));
}
// QtDoubleSpinBoxFactory
diff --git a/qtpropertybrowser/src/qteditorfactory.h b/qtpropertybrowser/src/qteditorfactory.h
index 37204ce..cbb2077 100644
--- a/qtpropertybrowser/src/qteditorfactory.h
+++ b/qtpropertybrowser/src/qteditorfactory.h
@@ -139,6 +139,7 @@ private:
Q_DECLARE_PRIVATE(QtCheckBoxFactory)
Q_DISABLE_COPY(QtCheckBoxFactory)
Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, bool))
+ Q_PRIVATE_SLOT(d_func(), void slotTextVisibleChanged(QtProperty *, bool))
Q_PRIVATE_SLOT(d_func(), void slotSetValue(bool))
Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *))
};
diff --git a/qtpropertybrowser/src/qtpropertymanager.cpp b/qtpropertybrowser/src/qtpropertymanager.cpp
index cfc54ef..e50cafc 100644
--- a/qtpropertybrowser/src/qtpropertymanager.cpp
+++ b/qtpropertybrowser/src/qtpropertymanager.cpp
@@ -1600,7 +1600,16 @@ class QtBoolPropertyManagerPrivate
public:
QtBoolPropertyManagerPrivate();
- QMap<const QtProperty *, bool> m_values;
+ struct Data
+ {
+ Data() : val(false), textVisible(true) {}
+ bool val;
+ bool textVisible;
+ };
+
+ typedef QMap<const QtProperty *, Data> PropertyValueMap;
+ PropertyValueMap m_values;
+
const QIcon m_checkedIcon;
const QIcon m_uncheckedIcon;
};
@@ -1663,7 +1672,12 @@ QtBoolPropertyManager::~QtBoolPropertyManager()
*/
bool QtBoolPropertyManager::value(const QtProperty *property) const
{
- return d_ptr->m_values.value(property, false);
+ return getValue<bool>(d_ptr->m_values, property, false);
+}
+
+bool QtBoolPropertyManager::textVisible(const QtProperty *property) const
+{
+ return getData<bool>(d_ptr->m_values, &QtBoolPropertyManagerPrivate::Data::textVisible, property, false);
}
/*!
@@ -1671,13 +1685,17 @@ bool QtBoolPropertyManager::value(const QtProperty *property) const
*/
QString QtBoolPropertyManager::valueText(const QtProperty *property) const
{
- const QMap<const QtProperty *, bool>::const_iterator it = d_ptr->m_values.constFind(property);
+ const QtBoolPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
return QString();
+ const QtBoolPropertyManagerPrivate::Data &data = it.value();
+ if (!data.textVisible)
+ return QString();
+
static const QString trueText = tr("True");
static const QString falseText = tr("False");
- return it.value() ? trueText : falseText;
+ return data.val ? trueText : falseText;
}
/*!
@@ -1685,11 +1703,11 @@ QString QtBoolPropertyManager::valueText(const QtProperty *property) const
*/
QIcon QtBoolPropertyManager::valueIcon(const QtProperty *property) const
{
- const QMap<const QtProperty *, bool>::const_iterator it = d_ptr->m_values.constFind(property);
+ const QtBoolPropertyManagerPrivate::PropertyValueMap::const_iterator it = d_ptr->m_values.constFind(property);
if (it == d_ptr->m_values.constEnd())
return QIcon();
- return it.value() ? d_ptr->m_checkedIcon : d_ptr->m_uncheckedIcon;
+ return it.value().val ? d_ptr->m_checkedIcon : d_ptr->m_uncheckedIcon;
}
/*!
@@ -1701,10 +1719,38 @@ QIcon QtBoolPropertyManager::valueIcon(const QtProperty *property) const
*/
void QtBoolPropertyManager::setValue(QtProperty *property, bool val)
{
- setSimpleValue<bool, bool, QtBoolPropertyManager>(d_ptr->m_values, this,
- &QtBoolPropertyManager::propertyChanged,
- &QtBoolPropertyManager::valueChanged,
- property, val);
+ const QtBoolPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ if (it == d_ptr->m_values.end())
+ return;
+
+ QtBoolPropertyManagerPrivate::Data data = it.value();
+
+ if (data.val == val)
+ return;
+
+ data.val = val;
+ it.value() = data;
+
+ emit propertyChanged(property);
+ emit valueChanged(property, data.val);
+}
+
+void QtBoolPropertyManager::setTextVisible(QtProperty *property, bool textVisible)
+{
+ const QtBoolPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property);
+ if (it == d_ptr->m_values.end())
+ return;
+
+ QtBoolPropertyManagerPrivate::Data data = it.value();
+
+ if (data.textVisible == textVisible)
+ return;
+
+ data.textVisible = textVisible;
+ it.value() = data;
+
+ emit propertyChanged(property);
+ emit textVisibleChanged(property, data.textVisible);
}
/*!
@@ -1712,7 +1758,7 @@ void QtBoolPropertyManager::setValue(QtProperty *property, bool val)
*/
void QtBoolPropertyManager::initializeProperty(QtProperty *property)
{
- d_ptr->m_values[property] = false;
+ d_ptr->m_values[property] = QtBoolPropertyManagerPrivate::Data();
}
/*!
diff --git a/qtpropertybrowser/src/qtpropertymanager.h b/qtpropertybrowser/src/qtpropertymanager.h
index 6eff26e..d6b94cc 100644
--- a/qtpropertybrowser/src/qtpropertymanager.h
+++ b/qtpropertybrowser/src/qtpropertymanager.h
@@ -115,11 +115,14 @@ public:
~QtBoolPropertyManager();
bool value(const QtProperty *property) const;
+ bool textVisible(const QtProperty *property) const;
public Q_SLOTS:
void setValue(QtProperty *property, bool val);
+ void setTextVisible(QtProperty *property, bool textVisible);
Q_SIGNALS:
void valueChanged(QtProperty *property, bool val);
+ void textVisibleChanged(QtProperty *property, bool);
protected:
QString valueText(const QtProperty *property) const;
QIcon valueIcon(const QtProperty *property) const;
diff --git a/qtpropertybrowser/src/qtvariantproperty.cpp b/qtpropertybrowser/src/qtvariantproperty.cpp
index d2c02e9..d7fe111 100644
--- a/qtpropertybrowser/src/qtvariantproperty.cpp
+++ b/qtpropertybrowser/src/qtvariantproperty.cpp
@@ -344,6 +344,7 @@ public:
void slotFlagChanged(QtProperty *property, int val);
void slotFlagNamesChanged(QtProperty *property, const QStringList &flagNames);
void slotReadOnlyChanged(QtProperty *property, bool readOnly);
+ void slotTextVisibleChanged(QtProperty *property, bool textVisible);
void slotPropertyInserted(QtProperty *property, QtProperty *parent, QtProperty *after);
void slotPropertyRemoved(QtProperty *property, QtProperty *parent);
@@ -375,6 +376,7 @@ public:
const QString m_regExpAttribute;
const QString m_echoModeAttribute;
const QString m_readOnlyAttribute;
+ const QString m_textVisibleAttribute;
};
QtVariantPropertyManagerPrivate::QtVariantPropertyManagerPrivate() :
@@ -388,7 +390,8 @@ QtVariantPropertyManagerPrivate::QtVariantPropertyManagerPrivate() :
m_minimumAttribute(QLatin1String("minimum")),
m_regExpAttribute(QLatin1String("regExp")),
m_echoModeAttribute(QLatin1String("echoMode")),
- m_readOnlyAttribute(QLatin1String("readOnly"))
+ m_readOnlyAttribute(QLatin1String("readOnly")),
+ m_textVisibleAttribute(QLatin1String("textVisible"))
{
}
@@ -556,6 +559,12 @@ void QtVariantPropertyManagerPrivate::slotReadOnlyChanged(QtProperty *property,
emit q_ptr->attributeChanged(varProp, m_readOnlyAttribute, QVariant(readOnly));
}
+void QtVariantPropertyManagerPrivate::slotTextVisibleChanged(QtProperty *property, bool textVisible)
+{
+ if (QtVariantProperty *varProp = m_internalToProperty.value(property, 0))
+ emit q_ptr->attributeChanged(varProp, m_textVisibleAttribute, QVariant(textVisible));
+}
+
void QtVariantPropertyManagerPrivate::slotValueChanged(QtProperty *property, const QDate &val)
{
valueChanged(property, QVariant(val));
@@ -840,6 +849,10 @@ void QtVariantPropertyManagerPrivate::slotFlagNamesChanged(QtProperty *property,
\o decimals
\o QVariant::Int
\row
+ \o \c bool
+ \o textVisible
+ \o QVariant::Bool
+ \row
\o QString
\o regExp
\o QVariant::RegExp
@@ -993,9 +1006,12 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
// BoolPropertyManager
QtBoolPropertyManager *boolPropertyManager = new QtBoolPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Bool] = boolPropertyManager;
+ d_ptr->m_typeToAttributeToAttributeType[QVariant::Bool][d_ptr->m_textVisibleAttribute] = QVariant::Bool;
d_ptr->m_typeToValueType[QVariant::Bool] = QVariant::Bool;
connect(boolPropertyManager, SIGNAL(valueChanged(QtProperty *, bool)),
this, SLOT(slotValueChanged(QtProperty *, bool)));
+ connect(boolPropertyManager, SIGNAL(textVisibleChanged(QtProperty*, bool)),
+ this, SLOT(slotTextVisibleChanged(QtProperty*, bool)));
// StringPropertyManager
QtStringPropertyManager *stringPropertyManager = new QtStringPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::String] = stringPropertyManager;
@@ -1502,6 +1518,10 @@ QVariant QtVariantPropertyManager::attributeValue(const QtProperty *property, co
if (attribute == d_ptr->m_readOnlyAttribute)
return doubleManager->isReadOnly(internProp);
return QVariant();
+ } else if (QtBoolPropertyManager *boolManager = qobject_cast<QtBoolPropertyManager *>(manager)) {
+ if (attribute == d_ptr->m_textVisibleAttribute)
+ return boolManager->textVisible(internProp);
+ return QVariant();
} else if (QtStringPropertyManager *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
if (attribute == d_ptr->m_regExpAttribute)
return stringManager->regExp(internProp);
@@ -1753,6 +1773,10 @@ void QtVariantPropertyManager::setAttribute(QtProperty *property,
if (attribute == d_ptr->m_readOnlyAttribute)
doubleManager->setReadOnly(internProp, qVariantValue<bool>(value));
return;
+ } else if (QtBoolPropertyManager *boolManager = qobject_cast<QtBoolPropertyManager *>(manager)) {
+ if (attribute == d_ptr->m_textVisibleAttribute)
+ boolManager->setTextVisible(internProp, qVariantValue<bool>(value));
+ return;
} else if (QtStringPropertyManager *stringManager = qobject_cast<QtStringPropertyManager *>(manager)) {
if (attribute == d_ptr->m_regExpAttribute)
stringManager->setRegExp(internProp, qVariantValue<QRegExp>(value));
diff --git a/qtpropertybrowser/src/qtvariantproperty.h b/qtpropertybrowser/src/qtvariantproperty.h
index 41b28a6..2c09fe9 100644
--- a/qtpropertybrowser/src/qtvariantproperty.h
+++ b/qtpropertybrowser/src/qtvariantproperty.h
@@ -153,6 +153,7 @@ private:
Q_PRIVATE_SLOT(d_func(), void slotValueChanged(QtProperty *, const QCursor &))
Q_PRIVATE_SLOT(d_func(), void slotFlagNamesChanged(QtProperty *, const QStringList &))
Q_PRIVATE_SLOT(d_func(), void slotReadOnlyChanged(QtProperty *, bool))
+ Q_PRIVATE_SLOT(d_func(), void slotTextVisibleChanged(QtProperty *, bool))
Q_PRIVATE_SLOT(d_func(), void slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *))
Q_PRIVATE_SLOT(d_func(), void slotPropertyRemoved(QtProperty *, QtProperty *))
Q_DECLARE_PRIVATE(QtVariantPropertyManager)