File indexing completed on 2024-05-12 17:07:30
0001 /* 0002 SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 Work sponsored by Technische Universität Dresden: 0005 SPDX-FileCopyrightText: 2022 Klarälvdalens Datakonsult AB a KDAB Group company <info@kdab.com> 0006 0007 SPDX-License-Identifier: LGPL-2.0-or-later 0008 */ 0009 0010 #include "kcmtouchscreen.h" 0011 #include "inputdevice.h" 0012 0013 #include <KConfigGroup> 0014 #include <KLocalizedString> 0015 #include <KPluginFactory> 0016 #include <QGuiApplication> 0017 #include <QScreen> 0018 #include <QStandardItemModel> 0019 0020 K_PLUGIN_CLASS_WITH_JSON(Touchscreen, "kcm_touchscreen.json") 0021 0022 class OutputsModel : public QStandardItemModel 0023 { 0024 Q_OBJECT 0025 public: 0026 OutputsModel() 0027 { 0028 setItemRoleNames({ 0029 {Qt::DisplayRole, "display"}, 0030 {Qt::UserRole, "name"}, 0031 }); 0032 0033 reset(); 0034 0035 connect(qGuiApp, &QGuiApplication::screenAdded, this, &OutputsModel::reset); 0036 connect(qGuiApp, &QGuiApplication::screenRemoved, this, &OutputsModel::reset); 0037 } 0038 0039 void reset() 0040 { 0041 clear(); 0042 0043 auto screens = qGuiApp->screens(); 0044 auto it = new QStandardItem(i18n("Automatic")); 0045 appendRow(it); 0046 0047 for (auto screen : screens) { 0048 auto geo = screen->geometry(); 0049 auto it = new QStandardItem(i18nc("model - (x,y widthxheight)", 0050 "%1 - (%2,%3 %4×%5)", 0051 screen->model(), 0052 QString::number(geo.x()), 0053 QString::number(geo.y()), 0054 QString::number(geo.width()), 0055 QString::number(geo.height()))); 0056 it->setData(screen->name(), Qt::UserRole); 0057 appendRow(it); 0058 } 0059 } 0060 0061 Q_SCRIPTABLE QString outputNameAt(int row) const 0062 { 0063 return item(row)->data(Qt::UserRole).toString(); 0064 } 0065 Q_SCRIPTABLE int rowForOutputName(const QString &outputName) 0066 { 0067 for (int i = 0, c = rowCount(); i < c; ++i) { 0068 if (item(i)->data(Qt::UserRole) == outputName) { 0069 return i; 0070 } 0071 } 0072 0073 return 0; 0074 } 0075 }; 0076 0077 Touchscreen::Touchscreen(QObject *parent, const KPluginMetaData &metaData, const QVariantList &list) 0078 : ManagedConfigModule(parent, metaData, list) 0079 , m_touchscreensModel(new DevicesModel("touch", this)) 0080 { 0081 qmlRegisterType<OutputsModel>("org.kde.plasma.touchscreen.kcm", 1, 0, "OutputsModel"); 0082 qmlRegisterAnonymousType<InputDevice>("org.kde.plasma.touchscreen.kcm", 1); 0083 0084 connect(m_touchscreensModel, &DevicesModel::needsSaveChanged, this, &Touchscreen::refreshNeedsSave); 0085 } 0086 0087 Touchscreen::~Touchscreen() = default; 0088 0089 void Touchscreen::refreshNeedsSave() 0090 { 0091 setNeedsSave(isSaveNeeded()); 0092 } 0093 0094 bool Touchscreen::isSaveNeeded() const 0095 { 0096 return m_touchscreensModel->isSaveNeeded(); 0097 } 0098 0099 bool Touchscreen::isDefaults() const 0100 { 0101 return m_touchscreensModel->isDefaults(); 0102 } 0103 0104 void Touchscreen::load() 0105 { 0106 m_touchscreensModel->load(); 0107 } 0108 0109 void Touchscreen::save() 0110 { 0111 m_touchscreensModel->save(); 0112 } 0113 0114 void Touchscreen::defaults() 0115 { 0116 m_touchscreensModel->defaults(); 0117 } 0118 0119 DevicesModel *Touchscreen::touchscreensModel() const 0120 { 0121 return m_touchscreensModel; 0122 } 0123 0124 #include "kcmtouchscreen.moc"