summaryrefslogtreecommitdiffstats
path: root/tests/manual/shortcuts/main.cpp
blob: 514d62a4841d1d3f84c72c3ddf02d977bb7e76f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only

#include <QApplication>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QWidget>
#include <QLabel>
#include <QPushButton>
#include <QDebug>
#include <QtVersion>

class ShortcutTester : public QWidget
{
public:
    ShortcutTester()
    {
        const QString title = QLatin1String(QT_VERSION_STR) + QLatin1Char(' ')
            + qApp->platformName();
        setWindowTitle(title);
        setupLayout();
    }

private:
    void setupLayout();
    void addToGrid(QWidget *w, int &row, int col);
    void addShortcutToGrid(const QKeySequence &k, int &row, int col);

   QGridLayout *m_gridLayout = new QGridLayout;
};

inline void ShortcutTester::addToGrid(QWidget *w, int &row, int col)
{
    m_gridLayout->addWidget(w, row++, col);
}

void ShortcutTester::addShortcutToGrid(const QKeySequence &k, int &row, int col)
{
    QPushButton *button = new QPushButton(k.toString());
    button->setShortcut(k);
    addToGrid(button, row, col);
}

void addShortcutToGrid(int key, int &row, int col);

void ShortcutTester::setupLayout()
{
    QVBoxLayout *layout = new QVBoxLayout(this);

    QLabel *testPurpose = new QLabel();
    testPurpose->setWordWrap(true);
    testPurpose->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);
    testPurpose->setText("This test come in handy to verify shortcuts under different "
                         "keyboard layouts - qwerty, dvorak, non-latin (russian, arabic), etc.");
    layout->addWidget(testPurpose);

    layout->addLayout(m_gridLayout);

    int row = 0;
    int col = 0;

    const QKeyCombination keys1[] = {
        Qt::AltModifier | Qt::ShiftModifier | Qt::Key_G,
        Qt::AltModifier | Qt::Key_G,
        Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_R,
        Qt::ControlModifier | Qt::Key_R,
        Qt::ControlModifier | Qt::Key_Return, Qt::ControlModifier | Qt::Key_Enter,
        Qt::ControlModifier | Qt::ShiftModifier | Qt::AltModifier | Qt::Key_R,
        Qt::ShiftModifier | Qt::Key_5, Qt::ShiftModifier | Qt::Key_Percent,
        Qt::Key_Percent, Qt::Key_5, Qt::Key_Q
     };

    for (const auto k : keys1)
        addShortcutToGrid(k, row, col);

    row = 0;
    col++;

    const QKeyCombination keys2[] = {
        Qt::ControlModifier | Qt::Key_Percent,
        Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_5,
        Qt::ControlModifier | Qt::Key_5, Qt::AltModifier | Qt::Key_5,
        Qt::ControlModifier | Qt::Key_Plus,
        Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Plus,
        Qt::ControlModifier | Qt::ShiftModifier | Qt::Key_Equal,
        Qt::ControlModifier | Qt::Key_Y, Qt::ShiftModifier | Qt::Key_Comma,
        Qt::ControlModifier | Qt::Key_Comma, Qt::ControlModifier | Qt::Key_Slash,
        Qt::ControlModifier | Qt::Key_Backslash
    };

    for (const auto k : keys2)
        addShortcutToGrid(k, row, col);

    row = 0;
    col++;

    const QKeyCombination keys3[] = {
        Qt::MetaModifier | Qt::ShiftModifier | Qt::Key_A,
        Qt::MetaModifier | Qt::Key_A,
        Qt::MetaModifier | Qt::Key_Q,
        Qt::MetaModifier | Qt::ShiftModifier | Qt::Key_5,
        Qt::ControlModifier | Qt::Key_BracketRight,
        Qt::ShiftModifier | Qt::Key_F3,
        Qt::ControlModifier | Qt::Key_F3,
    };

    for (const auto k : keys3)
        addShortcutToGrid(k, row, col);

     addShortcutToGrid(0x20AC, row, col); // EURO SIGN e.g. US (with euro on 5) on 3rd keyboard level
     addShortcutToGrid(int(Qt::ControlModifier) | 0x20AC, row, col);

    // with german (neo 2) layout on linux under ISO_Level3_Shift + ISO_Level5_Shift + I
    const QKeySequence greekPsi(QString(QStringLiteral("\u03A8")));
    addShortcutToGrid(greekPsi, row, col);

    row = 0;
    col++;

    addToGrid(new QLabel("Norwegian layout"), row, col);
    // LATIN SMALL LETTER O WITH STROKE
    QKeySequence norwegianO(QString(QStringLiteral("\u00F8")));
    addShortcutToGrid(norwegianO, row, col);

    addToGrid(new QLabel("Russian layout"), row, col);
    // CYRILLIC SMALL LETTER ZHE
    QKeySequence zhe(QString(QStringLiteral("\u0436")));
    addShortcutToGrid(zhe, row, col);

    // for sequence definitons see qplatformtheme.cpp
    addToGrid(new QLabel("QKeySequence::StandardKey(s)"), row, col);
    addShortcutToGrid(QKeySequence(QKeySequence::Open), row, col); // Qt::CTRL | Qt::Key_O
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qDebug() << qVersion();

    ShortcutTester tester;
    tester.show();

    return a.exec();
}