Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
treewidgeteditor.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
5#include <formwindowbase_p.h>
6#include <iconloader_p.h>
7#include <qdesigner_command_p.h>
8#include <qdesigner_utils_p.h>
9#include <abstractformbuilder.h>
10#include <designerpropertymanager.h>
11#include <qttreepropertybrowser_p.h>
12
13#include <QtDesigner/abstractformwindow.h>
14#include <QtDesigner/abstractformeditor.h>
15
16#include <QtCore/qdir.h>
17#include <QtCore/qqueue.h>
18#include <QtWidgets/qheaderview.h>
19#include <QtWidgets/qtreewidgetitemiterator.h>
20
22
23using namespace Qt::StringLiterals;
24
25namespace qdesigner_internal {
26
27TreeWidgetEditor::TreeWidgetEditor(QDesignerFormWindowInterface *form, QDialog *dialog)
28 : AbstractItemEditor(form, nullptr), m_updatingBrowser(false)
29{
30 m_columnEditor = new ItemListEditor(form, this);
31 m_columnEditor->setObjectName(u"columnEditor"_s);
32 m_columnEditor->setNewItemText(tr("New Column"));
33 ui.setupUi(dialog);
34
35 injectPropertyBrowser(ui.itemsTab, ui.widget);
36 connect(ui.showPropertiesButton, &QAbstractButton::clicked,
37 this, &TreeWidgetEditor::togglePropertyBrowser);
38 setPropertyBrowserVisible(false);
39
40 ui.tabWidget->insertTab(0, m_columnEditor, tr("&Columns"));
41 ui.tabWidget->setCurrentIndex(0);
42
43 ui.newItemButton->setIcon(createIconSet("plus.png"_L1));
44 ui.newSubItemButton->setIcon(createIconSet("downplus.png"_L1));
45 ui.deleteItemButton->setIcon(createIconSet("minus.png"_L1));
46 ui.moveItemUpButton->setIcon(createIconSet("up.png"_L1));
47 ui.moveItemDownButton->setIcon(createIconSet("down.png"_L1));
48 ui.moveItemRightButton->setIcon(createIconSet("leveldown.png"_L1));
49 ui.moveItemLeftButton->setIcon(createIconSet("levelup.png"_L1));
50
51 ui.treeWidget->header()->setSectionsMovable(false);
52
53 connect(ui.newItemButton, &QAbstractButton::clicked,
54 this, &TreeWidgetEditor::newItemButtonClicked);
55 connect(ui.newSubItemButton, &QAbstractButton::clicked,
56 this, &TreeWidgetEditor::newSubItemButtonClicked);
57 connect(ui.moveItemUpButton, &QAbstractButton::clicked,
58 this, &TreeWidgetEditor::moveItemUpButtonClicked);
59 connect(ui.moveItemDownButton, &QAbstractButton::clicked,
60 this, &TreeWidgetEditor::moveItemDownButtonClicked);
61 connect(ui.moveItemRightButton, &QAbstractButton::clicked,
62 this, &TreeWidgetEditor::moveItemRightButtonClicked);
63 connect(ui.moveItemLeftButton, &QAbstractButton::clicked,
64 this, &TreeWidgetEditor::moveItemLeftButtonClicked);
65 connect(ui.deleteItemButton, &QAbstractButton::clicked,
66 this, &TreeWidgetEditor::deleteItemButtonClicked);
67 connect(ui.treeWidget, &QTreeWidget::currentItemChanged,
68 this, &TreeWidgetEditor::treeWidgetCurrentItemChanged);
69 connect(ui.treeWidget, &QTreeWidget::itemChanged,
70 this, &TreeWidgetEditor::treeWidgetItemChanged);
71
72 connect(m_columnEditor, &ItemListEditor::indexChanged,
73 this, &TreeWidgetEditor::columnEditorIndexChanged);
74 connect(m_columnEditor, &ItemListEditor::itemChanged,
75 this, &TreeWidgetEditor::columnEditorItemChanged);
76 connect(m_columnEditor, &ItemListEditor::itemInserted,
77 this, &TreeWidgetEditor::columnEditorItemInserted);
78 connect(m_columnEditor, &ItemListEditor::itemDeleted,
79 this, &TreeWidgetEditor::columnEditorItemDeleted);
80 connect(m_columnEditor, &ItemListEditor::itemMovedUp,
81 this, &TreeWidgetEditor::columnEditorItemMovedUp);
82 connect(m_columnEditor, &ItemListEditor::itemMovedDown,
83 this, &TreeWidgetEditor::columnEditorItemMovedDown);
84
85 connect(iconCache(), &DesignerIconCache::reloaded, this, &TreeWidgetEditor::cacheReloaded);
86}
87
100
114
117 { 0, 0, nullptr, nullptr }
118};
119
120QtVariantProperty *TreeWidgetEditor::setupPropertyGroup(const QString &title, PropertyDefinition *propDefs)
121{
122 setupProperties(propDefs);
124 for (QtVariantProperty *prop : std::as_const(m_rootProperties))
125 groupProp->addSubProperty(prop);
126 m_rootProperties.clear();
127 return groupProp;
128}
129
131{
132 TreeWidgetContents treeCont;
133 treeCont.fromTreeWidget(treeWidget, false);
134 treeCont.applyToTreeWidget(ui.treeWidget, iconCache(), true);
135
136 treeCont.m_headerItem.applyToListWidget(m_columnEditor->listWidget(), iconCache(), true);
137 m_columnEditor->setupEditor(treeWidget, treeHeaderPropList);
138
139 QList<QtVariantProperty*> rootProperties;
140 rootProperties.append(setupPropertyGroup(tr("Per column properties"), treeItemColumnPropList));
141 rootProperties.append(setupPropertyGroup(tr("Common properties"), treeItemCommonPropList));
142 m_rootProperties = rootProperties;
145 setupObject(treeWidget);
146
147 if (ui.treeWidget->topLevelItemCount() > 0)
148 ui.treeWidget->setCurrentItem(ui.treeWidget->topLevelItem(0));
149
150 updateEditor();
151
152 return treeCont;
153}
154
156{
157 TreeWidgetContents retVal;
158 retVal.fromTreeWidget(ui.treeWidget, true);
159 return retVal;
160}
161
162void TreeWidgetEditor::setItemData(int role, const QVariant &v)
163{
164 const int col = (role == ItemFlagsShadowRole) ? 0 : ui.treeWidget->currentColumn();
165 QVariant newValue = v;
166 BoolBlocker block(m_updatingBrowser);
167 if (role == Qt::FontRole && newValue.metaType().id() == QMetaType::QFont) {
168 QFont oldFont = ui.treeWidget->font();
169 QFont newFont = qvariant_cast<QFont>(newValue).resolve(oldFont);
170 newValue = QVariant::fromValue(newFont);
171 ui.treeWidget->currentItem()->setData(col, role, QVariant()); // force the right font with the current resolve mask is set (item view bug)
172 }
173 ui.treeWidget->currentItem()->setData(col, role, newValue);
174}
175
176QVariant TreeWidgetEditor::getItemData(int role) const
177{
178 const int col = (role == ItemFlagsShadowRole) ? 0 : ui.treeWidget->currentColumn();
179 return ui.treeWidget->currentItem()->data(col, role);
180}
181
183{
184 static const int flags = QTreeWidgetItem().flags();
185 return flags;
186}
187
188void TreeWidgetEditor::newItemButtonClicked()
189{
190 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
191 QTreeWidgetItem *newItem = nullptr;
192 ui.treeWidget->blockSignals(true);
193 if (curItem) {
194 if (curItem->parent())
195 newItem = new QTreeWidgetItem(curItem->parent(), curItem);
196 else
197 newItem = new QTreeWidgetItem(ui.treeWidget, curItem);
198 } else
199 newItem = new QTreeWidgetItem(ui.treeWidget);
200 const QString newItemText = tr("New Item");
201 newItem->setText(0, newItemText);
202 newItem->setData(0, Qt::DisplayPropertyRole, QVariant::fromValue(PropertySheetStringValue(newItemText)));
203 newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
204 ui.treeWidget->blockSignals(false);
205
206 ui.treeWidget->setCurrentItem(newItem, qMax(ui.treeWidget->currentColumn(), 0));
207 updateEditor();
208 ui.treeWidget->editItem(newItem, ui.treeWidget->currentColumn());
209}
210
211void TreeWidgetEditor::newSubItemButtonClicked()
212{
213 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
214 if (!curItem)
215 return;
216
217 ui.treeWidget->blockSignals(true);
218 QTreeWidgetItem *newItem = new QTreeWidgetItem(curItem);
219 const QString newItemText = tr("New Subitem");
220 newItem->setText(0, newItemText);
221 newItem->setData(0, Qt::DisplayPropertyRole, QVariant::fromValue(PropertySheetStringValue(newItemText)));
222 newItem->setFlags(newItem->flags() | Qt::ItemIsEditable);
223 ui.treeWidget->blockSignals(false);
224
225 ui.treeWidget->setCurrentItem(newItem, ui.treeWidget->currentColumn());
226 updateEditor();
227 ui.treeWidget->editItem(newItem, ui.treeWidget->currentColumn());
228}
229
230void TreeWidgetEditor::deleteItemButtonClicked()
231{
232 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
233 if (!curItem)
234 return;
235
236 QTreeWidgetItem *nextCurrent = nullptr;
237 if (curItem->parent()) {
238 int idx = curItem->parent()->indexOfChild(curItem);
239 if (idx == curItem->parent()->childCount() - 1)
240 idx--;
241 else
242 idx++;
243 if (idx < 0)
244 nextCurrent = curItem->parent();
245 else
246 nextCurrent = curItem->parent()->child(idx);
247 } else {
248 int idx = ui.treeWidget->indexOfTopLevelItem(curItem);
249 if (idx == ui.treeWidget->topLevelItemCount() - 1)
250 idx--;
251 else
252 idx++;
253 if (idx >= 0)
254 nextCurrent = ui.treeWidget->topLevelItem(idx);
255 }
256 closeEditors();
257 ui.treeWidget->blockSignals(true);
258 delete curItem;
259 ui.treeWidget->blockSignals(false);
260
261 if (nextCurrent)
262 ui.treeWidget->setCurrentItem(nextCurrent, ui.treeWidget->currentColumn());
263 updateEditor();
264}
265
266void TreeWidgetEditor::moveItemUpButtonClicked()
267{
268 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
269 if (!curItem)
270 return;
271
272 int idx;
273 if (curItem->parent())
274 idx = curItem->parent()->indexOfChild(curItem);
275 else
276 idx = ui.treeWidget->indexOfTopLevelItem(curItem);
277 if (idx == 0)
278 return;
279
280 QTreeWidgetItem *takenItem;
281 ui.treeWidget->blockSignals(true);
282 if (curItem->parent()) {
283 QTreeWidgetItem *parentItem = curItem->parent();
284 takenItem = parentItem->takeChild(idx);
285 parentItem->insertChild(idx - 1, takenItem);
286 } else {
287 takenItem = ui.treeWidget->takeTopLevelItem(idx);
288 ui.treeWidget->insertTopLevelItem(idx - 1, takenItem);
289 }
290 ui.treeWidget->blockSignals(false);
291
292 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
293 updateEditor();
294}
295
296void TreeWidgetEditor::moveItemDownButtonClicked()
297{
298 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
299 if (!curItem)
300 return;
301
302 int idx, idxCount;
303 if (curItem->parent()) {
304 idx = curItem->parent()->indexOfChild(curItem);
305 idxCount = curItem->parent()->childCount();
306 } else {
307 idx = ui.treeWidget->indexOfTopLevelItem(curItem);
308 idxCount = ui.treeWidget->topLevelItemCount();
309 }
310 if (idx == idxCount - 1)
311 return;
312
313 QTreeWidgetItem *takenItem;
314 ui.treeWidget->blockSignals(true);
315 if (curItem->parent()) {
316 QTreeWidgetItem *parentItem = curItem->parent();
317 takenItem = parentItem->takeChild(idx);
318 parentItem->insertChild(idx + 1, takenItem);
319 } else {
320 takenItem = ui.treeWidget->takeTopLevelItem(idx);
321 ui.treeWidget->insertTopLevelItem(idx + 1, takenItem);
322 }
323 ui.treeWidget->blockSignals(false);
324
325 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
326 updateEditor();
327}
328
329void TreeWidgetEditor::moveItemLeftButtonClicked()
330{
331 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
332 if (!curItem)
333 return;
334
335 QTreeWidgetItem *parentItem = curItem->parent();
336 if (!parentItem)
337 return;
338
339 ui.treeWidget->blockSignals(true);
340 QTreeWidgetItem *takenItem = parentItem->takeChild(parentItem->indexOfChild(curItem));
341 if (parentItem->parent()) {
342 int idx = parentItem->parent()->indexOfChild(parentItem);
343 parentItem->parent()->insertChild(idx, takenItem);
344 } else {
345 int idx = ui.treeWidget->indexOfTopLevelItem(parentItem);
346 ui.treeWidget->insertTopLevelItem(idx, takenItem);
347 }
348 ui.treeWidget->blockSignals(false);
349
350 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
351 updateEditor();
352}
353
354void TreeWidgetEditor::moveItemRightButtonClicked()
355{
356 QTreeWidgetItem *curItem = ui.treeWidget->currentItem();
357 if (!curItem)
358 return;
359
360 int idx, idxCount;
361 if (curItem->parent()) {
362 idx = curItem->parent()->indexOfChild(curItem);
363 idxCount = curItem->parent()->childCount();
364 } else {
365 idx = ui.treeWidget->indexOfTopLevelItem(curItem);
366 idxCount = ui.treeWidget->topLevelItemCount();
367 }
368 if (idx == idxCount - 1)
369 return;
370
371 QTreeWidgetItem *takenItem;
372 ui.treeWidget->blockSignals(true);
373 if (curItem->parent()) {
374 QTreeWidgetItem *parentItem = curItem->parent()->child(idx + 1);
375 takenItem = curItem->parent()->takeChild(idx);
376 parentItem->insertChild(0, takenItem);
377 } else {
378 QTreeWidgetItem *parentItem = ui.treeWidget->topLevelItem(idx + 1);
379 takenItem = ui.treeWidget->takeTopLevelItem(idx);
380 parentItem->insertChild(0, takenItem);
381 }
382 ui.treeWidget->blockSignals(false);
383
384 ui.treeWidget->setCurrentItem(takenItem, ui.treeWidget->currentColumn());
385 updateEditor();
386}
387
388void TreeWidgetEditor::togglePropertyBrowser()
389{
390 setPropertyBrowserVisible(!m_propertyBrowser->isVisible());
391}
392
393void TreeWidgetEditor::setPropertyBrowserVisible(bool v)
394{
395 ui.showPropertiesButton->setText(v ? tr("Properties &>>") : tr("Properties &<<"));
396 m_propertyBrowser->setVisible(v);
397}
398
399void TreeWidgetEditor::treeWidgetCurrentItemChanged()
400{
401 m_columnEditor->setCurrentIndex(ui.treeWidget->currentColumn());
402 updateEditor();
403}
404
405void TreeWidgetEditor::treeWidgetItemChanged(QTreeWidgetItem *item, int column)
406{
407 if (m_updatingBrowser)
408 return;
409
410 PropertySheetStringValue val = qvariant_cast<PropertySheetStringValue>(item->data(column, Qt::DisplayPropertyRole));
411 val.setValue(item->text(column));
412 BoolBlocker block(m_updatingBrowser);
413 item->setData(column, Qt::DisplayPropertyRole, QVariant::fromValue(val));
414
416}
417
418void TreeWidgetEditor::columnEditorIndexChanged(int idx)
419{
420 if (QTreeWidgetItem *item = ui.treeWidget->currentItem())
421 ui.treeWidget->setCurrentItem(item, idx);
422}
423
424void TreeWidgetEditor::columnEditorItemChanged(int idx, int role, const QVariant &v)
425{
426 if (role == Qt::DisplayPropertyRole)
427 ui.treeWidget->headerItem()->setData(idx, Qt::EditRole, qvariant_cast<PropertySheetStringValue>(v).value());
428 ui.treeWidget->headerItem()->setData(idx, role, v);
429}
430
431void TreeWidgetEditor::updateEditor()
432{
433 QTreeWidgetItem *current = ui.treeWidget->currentItem();
434
435 bool itemsEnabled = false;
436 bool currentItemEnabled = false;
437 bool moveItemUpEnabled = false;
438 bool moveItemDownEnabled = false;
439 bool moveItemRightEnabled = false;
440 bool moveItemLeftEnabled = false;
441
442 if (ui.treeWidget->columnCount() > 0) {
443 itemsEnabled = true;
444 if (current) {
445 int idx;
446 int idxCount;
447 currentItemEnabled = true;
448 if (current->parent()) {
449 moveItemLeftEnabled = true;
450 idx = current->parent()->indexOfChild(current);
451 idxCount = current->parent()->childCount();
452 } else {
453 idx = ui.treeWidget->indexOfTopLevelItem(current);
454 idxCount = ui.treeWidget->topLevelItemCount();
455 }
456 if (idx > 0)
457 moveItemUpEnabled = true;
458 if (idx < idxCount - 1) {
459 moveItemDownEnabled = true;
460 moveItemRightEnabled = true;
461 }
462 }
463 }
464 ui.tabWidget->setTabEnabled(1, itemsEnabled);
465 ui.newSubItemButton->setEnabled(currentItemEnabled);
466 ui.deleteItemButton->setEnabled(currentItemEnabled);
467
468 ui.moveItemUpButton->setEnabled(moveItemUpEnabled);
469 ui.moveItemDownButton->setEnabled(moveItemDownEnabled);
470 ui.moveItemRightButton->setEnabled(moveItemRightEnabled);
471 ui.moveItemLeftButton->setEnabled(moveItemLeftEnabled);
472
473 if (current)
475 else
477}
478
479void TreeWidgetEditor::moveColumnItems(const PropertyDefinition *propList,
480 QTreeWidgetItem *item, int fromColumn, int toColumn, int step)
481{
482 BoolBlocker block(m_updatingBrowser);
483
484 QList<QVariant> saveCol;
485 for (int j = 0; propList[j].name; j++)
486 saveCol.append(item->data(toColumn, propList[j].role));
487 QVariant editVariant = item->data(toColumn, Qt::EditRole);
488 QVariant toolTipVariant = item->data(toColumn, Qt::ToolTipRole);
489 QVariant statusTipVariant = item->data(toColumn, Qt::StatusTipRole);
490 QVariant whatsThisVariant = item->data(toColumn, Qt::WhatsThisRole);
491 QVariant decorationVariant = item->data(toColumn, Qt::DecorationRole);
492 for (int i = toColumn; i != fromColumn; i += step) {
493 for (int j = 0; propList[j].name; j++)
494 item->setData(i, propList[j].role, item->data(i + step, propList[j].role));
495 item->setData(i, Qt::EditRole, item->data(i + step, Qt::EditRole));
496 item->setData(i, Qt::ToolTipRole, item->data(i + step, Qt::ToolTipRole));
497 item->setData(i, Qt::StatusTipRole, item->data(i + step, Qt::StatusTipRole));
498 item->setData(i, Qt::WhatsThisRole, item->data(i + step, Qt::WhatsThisRole));
499 item->setData(i, Qt::DecorationRole, item->data(i + step, Qt::DecorationRole));
500 }
501 for (int j = 0; propList[j].name; j++)
502 item->setData(fromColumn, propList[j].role, saveCol[j]);
503 item->setData(fromColumn, Qt::EditRole, editVariant);
504 item->setData(fromColumn, Qt::ToolTipRole, toolTipVariant);
505 item->setData(fromColumn, Qt::StatusTipRole, statusTipVariant);
506 item->setData(fromColumn, Qt::WhatsThisRole, whatsThisVariant);
507 item->setData(fromColumn, Qt::DecorationRole, decorationVariant);
508}
509
510void TreeWidgetEditor::moveColumns(int fromColumn, int toColumn, int step)
511{
512 ui.treeWidget->blockSignals(true);
513
514 moveColumnItems(treeHeaderPropList, ui.treeWidget->headerItem(), fromColumn, toColumn, step);
515
516 QQueue<QTreeWidgetItem *> pendingQueue;
517 for (int i = 0; i < ui.treeWidget->topLevelItemCount(); i++)
518 pendingQueue.enqueue(ui.treeWidget->topLevelItem(i));
519
520 while (!pendingQueue.isEmpty()) {
521 QTreeWidgetItem *item = pendingQueue.dequeue();
522 for (int i = 0; i < item->childCount(); i++)
523 pendingQueue.enqueue(item->child(i));
524
525 moveColumnItems(treeItemColumnPropList, item, fromColumn, toColumn, step);
526 }
527
528 ui.treeWidget->blockSignals(false);
529}
530
531void TreeWidgetEditor::moveColumnsLeft(int fromColumn, int toColumn)
532{
533 if (fromColumn >= toColumn)
534 return;
535
536 moveColumns(fromColumn, toColumn, -1);
537}
538
539void TreeWidgetEditor::moveColumnsRight(int fromColumn, int toColumn)
540{
541 if (fromColumn >= toColumn)
542 return;
543
544 moveColumns(toColumn, fromColumn, 1);
545}
546
547void TreeWidgetEditor::columnEditorItemInserted(int idx)
548{
549 int columnCount = ui.treeWidget->columnCount();
550 ui.treeWidget->setColumnCount(columnCount + 1);
551 ui.treeWidget->headerItem()->setText(columnCount, m_columnEditor->newItemText());
552 moveColumnsLeft(idx, columnCount);
553
554 updateEditor();
555}
556
557void TreeWidgetEditor::columnEditorItemDeleted(int idx)
558{
559 closeEditors();
560
561 int columnCount = ui.treeWidget->columnCount() - 1;
562 if (!columnCount)
563 ui.treeWidget->clear();
564 else
565 moveColumnsRight(idx, columnCount);
566 ui.treeWidget->setColumnCount(columnCount);
567
568 updateEditor();
569}
570
571void TreeWidgetEditor::columnEditorItemMovedUp(int idx)
572{
573 moveColumnsRight(idx - 1, idx);
574
575 ui.treeWidget->setCurrentItem(ui.treeWidget->currentItem(), idx - 1);
576 updateEditor();
577}
578
579void TreeWidgetEditor::columnEditorItemMovedDown(int idx)
580{
581 moveColumnsLeft(idx, idx + 1);
582
583 ui.treeWidget->setCurrentItem(ui.treeWidget->currentItem(), idx + 1);
584 updateEditor();
585}
586
587void TreeWidgetEditor::closeEditors()
588{
589 if (QTreeWidgetItem *cur = ui.treeWidget->currentItem() ) {
590 const int numCols = cur->columnCount ();
591 for (int i = 0; i < numCols; i++)
592 ui.treeWidget->closePersistentEditor (cur, i);
593 }
594}
595
596void TreeWidgetEditor::cacheReloaded()
597{
598 reloadIconResources(iconCache(), ui.treeWidget);
599}
600
601TreeWidgetEditorDialog::TreeWidgetEditorDialog(QDesignerFormWindowInterface *form, QWidget *parent) :
602 QDialog(parent), m_editor(form, this)
603{
604}
605
607{
608 return m_editor.fillContentsFromTreeWidget(treeWidget);
609}
610
612{
613 return m_editor.contents();
614}
615
616} // namespace qdesigner_internal
617
618QT_END_NAMESPACE
friend class QWidget
Definition qpainter.h:421
void clear()
Removes all the properties from the editor, but does not delete them since they can still be used in ...
void setPropertiesWithoutValueMarked(bool mark)
The QtVariantPropertyManager class provides and manages QVariant based properties.
static int groupTypeId()
Returns the type id for a group property.
static int flagTypeId()
Returns the type id for a flag property.
The QtVariantProperty class is a convenience class handling QVariant based properties.
QtTreePropertyBrowser * m_propertyBrowser
DesignerPropertyManager * m_propertyManager
TreeWidgetContents fillContentsFromTreeWidget(QTreeWidget *treeWidget)
TreeWidgetContents fillContentsFromTreeWidget(QTreeWidget *treeWidget)
QVariant getItemData(int role) const override
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.
static AbstractItemEditor::PropertyDefinition treeHeaderPropList[]
static AbstractItemEditor::PropertyDefinition treeItemCommonPropList[]
static AbstractItemEditor::PropertyDefinition treeItemColumnPropList[]