summaryrefslogtreecommitdiff
path: root/inputmethods/multikey/keyboard.cpp
Side-by-side diff
Diffstat (limited to 'inputmethods/multikey/keyboard.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/multikey/keyboard.cpp158
1 files changed, 118 insertions, 40 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp
index a19f07a..1d91b82 100644
--- a/inputmethods/multikey/keyboard.cpp
+++ b/inputmethods/multikey/keyboard.cpp
@@ -34,4 +34,5 @@
#include <qfile.h>
#include <qtextstream.h>
+#include <iostream.h>
#include <sys/utsname.h>
@@ -44,16 +45,18 @@ Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
QFrame(parent, _name, f), shift(0), lock(0), ctrl(0),
alt(0), useLargeKeys(TRUE), usePicks(0), pressedKeyRow(-1), pressedKeyCol(-1),
- unicode(-1), qkeycode(0), modifiers(0), LANG("ko"), schar(0), mchar(0), echar(0),
+ unicode(-1), qkeycode(0), modifiers(0), schar(0), mchar(0), echar(0),
configdlg(0)
{
// get the default font
- Config qpeConfig( "qpe" );
- qpeConfig.setGroup( "Appearance" );
- QString familyStr = qpeConfig.readEntry( "FontFamily", "fixed" );
+ Config *config = new Config( "qpe" );
+ config->setGroup( "Appearance" );
+ QString familyStr = config->readEntry( "FontFamily", "fixed" );
+ delete config;
- Config multiConfig ("multikey");
- multiConfig.setGroup ("pickboard");
- usePicks = multiConfig.readBoolEntry ("open", "0"); // default closed
+ config = new Config("multikey");
+ config->setGroup ("pickboard");
+ usePicks = config->readBoolEntry ("open", "0"); // default closed
+ delete config;
setFont( QFont( familyStr, 8 ) );
@@ -69,7 +72,5 @@ Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
} else picks->hide();
- Config config("locale");
- config.setGroup( "Language" );
- LANG = config.readEntry( "Language", "en" );
+ keys = new Keys();
repeatTimer = new QTimer( this );
@@ -159,17 +160,17 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
for (int i = 0; i < col; i++) {
- x += keys.width(row, i) * defaultKeyWidth;
+ x += keys->width(row, i) * defaultKeyWidth;
}
int y = (row - 1) * keyHeight + (usePicks ? picks->height() : 0);
- int keyWidth = keys.width(row, col);
+ int keyWidth = keys->width(row, col);
p.fillRect(x + 1, y + 1,
keyWidth * defaultKeyWidth - 1, keyHeight - 1,
- pressed || keys.pressed(row, col) ? keycolor_pressed : keycolor);
+ pressed || keys->pressed(row, col) ? keycolor_pressed : keycolor);
- QPixmap *pix = keys.pix(row,col);
+ QPixmap *pix = keys->pix(row,col);
- ushort c = keys.uni(row, col);
+ ushort c = keys->uni(row, col);
if (!pix) {
@@ -177,5 +178,5 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
p.drawText(x, y,
defaultKeyWidth * keyWidth, keyHeight,
- AlignCenter, ((shift || lock) && keys.shift(c)) ? (QChar)keys.shift(c) : (QChar)c);
+ AlignCenter, ((shift || lock) && keys->shift(c)) ? (QChar)keys->shift(c) : (QChar)c);
}
else
@@ -203,17 +204,17 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
p.drawLine(x, y, x + width(), y);
- for (int col = 0; col < keys.numKeys(row); col++) {
+ for (int col = 0; col < keys->numKeys(row); col++) {
- QPixmap *pix = keys.pix(row, col);
- int keyWidth = keys.width(row, col);
+ QPixmap *pix = keys->pix(row, col);
+ int keyWidth = keys->width(row, col);
int keyWidthPix = defaultKeyWidth * keyWidth;
- if (keys.pressed(row, col))
+ if (keys->pressed(row, col))
p.fillRect(x+1, y+1, keyWidthPix - 1,
keyHeight - 1, keycolor_pressed);
- ushort c = keys.uni(row, col);
+ ushort c = keys->uni(row, col);
if (!pix) {
@@ -221,5 +222,5 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
p.drawText(x, y,
keyWidthPix, keyHeight,
- AlignCenter, ((shift || lock) && keys.shift(c)) ? (QChar)keys.shift(c) : (QChar)c);
+ AlignCenter, ((shift || lock) && keys->shift(c)) ? (QChar)keys->shift(c) : (QChar)c);
}
else {
@@ -254,12 +255,12 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
int col = 0;
for (int w = 0; e->x() >= w; col++)
- if (col < keys.numKeys(row)) // it segfaults if it trys to read past numKeys
- w += keys.width(row,col) * defaultKeyWidth;
+ if (col < keys->numKeys(row)) // it segfaults if it trys to read past numKeys
+ w += keys->width(row,col) * defaultKeyWidth;
else break;
col --; // rewind one...
- qkeycode = keys.qcode(row, col);
- unicode = keys.uni(row, col);
+ qkeycode = keys->qcode(row, col);
+ unicode = keys->uni(row, col);
// might need to repaint if two or more of the same keys.
@@ -279,4 +280,8 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
connect(configdlg, SIGNAL(pickboardToggled(bool)),
this, SLOT(togglePickboard(bool)));
+ connect(configdlg, SIGNAL(setMapToDefault()),
+ this, SLOT(setMapToDefault()));
+ connect(configdlg, SIGNAL(setMapToFile(QString)),
+ this, SLOT(setMapToFile(QString)));
configdlg->showMaximized();
configdlg->show();
@@ -285,12 +290,12 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
} else if (qkeycode == Qt::Key_Control) {
- ctrl = keys.pressedPtr(row, col);
+ ctrl = keys->pressedPtr(row, col);
need_repaint = TRUE;
- *ctrl = !keys.pressed(row, col);
+ *ctrl = !keys->pressed(row, col);
} else if (qkeycode == Qt::Key_Alt) {
- alt = keys.pressedPtr(row, col);
+ alt = keys->pressedPtr(row, col);
need_repaint = TRUE;
- *alt = !keys.pressed(row, col);
+ *alt = !keys->pressed(row, col);
} else if (qkeycode == Qt::Key_Shift) {
@@ -302,5 +307,5 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
}
else {
- shift = keys.pressedPtr(row, col);
+ shift = keys->pressedPtr(row, col);
*shift = 1;
if (lock) {
@@ -318,5 +323,5 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
}
else {
- lock = keys.pressedPtr(row, col);;
+ lock = keys->pressedPtr(row, col);;
*lock = 1;
if (shift) {
@@ -330,11 +335,11 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
}
else { // normal char
- if ((shift || lock) && keys.shift(unicode)) {
- unicode = keys.shift(unicode);
+ if ((shift || lock) && keys->shift(unicode)) {
+ unicode = keys->shift(unicode);
}
}
// korean parsing
- if (LANG == "ko") {
+ if (keys->lang == "ko") {
unicode = parseKoreanInput(unicode);
@@ -490,4 +495,44 @@ void Keyboard::togglePickboard(bool on_off)
}
+/* Keyboard::setMapTo ... {{{1 */
+void Keyboard::setMapToDefault() {
+
+
+ /* load current locale language map */
+ Config *config = new Config("locale");
+ config->setGroup( "Language" );
+ QString l = config->readEntry( "Language" , "en" );
+ delete config;
+
+ QString key_map = QPEApplication::qpeDir() + "/share/multikey/"
+ + l + ".keymap";
+
+ /* save change to multikey config file */
+ config = new Config("multikey");
+ config->setGroup ("keymaps");
+ config->writeEntry ("current", key_map); // default closed
+ delete config;
+
+ delete keys;
+ keys = new Keys(key_map);
+
+ // have to repaint the keyboard
+ repaint(FALSE);
+}
+
+void Keyboard::setMapToFile(QString file) {
+
+ /* save change to multikey config file */
+ Config *config = new Config("multikey");
+ config->setGroup ("keymaps");
+ config->writeEntry ("current", file); // default closed
+ delete config;
+
+ delete keys;
+ keys = new Keys(file);
+ repaint(FALSE);
+
+}
+
/* korean input functions {{{1
*
@@ -796,10 +841,21 @@ ushort Keyboard::constoe(const ushort c) {
Keys::Keys() {
- Config config("locale");
- config.setGroup( "Language" );
- QString l = config.readEntry( "Language" , "en" );
+ Config *config = new Config ("multikey");
+ config->setGroup( "keymaps" );
+ QString key_map = config->readEntry( "current" );
+ delete config;
+
+ if (key_map.isNull()) {
+
+ Config *config = new Config("locale");
+ config->setGroup( "Language" );
+ QString l = config->readEntry( "Language" , "en" );
+ delete config;
+
+ key_map = QPEApplication::qpeDir() + "/share/multikey/"
+ + l + ".keymap";
+
+ }
- QString key_map = QPEApplication::qpeDir() + "/share/multikey/"
- + l + ".keymap";
setKeysFromFile(key_map);
@@ -831,4 +887,5 @@ void Keys::setKeysFromFile(const char * filename) {
while (buf) {
+ // key definition
if (buf.contains(QRegExp("^\\d+\\s+[0-1a-fx]+", FALSE, FALSE))) {
// no $1 type referencing!!! this implementation of regexp sucks
@@ -876,4 +933,6 @@ void Keys::setKeysFromFile(const char * filename) {
setKey(row, qcode, unicode, width, xpm2pix);
}
+
+ // shift map
else if (buf.contains(QRegExp("^[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) {
@@ -886,4 +945,23 @@ void Keys::setKeysFromFile(const char * filename) {
buf = t.readLine();
}
+
+ // other variables like lang & title
+ else if (buf.contains(QRegExp("^\\s*[a-zA-Z]+\\s*=\\s*[a-zA-Z0-9/]+\\s*$", FALSE, FALSE))) {
+
+ QTextStream tmp (buf, IO_ReadOnly);
+ QString name, equals, value;
+
+ tmp >> name >> equals >> value;
+
+ if (name == "lang") {
+
+ lang = value;
+
+ }
+
+ cout << name << " = " << value << "\n";
+ buf = t.readLine();
+ }
+ // comments
else if (buf.contains(QRegExp("^\\s*#"))) {