// ****************************************************************************************
//
// QPropertyEditor Library
// --------------------------------------
// Copyright (C) 2007 Volker Wiendl
//
// This file is part of the Horde3D Scene Editor.
//
// The QPropertyEditor Library 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 version 3 of the License
//
// The Horde3D Scene Editor 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, see .
//
// ****************************************************************************************
#include "Property.h"
#include "ColorCombo.h"
#include
#include
#include
Property::Property(const QString& name /*= QString()*/, QObject* propertyObject /*= 0*/, QObject* parent /*= 0*/) : QObject(parent),
m_propertyObject(propertyObject) {
setObjectName(name);
}
QVariant Property::value(int /*role = Qt::UserRole*/) const {
if (m_propertyObject)
return m_propertyObject->property(qPrintable(objectName()));
else
return QVariant();
}
void Property::setValue(const QVariant &value) {
if (m_propertyObject)
m_propertyObject->setProperty(qPrintable(objectName()), value);
}
bool Property::isReadOnly() {
if (m_propertyObject && m_propertyObject->metaObject()->property(m_propertyObject->metaObject()->indexOfProperty(qPrintable(objectName()))).isWritable())
return false;
else
return true;
}
QWidget* Property::createEditor(QWidget *parent, const QStyleOptionViewItem &option) {
(void)option;
QWidget* editor = 0;
switch (value().type()) {
case QVariant::Color:
editor = new ColorCombo(parent);
break;
case QVariant::Int:
editor = new QSpinBox(parent);
editor->setProperty("minimum", -INT_MAX);
editor->setProperty("maximum", INT_MAX);
connect(editor, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
break;
case QMetaType::Float:
case QVariant::Double:
editor = new QDoubleSpinBox(parent);
editor->setProperty("minimum", -INT_MAX);
editor->setProperty("maximum", INT_MAX);
connect(editor, SIGNAL(valueChanged(double)), this, SLOT(setValue(double)));
break;
default:
return editor;
}
return editor;
}
bool Property::setEditorData(QWidget *editor, const QVariant &data) {
switch (value().type()) {
case QVariant::Color:
static_cast(editor)->setColor(data.value());
return true;
;
case QVariant::Int:
editor->blockSignals(true);
static_cast(editor)->setValue(data.toInt());
editor->blockSignals(false);
return true;
case QMetaType::Float:
case QVariant::Double:
editor->blockSignals(true);
static_cast(editor)->setValue(data.toDouble());
editor->blockSignals(false);
return true;
default:
return false;
}
return false;
}
QVariant Property::editorData(QWidget *editor) {
switch (value().type()) {
case QVariant::Color:
return QVariant::fromValue(static_cast(editor)->color());
case QVariant::Int:
return QVariant(static_cast(editor)->value());
case QMetaType::Float:
case QVariant::Double:
return QVariant(static_cast(editor)->value());
break;
default:
return QVariant();
}
}
Property* Property::findPropertyObject(QObject* propertyObject) {
if (m_propertyObject == propertyObject)
return this;
for (int i=0; i(children()[i])->findPropertyObject(propertyObject);
if (child)
return child;
}
return 0;
}
void Property::setValue(double value) {
setValue(QVariant(value));
}
void Property::setValue(int value) {
setValue(QVariant(value));
}