[keyboard] changes to the keyboardmodel to work with qml

This commit is contained in:
Camilo Higuita 2020-04-03 10:18:07 +02:00 committed by Adriaan de Groot
parent 0872de7910
commit 1a46e08cc2
4 changed files with 63 additions and 20 deletions

View file

@ -23,12 +23,11 @@
KeyboardLayoutModel::KeyboardLayoutModel( QObject* parent )
: QAbstractListModel( parent )
: QAbstractListModel( parent )
{
init();
}
int
KeyboardLayoutModel::rowCount( const QModelIndex& parent ) const
{
@ -45,30 +44,60 @@ KeyboardLayoutModel::data( const QModelIndex& index, int role ) const
switch ( role )
{
case Qt::DisplayRole:
return m_layouts.at( index.row() ).second.description;
case KeyboardVariantsRole:
return QVariant::fromValue( m_layouts.at( index.row() ).second.variants );
case KeyboardLayoutKeyRole:
return m_layouts.at( index.row() ).first;
case Qt::DisplayRole:
return m_layouts.at( index.row() ).second.description;
case KeyboardVariantsRole:
return QVariant::fromValue( m_layouts.at( index.row() ).second.variants );
case KeyboardLayoutKeyRole:
return m_layouts.at( index.row() ).first;
}
return QVariant();
}
const QPair< QString, KeyboardGlobal::KeyboardInfo >
KeyboardLayoutModel::item(const int &index) const
{
if(index >= m_layouts.count() || index < 0)
return QPair< QString, KeyboardGlobal::KeyboardInfo >();
return m_layouts.at(index);
}
void
KeyboardLayoutModel::init()
{
KeyboardGlobal::LayoutsMap layouts =
KeyboardGlobal::getKeyboardLayouts();
KeyboardGlobal::getKeyboardLayouts();
for ( KeyboardGlobal::LayoutsMap::const_iterator it = layouts.constBegin();
it != layouts.constEnd(); ++it )
m_layouts.append( qMakePair( it.key(), it.value() ) );
it != layouts.constEnd(); ++it )
m_layouts.append( qMakePair( it.key(), it.value() ) );
std::stable_sort( m_layouts.begin(), m_layouts.end(), []( const QPair< QString, KeyboardGlobal::KeyboardInfo >& a,
const QPair< QString, KeyboardGlobal::KeyboardInfo >& b )
const QPair< QString, KeyboardGlobal::KeyboardInfo >& b )
{
return a.second.description < b.second.description;
} );
}
QHash<int, QByteArray>
KeyboardLayoutModel::roleNames() const
{
return {{Qt::DisplayRole, "label"}, {KeyboardLayoutKeyRole, "key"}, {KeyboardVariantsRole, "variants"}};
}
void
KeyboardLayoutModel::setCurrentIndex(const int &index)
{
if(index >= m_layouts.count() || index < 0)
return;
m_currentIndex = index;
emit currentIndexChanged(m_currentIndex);
}
int
KeyboardLayoutModel::currentIndex() const
{
return m_currentIndex;
}