8#include <QtDesigner/abstractwidgetdatabase.h>
9#include <QtDesigner/abstractpromotioninterface.h>
10#include <QtDesigner/abstractformeditor.h>
12#include <QtGui/qstandarditemmodel.h>
13#include <QtCore/qcoreapplication.h>
18 using StandardItemList = QList<QStandardItem *>;
27 rc.push_back(
new QStandardItem());
34 StandardItemList rc = modelRow();
38 rc[i]->setFlags(Qt::ItemIsEnabled);
48 qdesigner_internal::PromotionModel::ModelData data;
49 data.baseItem = baseItem;
50 data.promotedItem = dbItem;
51 data.referenced = referenced;
53 const QVariant userData = QVariant::fromValue(data);
55 StandardItemList rc = modelRow();
58 rc[
ClassNameColumn]->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
61 const qdesigner_internal::IncludeSpecification spec = qdesigner_internal::includeSpecification(dbItem->includeFile());
63 rc[
IncludeFileColumn]->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable);
66 rc[
IncludeTypeColumn]->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsEditable|Qt::ItemIsUserCheckable);
68 rc[
IncludeTypeColumn]->setCheckState(spec.second == qdesigner_internal::IncludeGlobal ? Qt::Checked : Qt::Unchecked);
74 static const QString notUsed = QCoreApplication::translate(
"PromotionModel",
"Not used");
86 connect(
this, &QStandardItemModel::itemChanged,
this, &PromotionModel::slotItemChanged);
91 QStringList horizontalLabels(tr(
"Name"));
92 horizontalLabels += tr(
"Header file");
93 horizontalLabels += tr(
"Global include");
94 horizontalLabels += tr(
"Usage");
95 setHorizontalHeaderLabels (horizontalLabels);
99 using PromotedClasses = QDesignerPromotionInterface::PromotedClasses;
106 const PromotedClasses promotedClasses = m_core->promotion()->promotedClasses();
108 if (promotedClasses.isEmpty())
111 const QSet<QString> usedPromotedClasses = m_core->promotion()->referencedPromotedClassNames();
113 QDesignerWidgetDataBaseItemInterface *baseClass =
nullptr;
114 QStandardItem *baseItem =
nullptr;
116 for (
auto &pi : promotedClasses) {
118 if (baseClass != pi.baseItem) {
119 baseClass = pi.baseItem;
120 const StandardItemList baseRow = baseModelRow(pi.baseItem);
121 baseItem = baseRow.constFirst();
126 baseItem->appendRow(promotedModelRow(pi.baseItem, pi.promotedItem,
127 usedPromotedClasses.contains(pi.promotedItem->name())));
131 void PromotionModel::slotItemChanged(QStandardItem * changedItem) {
133 const ModelData data = modelData(changedItem);
134 Q_ASSERT(data.isValid());
135 QDesignerWidgetDataBaseItemInterface *dbItem = data.promotedItem;
137 switch (changedItem->column()) {
139 emit classNameChanged(dbItem, changedItem->text());
144 const QStandardItem *baseClassItem = changedItem->parent();
145 const QStandardItem *fileItem = baseClassItem->child(changedItem->row(),
IncludeFileColumn);
146 const QStandardItem *typeItem = baseClassItem->child(changedItem->row(),
IncludeTypeColumn);
147 emit includeFileChanged(dbItem, buildIncludeFile(fileItem->text(), typeItem->checkState() == Qt::Checked ? IncludeGlobal : IncludeLocal));
155 const QVariant userData = item->data();
156 return userData.canConvert<ModelData>() ? userData.value<ModelData>() : ModelData();
161 return index.isValid() ? modelData(itemFromIndex(index)) : ModelData();
165 const StandardItemList matches = findItems (className, Qt::MatchFixedString|Qt::MatchCaseSensitive|Qt::MatchRecursive);
166 return matches.isEmpty() ? QModelIndex() : indexFromItem (matches.constFirst());
Combined button and popup list for selecting options.
StandardItemList baseModelRow(const QDesignerWidgetDataBaseItemInterface *dbItem)
StandardItemList promotedModelRow(QDesignerWidgetDataBaseItemInterface *baseItem, QDesignerWidgetDataBaseItemInterface *dbItem, bool referenced)
StandardItemList modelRow()
Auxiliary methods to store/retrieve settings.