bool Q3ListBoxExtraInfo::saveWidgetExtraInfo(DomWidget *ui_widget) { Q3ListBox *listBox = qobject_cast<Q3ListBox*>(widget()); Q_ASSERT(listBox != 0); QList<DomItem *> items; const int childCount = listBox->count(); for (int i = 0; i < childCount; ++i) { DomItem *item = new DomItem(); QList<DomProperty*> properties; DomString *str = new DomString(); str->setText(listBox->text(i)); DomProperty *ptext = new DomProperty(); ptext->setAttributeName(QLatin1String("text")); ptext->setElementString(str); properties.append(ptext); item->setElementProperty(properties); items.append(item); } ui_widget->setElementItem(items); return true; }
void DatabaseInfo::acceptWidget(DomWidget *node) { QHash<QString, DomProperty*> properties = propertyMap(node->elementProperty()); DomProperty *frameworkCode = properties.value(QLatin1String("frameworkCode"), 0); if (frameworkCode && toBool(frameworkCode->elementBool()) == false) return; DomProperty *db = properties.value(QLatin1String("database"), 0); if (db && db->elementStringList()) { QStringList info = db->elementStringList()->elementString(); QString connection = info.size() > 0 ? info.at(0) : QString(); if (connection.isEmpty()) return; m_connections.append(connection); QString table = info.size() > 1 ? info.at(1) : QString(); if (table.isEmpty()) return; m_cursors[connection].append(table); QString field = info.size() > 2 ? info.at(2) : QString(); if (field.isEmpty()) return; m_fields[connection].append(field); } TreeWalker::acceptWidget(node); }
bool Q3ListBoxExtraInfo::loadWidgetExtraInfo(DomWidget *ui_widget) { Q3ListBox *listBox = qobject_cast<Q3ListBox*>(widget()); Q_ASSERT(listBox != 0); QList<DomItem *> items = ui_widget->elementItem(); for (int i = 0; i < items.size(); ++i) { DomItem *item = items.at(i); QHash<QString, DomProperty*> properties = propertyMap(item->elementProperty()); DomProperty *text = properties.value(QLatin1String("text")); DomProperty *pixmap = properties.value(QLatin1String("pixmap")); QString txt = text->elementString()->text(); if (pixmap != 0) { DomResourcePixmap *pix = pixmap->elementPixmap(); QPixmap pixmap(core()->iconCache()->resolveQrcPath(pix->text(), pix->attributeResource(), workingDirectory())); listBox->insertItem(pixmap, txt); } else { listBox->insertItem(txt); } } return true; }
DomItem *Q3ListViewExtraInfo::saveQ3ListViewItem(Q3ListViewItem *item) const { DomItem *pitem = new DomItem(); QList<DomProperty *> properties; const int columnCount = static_cast<Q3ListView*>(widget())->columns(); for (int i = 0; i < columnCount; ++i) { DomString *str = new DomString(); str->setText(item->text(i)); DomProperty *ptext = new DomProperty(); ptext->setAttributeName(QLatin1String("text")); ptext->setElementString(str); properties.append(ptext); } pitem->setElementProperty(properties); QList<DomItem *> items; Q3ListViewItem *child = item->firstChild(); while (child) { items.append(saveQ3ListViewItem(child)); child = child->nextSibling(); } pitem->setElementItem(items); return pitem; }
void Q3ListViewExtraInfo::initializeQ3ListViewItems(const QList<DomItem *> &items, Q3ListViewItem *parentItem) { for (int i=0; i<items.size(); ++i) { DomItem *item = items.at(i); Q3ListViewItem *__item = 0; if (parentItem != 0) __item = new Q3ListViewItem(parentItem); else __item = new Q3ListViewItem(static_cast<Q3ListView*>(widget())); int textCount = 0, pixCount = 0; QList<DomProperty*> properties = item->elementProperty(); for (int i=0; i<properties.size(); ++i) { DomProperty *p = properties.at(i); if (p->attributeName() == QLatin1String("text")) __item->setText(textCount++, p->elementString()->text()); if (p->attributeName() == QLatin1String("pixmap")) { DomResourcePixmap *pix = p->elementPixmap(); QPixmap pixmap(core()->iconCache()->resolveQrcPath(pix->text(), pix->attributeResource(), workingDirectory())); __item->setPixmap(pixCount++, pixmap); } } if (item->elementItem().size()) { __item->setOpen(true); initializeQ3ListViewItems(item->elementItem(), __item); } } }
void QDesignerFormBuilder::applyProperties(QObject *o, const QList<DomProperty*> &properties) { typedef QList<DomProperty*> DomPropertyList; if (properties.empty()) return; const QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), o); const QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core()->extensionManager(), o); const bool changingMetaObject = WidgetFactory::classNameOf(core(), o) == QStringLiteral("QAxWidget"); const QDesignerMetaObjectInterface *meta = core()->introspection()->metaObject(o); const bool dynamicPropertiesAllowed = dynamicSheet && dynamicSheet->dynamicPropertiesAllowed(); QDesignerPropertySheet *designerPropertySheet = qobject_cast<QDesignerPropertySheet *>( core()->extensionManager()->extension(o, Q_TYPEID(QDesignerPropertySheetExtension))); if (designerPropertySheet) { if (designerPropertySheet->pixmapCache()) designerPropertySheet->setPixmapCache(m_pixmapCache); if (designerPropertySheet->iconCache()) designerPropertySheet->setIconCache(m_iconCache); } const DomPropertyList::const_iterator cend = properties.constEnd(); for (DomPropertyList::const_iterator it = properties.constBegin(); it != cend; ++it) { DomProperty *p = *it; QVariant v; if (!readDomEnumerationValue(p, sheet, v)) v = toVariant(o->metaObject(), p); if (v.isNull()) continue; const QString attributeName = p->attributeName(); if (d->applyPropertyInternally(o, attributeName, v)) continue; // refuse fake properties like current tab name (weak test) if (!dynamicPropertiesAllowed) { if (changingMetaObject) // Changes after setting control of QAxWidget meta = core()->introspection()->metaObject(o); if (meta->indexOfProperty(attributeName) == -1) continue; } QObject *obj = o; QAbstractScrollArea *scroll = qobject_cast<QAbstractScrollArea *>(o); if (scroll && attributeName == QStringLiteral("cursor") && scroll->viewport()) obj = scroll->viewport(); // a real property obj->setProperty(attributeName.toUtf8(), v); } }
QT_BEGIN_NAMESPACE inline QHash<QString, DomProperty *> propertyMap(const QList<DomProperty *> &properties) // ### remove me { QHash<QString, DomProperty *> map; for (int i=0; i<properties.size(); ++i) { DomProperty *p = properties.at(i); map.insert(p->attributeName(), p); } return map; }
// Get XML for a new form from the widget box. Change objectName/geometry // properties to be suitable for new forms static QString xmlFromWidgetBox(const QDesignerFormEditorInterface *core, const QString &className, const QString &objectName) { typedef QList<DomProperty*> PropertyList; QDesignerWidgetBoxInterface::Widget widget; const bool found = QDesignerWidgetBox::findWidget(core->widgetBox(), className, QString(), &widget); if (!found) return QString(); QScopedPointer<DomUI> domUI(QDesignerWidgetBox::xmlToUi(className, widget.domXml(), false)); if (domUI.isNull()) return QString(); domUI->setAttributeVersion(QLatin1String("4.0")); DomWidget *domWidget = domUI->elementWidget(); if (!domWidget) return QString(); // Properties: Remove the "objectName" property in favour of the name attribute and check geometry. domWidget->setAttributeName(objectName); const QString geometryProperty = QLatin1String("geometry"); const QString objectNameProperty = QLatin1String("objectName"); PropertyList properties = domWidget->elementProperty(); for (PropertyList::iterator it = properties.begin(); it != properties.end(); ) { DomProperty *property = *it; if (property->attributeName() == objectNameProperty) { // remove "objectName" it = properties.erase(it); delete property; } else { if (property->attributeName() == geometryProperty) { // Make sure form is at least 400, 300 if (DomRect *geom = property->elementRect()) { if (geom->elementWidth() < NewFormWidth) geom->setElementWidth(NewFormWidth); if (geom->elementHeight() < NewFormHeight) geom->setElementHeight(NewFormHeight); } } ++it; } } // Add a window title property DomString *windowTitleString = new DomString; windowTitleString->setText(objectName); DomProperty *windowTitleProperty = new DomProperty; windowTitleProperty->setAttributeName(QLatin1String("windowTitle")); windowTitleProperty->setElementString(windowTitleString); properties.push_back(windowTitleProperty); // ------ domWidget->setElementProperty(properties); // Embed in in DomUI and get string. Omit the version number. domUI->setElementClass(objectName); QString rc; { // Serialize domUI QXmlStreamWriter writer(&rc); writer.setAutoFormatting(true); writer.setAutoFormattingIndent(1); writer.writeStartDocument(); domUI->write(writer); writer.writeEndDocument(); } return rc; }
bool Q3ListViewExtraInfo::saveWidgetExtraInfo(DomWidget *ui_widget) { // ### finish me Q3ListView *listView = qobject_cast<Q3ListView*>(widget()); Q_ASSERT(listView != 0); QList<DomColumn*> columns; Q3Header *header = listView->header(); for (int i=0; i<header->count(); ++i) { DomColumn *c = new DomColumn(); QList<DomProperty*> properties; DomString *str = new DomString(); str->setText(header->label(i)); DomProperty *ptext = new DomProperty(); ptext->setAttributeName(QLatin1String("text")); ptext->setElementString(str); DomProperty *pclickable = new DomProperty(); pclickable->setAttributeName(QLatin1String("clickable")); pclickable->setElementBool(header->isClickEnabled(i) ? QLatin1String("true") : QLatin1String("false")); DomProperty *presizable = new DomProperty(); presizable->setAttributeName(QLatin1String("resizable")); presizable->setElementBool(header->isResizeEnabled(i) ? QLatin1String("true") : QLatin1String("false")); properties.append(ptext); properties.append(pclickable); properties.append(presizable); c->setElementProperty(properties); columns.append(c); } ui_widget->setElementColumn(columns); QList<DomItem *> items; Q3ListViewItem *child = listView->firstChild(); while (child) { items.append(saveQ3ListViewItem(child)); child = child->nextSibling(); } ui_widget->setElementItem(items); return true; }
bool Q3TableExtraInfo::loadWidgetExtraInfo(DomWidget *ui_widget) { Q_UNUSED(ui_widget); Q3Table *table = qobject_cast<Q3Table*>(widget()); Q_ASSERT(table != 0); Q3Header *hHeader = table->horizontalHeader(); QList<DomColumn*> columns = ui_widget->elementColumn(); for (int i=0; i<columns.size(); ++i) { DomColumn *column = columns.at(i); QHash<QString, DomProperty*> properties = propertyMap(column->elementProperty()); DomProperty *text = properties.value(QLatin1String("text")); DomProperty *pixmap = properties.value(QLatin1String("pixmap")); QString txt = text->elementString()->text(); if (pixmap != 0) { DomResourcePixmap *pix = pixmap->elementPixmap(); QIcon icon(core()->iconCache()->resolveQrcPath(pix->text(), pix->attributeResource(), workingDirectory())); hHeader->setLabel(i, icon, txt); } else { hHeader->setLabel(i, txt); } } Q3Header *vHeader = table->verticalHeader(); QList<DomRow*> rows = ui_widget->elementRow(); for (int i=0; i<rows.size(); ++i) { DomRow *row = rows.at(i); QHash<QString, DomProperty*> properties = propertyMap(row->elementProperty()); DomProperty *text = properties.value(QLatin1String("text")); DomProperty *pixmap = properties.value(QLatin1String("pixmap")); QString txt = text->elementString()->text(); if (pixmap != 0) { DomResourcePixmap *pix = pixmap->elementPixmap(); QIcon icon(core()->iconCache()->resolveQrcPath(pix->text(), pix->attributeResource(), workingDirectory())); vHeader->setLabel(i, icon, txt); } else { vHeader->setLabel(i, txt); } } return true; }
void Q3IconViewExtraInfo::initializeQ3IconViewItems(const QList<DomItem *> &items) { Q3IconView *iconView = qobject_cast<Q3IconView*>(widget()); Q_ASSERT(iconView != 0); for (int i=0; i<items.size(); ++i) { DomItem *item = items.at(i); Q3IconViewItem *__item = new Q3IconViewItem(iconView); QList<DomProperty*> properties = item->elementProperty(); for (int i=0; i<properties.size(); ++i) { DomProperty *p = properties.at(i); if (p->attributeName() == QLatin1String("text")) __item->setText(p->elementString()->text()); if (p->attributeName() == QLatin1String("pixmap")) { DomResourcePixmap *pix = p->elementPixmap(); QPixmap pixmap(core()->iconCache()->resolveQrcPath(pix->text(), pix->attributeResource(), workingDirectory())); __item->setPixmap(pixmap); } } } }
bool Q3ListViewExtraInfo::loadWidgetExtraInfo(DomWidget *ui_widget) { Q3ListView *listView = qobject_cast<Q3ListView*>(widget()); Q_ASSERT(listView != 0); Q3Header *header = listView->header(); QList<DomColumn*> columns = ui_widget->elementColumn(); for (int i=0; i<columns.size(); ++i) { DomColumn *column = columns.at(i); QHash<QString, DomProperty*> properties = propertyMap(column->elementProperty()); DomProperty *text = properties.value(QLatin1String("text")); DomProperty *pixmap = properties.value(QLatin1String("pixmap")); DomProperty *clickable = properties.value(QLatin1String("clickable")); DomProperty *resizable = properties.value(QLatin1String("resizable")); QString txt = text->elementString()->text(); if (pixmap != 0) { DomResourcePixmap *pix = pixmap->elementPixmap(); QIcon icon(core()->iconCache()->resolveQrcPath(pix->text(), pix->attributeResource(), workingDirectory())); listView->addColumn(icon, txt); } else { listView->addColumn(txt); } if (clickable != 0) { header->setClickEnabled(clickable->elementBool() == QLatin1String("true"), header->count() - 1); } if (resizable != 0) { header->setResizeEnabled(resizable->elementBool() == QLatin1String("true"), header->count() - 1); } } if (ui_widget->elementItem().size()) { initializeQ3ListViewItems(ui_widget->elementItem()); } return true; }
bool Q3TableExtraInfo::saveWidgetExtraInfo(DomWidget *ui_widget) { Q_UNUSED(ui_widget); Q3Table *table = qobject_cast<Q3Table*>(widget()); Q_ASSERT(table != 0); Q3Header *hHeader = table->horizontalHeader(); QList<DomColumn*> columns; for (int i=0; i<hHeader->count(); ++i) { DomColumn *column = new DomColumn(); QList<DomProperty *> properties; DomProperty *property = new DomProperty(); DomString *string = new DomString(); string->setText(hHeader->label(i)); property->setElementString(string); property->setAttributeName("text"); properties.append(property); column->setElementProperty(properties); columns.append(column); } ui_widget->setElementColumn(columns); Q3Header *vHeader = table->verticalHeader(); QList<DomRow*> rows; for (int i=0; i<vHeader->count(); ++i) { DomRow *row = new DomRow(); QList<DomProperty *> properties; DomProperty *property = new DomProperty(); DomString *string = new DomString(); string->setText(vHeader->label(i)); property->setElementString(string); property->setAttributeName("text"); properties.append(property); row->setElementProperty(properties); rows.append(row); } ui_widget->setElementRow(rows); return true; }
bool Q3IconViewExtraInfo::saveWidgetExtraInfo(DomWidget *ui_widget) { // ### finish me Q3IconView *iconView = qobject_cast<Q3IconView*>(widget()); Q_ASSERT(iconView != 0); QList<DomItem*> ui_items; Q3IconViewItem *__item = iconView->firstItem(); while (__item != 0) { DomItem *ui_item = new DomItem(); QList<DomProperty*> properties; // text property DomProperty *ptext = new DomProperty(); DomString *str = new DomString(); str->setText(__item->text()); ptext->setAttributeName(QLatin1String("text")); ptext->setElementString(str); properties.append(ptext); ui_item->setElementProperty(properties); ui_items.append(ui_item); if (__item->pixmap() != 0 && core()->iconCache()) { QPixmap pix = *__item->pixmap(); QString filePath = core()->iconCache()->pixmapToFilePath(pix); QString qrcPath = core()->iconCache()->pixmapToQrcPath(pix); DomResourcePixmap *ui_pix = new DomResourcePixmap(); if (!qrcPath.isEmpty()) ui_pix->setAttributeResource(qrcPath); ui_pix->setText(filePath); DomProperty *ppix = new DomProperty(); ppix->setAttributeName(QLatin1String("pixmap")); ppix->setElementPixmap(ui_pix); properties.append(ppix); } __item = __item->nextItem(); } ui_widget->setElementItem(ui_items); return true; }
// Set a fixed size on a XML template QString WidgetDataBase::scaleFormTemplate(const QString &xml, const QSize &size, bool fixed) { typedef QList<DomProperty*> PropertyList; DomUI *domUI = QDesignerWidgetBox::xmlToUi(QLatin1String("Form"), xml, false); if (!domUI) return QString(); DomWidget *domWidget = domUI->elementWidget(); if (!domWidget) return QString(); // Properties: Find/Ensure the geometry, minimum and maximum sizes properties const QString geometryPropertyName = QLatin1String("geometry"); const QString minimumSizePropertyName = QLatin1String("minimumSize"); const QString maximumSizePropertyName = QLatin1String("maximumSize"); DomProperty *geomProperty = 0; DomProperty *minimumSizeProperty = 0; DomProperty *maximumSizeProperty = 0; PropertyList properties = domWidget->elementProperty(); const PropertyList::const_iterator cend = properties.constEnd(); for (PropertyList::const_iterator it = properties.constBegin(); it != cend; ++it) { const QString name = (*it)->attributeName(); if (name == geometryPropertyName) { geomProperty = *it; } else { if (name == minimumSizePropertyName) { minimumSizeProperty = *it; } else { if (name == maximumSizePropertyName) maximumSizeProperty = *it; } } } if (!geomProperty) { geomProperty = new DomProperty; geomProperty->setAttributeName(geometryPropertyName); geomProperty->setElementRect(new DomRect); properties.push_front(geomProperty); } if (fixed) { if (!minimumSizeProperty) { minimumSizeProperty = new DomProperty; minimumSizeProperty->setAttributeName(minimumSizePropertyName); minimumSizeProperty->setElementSize(new DomSize); properties.push_back(minimumSizeProperty); } if (!maximumSizeProperty) { maximumSizeProperty = new DomProperty; maximumSizeProperty->setAttributeName(maximumSizePropertyName); maximumSizeProperty->setElementSize(new DomSize); properties.push_back(maximumSizeProperty); } } // Set values of geometry, minimum and maximum sizes properties const int width = size.width(); const int height = size.height(); if (DomRect *geom = geomProperty->elementRect()) { geom->setElementWidth(width); geom->setElementHeight(height); } if (fixed) { if (DomSize *s = minimumSizeProperty->elementSize()) { s->setElementWidth(width); s->setElementHeight(height); } if (DomSize *s = maximumSizeProperty->elementSize()) { s->setElementWidth(width); s->setElementHeight(height); } } // write back domWidget->setElementProperty(properties); QString rc; { // serialize domUI QXmlStreamWriter writer(&rc); writer.setAutoFormatting(true); writer.setAutoFormattingIndent(1); writer.writeStartDocument(); domUI->write(writer); writer.writeEndDocument(); } delete domUI; return rc; }