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 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); }