void BorderChangeListener::propertyChanged(QtProperty * property) { if (!drawer) return; if (!command) command = new BorderChangeCommand(drawer); QtIntPropertyManager * integerManager = qobject_cast<QtIntPropertyManager*>(property->propertyManager()); if (integerManager) { command->setPropertyValue(property->propertyName(), integerManager->value(property)); return; } QtDoublePropertyManager * doubleManager = qobject_cast<QtDoublePropertyManager*>(property->propertyManager()); if (doubleManager) { command->setPropertyValue(property->propertyName(), doubleManager->value(property)); return; } QtVariantPropertyManager * variantManager = qobject_cast<QtVariantPropertyManager*>(property->propertyManager()); if (variantManager) { command->setPropertyValue(property->propertyName(), variantManager->value(property)); return; } }
void VariantEditorFactory::textPropertyEditTextChanged(const QString &value) { auto textPropertyEdit = qobject_cast<TextPropertyEdit*>(sender()); Q_ASSERT(textPropertyEdit); if (QtProperty *property = mTextPropertyEditToProperty.value(textPropertyEdit)) { QtVariantPropertyManager *manager = propertyManager(property); if (!manager) return; manager->setValue(property, value); } }
void VariantEditorFactory::fileEditFileUrlChanged(const QUrl &value) { FileEdit *fileEdit = qobject_cast<FileEdit*>(sender()); Q_ASSERT(fileEdit); if (QtProperty *property = mFileEditToProperty.value(fileEdit)) { QtVariantPropertyManager *manager = propertyManager(property); if (!manager) return; manager->setValue(property, QVariant::fromValue(FilePath { value })); } }
Inspector::Inspector(QObject *parent, QDockWidget *view) : QObject(parent) , propertyType_(nullptr) { editorFactory_ = new QtVariantEditorFactory(this); propertyTree_ = new QtTreePropertyBrowser(view); QtVariantPropertyManager *propertyMgr = PropertyItemFactory::instance()->getPropertyMgr(); propertyTree_->setFactoryForManager(propertyMgr, editorFactory_); view->setWidget(propertyTree_); propertyType_ = propertyMgr->addProperty(QVariant::String, "type"); propertyType_->setAttribute("readOnly", true); connect(propertyMgr, SIGNAL(valueChanged(QtProperty*,QVariant)), this, SLOT(onPropertyChange(QtProperty*,QVariant))); }
void VariantEditorFactory::slotSetValue(const QString &value) { QObject *object = sender(); QMap<FileEdit *, QtProperty *>::ConstIterator itEditor = mEditorToProperty.constBegin(); while (itEditor != mEditorToProperty.constEnd()) { if (itEditor.key() == object) { QtProperty *property = itEditor.value(); QtVariantPropertyManager *manager = propertyManager(property); if (!manager) return; manager->setValue(property, value); return; } itEditor++; } }
int main(int argc, char **argv) { QApplication app(argc, argv); Test t; QtVariantPropertyManager *variantManager = new VariantManager(); QtVariantProperty *priority = variantManager->addProperty(QVariant::Int, "Priority"); priority->setToolTip("Task Priority"); priority->setAttribute("minimum", 1); priority->setAttribute("maximum", 5); priority->setValue(3); QtVariantProperty *reportType = variantManager->addProperty(QtVariantPropertyManager::enumTypeId(), "Report Type"); QStringList types; types << "Bug" << "Suggestion" << "To Do"; reportType->setAttribute("enumNames", types); reportType->setValue(1); // current value will be "Suggestion" QtVariantProperty *task1 = variantManager->addProperty(QtVariantPropertyManager::groupTypeId(), "Task 1"); task1->addSubProperty(priority); task1->addSubProperty(reportType); QtTreePropertyBrowser *browser = new QtTreePropertyBrowser(); QtVariantEditorFactory *variantFactory = new VariantFactory(); browser->setFactoryForManager(variantManager, variantFactory); browser->addProperty(task1); browser->show(); QtVariantProperty *example = variantManager->addProperty(VariantManager::filePathTypeId(), "Example"); example->setValue("main.cpp"); example->setAttribute("filter", "Source files (*.cpp *.c)"); QObject::connect(variantManager, SIGNAL(valueChanged(QtProperty *, const QVariant &)), &t, SLOT(onValueChanged(QtProperty * , const QVariant &))); task1->addSubProperty(example); return app.exec(); }
void Inspector::setTargetProperty(const std::string &name, const rapidjson::Value &value) { auto it = name2property_.find(name); if(it == name2property_.end()) { return; } QtVariantProperty *property = dynamic_cast<QtVariantProperty*>(it->second); if(property != nullptr) { int valueType = property->valueType(); QVariant qvalue; json2tvalue(qvalue, value, valueType); QtVariantPropertyManager *propertyMgr = PropertyItemFactory::instance()->getPropertyMgr(); propertyMgr->setValue(property, qvalue); } }
int main(int argc, char **argv) { QApplication app(argc, argv); QtVariantPropertyManager *variantManager = new QtVariantPropertyManager(); int i = 0; QtProperty *topItem = variantManager->addProperty(QtVariantPropertyManager::groupTypeId(), QString::number(i++) + QLatin1String(" Group Property")); QtVariantProperty *item = variantManager->addProperty(QVariant::Bool, QString::number(i++) + QLatin1String(" Bool Property")); item->setValue(true); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property")); item->setValue(20); item->setAttribute(QLatin1String("minimum"), 0); item->setAttribute(QLatin1String("maximum"), 100); item->setAttribute(QLatin1String("singleStep"), 10); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property")); item->setValue(1.2345); item->setAttribute(QLatin1String("singleStep"), 0.1); item->setAttribute(QLatin1String("decimals"), 3); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property")); item->setValue("Value"); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Date, QString::number(i++) + QLatin1String(" Date Property")); item->setValue(QDate::currentDate().addDays(2)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Time, QString::number(i++) + QLatin1String(" Time Property")); item->setValue(QTime::currentTime()); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::DateTime, QString::number(i++) + QLatin1String(" DateTime Property")); item->setValue(QDateTime::currentDateTime()); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::KeySequence, QString::number(i++) + QLatin1String(" KeySequence Property")); item->setValue(QKeySequence(Qt::ControlModifier | Qt::Key_Q)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Char, QString::number(i++) + QLatin1String(" Char Property")); item->setValue(QChar(386)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Locale, QString::number(i++) + QLatin1String(" Locale Property")); item->setValue(QLocale(QLocale::Polish, QLocale::Poland)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Point, QString::number(i++) + QLatin1String(" Point Property")); item->setValue(QPoint(10, 10)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::PointF, QString::number(i++) + QLatin1String(" PointF Property")); item->setValue(QPointF(1.2345, -1.23451)); item->setAttribute(QLatin1String("decimals"), 3); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Size, QString::number(i++) + QLatin1String(" Size Property")); item->setValue(QSize(20, 20)); item->setAttribute(QLatin1String("minimum"), QSize(10, 10)); item->setAttribute(QLatin1String("maximum"), QSize(30, 30)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::SizeF, QString::number(i++) + QLatin1String(" SizeF Property")); item->setValue(QSizeF(1.2345, 1.2345)); item->setAttribute(QLatin1String("decimals"), 3); item->setAttribute(QLatin1String("minimum"), QSizeF(0.12, 0.34)); item->setAttribute(QLatin1String("maximum"), QSizeF(20.56, 20.78)); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Rect, QString::number(i++) + QLatin1String(" Rect Property")); item->setValue(QRect(10, 10, 20, 20)); topItem->addSubProperty(item); item->setAttribute(QLatin1String("constraint"), QRect(0, 0, 50, 50)); item = variantManager->addProperty(QVariant::RectF, QString::number(i++) + QLatin1String(" RectF Property")); item->setValue(QRectF(1.2345, 1.2345, 1.2345, 1.2345)); topItem->addSubProperty(item); item->setAttribute(QLatin1String("constraint"), QRectF(0, 0, 50, 50)); item->setAttribute(QLatin1String("decimals"), 3); item = variantManager->addProperty(QtVariantPropertyManager::enumTypeId(), QString::number(i++) + QLatin1String(" Enum Property")); QStringList enumNames; enumNames << "Enum0" << "Enum1" << "Enum2"; item->setAttribute(QLatin1String("enumNames"), enumNames); item->setValue(1); topItem->addSubProperty(item); item = variantManager->addProperty(QtVariantPropertyManager::flagTypeId(), QString::number(i++) + QLatin1String(" Flag Property")); QStringList flagNames; flagNames << "Flag0" << "Flag1" << "Flag2"; item->setAttribute(QLatin1String("flagNames"), flagNames); item->setValue(5); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::SizePolicy, QString::number(i++) + QLatin1String(" SizePolicy Property")); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Font, QString::number(i++) + QLatin1String(" Font Property")); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Cursor, QString::number(i++) + QLatin1String(" Cursor Property")); topItem->addSubProperty(item); item = variantManager->addProperty(QVariant::Color, QString::number(i++) + QLatin1String(" Color Property")); topItem->addSubProperty(item); QtVariantEditorFactory *variantFactory = new QtVariantEditorFactory(); QtTreePropertyBrowser *variantEditor = new QtTreePropertyBrowser(); variantEditor->setFactoryForManager(variantManager, variantFactory); variantEditor->addProperty(topItem); variantEditor->setPropertiesWithoutValueMarked(true); variantEditor->setRootIsDecorated(false); variantEditor->show(); int ret = app.exec(); delete variantManager; delete variantFactory; delete variantEditor; return ret; }
QWidget * BorderDrawersLoader::createEditor(BorderDrawerInterface * drawer, bool createCommands) { if (!drawer) return 0; QtTreePropertyBrowser * browser = new QtTreePropertyBrowser(); BorderChangeListener * listener = new BorderChangeListener(drawer, browser, createCommands); // QVariant type of property QtVariantPropertyManager * variantManager = 0; KVariantEditorFactory * variantFactory = 0; // Integer type of property QtIntPropertyManager * integerManager = 0; KSliderEditFactory * integerFactory = 0; // Double type of property QtDoublePropertyManager * doubleManager = 0; KDoubleSpinBoxFactory * doubleFactory = 0; const QMetaObject * meta = drawer->metaObject(); int propertiesCount = meta->propertyCount(); for (int i = 0; i < propertiesCount; ++i) { QMetaProperty metaProperty = meta->property(i); QString propertyName = drawer->propertyName(metaProperty); if (propertyName.isEmpty()) continue; QtProperty * property; switch (metaProperty.type()) { case QVariant::Int: { if (!integerManager || !integerFactory) { integerManager = new QtIntPropertyManager(browser); integerFactory = new KSliderEditFactory(browser); browser->setFactoryForManager(integerManager, integerFactory); } property = integerManager->addProperty(propertyName); integerManager->setValue(property, metaProperty.read(drawer).toInt()); integerManager->setMinimum(property, drawer->minimumValue(metaProperty).toInt()); integerManager->setMaximum(property, drawer->maximumValue(metaProperty).toInt()); } break; case QVariant::Double: { if (!doubleManager || !doubleFactory) { doubleManager = new QtDoublePropertyManager(browser); doubleFactory = new KDoubleSpinBoxFactory(browser); browser->setFactoryForManager(doubleManager, doubleFactory); } property = doubleManager->addProperty(propertyName); doubleManager->setValue(property, metaProperty.read(drawer).toDouble()); doubleManager->setMinimum(property, drawer->minimumValue(metaProperty).toDouble()); doubleManager->setMaximum(property, drawer->maximumValue(metaProperty).toDouble()); } break; case Enum: { } break; default: { if (!variantManager || !variantFactory) { variantManager = new QtVariantPropertyManager(browser); variantFactory = new KVariantEditorFactory(browser); browser->setFactoryForManager(variantManager, variantFactory); } property = variantManager->addProperty(metaProperty.type(), propertyName); variantManager->setValue(property, metaProperty.read(drawer)); } } browser->addProperty(property); } if (integerManager) { connect(integerFactory, SIGNAL(editingFinished()), listener, SLOT(editingFinished())); connect(integerManager, SIGNAL(propertyChanged(QtProperty*)), listener, SLOT(propertyChanged(QtProperty*))); } if (doubleManager) { connect(doubleFactory, SIGNAL(editingFinished()), listener, SLOT(editingFinished())); connect(doubleManager, SIGNAL(propertyChanged(QtProperty*)), listener, SLOT(propertyChanged(QtProperty*))); } if (variantManager) { connect(variantFactory, SIGNAL(editingFinished()), listener, SLOT(editingFinished())); connect(variantManager, SIGNAL(propertyChanged(QtProperty*)), listener, SLOT(propertyChanged(QtProperty*))); } return browser; }