void Layout::onLayoutSizeChanged(const sys::Size& innerSize) { float calW = 0; float calH = 0; float realW = 0; float realH = 0; std::vector<sys::Rect> innerItems; const sys::Size& parentSize = this->getSize(); sys::Vector2 parentAnchor; calAnchorPoint(parentAnchor.x, parentAnchor.y); int count = m_vChildren.size(); for (int i = 0; i < count; i++) { LayoutItem* child = m_vChildren[i]; if (child == nullptr) { continue; } // ÄÚ²¿´óС sys::Rect innerItem; const sys::Size& srcSize = child->getSize(); calLayoutPosition(child, srcSize, innerSize, innerItem.x, innerItem.y); calLayoutSize(child, parentSize, innerSize, innerItem.width, innerItem.height); innerItem.x -= parentSize.width * parentAnchor.x; innerItem.y -= parentSize.height * parentAnchor.y; child->resize(innerItem); } }
Window::Window(QGraphicsWidget *parent) : QGraphicsWidget(parent, Qt::Window) { //! [0] QGraphicsLinearLayout *windowLayout = new QGraphicsLinearLayout(Qt::Vertical); QGraphicsLinearLayout *linear = new QGraphicsLinearLayout(windowLayout); LayoutItem *item = new LayoutItem; linear->addItem(item); linear->setStretchFactor(item, 1); //! [0] //! [1] item = new LayoutItem; linear->addItem(item); linear->setStretchFactor(item, 3); windowLayout->addItem(linear); //! [1] //! [2] QGraphicsGridLayout *grid = new QGraphicsGridLayout(windowLayout); item = new LayoutItem; grid->addItem(item, 0, 0, 4, 1); item = new LayoutItem; item->setMaximumHeight(item->minimumHeight()); grid->addItem(item, 0, 1, 2, 1, Qt::AlignVCenter); item = new LayoutItem; item->setMaximumHeight(item->minimumHeight()); grid->addItem(item, 2, 1, 2, 1, Qt::AlignVCenter); item = new LayoutItem; grid->addItem(item, 0, 2); item = new LayoutItem; grid->addItem(item, 1, 2); item = new LayoutItem; grid->addItem(item, 2, 2); item = new LayoutItem; grid->addItem(item, 3, 2); windowLayout->addItem(grid); //! [2] //! [3] setLayout(windowLayout); setWindowTitle(tr("Basic Graphics Layouts Example")); //! [3] }
static void mapCaretRectToCaretPainter(LayoutItem caretLayoutItem, LayoutBlockItem caretPainterItem, LayoutRect& caretRect) { // FIXME: This shouldn't be called on un-rooted subtrees. // FIXME: This should probably just use mapLocalToAncestor. // Compute an offset between the caretLayoutItem and the caretPainterItem. DCHECK(caretLayoutItem.isDescendantOf(caretPainterItem)); bool unrooted = false; while (caretLayoutItem != caretPainterItem) { LayoutItem containerItem = caretLayoutItem.container(); if (containerItem.isNull()) { unrooted = true; break; } caretRect.move(caretLayoutItem.offsetFromContainer(containerItem)); caretLayoutItem = containerItem; } if (unrooted) caretRect = LayoutRect(); }
void KeyboardPage::updateVariants( const QPersistentModelIndex& currentItem, QString currentVariant ) { // Block signals ui->listVariant->blockSignals( true ); QMap< QString, QString > variants = currentItem.data( KeyboardLayoutModel::KeyboardVariantsRole ) .value< QMap< QString, QString > >(); QMapIterator< QString, QString > li( variants ); LayoutItem* defaultItem = nullptr; ui->listVariant->clear(); while ( li.hasNext() ) { li.next(); LayoutItem* item = new LayoutItem(); item->setText( li.key() ); item->data = li.value(); ui->listVariant->addItem( item ); // currentVariant defaults to QString(). It is only non-empty during the // initial setup. if ( li.value() == currentVariant ) defaultItem = item; } // Unblock signals ui->listVariant->blockSignals( false ); // Set to default value if ( defaultItem ) ui->listVariant->setCurrentItem( defaultItem ); }
void Page_Keyboard::listLayout_currentItemChanged(QListWidgetItem * current, QListWidgetItem *) { LayoutItem *item = dynamic_cast<LayoutItem*>(current); if (!item) return; // Block signals ui->listVariant->blockSignals(true); QMap< QString, QString > variants = item->info.variants; QMapIterator<QString, QString> li(variants); LayoutItem *defaultItem = NULL; ui->listVariant->clear(); while (li.hasNext()) { li.next(); item = new LayoutItem(ui->listVariant); item->setText(li.key()); item->data = li.value(); if (li.value() == "") defaultItem = item; } // Set to default value if (defaultItem) ui->listVariant->setCurrentItem(defaultItem); // Trigger signals listVariant_currentItemChanged(ui->listVariant->currentItem(), ui->listVariant->currentItem()); // Unblock signals ui->listVariant->blockSignals(false); updateApplyEnabledState(); }
void KeyboardPage::guessLayout( const QStringList& langParts ) { const KeyboardLayoutModel* klm = dynamic_cast< KeyboardLayoutModel* >( ui->listLayout->model() ); bool foundCountryPart = false; for ( auto countryPart = langParts.rbegin(); !foundCountryPart && countryPart != langParts.rend(); ++countryPart ) { cDebug() << " .. looking for locale part" << *countryPart; for ( int i = 0; i < klm->rowCount(); ++i ) { QModelIndex idx = klm->index( i ); QString name = idx.isValid() ? idx.data( KeyboardLayoutModel::KeyboardLayoutKeyRole ).toString() : QString(); if ( idx.isValid() && ( name.compare( *countryPart, Qt::CaseInsensitive ) == 0 ) ) { cDebug() << " .. matched" << name; ui->listLayout->setCurrentIndex( idx ); foundCountryPart = true; break; } } if ( foundCountryPart ) { ++countryPart; if ( countryPart != langParts.rend() ) { cDebug() << "Next level:" << *countryPart; for (int variantnumber = 0; variantnumber < ui->listVariant->count(); ++variantnumber) { LayoutItem *variantdata = dynamic_cast< LayoutItem* >( ui->listVariant->item( variantnumber ) ); if ( variantdata && (variantdata->data.compare( *countryPart, Qt::CaseInsensitive ) == 0) ) { ui->listVariant->setCurrentItem( variantdata ); cDebug() << " .. matched variant" << variantdata->data << ' ' << variantdata->text(); } } } } } }
void Page_Keyboard::activated() { // Clean up first ui->listLayout->clear(); ui->listVariant->clear(); ui->comboBoxModel->clear(); // Default focus ui->listLayout->setFocus(); //### Detect current keyboard layout and variant QString currentLayout, currentVariant; if (!Global::getCurrentXorgKeyboardLayout(currentLayout, currentVariant)) QMessageBox::warning(this, tr("Error"), tr("Failed to determind current Xorg keyboard layout!"), QMessageBox::Ok, QMessageBox::Ok); //### Models models = Global::getKeyboardModels(); QMapIterator<QString, QString> mi(models); ui->comboBoxModel->blockSignals(true); while (mi.hasNext()) { mi.next(); if (mi.value() == "pc105") defaultIndex = ui->comboBoxModel->count(); ui->comboBoxModel->addItem(mi.key()); } ui->comboBoxModel->blockSignals(false); // Set to default value pc105 ui->comboBoxModel->setCurrentIndex(defaultIndex); //### Layouts and Variants // Block signals ui->listLayout->blockSignals(true); QMap<QString, Global::KeyboardInfo> layouts = Global::getKeyboardLayouts(); QMapIterator<QString, Global::KeyboardInfo> li(layouts); LayoutItem *currentLayoutItem = NULL; if (layouts.isEmpty()) return; while (li.hasNext()) { li.next(); LayoutItem *item = new LayoutItem(ui->listLayout); Global::KeyboardInfo info = li.value(); item->setText(info.description); item->data = li.key(); item->info = info; // Find current layout index if (li.key() == currentLayout) currentLayoutItem = item; } ui->listLayout->sortItems(); // Set current layout if (currentLayoutItem) ui->listLayout->setCurrentItem(currentLayoutItem); else if (ui->listLayout->count() > 0) ui->listLayout->setCurrentRow(0); // Trigger signal listLayout_currentItemChanged(ui->listLayout->currentItem(), ui->listLayout->currentItem()); // Set current variant if (!currentVariant.isEmpty()) { for(int i = 0; i < ui->listVariant->count(); ++i) { LayoutItem *item = dynamic_cast<LayoutItem*>(ui->listVariant->item(i)); if (item && item->data == currentVariant) { ui->listVariant->setCurrentItem(item); break; } } } // Unblock signals ui->listLayout->blockSignals(false); }