void QSimpleResource::addCustomWidgetsToWidgetDatabase(const QDesignerFormEditorInterface *core, QList<DomCustomWidget*>& custom_widget_list) { QDesignerWidgetDataBaseInterface *db = core->widgetDataBase(); for (int i=0; i < custom_widget_list.size(); ) { bool classInserted = false; DomCustomWidget *custom_widget = custom_widget_list[i]; const QString customClassName = custom_widget->elementClass(); const QString base_class = custom_widget->elementExtends(); QString includeFile; IncludeType includeType = IncludeLocal; if (const DomHeader *header = custom_widget->elementHeader()) { includeFile = header->text(); if (header->hasAttributeLocation() && header->attributeLocation() == QStringLiteral("global")) includeType = IncludeGlobal; } const bool domIsContainer = custom_widget->elementContainer(); // Append a new item if (base_class.isEmpty()) { WidgetDataBaseItem *item = new WidgetDataBaseItem(customClassName); item->setPromoted(false); item->setGroup(QCoreApplication::translate("Designer", "Custom Widgets")); item->setIncludeFile(buildIncludeFile(includeFile, includeType)); item->setContainer(domIsContainer); item->setCustom(true); addFakeMethodsToWidgetDataBase(custom_widget, item); db->append(item); custom_widget_list.removeAt(i); classInserted = true; } else { // Create a new entry cloned from base class. Note that this will ignore existing // classes, eg, plugin custom widgets. QDesignerWidgetDataBaseItemInterface *item = appendDerived(db, customClassName, QCoreApplication::translate("Designer", "Promoted Widgets"), base_class, buildIncludeFile(includeFile, includeType), true,true); // Ok, base class found. if (item) { // Hack to accommodate for old UI-files in which "container" is not set properly: // Apply "container" from DOM only if true (else, eg classes from QFrame might not accept // dropping child widgets on them as container=false). This also allows for // QWidget-derived stacked pages. if (domIsContainer) item->setContainer(domIsContainer); addFakeMethodsToWidgetDataBase(custom_widget, static_cast<WidgetDataBaseItem*>(item)); custom_widget_list.removeAt(i); classInserted = true; } } // Skip failed item. if (!classInserted) i++; } }
PromotionParameters NewPromotedClassPanel::promotionParameters() const { PromotionParameters rc; rc.m_baseClass = m_baseClassCombo->currentText(); rc.m_className = m_classNameEdit->text(); rc.m_includeFile = buildIncludeFile(m_includeFileEdit->text(), m_globalIncludeCheckBox->checkState() == Qt::Checked ? IncludeGlobal : IncludeLocal); return rc; }
void PromotionModel::slotItemChanged(QStandardItem * changedItem) { // Retrieve DB item bool referenced; QDesignerWidgetDataBaseItemInterface *dbItem = databaseItem(changedItem, &referenced); Q_ASSERT(dbItem); // Change header or type switch (changedItem->column()) { case ClassNameColumn: emit classNameChanged(dbItem, changedItem->text()); break; case IncludeTypeColumn: case IncludeFileColumn: { // Get both file and type items via parent. const QStandardItem *baseClassItem = changedItem->parent(); const QStandardItem *fileItem = baseClassItem->child(changedItem->row(), IncludeFileColumn); const QStandardItem *typeItem = baseClassItem->child(changedItem->row(), IncludeTypeColumn); emit includeFileChanged(dbItem, buildIncludeFile(fileItem->text(), typeItem->checkState() == Qt::Checked ? IncludeGlobal : IncludeLocal)); } break; } }