1 /*
2     SPDX-FileCopyrightText: 1997 Patrick Dowler <dowler@morgul.fsh.uvic.ca>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #ifndef __KCMMISC_H__
8 #define __KCMMISC_H__
9 
10 #include <QMap>
11 #include <QString>
12 #include <QWidget>
13 
14 class QButtonGroup;
15 class Ui_KeyboardConfigWidget;
16 
17 const int DEFAULT_REPEAT_DELAY = 600;
18 const double DEFAULT_REPEAT_RATE = 25.0;
19 
20 enum KeyBehaviour {
21     AccentMenu = 0,
22     RepeatKey = 1,
23     DoNothing = 2,
24 };
25 
26 const QMap<KeyBehaviour, QString> keybehaviourNames = {
27     {AccentMenu, QStringLiteral("accent")},
28     {RepeatKey, QStringLiteral("repeat")},
29     {DoNothing, QStringLiteral("nothing")},
30 };
31 
32 enum TriState {
33     STATE_ON = 0,
34     STATE_OFF = 1,
35     STATE_UNCHANGED = 2,
36 };
37 
38 class TriStateHelper
39 {
40 public:
41     static void setTriState(QButtonGroup *group, TriState state);
42     static TriState getTriState(const QButtonGroup *group);
43 
getTriState(int state)44     static TriState getTriState(int state)
45     {
46         return static_cast<TriState>(state);
47     }
getInt(TriState state)48     static int getInt(TriState state)
49     {
50         return static_cast<int>(state);
51     }
getString(TriState state)52     static const char *getString(TriState state)
53     {
54         return state == STATE_ON ? "0" : state == STATE_OFF ? "1" : "2";
55     }
56 };
57 
58 class KCMiscKeyboardWidget : public QWidget
59 {
60     Q_OBJECT
61 public:
62     KCMiscKeyboardWidget(QWidget *parent);
63     ~KCMiscKeyboardWidget() override;
64 
65     void save();
66     void load();
67     void defaults();
68 
69     QString quickHelp() const;
70 
71 private Q_SLOTS:
72     void changed();
73 
74     void delaySliderChanged(int value);
75     void delaySpinboxChanged(int value);
76     void rateSliderChanged(int value);
77     void rateSpinboxChanged(double value);
78     void keyboardRepeatStateChanged(int selection);
79 
80 Q_SIGNALS:
81     void changed(bool state);
82 
83 private:
84     void setRepeat(KeyBehaviour flag, int delay, double rate);
85 
86     int sliderMax;
87     int clickVolume;
88     KeyBehaviour keyboardRepeat;
89     enum TriState numlockState;
90 
91     QButtonGroup *_numlockButtonGroup;
92     QButtonGroup *_keyboardRepeatButtonGroup;
93     Ui_KeyboardConfigWidget &ui;
94 };
95 
96 #endif
97