File indexing completed on 2024-05-12 17:07:15
0001 /* 0002 SPDX-FileCopyrightText: 1997 Patrick Dowler <dowler@morgul.fsh.uvic.ca> 0003 SPDX-FileCopyrightText: 2021 Cyril Rossi <cyril.rossi@enioka.com> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #pragma once 0009 0010 #include <QMap> 0011 #include <QString> 0012 #include <QWidget> 0013 0014 class QButtonGroup; 0015 class Ui_KeyboardConfigWidget; 0016 class KeyboardMiscSettings; 0017 0018 const int DEFAULT_REPEAT_DELAY = 600; 0019 const double DEFAULT_REPEAT_RATE = 25.0; 0020 0021 enum KeyBehaviour { 0022 AccentMenu = 0, 0023 RepeatKey = 1, 0024 DoNothing = 2, 0025 }; 0026 0027 const QMap<KeyBehaviour, QString> keybehaviourNames = { 0028 {AccentMenu, QStringLiteral("accent")}, 0029 {RepeatKey, QStringLiteral("repeat")}, 0030 {DoNothing, QStringLiteral("nothing")}, 0031 }; 0032 0033 enum TriState { 0034 STATE_ON = 0, 0035 STATE_OFF = 1, 0036 STATE_UNCHANGED = 2, 0037 }; 0038 0039 class TriStateHelper 0040 { 0041 public: 0042 static void setTriState(QButtonGroup *group, TriState state); 0043 static TriState getTriState(const QButtonGroup *group); 0044 0045 static TriState getTriState(int state) 0046 { 0047 return static_cast<TriState>(state); 0048 } 0049 static int getInt(TriState state) 0050 { 0051 return static_cast<int>(state); 0052 } 0053 static const char *getString(TriState state) 0054 { 0055 return state == STATE_ON ? "0" : state == STATE_OFF ? "1" : "2"; 0056 } 0057 }; 0058 0059 class KCMiscKeyboardWidget : public QWidget 0060 { 0061 Q_OBJECT 0062 public: 0063 KCMiscKeyboardWidget(QWidget *parent, KeyboardMiscSettings *settings); 0064 ~KCMiscKeyboardWidget() override; 0065 0066 void save(); 0067 void load(); 0068 void defaults(); 0069 0070 QString quickHelp() const; 0071 0072 bool isSaveNeeded() const; 0073 bool isDefault() const; 0074 0075 public Q_SLOTS: 0076 void setDefaultIndicator(bool visible); 0077 0078 Q_SIGNALS: 0079 void changed(bool state); 0080 0081 private Q_SLOTS: 0082 void changed(); 0083 0084 void updateUiDefaultIndicator(); 0085 void delaySliderChanged(int value); 0086 void delaySpinboxChanged(int value); 0087 void rateSliderChanged(int value); 0088 void rateSpinboxChanged(double value); 0089 void keyboardRepeatStateChanged(int selection); 0090 0091 private: 0092 void setRepeat(KeyBehaviour flag, int delay, double rate); 0093 void setDefaultIndicatorVisible(QWidget *widget, bool visible); 0094 0095 KeyBehaviour defaultValueKeyboardRepeat() const; 0096 0097 int sliderMax; 0098 KeyBehaviour keyboardRepeat {}; 0099 enum TriState numlockState {}; 0100 bool m_highlightVisible = false; 0101 0102 QButtonGroup *_numlockButtonGroup; 0103 QButtonGroup *_keyboardRepeatButtonGroup; 0104 Ui_KeyboardConfigWidget &ui; 0105 KeyboardMiscSettings *m_settings; 0106 };