LayoutInfo::Type LayoutInfo::laidoutWidgetType(const QDesignerFormEditorInterface *core, QWidget *widget, bool *isManaged, QLayout **ptrToLayout) { if (isManaged) *isManaged = false; if (ptrToLayout) *ptrToLayout = 0; QWidget *parent = widget->parentWidget(); if (!parent) return NoLayout; // 1) Splitter if (QSplitter *splitter = qobject_cast<QSplitter*>(parent)) { if (isManaged) *isManaged = core->metaDataBase()->item(splitter); return splitter->orientation() == Qt::Horizontal ? HSplitter : VSplitter; } // 2) Layout of parent QLayout *parentLayout = parent->layout(); if (!parentLayout) return NoLayout; if (parentLayout->indexOf(widget) != -1) { if (isManaged) *isManaged = core->metaDataBase()->item(parentLayout); if (ptrToLayout) *ptrToLayout = parentLayout; return layoutType(core, parentLayout); } // 3) Some child layout (see below comment about Q3GroupBox) const QList<QLayout*> childLayouts = parentLayout->findChildren<QLayout*>(); if (childLayouts.empty()) return NoLayout; const QList<QLayout*>::const_iterator lcend = childLayouts.constEnd(); for (QList<QLayout*>::const_iterator it = childLayouts.constBegin(); it != lcend; ++it) { QLayout *layout = *it; if (layout->indexOf(widget) != -1) { if (isManaged) *isManaged = core->metaDataBase()->item(layout); if (ptrToLayout) *ptrToLayout = layout; return layoutType(core, layout); } } return NoLayout; }
void LayoutAlignmentCommand::applyAlignment(const QDesignerFormEditorInterface *core, QWidget *w, Qt::Alignment a) { // Find layout and apply to item QLayout *layout; LayoutInfo::laidoutWidgetType(core, w, 0, &layout); if (layout) { const int index = layout->indexOf(w); if (index >= 0) { layout->itemAt(index)->setAlignment(a); layout->update(); } } }
void PhotoDrop::checkMoveButtons() { std::cerr << "PhotoDrop::checkMoveButtons()"; std::cerr << std::endl; /* locate mSelected in the set */ QLayout *alayout = layout(); if (!alayout) { std::cerr << "PhotoDrop::checkMoveButtons() No Layout"; std::cerr << std::endl; return; } int count = alayout->count(); if ((!mSelected) || (count < 2)) { buttonStatus(PHOTO_SHIFT_NO_BUTTONS); return; } QGridLayout *glayout = dynamic_cast<QGridLayout *>(alayout); if (!glayout) { std::cerr << "PhotoDrop::checkMoveButtons() not GridLayout... not much we can do!"; std::cerr << std::endl; buttonStatus(PHOTO_SHIFT_NO_BUTTONS); return; } int index = alayout->indexOf(mSelected); int selectedRow; int selectedColumn; int rowSpan; int colSpan; glayout->getItemPosition(index, &selectedRow, &selectedColumn, &rowSpan, &colSpan); int maxRow = (count - 1) / mColumns; int maxCol = (count - 1) % mColumns; if ((selectedRow == 0) && (selectedColumn == 0)) { buttonStatus(PHOTO_SHIFT_RIGHT_ONLY); } else if ((selectedRow == maxRow) && (selectedColumn == maxCol)) { buttonStatus(PHOTO_SHIFT_LEFT_ONLY); } else { buttonStatus(PHOTO_SHIFT_BOTH); } }
// Find out alignment and return whether command is enabled. Qt::Alignment LayoutAlignmentCommand::alignmentOf(const QDesignerFormEditorInterface *core, QWidget *w, bool *enabledIn) { bool managed; QLayout *layout; if (enabledIn) *enabledIn = false; // Can only work on a managed layout const LayoutInfo::Type type = LayoutInfo::laidoutWidgetType(core, w, &managed, &layout); const bool enabled = layout && managed && (type == LayoutInfo::HBox || type == LayoutInfo::VBox || type == LayoutInfo::Grid); if (!enabled) return Qt::Alignment(0); // Get alignment const int index = layout->indexOf(w); Q_ASSERT(index >= 0); if (enabledIn) *enabledIn = true; return layout->itemAt(index)->alignment(); }
dmz::V8Value dmz::JsModuleUiV8QtBasic::_layout_index_of (const v8::Arguments &Args) { v8::HandleScope scope; V8Value result = v8::Undefined (); JsModuleUiV8QtBasic *self = _to_self (Args); if (self) { QLayout *layout = self->v8_to_qobject<QLayout> (Args.This ()); if (layout) { QWidget *widget = self->_to_qwidget (Args[0]); if (widget) { result = v8::Number::New (layout->indexOf (widget)); } } } return scope.Close (result); }
void PhotoDrop::moveRight() { std::cerr << "PhotoDrop::moveRight()"; std::cerr << std::endl; QLayout *alayout = layout(); if (!alayout) { std::cerr << "PhotoDrop::moveRight() No Layout"; std::cerr << std::endl; return; } QGridLayout *glayout = dynamic_cast<QGridLayout *>(alayout); if (!glayout) { std::cerr << "PhotoDrop::moveRight() not GridLayout... not much we can do!"; std::cerr << std::endl; return; } int count = alayout->count(); if ((!mSelected) || (count < 2)) { std::cerr << "PhotoDrop::moveRight() Not enough items"; std::cerr << std::endl; return; } int index = alayout->indexOf(mSelected); int selectedRow; int selectedColumn; int rowSpan; int colSpan; glayout->getItemPosition(index, &selectedRow, &selectedColumn, &rowSpan, &colSpan); int maxRow = (count - 1) / mColumns; int maxCol = (count - 1) % mColumns; if ((selectedRow == maxRow) && (selectedColumn == maxCol)) { std::cerr << "PhotoDrop::moveRight() Selected is last item"; std::cerr << std::endl; return; } int swapRow = selectedRow; int swapColumn = selectedColumn + 1; if (swapColumn == mColumns) { swapRow++; swapColumn = 0; } std::cerr << "PhotoDrop::moveRight() Trying to swap (" << selectedRow << ","; std::cerr << selectedColumn << ") <-> (" << swapRow; std::cerr << "," << swapColumn << ")"; std::cerr << std::endl; QLayoutItem *litem = glayout->itemAtPosition(swapRow, swapColumn); if (!litem) { std::cerr << "PhotoDrop::moveRight() No layout item to the right"; std::cerr << std::endl; return; } QWidget *widget = litem->widget(); if (!widget) { std::cerr << "PhotoDrop::moveRight() No item to the right"; std::cerr << std::endl; return; } /* grab both items, and switch */ std::cerr << "PhotoDrop::moveRight() could move index: " << index; std::cerr << std::endl; glayout->removeWidget(widget); glayout->removeWidget(mSelected); glayout->addWidget(widget, selectedRow, selectedColumn, Qt::AlignCenter); glayout->addWidget(mSelected, swapRow, swapColumn, Qt::AlignCenter); checkMoveButtons(); }