kcontrol: implement keyboard layout options

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-09-08 04:09:57 +03:00
parent 119bf184de
commit 8b3b954d85
3 changed files with 71 additions and 6 deletions

View file

@ -499,6 +499,7 @@ void KCMKeyboard::slotAdvancedPressed()
return;
}
m_layoutoptions = keyboarddialog.options();
emit changed(true);
}
#include "moc_keyboardconfig.cpp"

View file

@ -18,23 +18,46 @@
#include "keyboardoptionsdialog.h"
#include <QHeaderView>
#include <klocale.h>
#include <kkeyboardlayout.h>
#include <kdebug.h>
static const char s_optionsseparator = ',';
static const char s_optionsgroupseparator = ':';
KCMKeyboardOptionsDialog::KCMKeyboardOptionsDialog(QWidget *parent)
: KDialog(parent),
m_widget(nullptr),
m_layout(nullptr)
m_layout(nullptr),
m_optionstree(nullptr)
{
setCaption(i18n("Keyboard Options"));
setButtons(KDialog::Ok | KDialog::Cancel);
m_enabledi18n = i18n("Enabled");
m_disabledi18n = i18n("Disabled");
m_widget = new QWidget(this);
m_layout = new QGridLayout(m_widget);
setMainWidget(m_widget);
m_optionstree = new QTreeWidget(m_widget);
m_optionstree->setColumnCount(2);
QStringList treeheaders = QStringList()
<< i18n("Option")
<< i18n("State");
m_optionstree->setHeaderLabels(treeheaders);
m_optionstree->setRootIsDecorated(false);
m_optionstree->header()->setStretchLastSection(false);
m_optionstree->header()->setResizeMode(0, QHeaderView::Stretch);
m_optionstree->header()->setResizeMode(1, QHeaderView::ResizeToContents);
connect(
m_optionstree, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
this, SLOT(slotItemChanged(QTreeWidgetItem*,int))
);
m_layout->addWidget(m_optionstree, 0, 0);
// TODO:
setMainWidget(m_widget);
adjustSize();
KConfigGroup kconfiggroup(KGlobal::config(), "KCMKeyboardOptionsDialog");
@ -50,12 +73,46 @@ KCMKeyboardOptionsDialog::~KCMKeyboardOptionsDialog()
QByteArray KCMKeyboardOptionsDialog::options() const
{
return m_options;
QByteArray result;
foreach (const QByteArray &option, m_options) {
if (!result.isEmpty()) {
result.append(s_optionsseparator);
}
result.append(option);
}
return result;
}
void KCMKeyboardOptionsDialog::setOptions(const QByteArray &options)
{
m_options = options;
m_options = options.split(s_optionsseparator);
m_optionstree->clear();
foreach (const QByteArray &option, KKeyboardLayout::optionNames()) {
if (!option.contains(s_optionsgroupseparator)) {
continue;
}
QTreeWidgetItem* optionitem = new QTreeWidgetItem();
optionitem->setData(0, Qt::UserRole, option);
optionitem->setText(0, KKeyboardLayout::optionDescription(option));
const bool isoptionenabled = m_options.contains(option);
optionitem->setText(1, isoptionenabled ? m_enabledi18n : m_disabledi18n);
optionitem->setCheckState(1, isoptionenabled ? Qt::Checked : Qt::Unchecked);
m_optionstree->addTopLevelItem(optionitem);
}
}
void KCMKeyboardOptionsDialog::slotItemChanged(QTreeWidgetItem *optionitem, const int column)
{
Q_UNUSED(column);
const bool enableoption = (optionitem->checkState(1) == Qt::Checked);
optionitem->setText(1, enableoption ? m_enabledi18n : m_disabledi18n);
const QByteArray option = optionitem->data(0, Qt::UserRole).toByteArray();
if (enableoption) {
m_options.append(option);
} else {
m_options.removeAll(option);
}
}
#include "moc_keyboardoptionsdialog.cpp"

View file

@ -20,6 +20,7 @@
#define KEYBOARDOPTIONSDIALOG_H
#include <QGridLayout>
#include <QTreeWidget>
#include <kdialog.h>
class KCMKeyboardOptionsDialog : public KDialog
@ -32,10 +33,16 @@ public:
QByteArray options() const;
void setOptions(const QByteArray &options);
private Q_SLOTS:
void slotItemChanged(QTreeWidgetItem*,int);
private:
QWidget* m_widget;
QGridLayout* m_layout;
QByteArray m_options;
QTreeWidget* m_optionstree;
QList<QByteArray> m_options;
QString m_enabledi18n;
QString m_disabledi18n;
};
#endif // KEYBOARDOPTIONSDIALOG_H