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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
#ifndef UBKEYBOARDPALETTE_H
#define UBKEYBOARDPALETTE_H
#include "UBActionPalette.h"
#include <QLayout>
#include <QPainter>
#include <QMenu>
#include <QIcon>
#include "frameworks/UBPlatformUtils.h"
class UBKeyButton;
class UBKeyboardButton;
class UBApplication;
class UBMainWindow;
class BTNImages
{
public:
BTNImages(QString _strHeight, int _width, int _height);
QString m_strHeight;
int m_width;
int m_height;
QImage m_btnLeftPassive;
QImage m_btnCenterPassive;
QImage m_btnRightPassive;
QImage m_btnLeftActive;
QImage m_btnCenterActive;
QImage m_btnRightActive;
private:
QString m_strLeftPassive;
QString m_strCenterPassive;
QString m_strRightPassive;
QString m_strLeftActive;
QString m_strCenterActive;
QString m_strRightActive;
};
class ContentImage
{
public:
ContentImage(QString strHeight, int m_height, QString strContentPath);
QString m_strHeight;
int m_height;
QImage m_btnContent;
private:
QString m_strContent;
};
class UBKeyboardPalette : public UBActionPalette
{
Q_OBJECT
friend class UBKeyboardButton;
friend class UBCapsLockButton;
friend class UBShiftButton;
friend class UBLocaleButton;
friend class UBKeyButton;
public:
UBKeyboardPalette(QWidget *parent);
~UBKeyboardPalette();
BTNImages *currBtnImages;
bool isEnabled(){return locales!= NULL;}
virtual QSize sizeHint () const;
virtual void adjustSizeAndPosition(bool pUp = true);
QString getKeyButtonSize() const {QString res; res.sprintf("%dx%d", btnWidth, btnHeight); return res;}
void setKeyButtonSize(const QString& strSize);
bool m_isVisible;
QPoint m_pos;
signals:
void moved(const QPoint&);
void localeChanged(int);
void keyboardActivated(bool);
private slots:
void syncPosition(const QPoint & pos);
void syncLocale(int nLocale);
void keyboardPaletteButtonSizeChanged(QVariant size);
void onActivated(bool b);
void onDeactivated();
void showKeyboard(bool show);
void hideKeyboard();
protected:
bool capsLock;
bool shift;
int nCurrentLocale;
int nLocalesCount;
UBKeyboardLocale** locales;
int nSpecialModifierIndex;
KEYCODE specialModifier;
QString strSize;
int btnWidth;
int btnHeight;
//
bool languagePopupActive;
bool keyboardActive;
//
virtual void enterEvent ( QEvent * event );
virtual void leaveEvent ( QEvent * event );
virtual void paintEvent(QPaintEvent *event);
virtual void moveEvent ( QMoveEvent * event );
void sendKeyEvent(KEYCODE keyCode);
void setLocale(int nLocale);
const QString* getLocaleName();
void init();
private:
QRect originalRect;
UBKeyButton** buttons;
UBKeyboardButton** ctrlButtons;
void createCtrlButtons();
void setInput(const UBKeyboardLocale* locale);
// Can be redefined under each platform
void onLocaleChanged(UBKeyboardLocale* locale);
// Storage for platform-dependent objects (linux)
void* storage;
// Linux-related parameters
int min_keycodes, max_keycodes, byte_per_code;
// Save locale before activation to restore it after (MAC)
QString activeLocale;
};
class UBKeyboardButton : public QWidget
{
Q_OBJECT
public:
UBKeyboardButton(UBKeyboardPalette* parent, QString contentImagePath);
~UBKeyboardButton();
protected:
UBKeyboardPalette* m_parent;
ContentImage *imgContent;
QString m_contentImagePath;
void paintEvent(QPaintEvent *event);
virtual void enterEvent ( QEvent * event );
virtual void leaveEvent ( QEvent * event );
virtual void mousePressEvent ( QMouseEvent * event );
virtual void mouseReleaseEvent ( QMouseEvent * event );
virtual void onPress() = 0;
virtual void onRelease() = 0;
virtual void paintContent(QPainter& painter) = 0;
virtual bool isPressed();
UBKeyboardPalette* keyboard;
void sendUnicodeSymbol(KEYCODE keycode);
void sendControlSymbol(int nSymbol);
private:
bool bFocused;
bool bPressed;
};
class UBKeyButton : public UBKeyboardButton
{
Q_OBJECT
public:
UBKeyButton(UBKeyboardPalette* parent);
~UBKeyButton();
void setKeyBt(const KEYBT* keybt){this->keybt = keybt;}
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
private:
bool shifted();
const KEYBT* keybt;
};
class UBCntrlButton : public UBKeyboardButton
{
Q_OBJECT
public:
UBCntrlButton(UBKeyboardPalette* parent, int _code, const QString& _contentImagePath );
UBCntrlButton(UBKeyboardPalette* parent, const QString& _label, int _code );
~UBCntrlButton();
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
private:
QString label;
int code;
};
class UBCapsLockButton : public UBKeyboardButton
{
Q_OBJECT
public:
UBCapsLockButton(UBKeyboardPalette* parent, const QString _contentImagePath);
~UBCapsLockButton();
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
protected:
virtual bool isPressed();
};
class UBShiftButton : public UBKeyboardButton
{
Q_OBJECT
public:
UBShiftButton(UBKeyboardPalette* parent, const QString _contentImagePath);
~UBShiftButton();
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
protected:
virtual bool isPressed();
};
class UBLocaleButton : public UBKeyboardButton
{
Q_OBJECT
public:
UBLocaleButton(UBKeyboardPalette* parent);
~UBLocaleButton();
virtual void onPress();
virtual void onRelease();
virtual void paintContent(QPainter& painter);
protected:
QMenu* localeMenu;
};
#endif // UBKEYBOARDPALETTE_H