summaryrefslogtreecommitdiff
authorhash <hash>2002-08-15 09:49:41 (UTC)
committer hash <hash>2002-08-15 09:49:41 (UTC)
commit56d64478a06c6d4bf137e2e0dcf5ed7d85dadb71 (patch) (side-by-side diff)
tree55037c6d09c9b2324a3a02d4c3a89db95e586ee1
parentb54a9a4b4188ff4759574028f7ea0e231ee6bed3 (diff)
downloadopie-56d64478a06c6d4bf137e2e0dcf5ed7d85dadb71.zip
opie-56d64478a06c6d4bf137e2e0dcf5ed7d85dadb71.tar.gz
opie-56d64478a06c6d4bf137e2e0dcf5ed7d85dadb71.tar.bz2
keymap dynamic loading works, but no file select dialog. remembers your selected keymap too
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/multikey/configdlg.cpp26
-rw-r--r--inputmethods/multikey/configdlg.h5
-rw-r--r--inputmethods/multikey/keyboard.cpp158
-rw-r--r--inputmethods/multikey/keyboard.h8
4 files changed, 152 insertions, 45 deletions
diff --git a/inputmethods/multikey/configdlg.cpp b/inputmethods/multikey/configdlg.cpp
index e39fa6a..68c31be 100644
--- a/inputmethods/multikey/configdlg.cpp
+++ b/inputmethods/multikey/configdlg.cpp
@@ -42,6 +42,14 @@ ConfigDlg::ConfigDlg () : QTabWidget ()
- QComboBox *combo = new QComboBox ((bool)0, map_group);
+ map_combo = new QComboBox ((bool)0, map_group);
+ map_combo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
+
QString cur(tr("Current Language"));
- combo->insertItem(cur);
- combo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
+ map_combo->insertItem(cur);
+ connect(map_combo, SIGNAL(activated(int)), SLOT(setMap(int)));
+
+ QString ko(tr("/opt/opie/share/multikey/ko.keymap"));
+ map_combo->insertItem(ko);
+
+ QString en(tr("/opt/opie/share/multikey/en.keymap"));
+ map_combo->insertItem(en);
@@ -100 +108,13 @@ void ConfigDlg::pickTog() {
}
+
+void ConfigDlg::setMap(int index) {
+
+ if (index == 0) {
+
+ emit setMapToDefault();
+ }
+ else {
+
+ emit setMapToFile(map_combo->text(index));
+ }
+}
diff --git a/inputmethods/multikey/configdlg.h b/inputmethods/multikey/configdlg.h
index 21bdb17..54127a0 100644
--- a/inputmethods/multikey/configdlg.h
+++ b/inputmethods/multikey/configdlg.h
@@ -3,2 +3,3 @@
#include <qcheckbox.h>
+#include <qcombobox.h>
@@ -16,2 +17,4 @@ signals:
void pickboardToggled(bool on_off);
+ void setMapToDefault();
+ void setMapToFile(QString file);
@@ -19,2 +22,3 @@ private slots:
void pickTog();
+ void setMap(int index);
@@ -22,2 +26,3 @@ private:
QCheckBox *pick_button;
+ QComboBox *map_combo;
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
@@ -35,2 +35,3 @@
#include <qtextstream.h>
+#include <iostream.h>
@@ -45,3 +46,3 @@ Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
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)
@@ -50,9 +51,11 @@ Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
// 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;
@@ -70,5 +73,3 @@ Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) :
- Config config("locale");
- config.setGroup( "Language" );
- LANG = config.readEntry( "Language", "en" );
+ keys = new Keys();
@@ -160,3 +161,3 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
- x += keys.width(row, i) * defaultKeyWidth;
+ x += keys->width(row, i) * defaultKeyWidth;
}
@@ -164,3 +165,3 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
- int keyWidth = keys.width(row, col);
+ int keyWidth = keys->width(row, col);
@@ -168,7 +169,7 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
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);
@@ -178,3 +179,3 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
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);
}
@@ -204,6 +205,6 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
- 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);
@@ -212,3 +213,3 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
- if (keys.pressed(row, col))
+ if (keys->pressed(row, col))
p.fillRect(x+1, y+1, keyWidthPix - 1,
@@ -216,3 +217,3 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
- ushort c = keys.uni(row, col);
+ ushort c = keys->uni(row, col);
@@ -222,3 +223,3 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col)
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);
}
@@ -255,4 +256,4 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
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;
@@ -261,4 +262,4 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
- qkeycode = keys.qcode(row, col);
- unicode = keys.uni(row, col);
+ qkeycode = keys->qcode(row, col);
+ unicode = keys->uni(row, col);
@@ -280,2 +281,6 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
this, SLOT(togglePickboard(bool)));
+ connect(configdlg, SIGNAL(setMapToDefault()),
+ this, SLOT(setMapToDefault()));
+ connect(configdlg, SIGNAL(setMapToFile(QString)),
+ this, SLOT(setMapToFile(QString)));
configdlg->showMaximized();
@@ -286,10 +291,10 @@ 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);
@@ -303,3 +308,3 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
else {
- shift = keys.pressedPtr(row, col);
+ shift = keys->pressedPtr(row, col);
*shift = 1;
@@ -319,3 +324,3 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
else {
- lock = keys.pressedPtr(row, col);;
+ lock = keys->pressedPtr(row, col);;
*lock = 1;
@@ -331,4 +336,4 @@ 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);
}
@@ -337,3 +342,3 @@ void Keyboard::mousePressEvent(QMouseEvent *e)
// korean parsing
- if (LANG == "ko") {
+ if (keys->lang == "ko") {
@@ -491,2 +496,42 @@ 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
@@ -797,8 +842,19 @@ 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";
@@ -832,2 +888,3 @@ void Keys::setKeysFromFile(const char * filename) {
+ // key definition
if (buf.contains(QRegExp("^\\d+\\s+[0-1a-fx]+", FALSE, FALSE))) {
@@ -877,2 +934,4 @@ void Keys::setKeysFromFile(const char * filename) {
}
+
+ // shift map
else if (buf.contains(QRegExp("^[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) {
@@ -887,2 +946,21 @@ void Keys::setKeysFromFile(const char * filename) {
}
+
+ // 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*#"))) {
diff --git a/inputmethods/multikey/keyboard.h b/inputmethods/multikey/keyboard.h
index e61b76c..c2efe10 100644
--- a/inputmethods/multikey/keyboard.h
+++ b/inputmethods/multikey/keyboard.h
@@ -69,2 +69,4 @@ public:
void setPressed(const int row, const int col, const bool pressed);
+ QString lang;
+ QString title;
@@ -110,2 +112,4 @@ private slots:
void togglePickboard(bool on_off);
+ void setMapToDefault();
+ void setMapToFile(QString file);
@@ -138,4 +142,4 @@ private:
- Keys keys;
- QString LANG;
+ Keys *keys;
+
/* for korean input */