-rw-r--r-- | noncore/apps/opie-console/function_keyboard.cpp | 68 | ||||
-rw-r--r-- | noncore/apps/opie-console/function_keyboard.h | 25 |
2 files changed, 88 insertions, 5 deletions
diff --git a/noncore/apps/opie-console/function_keyboard.cpp b/noncore/apps/opie-console/function_keyboard.cpp index a3da5b2..9b036f3 100644 --- a/noncore/apps/opie-console/function_keyboard.cpp +++ b/noncore/apps/opie-console/function_keyboard.cpp | |||
@@ -1,76 +1,134 @@ | |||
1 | #include "function_keyboard.h" | 1 | #include "function_keyboard.h" |
2 | #include <qsizepolicy.h> | 2 | #include <qsizepolicy.h> |
3 | #include <qwindowsystem_qws.h> | ||
3 | 4 | ||
4 | FunctionKeyboard::FunctionKeyboard(QWidget *parent) : | 5 | FunctionKeyboard::FunctionKeyboard(QWidget *parent) : |
5 | QFrame(parent), numRows(2), numCols(15), | 6 | QFrame(parent), numRows(1), numCols(11), |
6 | pressedRow(0), pressedCol(0) { | 7 | pressedRow(0), pressedCol(0) { |
7 | 8 | ||
8 | setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); | 9 | setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed)); |
10 | |||
11 | Config conf("opie-console-keys"); | ||
12 | conf.setGroup("keys"); | ||
13 | for (int r = 0; r < numRows; r++) | ||
14 | for (int c = 0; c < numCols; c++) { | ||
15 | |||
16 | QString handle = "r" + QString::number(r) + "c" + QString::number(c); | ||
17 | QStringList value_list = conf.readListEntry( handle, '|'); | ||
18 | |||
19 | if (value_list.isEmpty()) continue; | ||
20 | |||
21 | keys.insert( | ||
22 | |||
23 | handle, | ||
24 | FKey (value_list[0], value_list[1].toUShort(), value_list[2].toUShort()) | ||
25 | ); | ||
26 | } | ||
27 | qWarning("loaded %d keys", keys.count()); | ||
28 | |||
29 | |||
9 | 30 | ||
10 | } | 31 | } |
11 | 32 | ||
12 | FunctionKeyboard::~FunctionKeyboard() { | 33 | FunctionKeyboard::~FunctionKeyboard() { |
13 | 34 | ||
14 | } | 35 | } |
15 | 36 | ||
16 | void FunctionKeyboard::paintEvent(QPaintEvent *e) { | 37 | void FunctionKeyboard::paintEvent(QPaintEvent *e) { |
17 | 38 | ||
18 | QPainter p(this); | 39 | QPainter p(this); |
19 | p.setClipRect(e->rect()); | 40 | p.setClipRect(e->rect()); |
20 | p.fillRect(0, 0, width(), height(), QColor(255,255,255)); | 41 | p.fillRect(0, 0, width(), height(), QColor(255,255,255)); |
21 | 42 | ||
43 | p.setPen(QColor(0,0,0)); | ||
44 | |||
22 | /* those decimals do count! becomes short if use plain int */ | 45 | /* those decimals do count! becomes short if use plain int */ |
23 | for (double i = 0; i <= width(); i += keyWidth) { | 46 | for (double i = 0; i <= width(); i += keyWidth) { |
24 | 47 | ||
25 | p.setPen(QColor(0,0,0)); | ||
26 | p.drawLine((int)i, 0, (int)i, height()); | 48 | p.drawLine((int)i, 0, (int)i, height()); |
27 | } | 49 | } |
28 | 50 | ||
29 | for (int i = 0; i <= height(); i += height()/numRows) { | 51 | // sometimes the last line doesnt get drawn |
52 | p.drawLine(width() -1, 0, width() -1, height()); | ||
53 | |||
54 | for (int i = 0; i <= height(); i += keyHeight) { | ||
30 | 55 | ||
31 | p.setPen(QColor(0,0,0)); | ||
32 | p.drawLine(0, i, width(), i); | 56 | p.drawLine(0, i, width(), i); |
33 | } | 57 | } |
34 | 58 | ||
59 | for (int r = 0; r < numRows; r++) { | ||
60 | for (int c = 0; c < numCols; c++) { | ||
61 | |||
62 | QString handle = "r" + QString::number(r) + "c" + QString::number(c); | ||
63 | if (keys.contains(handle)) { | ||
64 | |||
65 | p.drawText( | ||
66 | c * keyWidth + 1, r * keyHeight + 1, | ||
67 | keyWidth, keyHeight, | ||
68 | Qt::AlignHCenter | Qt::AlignVCenter, | ||
69 | keys[handle].getL() | ||
70 | ); | ||
71 | } | ||
72 | } | ||
73 | } | ||
35 | } | 74 | } |
36 | 75 | ||
37 | void FunctionKeyboard::paintKey(int row, int col) { | 76 | void FunctionKeyboard::paintKey(int row, int col) { |
38 | 77 | ||
39 | QPainter p(this); | 78 | QPainter p(this); |
79 | |||
40 | p.fillRect(QRect(QPoint(col * keyWidth + 1, row * keyHeight + 1), | 80 | p.fillRect(QRect(QPoint(col * keyWidth + 1, row * keyHeight + 1), |
41 | QPoint((col + 1) * keyWidth - 1, row * keyHeight + keyHeight- 1)), | 81 | QPoint((col + 1) * keyWidth - 1, row * keyHeight + keyHeight- 1)), |
42 | (pressedRow != -1 && pressedCol != -1 ) ? QColor(97,119,155) : QColor(255,255,255)); | 82 | (pressedRow != -1 && pressedCol != -1 ) ? QColor(97,119,155) : QColor(255,255,255)); |
83 | p.drawText( | ||
84 | col * keyWidth + 1, row * keyHeight + 1, | ||
85 | keyWidth, keyHeight, | ||
86 | Qt::AlignHCenter | Qt::AlignVCenter, | ||
87 | keys["r" + QString::number(row) + "c" + QString::number(col)].getL() | ||
88 | ); | ||
89 | |||
43 | } | 90 | } |
44 | 91 | ||
45 | void FunctionKeyboard::mousePressEvent(QMouseEvent *e) { | 92 | void FunctionKeyboard::mousePressEvent(QMouseEvent *e) { |
46 | 93 | ||
47 | pressedRow = e->y() / keyHeight; | 94 | pressedRow = e->y() / keyHeight; |
48 | pressedCol = e->x() / keyWidth; | 95 | pressedCol = e->x() / keyWidth; |
49 | 96 | ||
50 | paintKey(pressedRow, pressedCol); | 97 | paintKey(pressedRow, pressedCol); |
98 | |||
99 | // emit that sucker! | ||
100 | FKey k = keys["r" + QString::number(pressedRow) + "c" + QString::number(pressedCol)]; | ||
101 | //QWSServer::sendKeyEvent(k.getU(), k.getQ(), 0, 1, 0); | ||
102 | //qwsServer->sendKeyEvent(k.getU(), k.getQ(), 0, 1, 0); | ||
103 | qwsServer->sendKeyEvent(0x41, 0, 0, 1, 0); | ||
51 | } | 104 | } |
52 | 105 | ||
53 | void FunctionKeyboard::mouseReleaseEvent(QMouseEvent *) { | 106 | void FunctionKeyboard::mouseReleaseEvent(QMouseEvent *) { |
54 | 107 | ||
55 | if (pressedRow != -1 && pressedRow != -1) { | 108 | if (pressedRow != -1 && pressedRow != -1) { |
56 | 109 | ||
57 | int row = pressedRow; pressedRow = -1; | 110 | int row = pressedRow; pressedRow = -1; |
58 | int col = pressedCol; pressedCol = -1; | 111 | int col = pressedCol; pressedCol = -1; |
59 | paintKey(row, col); | 112 | paintKey(row, col); |
113 | |||
114 | FKey k = keys["r" + QString::number(row) + "c" + QString::number(col)]; | ||
115 | //QWSServer::sendKeyEvent(k.getU(), k.getQ(), 0, 0, 0); | ||
116 | //qwsServer->sendKeyEvent(k.getU(), k.getQ(), 0, 0, 0); | ||
60 | } | 117 | } |
118 | |||
61 | } | 119 | } |
62 | 120 | ||
63 | 121 | ||
64 | void FunctionKeyboard::resizeEvent(QResizeEvent*) { | 122 | void FunctionKeyboard::resizeEvent(QResizeEvent*) { |
65 | 123 | ||
66 | /* set he default font height/width */ | 124 | /* set he default font height/width */ |
67 | QFontMetrics fm=fontMetrics(); | 125 | QFontMetrics fm=fontMetrics(); |
68 | keyHeight = fm.lineSpacing() + 2; | 126 | keyHeight = fm.lineSpacing() + 2; |
69 | keyWidth = (double)width()/numCols; | 127 | keyWidth = (double)width()/numCols; |
70 | 128 | ||
71 | } | 129 | } |
72 | 130 | ||
73 | QSize FunctionKeyboard::sizeHint() const { | 131 | QSize FunctionKeyboard::sizeHint() const { |
74 | 132 | ||
75 | return QSize(width(), keyHeight * numRows + 1); | 133 | return QSize(width(), keyHeight * numRows + 1); |
76 | } | 134 | } |
diff --git a/noncore/apps/opie-console/function_keyboard.h b/noncore/apps/opie-console/function_keyboard.h index f1ca037..bc3e25c 100644 --- a/noncore/apps/opie-console/function_keyboard.h +++ b/noncore/apps/opie-console/function_keyboard.h | |||
@@ -1,33 +1,58 @@ | |||
1 | #ifndef OPIE_FUNCTION_KEYBOARD_H | 1 | #ifndef OPIE_FUNCTION_KEYBOARD_H |
2 | #define OPIE_FUNCTION_KEYBOARD_H | 2 | #define OPIE_FUNCTION_KEYBOARD_H |
3 | 3 | ||
4 | #include <qpe/config.h> | ||
4 | #include <qframe.h> | 5 | #include <qframe.h> |
5 | #include <qpainter.h> | 6 | #include <qpainter.h> |
7 | #include <qmap.h> | ||
8 | |||
9 | class FKey { | ||
10 | |||
11 | public: | ||
12 | |||
13 | FKey(): qcode(0), unicode(0) {}; | ||
14 | FKey(const QString &l, ushort q, ushort u): label(l), qcode(q), unicode(u) {}; | ||
15 | |||
16 | QString getL() { return label; } | ||
17 | ushort getQ() { return qcode; } | ||
18 | ushort getU() { return unicode; } | ||
19 | |||
20 | private: | ||
21 | |||
22 | QString label; | ||
23 | ushort qcode; | ||
24 | ushort unicode; | ||
25 | }; | ||
6 | 26 | ||
7 | class FunctionKeyboard : public QFrame { | 27 | class FunctionKeyboard : public QFrame { |
8 | Q_OBJECT | 28 | Q_OBJECT |
9 | 29 | ||
10 | public: | 30 | public: |
11 | FunctionKeyboard(QWidget *parent = 0); | 31 | FunctionKeyboard(QWidget *parent = 0); |
12 | ~FunctionKeyboard(); | 32 | ~FunctionKeyboard(); |
13 | 33 | ||
14 | void paintEvent(QPaintEvent *); | 34 | void paintEvent(QPaintEvent *); |
15 | void paintKey(int, int); | 35 | void paintKey(int, int); |
16 | void mousePressEvent(QMouseEvent*); | 36 | void mousePressEvent(QMouseEvent*); |
17 | void mouseReleaseEvent(QMouseEvent*); | 37 | void mouseReleaseEvent(QMouseEvent*); |
18 | void resizeEvent(QResizeEvent*); | 38 | void resizeEvent(QResizeEvent*); |
19 | 39 | ||
40 | |||
20 | 41 | ||
21 | QSize sizeHint() const; | 42 | QSize sizeHint() const; |
22 | 43 | ||
23 | private: | 44 | private: |
45 | |||
46 | // thie key for the map is the row/col | ||
47 | QMap<QString, FKey> keys; | ||
48 | |||
24 | uint numRows; | 49 | uint numRows; |
25 | uint numCols; | 50 | uint numCols; |
26 | uint keyHeight; | 51 | uint keyHeight; |
27 | double keyWidth; // decimal point matters! | 52 | double keyWidth; // decimal point matters! |
28 | 53 | ||
29 | int pressedRow, pressedCol; | 54 | int pressedRow, pressedCol; |
30 | 55 | ||
31 | }; | 56 | }; |
32 | 57 | ||
33 | #endif | 58 | #endif |