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 };