1 /*
2  *  SPDX-FileCopyrightText: 2012 Sebastian Gottfried <sebastiangottfried@web.de>
3  *
4  *  SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 
7 
8 #include "keyboardlayoutcombobox.h"
9 
10 #include "models/categorizedresourcesortfilterproxymodel.h"
11 
12 
KeyboardLayoutComboBox(QWidget * parent)13 KeyboardLayoutComboBox::KeyboardLayoutComboBox(QWidget* parent) :
14     KComboBox(parent),
15     m_filteredResourceModel(new CategorizedResourceSortFilterProxyModel(this)),
16     m_resourceModel(0)
17 {
18     m_filteredResourceModel->setResourceTypeFilter(ResourceModel::KeyboardLayoutItem);
19     setModel(m_filteredResourceModel);
20 }
21 
resourceModel() const22 ResourceModel* KeyboardLayoutComboBox::resourceModel() const
23 {
24     return m_resourceModel;
25 }
26 
setResourceModel(ResourceModel * model)27 void KeyboardLayoutComboBox::setResourceModel(ResourceModel* model)
28 {
29     if (model != m_resourceModel)
30     {
31         m_resourceModel = model;
32         m_filteredResourceModel->setResourceModel(model);
33     }
34 }
35 
keyboardLayoutAt(int index) const36 DataIndexKeyboardLayout* KeyboardLayoutComboBox::keyboardLayoutAt(int index) const
37 {
38     const QModelIndex modelIndex = model()->index(index, 0);
39     const QVariant variant = model()->data(modelIndex, ResourceModel::DataRole);
40     QObject* const object = qvariant_cast<QObject*>(variant);
41     DataIndexKeyboardLayout* const layout = qobject_cast<DataIndexKeyboardLayout*>(object);
42 
43     return layout;
44 
45 }
46 
selectedKeyboardLayout() const47 DataIndexKeyboardLayout* KeyboardLayoutComboBox::selectedKeyboardLayout() const
48 {
49     if (currentIndex() == -1)
50         return 0;
51 
52 
53     return keyboardLayoutAt(currentIndex());
54 }
55 
selectKeyboardLayout(DataIndexKeyboardLayout * layout)56 void KeyboardLayoutComboBox::selectKeyboardLayout(DataIndexKeyboardLayout* layout)
57 {
58     for (int i = 0; i < model()->rowCount(); i++)
59     {
60         if (keyboardLayoutAt(i) == layout)
61         {
62             setCurrentIndex(i);
63             break;
64         }
65     }
66 }
67