Пример #1
0
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);
	}
}
Пример #2
0
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]

}
Пример #3
0
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();
}
Пример #4
0
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();
}
Пример #6
0
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);
}