Fix calling multiple time slot VPropertyFormView::dataSubmitted.
--HG-- branch : feature
This commit is contained in:
parent
c48c627682
commit
a8a99febf4
|
@ -35,6 +35,7 @@
|
||||||
#include "../libs/vpropertyexplorer/plugins/vnumberproperty.h"
|
#include "../libs/vpropertyexplorer/plugins/vnumberproperty.h"
|
||||||
#include "../libs/vpropertyexplorer/plugins/vstringproperty.h"
|
#include "../libs/vpropertyexplorer/plugins/vstringproperty.h"
|
||||||
#include "../libs/vpropertyexplorer/plugins/vpointfproperty.h"
|
#include "../libs/vpropertyexplorer/plugins/vpointfproperty.h"
|
||||||
|
#include "../libs/vpropertyexplorer/plugins/venumproperty.h"
|
||||||
|
|
||||||
#include <QDockWidget>
|
#include <QDockWidget>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
|
@ -138,6 +139,10 @@ void VToolOptionsPropertyBrowser::userChangedData(VProperty *property)
|
||||||
{
|
{
|
||||||
currentItem->setPos(variant.toPointF());
|
currentItem->setPos(variant.toPointF());
|
||||||
}
|
}
|
||||||
|
// else if (id == QLatin1String("list"))
|
||||||
|
// {
|
||||||
|
// qDebug()<<prop->data(VProperty::DPC_Data, Qt::DisplayRole);
|
||||||
|
// }
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// case VGraphicsSimpleTextItem::Type:
|
// case VGraphicsSimpleTextItem::Type:
|
||||||
|
@ -206,6 +211,11 @@ void VToolOptionsPropertyBrowser::ShowItemOptions(QGraphicsItem *item)
|
||||||
VPointFProperty* itemPosition = new VPointFProperty(tr("Position"));
|
VPointFProperty* itemPosition = new VPointFProperty(tr("Position"));
|
||||||
itemPosition->setValue(i->pos());
|
itemPosition->setValue(i->pos());
|
||||||
AddProperty(itemPosition, QLatin1String("position"));
|
AddProperty(itemPosition, QLatin1String("position"));
|
||||||
|
|
||||||
|
// VEnumProperty *enumProperty = new VEnumProperty(tr("list"));
|
||||||
|
// QStringList list = QStringList()<<"a1"<<"a2"<<"a3";
|
||||||
|
// enumProperty->setLiterals(list);
|
||||||
|
// AddProperty(enumProperty, QLatin1String("list"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case VGraphicsSimpleTextItem::Type:
|
case VGraphicsSimpleTextItem::Type:
|
||||||
|
|
|
@ -2,14 +2,15 @@
|
||||||
#include "vproperty_p.h"
|
#include "vproperty_p.h"
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
|
||||||
using namespace VPE;
|
using namespace VPE;
|
||||||
|
|
||||||
VEnumProperty::VEnumProperty(const QString& name)
|
VEnumProperty::VEnumProperty(const QString& name)
|
||||||
: VProperty(name, QVariant::Int)
|
: QObject(), VProperty(name, QVariant::Int)
|
||||||
{
|
{
|
||||||
d_ptr->VariantValue = 0;
|
VProperty::d_ptr->VariantValue = 0;
|
||||||
d_ptr->VariantValue.convert(QVariant::Int);
|
VProperty::d_ptr->VariantValue.convert(QVariant::Int);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,7 +20,7 @@ QVariant VEnumProperty::data (int column, int role) const
|
||||||
if(EnumerationLiterals.empty())
|
if(EnumerationLiterals.empty())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
int tmpIndex = d_ptr->VariantValue.toInt();
|
int tmpIndex = VProperty::d_ptr->VariantValue.toInt();
|
||||||
|
|
||||||
if(tmpIndex < 0 || tmpIndex >= EnumerationLiterals.count())
|
if(tmpIndex < 0 || tmpIndex >= EnumerationLiterals.count())
|
||||||
tmpIndex = 0;
|
tmpIndex = 0;
|
||||||
|
@ -41,9 +42,12 @@ QWidget* VEnumProperty::createEditor(QWidget * parent, const QStyleOptionViewIte
|
||||||
QComboBox* tmpEditor = new QComboBox(parent);
|
QComboBox* tmpEditor = new QComboBox(parent);
|
||||||
tmpEditor->clear();
|
tmpEditor->clear();
|
||||||
tmpEditor->addItems(EnumerationLiterals);
|
tmpEditor->addItems(EnumerationLiterals);
|
||||||
tmpEditor->setCurrentIndex(d_ptr->VariantValue.toInt());
|
tmpEditor->setCurrentIndex(VProperty::d_ptr->VariantValue.toInt());
|
||||||
|
connect(tmpEditor, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this,
|
||||||
|
&VEnumProperty::currentIndexChanged);
|
||||||
|
|
||||||
return tmpEditor;
|
VProperty::d_ptr->editor = tmpEditor;
|
||||||
|
return VProperty::d_ptr->editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the data from the widget
|
//! Gets the data from the widget
|
||||||
|
@ -76,7 +80,13 @@ void VEnumProperty::setValue(const QVariant& value)
|
||||||
if(tmpIndex < 0 || tmpIndex >= EnumerationLiterals.count())
|
if(tmpIndex < 0 || tmpIndex >= EnumerationLiterals.count())
|
||||||
tmpIndex = 0;
|
tmpIndex = 0;
|
||||||
|
|
||||||
d_ptr->VariantValue.setValue(tmpIndex);
|
VProperty::d_ptr->VariantValue = tmpIndex;
|
||||||
|
VProperty::d_ptr->VariantValue.convert(QVariant::Int);
|
||||||
|
|
||||||
|
if (VProperty::d_ptr->editor != nullptr)
|
||||||
|
{
|
||||||
|
setEditorData(VProperty::d_ptr->editor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VEnumProperty::type() const
|
QString VEnumProperty::type() const
|
||||||
|
@ -107,3 +117,10 @@ QStringList VEnumProperty::getSettingKeys() const
|
||||||
{
|
{
|
||||||
return QStringList("literals");
|
return QStringList("literals");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VEnumProperty::currentIndexChanged(int index)
|
||||||
|
{
|
||||||
|
Q_UNUSED(index)
|
||||||
|
UserChangeEvent *event = new UserChangeEvent();
|
||||||
|
QCoreApplication::postEvent ( VProperty::d_ptr->editor, event );
|
||||||
|
}
|
||||||
|
|
|
@ -7,8 +7,9 @@
|
||||||
|
|
||||||
namespace VPE{
|
namespace VPE{
|
||||||
|
|
||||||
class VPROPERTYEXPLORERSHARED_EXPORT VEnumProperty : public VProperty
|
class VPROPERTYEXPLORERSHARED_EXPORT VEnumProperty : public QObject, public VProperty
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
//! Constructor
|
//! Constructor
|
||||||
VEnumProperty(const QString& name);
|
VEnumProperty(const QString& name);
|
||||||
|
@ -57,6 +58,9 @@ public:
|
||||||
//! Returns the list of keys of the property's settings
|
//! Returns the list of keys of the property's settings
|
||||||
virtual QStringList getSettingKeys() const;
|
virtual QStringList getSettingKeys() const;
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void currentIndexChanged(int index);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! The list of possible options to choose frome
|
//! The list of possible options to choose frome
|
||||||
QStringList EnumerationLiterals;
|
QStringList EnumerationLiterals;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <QDoubleSpinBox>
|
#include <QDoubleSpinBox>
|
||||||
#include <QSpinBox>
|
#include <QSpinBox>
|
||||||
#include <QSizePolicy>
|
#include <QSizePolicy>
|
||||||
|
#include <QCoreApplication>
|
||||||
|
|
||||||
#include "vproperty_p.h"
|
#include "vproperty_p.h"
|
||||||
|
|
||||||
|
@ -13,18 +14,18 @@ const int VIntegerProperty::StandardMin = -1000000;
|
||||||
const int VIntegerProperty::StandardMax = 1000000;
|
const int VIntegerProperty::StandardMax = 1000000;
|
||||||
|
|
||||||
VIntegerProperty::VIntegerProperty(const QString& name, const QMap<QString, QVariant>& settings)
|
VIntegerProperty::VIntegerProperty(const QString& name, const QMap<QString, QVariant>& settings)
|
||||||
: VProperty(name, QVariant::Int), Min(StandardMin), Max(StandardMax)
|
: QObject(), VProperty(name, QVariant::Int), Min(StandardMin), Max(StandardMax)
|
||||||
{
|
{
|
||||||
VProperty::setSettings(settings);
|
VProperty::setSettings(settings);
|
||||||
d_ptr->VariantValue.setValue(0);
|
VProperty::d_ptr->VariantValue.setValue(0);
|
||||||
d_ptr->VariantValue.convert(QVariant::Int);
|
VProperty::d_ptr->VariantValue.convert(QVariant::Int);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIntegerProperty::VIntegerProperty(const QString &name)
|
VIntegerProperty::VIntegerProperty(const QString &name)
|
||||||
: VProperty(name), Min(StandardMin), Max(StandardMax)
|
: QObject(), VProperty(name), Min(StandardMin), Max(StandardMax)
|
||||||
{
|
{
|
||||||
d_ptr->VariantValue.setValue(0);
|
VProperty::d_ptr->VariantValue.setValue(0);
|
||||||
d_ptr->VariantValue.convert(QVariant::Int);
|
VProperty::d_ptr->VariantValue.convert(QVariant::Int);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns an editor widget, or NULL if it doesn't supply one
|
//! Returns an editor widget, or NULL if it doesn't supply one
|
||||||
|
@ -37,10 +38,12 @@ QWidget* VIntegerProperty::createEditor(QWidget * parent, const QStyleOptionView
|
||||||
tmpEditor->setMinimum(Min);
|
tmpEditor->setMinimum(Min);
|
||||||
tmpEditor->setMaximum(Max);
|
tmpEditor->setMaximum(Max);
|
||||||
tmpEditor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
tmpEditor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
tmpEditor->setValue(d_ptr->VariantValue.toInt());
|
tmpEditor->setValue(VProperty::d_ptr->VariantValue.toInt());
|
||||||
|
connect(tmpEditor, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
|
||||||
|
&VIntegerProperty::valueChanged);
|
||||||
|
|
||||||
d_ptr->editor = tmpEditor;
|
VProperty::d_ptr->editor = tmpEditor;
|
||||||
return d_ptr->editor;
|
return VProperty::d_ptr->editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the data from the widget
|
//! Gets the data from the widget
|
||||||
|
@ -92,6 +95,13 @@ VProperty* VIntegerProperty::clone(bool include_children, VProperty* container)
|
||||||
return VProperty::clone(include_children, container ? container : new VIntegerProperty(getName()));
|
return VProperty::clone(include_children, container ? container : new VIntegerProperty(getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VIntegerProperty::valueChanged(int i)
|
||||||
|
{
|
||||||
|
Q_UNUSED(i)
|
||||||
|
UserChangeEvent *event = new UserChangeEvent();
|
||||||
|
QCoreApplication::postEvent ( VProperty::d_ptr->editor, event );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,17 +112,17 @@ VDoubleProperty::VDoubleProperty(const QString& name, const QMap<QString, QVaria
|
||||||
: VIntegerProperty(name), Precision(StandardPrecision)
|
: VIntegerProperty(name), Precision(StandardPrecision)
|
||||||
{
|
{
|
||||||
VProperty::setSettings(settings);
|
VProperty::setSettings(settings);
|
||||||
d_ptr->VariantValue.setValue(0);
|
VProperty::d_ptr->VariantValue.setValue(0);
|
||||||
d_ptr->VariantValue.convert(QVariant::Double);
|
VProperty::d_ptr->VariantValue.convert(QVariant::Double);
|
||||||
d_ptr->PropertyVariantType = QVariant::Double;
|
VProperty::d_ptr->PropertyVariantType = QVariant::Double;
|
||||||
}
|
}
|
||||||
|
|
||||||
VDoubleProperty::VDoubleProperty(const QString &name)
|
VDoubleProperty::VDoubleProperty(const QString &name)
|
||||||
: VIntegerProperty(name), Precision(StandardPrecision)
|
: VIntegerProperty(name), Precision(StandardPrecision)
|
||||||
{
|
{
|
||||||
d_ptr->VariantValue.setValue(0);
|
VProperty::d_ptr->VariantValue.setValue(0);
|
||||||
d_ptr->VariantValue.convert(QVariant::Double);
|
VProperty::d_ptr->VariantValue.convert(QVariant::Double);
|
||||||
d_ptr->PropertyVariantType = QVariant::Double;
|
VProperty::d_ptr->PropertyVariantType = QVariant::Double;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Returns an editor widget, or NULL if it doesn't supply one
|
//! Returns an editor widget, or NULL if it doesn't supply one
|
||||||
|
@ -125,10 +135,12 @@ QWidget* VDoubleProperty::createEditor(QWidget * parent, const QStyleOptionViewI
|
||||||
tmpEditor->setMaximum(Max);
|
tmpEditor->setMaximum(Max);
|
||||||
tmpEditor->setDecimals(Precision);
|
tmpEditor->setDecimals(Precision);
|
||||||
tmpEditor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
tmpEditor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||||
tmpEditor->setValue(d_ptr->VariantValue.toDouble());
|
tmpEditor->setValue(VProperty::d_ptr->VariantValue.toDouble());
|
||||||
|
connect(tmpEditor, static_cast<void (QDoubleSpinBox::*)(double)>(&QDoubleSpinBox::valueChanged), this,
|
||||||
|
&VIntegerProperty::valueChanged);
|
||||||
|
|
||||||
d_ptr->editor = tmpEditor;
|
VProperty::d_ptr->editor = tmpEditor;
|
||||||
return d_ptr->editor;
|
return VProperty::d_ptr->editor;
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Gets the data from the widget
|
//! Gets the data from the widget
|
||||||
|
|
|
@ -8,8 +8,9 @@ namespace VPE {
|
||||||
|
|
||||||
|
|
||||||
//! Class for holding an integer property
|
//! Class for holding an integer property
|
||||||
class VPROPERTYEXPLORERSHARED_EXPORT VIntegerProperty : public VProperty
|
class VPROPERTYEXPLORERSHARED_EXPORT VIntegerProperty : public QObject, public VProperty
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
VIntegerProperty(const QString& name, const QMap<QString, QVariant>& settings);
|
VIntegerProperty(const QString& name, const QMap<QString, QVariant>& settings);
|
||||||
|
|
||||||
|
@ -49,7 +50,8 @@ public:
|
||||||
//! \param container If a property is being passed here, no new VProperty is being created but instead it is tried to fill all the data into container. This can also be used when subclassing this function.
|
//! \param container If a property is being passed here, no new VProperty is being created but instead it is tried to fill all the data into container. This can also be used when subclassing this function.
|
||||||
//! \return Returns the newly created property (or container, if it was not NULL)
|
//! \return Returns the newly created property (or container, if it was not NULL)
|
||||||
virtual VProperty* clone(bool include_children = true, VProperty* container = NULL) const;
|
virtual VProperty* clone(bool include_children = true, VProperty* container = NULL) const;
|
||||||
|
public slots:
|
||||||
|
void valueChanged(int i);
|
||||||
protected:
|
protected:
|
||||||
int Min, Max;
|
int Min, Max;
|
||||||
|
|
||||||
|
@ -61,6 +63,7 @@ protected:
|
||||||
//! Class for holding a double property
|
//! Class for holding a double property
|
||||||
class VPROPERTYEXPLORERSHARED_EXPORT VDoubleProperty : public VIntegerProperty
|
class VPROPERTYEXPLORERSHARED_EXPORT VDoubleProperty : public VIntegerProperty
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
VDoubleProperty(const QString& name, const QMap<QString, QVariant>& settings);
|
VDoubleProperty(const QString& name, const QMap<QString, QVariant>& settings);
|
||||||
|
|
||||||
|
|
|
@ -122,8 +122,6 @@ void VPropertyFormView::dataSubmitted(VProperty *property)
|
||||||
if(tmpModel && d_ptr->UpdateEditors) {
|
if(tmpModel && d_ptr->UpdateEditors) {
|
||||||
static_cast<VPropertyFormViewPrivate*>(d_ptr)->IgnoreDataChangedSignal = true;
|
static_cast<VPropertyFormViewPrivate*>(d_ptr)->IgnoreDataChangedSignal = true;
|
||||||
tmpModel->onDataChangedByModel(property);
|
tmpModel->onDataChangedByModel(property);
|
||||||
tmpModel->showDataChangedByEditor(property);
|
|
||||||
|
|
||||||
static_cast<VPropertyFormViewPrivate*>(d_ptr)->IgnoreDataChangedSignal = false;
|
static_cast<VPropertyFormViewPrivate*>(d_ptr)->IgnoreDataChangedSignal = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,7 +169,8 @@ void VPropertyFormView::connectPropertyFormWidget(VPropertyFormWidget *widget)
|
||||||
if(!widget)
|
if(!widget)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
connect(widget, SIGNAL(propertyDataSubmitted(VProperty*)), this, SLOT(dataSubmitted(VProperty*)));
|
connect(widget, &VPropertyFormWidget::propertyDataSubmitted, this, &VPropertyFormView::dataSubmitted,
|
||||||
|
Qt::UniqueConnection);
|
||||||
QList<VPropertyFormWidget*> tmpList = widget->getChildPropertyFormWidgets();
|
QList<VPropertyFormWidget*> tmpList = widget->getChildPropertyFormWidgets();
|
||||||
|
|
||||||
foreach(VPropertyFormWidget* tmpEditorWidget, tmpList) {
|
foreach(VPropertyFormWidget* tmpEditorWidget, tmpList) {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include "vproperty.h"
|
#include "vproperty.h"
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
using namespace VPE;
|
using namespace VPE;
|
||||||
|
|
||||||
|
@ -125,10 +126,10 @@ void VPropertyFormWidget::commitData(int row)
|
||||||
tmpEditorWidget.FormWidget->commitData();
|
tmpEditorWidget.FormWidget->commitData();
|
||||||
else if(tmpEditorWidget.Editor && tmpProperty) {
|
else if(tmpEditorWidget.Editor && tmpProperty) {
|
||||||
QVariant newValue = tmpProperty->getEditorData(tmpEditorWidget.Editor);
|
QVariant newValue = tmpProperty->getEditorData(tmpEditorWidget.Editor);
|
||||||
QVariant oldValue = tmpProperty->data(VProperty::DPC_Data);
|
QVariant oldValue = tmpProperty->data(VProperty::DPC_Data, Qt::EditRole);
|
||||||
if (oldValue != newValue)
|
if (oldValue != newValue)
|
||||||
{
|
{
|
||||||
tmpProperty->setValue(tmpProperty->getEditorData(tmpEditorWidget.Editor));
|
tmpProperty->setValue(newValue);
|
||||||
emit propertyDataSubmitted(tmpProperty);
|
emit propertyDataSubmitted(tmpProperty);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -205,6 +206,10 @@ bool VPropertyFormWidget::eventFilter(QObject *object, QEvent *event)
|
||||||
event->accept();
|
event->accept();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return QGroupBox::eventFilter(object, event);
|
||||||
|
}
|
||||||
|
|
||||||
// Default:
|
// Default:
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -230,14 +230,10 @@ void VPropertyModel::onDataChangedByModel(VProperty* property)
|
||||||
if(tmpIndex.isValid())
|
if(tmpIndex.isValid())
|
||||||
{
|
{
|
||||||
emit dataChanged(tmpIndex, tmpIndex);
|
emit dataChanged(tmpIndex, tmpIndex);
|
||||||
|
emit onDataChangedByEditor(property);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VPropertyModel::showDataChangedByEditor(VProperty *property)
|
|
||||||
{
|
|
||||||
emit onDataChangedByEditor(property);
|
|
||||||
}
|
|
||||||
|
|
||||||
const VPropertySet *VPropertyModel::getPropertySet() const
|
const VPropertySet *VPropertyModel::getPropertySet() const
|
||||||
{
|
{
|
||||||
return d_ptr->Properties;
|
return d_ptr->Properties;
|
||||||
|
|
|
@ -124,8 +124,6 @@ public slots:
|
||||||
//! This function causes the views to update the property
|
//! This function causes the views to update the property
|
||||||
void onDataChangedByModel(VProperty* property);
|
void onDataChangedByModel(VProperty* property);
|
||||||
|
|
||||||
void showDataChangedByEditor(VProperty* property);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//! Gets a property by its ModelIndex
|
//! Gets a property by its ModelIndex
|
||||||
virtual QModelIndex getIndexFromProperty(VProperty* property, int column = 0) const;
|
virtual QModelIndex getIndexFromProperty(VProperty* property, int column = 0) const;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user