44 #include <QGridLayout>
58 void init(QWidget* parent);
93 void insertRow(QGridLayout* layout,
int row)
const;
94 void removeRow(QGridLayout* layout,
int row)
const;
98 QMap<QtBrowserItem*, WidgetItem*> m_indexToItem;
99 QMap<WidgetItem*, QtBrowserItem*> m_itemToIndex;
100 QMap<QWidget*, WidgetItem*> m_widgetToItem;
101 QGridLayout* m_mainLayout;
102 QList<WidgetItem*> m_children;
103 QList<WidgetItem*> m_recreateQueue;
109 m_mainLayout =
new QGridLayout();
110 parent->setLayout(m_mainLayout);
111 QLayoutItem* item =
new QSpacerItem(0, 0, QSizePolicy::Fixed, QSizePolicy::Expanding);
112 m_mainLayout->addItem(item, 0, 0);
118 QWidget* editor = qobject_cast<QWidget*>(q_ptr->sender());
125 if (!m_widgetToItem.contains(editor))
130 m_widgetToItem[editor]->widget = 0;
131 m_widgetToItem.remove(editor);
137 QListIterator<WidgetItem*> itItem(m_recreateQueue);
139 while (itItem.hasNext())
152 oldRow = m_children.indexOf(item);
158 oldRow = par->
children.indexOf(item);
168 item->
widget->setParent(w);
177 item->
widgetLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
185 l->addWidget(item->
widget, oldRow, 1, 1, 1);
196 item->
label =
new QLabel(w);
197 item->
label->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
198 l->addWidget(item->
label, oldRow, 0, 1, span);
203 m_recreateQueue.clear();
207 QtGroupBoxPropertyBrowserPrivate::updateLater()
209 QTimer::singleShot(0, q_ptr, SLOT(
slotUpdate()));
215 WidgetItem* afterItem = m_indexToItem.value(afterIndex);
219 newItem->
parent = parentItem;
221 QGridLayout* layout = 0;
222 QWidget* parentWidget = 0;
231 parentItem->
children.insert(0, newItem);
235 m_children.insert(0, newItem);
242 row = parentItem->
children.indexOf(afterItem) + 1;
243 parentItem->
children.insert(row, newItem);
247 row = m_children.indexOf(afterItem) + 1;
248 m_children.insert(row, newItem);
252 if (parentItem && hasHeader(parentItem))
259 layout = m_mainLayout;
260 parentWidget = q_ptr;
267 m_recreateQueue.removeAll(parentItem);
277 oldRow = m_children.indexOf(parentItem);
283 oldRow = par->
children.indexOf(parentItem);
291 parentItem->
groupBox =
new QGroupBox(w);
292 parentItem->
layout =
new QGridLayout();
295 if (parentItem->
label)
297 l->removeWidget(parentItem->
label);
298 delete parentItem->
label;
299 parentItem->
label = 0;
304 l->removeWidget(parentItem->
widget);
306 parentItem->
layout->addWidget(parentItem->
widget, 0, 0, 1, 2);
316 if (parentItem->
line)
318 parentItem->
line->setFrameShape(QFrame::HLine);
319 parentItem->
line->setFrameShadow(QFrame::Sunken);
320 parentItem->
layout->addWidget(parentItem->
line, 1, 0, 1, 2);
323 l->addWidget(parentItem->
groupBox, oldRow, 0, 1, 2);
324 updateItem(parentItem);
327 layout = parentItem->
layout;
328 parentWidget = parentItem->
groupBox;
331 newItem->
label =
new QLabel(parentWidget);
332 newItem->
label->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
338 newItem->
widgetLabel->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed));
339 newItem->
widgetLabel->setTextFormat(Qt::PlainText);
344 m_widgetToItem[newItem->
widget] = newItem;
347 insertRow(layout, row);
352 layout->addWidget(newItem->
widget, row, 1);
363 layout->addWidget(newItem->
label, row, 0, 1, span);
365 m_itemToIndex[newItem] =
index;
366 m_indexToItem[
index] = newItem;
376 m_indexToItem.remove(
index);
377 m_itemToIndex.remove(item);
385 row = parentItem->
children.indexOf(item);
388 if (hasHeader(parentItem))
395 row = m_children.indexOf(item);
396 m_children.removeAt(row);
421 removeRow(m_mainLayout, row);
423 else if (parentItem->
children.count() != 0)
425 removeRow(parentItem->
layout, row);
436 oldRow = m_children.indexOf(parentItem);
441 oldRow = par->
children.indexOf(parentItem);
451 parentItem->
widget->hide();
452 parentItem->
widget->setParent(0);
464 l->removeWidget(parentItem->
groupBox);
467 parentItem->
line = 0;
470 if (!m_recreateQueue.contains(parentItem))
472 m_recreateQueue.append(parentItem);
478 m_recreateQueue.removeAll(item);
484 QtGroupBoxPropertyBrowserPrivate::insertRow(QGridLayout* layout,
int row)
const
486 QMap<QLayoutItem*, QRect> itemToPos;
489 while (idx < layout->count())
492 layout->getItemPosition(idx, &r, &
c, &rs, &cs);
496 itemToPos[layout->takeAt(idx)] = QRect(r + 1,
c, rs, cs);
504 const QMap<QLayoutItem*, QRect>::ConstIterator icend = itemToPos.constEnd();
506 for (QMap<QLayoutItem*, QRect>::ConstIterator it = itemToPos.constBegin(); it != icend; ++it)
508 const QRect r = it.value();
509 layout->addItem(it.key(), r.x(), r.y(), r.width(), r.height());
514 QtGroupBoxPropertyBrowserPrivate::removeRow(QGridLayout* layout,
int row)
const
516 QMap<QLayoutItem*, QRect> itemToPos;
519 while (idx < layout->count())
522 layout->getItemPosition(idx, &r, &
c, &rs, &cs);
526 itemToPos[layout->takeAt(idx)] = QRect(r - 1,
c, rs, cs);
534 const QMap<QLayoutItem*, QRect>::ConstIterator icend = itemToPos.constEnd();
536 for (QMap<QLayoutItem*, QRect>::ConstIterator it = itemToPos.constBegin(); it != icend; ++it)
538 const QRect r = it.value();
539 layout->addItem(it.key(), r.x(), r.y(), r.width(), r.height());
544 QtGroupBoxPropertyBrowserPrivate::hasHeader(WidgetItem* item)
const
563 QtGroupBoxPropertyBrowserPrivate::updateItem(WidgetItem* item)
565 QtProperty*
property = m_itemToIndex[item]->property();
569 QFont font = item->groupBox->font();
570 font.setUnderline(property->isModified());
571 item->groupBox->setFont(font);
572 item->groupBox->setTitle(property->propertyName());
573 item->groupBox->setToolTip(property->toolTip());
574 item->groupBox->setStatusTip(property->statusTip());
575 item->groupBox->setWhatsThis(property->whatsThis());
576 item->groupBox->setEnabled(property->isEnabled());
581 QFont font = item->label->font();
582 font.setUnderline(property->isModified());
583 item->label->setFont(font);
584 item->label->setText(property->propertyName());
585 item->label->setToolTip(property->toolTip());
586 item->label->setStatusTip(property->statusTip());
587 item->label->setWhatsThis(property->whatsThis());
588 item->label->setEnabled(property->isEnabled());
591 if (item->widgetLabel)
593 QFont font = item->widgetLabel->font();
594 font.setUnderline(
false);
595 item->widgetLabel->setFont(font);
596 item->widgetLabel->setText(property->valueText());
597 item->widgetLabel->setToolTip(property->valueText());
598 item->widgetLabel->setEnabled(property->isEnabled());
603 QFont font = item->widget->font();
604 font.setUnderline(
false);
605 item->widget->setFont(font);
606 item->widget->setEnabled(property->isEnabled());
607 item->widget->setToolTip(property->valueText());
663 const QMap<QtGroupBoxPropertyBrowserPrivate::WidgetItem*, QtBrowserItem*>::ConstIterator icend =
664 d_ptr->m_itemToIndex.constEnd();
666 for (QMap<QtGroupBoxPropertyBrowserPrivate::WidgetItem*, QtBrowserItem*>::ConstIterator it =
667 d_ptr->m_itemToIndex.constBegin();
706 #include "moc_qtgroupboxpropertybrowser.cpp"