diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index 13954eb20..8cd97f08b 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -157,7 +157,7 @@ Config::Config( QObject* parent ) // Connect signals and slots connect( m_keyboardModelsModel, &KeyboardModelsModel::currentIndexChanged, [&]( int index ) { // Set Xorg keyboard model - m_selectedModel = m_keyboardModelsModel->modelKey( index ); + m_selectedModel = m_keyboardModelsModel->key( index ); cDebug() << "Setting model" << index << m_selectedModel; QProcess::execute( "setxkbmap", xkbmap_model_args( m_selectedModel ) ); emit prettyStatusChanged(); @@ -172,7 +172,7 @@ Config::Config( QObject* parent ) connect( m_keyboardVariantsModel, &KeyboardVariantsModel::currentIndexChanged, [&]( int index ) { // Set Xorg keyboard layout + variant - m_selectedVariant = m_keyboardVariantsModel->item( index )[ "key" ]; + m_selectedVariant = m_keyboardVariantsModel->key( index ); cDebug() << "Setting variant" << index << m_selectedVariant; if ( m_setxkbmapTimer.isActive() ) @@ -327,11 +327,11 @@ Config::prettyStatus() const { QString status; status += tr( "Set keyboard model to %1.
" ) - .arg( m_keyboardModelsModel->modelLabel( m_keyboardModelsModel->currentIndex() ) ); + .arg( m_keyboardModelsModel->label( m_keyboardModelsModel->currentIndex() ) ); QString layout = m_keyboardLayoutsModel->item( m_keyboardLayoutsModel->currentIndex() ).second.description; QString variant = m_keyboardVariantsModel->currentIndex() >= 0 - ? m_keyboardVariantsModel->item( m_keyboardVariantsModel->currentIndex() )[ "label" ] + ? m_keyboardVariantsModel->label( m_keyboardVariantsModel->currentIndex() ) : QString( "" ); status += tr( "Set keyboard layout to %1/%2." ).arg( layout, variant ); @@ -383,13 +383,12 @@ Config::guessLayout( const QStringList& langParts ) cDebug() << "Next level:" << *countryPart; for ( int variantnumber = 0; variantnumber < m_keyboardVariantsModel->rowCount(); ++variantnumber ) { - if ( m_keyboardVariantsModel->item( variantnumber )[ "key" ].compare( *countryPart, - Qt::CaseInsensitive ) + if ( m_keyboardVariantsModel->key( variantnumber ).compare( *countryPart, Qt::CaseInsensitive ) == 0 ) { m_keyboardVariantsModel->setCurrentIndex( variantnumber ); cDebug() << Logger::SubEntry << "matched variant" << *countryPart << ' ' - << m_keyboardVariantsModel->item( variantnumber )[ "key" ]; + << m_keyboardVariantsModel->key( variantnumber ); } } } diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 4026bfc64..5ecc4ccb1 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -51,7 +51,7 @@ XKBListModel::data( const QModelIndex& index, int role ) const } QString -XKBListModel::modelKey( int index ) const +XKBListModel::key( int index ) const { if ( index < 0 || index >= m_list.count() ) { @@ -61,7 +61,7 @@ XKBListModel::modelKey( int index ) const } QString -XKBListModel::modelLabel( int index ) const +XKBListModel::label( int index ) const { if ( index < 0 || index >= m_list.count() ) { @@ -201,72 +201,20 @@ KeyboardLayoutModel::currentIndex() const } -const QMap< QString, QString > -KeyboardVariantsModel::item( const int& index ) const -{ - if ( index >= m_list.count() || index < 0 ) - { - return QMap< QString, QString >(); - } - - return m_list.at( index ); -} - KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent ) - : QAbstractListModel( parent ) + : XKBListModel( parent ) { } -int -KeyboardVariantsModel::currentIndex() const -{ - return m_currentIndex; -} - -void -KeyboardVariantsModel::setCurrentIndex( const int& index ) -{ - if ( index >= m_list.count() || index < 0 ) - { - return; - } - - m_currentIndex = index; - emit currentIndexChanged( m_currentIndex ); -} - -QVariant -KeyboardVariantsModel::data( const QModelIndex& index, int role ) const -{ - if ( !index.isValid() ) - { - return QVariant(); - } - const auto item = m_list.at( index.row() ); - return role == Qt::DisplayRole ? item[ "label" ] : item[ "key" ]; -} - -int -KeyboardVariantsModel::rowCount( const QModelIndex& ) const -{ - return m_list.count(); -} - -QHash< int, QByteArray > -KeyboardVariantsModel::roleNames() const -{ - return { { Qt::DisplayRole, "label" }, { Qt::UserRole, "key" } }; -} - void KeyboardVariantsModel::setVariants( QMap< QString, QString > variants ) { - m_list.clear(); beginResetModel(); + m_list.clear(); + m_list.reserve( variants.count() ); for ( const auto& key : variants.keys() ) { - const auto item = QMap< QString, QString > { { "label", key }, { "key", variants[ key ] } }; - m_list << item; + m_list << ModelInfo { variants[ key ], key }; } endResetModel(); } diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index 76b921fd4..9cb2da851 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -36,21 +36,21 @@ public: explicit XKBListModel( QObject* parent = nullptr ); - int rowCount( const QModelIndex& ) const override; + int rowCount( const QModelIndex& = QModelIndex() ) const override; QVariant data( const QModelIndex& index, int role ) const override; /** @brief xkb key for a given index (row) * * This is like calling data( QModelIndex( index ), KeyRole ).toString(), * but shorter and faster. Can return an empty string if index is invalid. */ - QString modelKey( int index ) const; + QString key( int index ) const; /** @brief human-readable label for a given index (row) * * This is like calling data( QModelIndex( index ), LabelRole ).toString(), * but shorter and faster. Can return an empty string if index is invalid. */ - QString modelLabel( int index ) const; + QString label( int index ) const; QHash< int, QByteArray > roleNames() const override; @@ -125,32 +125,14 @@ signals: void currentIndexChanged( int index ); }; -class KeyboardVariantsModel : public QAbstractListModel +class KeyboardVariantsModel : public XKBListModel { Q_OBJECT - Q_PROPERTY( int currentIndex WRITE setCurrentIndex READ currentIndex NOTIFY currentIndexChanged ) public: explicit KeyboardVariantsModel( QObject* parent = nullptr ); + void setVariants( QMap< QString, QString > variants ); - - int rowCount( const QModelIndex& = QModelIndex() ) const override; - QVariant data( const QModelIndex& index, int role ) const override; - - void setCurrentIndex( const int& index ); - int currentIndex() const; - - const QMap< QString, QString > item( const int& index ) const; - -protected: - QHash< int, QByteArray > roleNames() const override; - -private: - int m_currentIndex = -1; - QVector< QMap< QString, QString > > m_list; - -signals: - void currentIndexChanged( int index ); }; #endif // KEYBOARDLAYOUTMODEL_H