author | hash <hash> | 2002-08-12 07:55:58 (UTC) |
---|---|---|
committer | hash <hash> | 2002-08-12 07:55:58 (UTC) |
commit | 1e045c5b7b5278b4a5925ba878cbdbdea9d03e1d (patch) (side-by-side diff) | |
tree | 9687a824bde2de00bd1b42c34988acd778660b9a | |
parent | 895a6e1cebade986110758c57cafdadd942a63ff (diff) | |
download | opie-1e045c5b7b5278b4a5925ba878cbdbdea9d03e1d.zip opie-1e045c5b7b5278b4a5925ba878cbdbdea9d03e1d.tar.gz opie-1e045c5b7b5278b4a5925ba878cbdbdea9d03e1d.tar.bz2 |
uses langauge setting to choose keymap
-rw-r--r-- | inputmethods/multikey/keyboard.cpp | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp index d0cfa51..8f4d562 100644 --- a/inputmethods/multikey/keyboard.cpp +++ b/inputmethods/multikey/keyboard.cpp @@ -1,162 +1,161 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "keyboard.h" #include <qpe/global.h> #include <qwindowsystem_qws.h> #include <qpainter.h> #include <qfontmetrics.h> #include <qtimer.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <ctype.h> #include <qfile.h> #include <qtextstream.h> #include <sys/utsname.h> #define USE_SMALL_BACKSPACE /* Keyboard::Keyboard {{{1 */ 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) { // get the default font Config qpeConfig( "qpe" ); qpeConfig.setGroup( "Appearance" ); QString familyStr = qpeConfig.readEntry( "FontFamily", "fixed" ); setFont( QFont( familyStr, 8 ) ); picks = new KeyboardPicks( this ); picks->setFont( QFont( familyStr, 8 ) ); picks->initialise(); if (usePicks) { QObject::connect( picks, SIGNAL(key(ushort,ushort,ushort,bool,bool) ), this, SIGNAL(key(ushort,ushort,ushort,bool,bool)) ); } else picks->hide(); Config config("locale"); config.setGroup( "Language" ); - //LANG = config.readEntry( "Language", "en" ); - LANG = "ko"; + LANG = config.readEntry( "Language", "en" ); repeatTimer = new QTimer( this ); connect( repeatTimer, SIGNAL(timeout()), this, SLOT(repeat()) ); } /* Keyboard::resizeEvent {{{1 */ void Keyboard::resizeEvent(QResizeEvent*) { int ph = picks->sizeHint().height(); picks->setGeometry( 0, 0, width(), ph ); keyHeight = (height()-(usePicks ? ph : 0))/5; int nk; // number of keys? if ( useLargeKeys ) { nk = 15; } else { nk = 19; } defaultKeyWidth = (width()/nk)/2; xoffs = (width()-defaultKeyWidth*nk)/2; // empty key spaces? } /* KeyboardPicks::initialize {{{1 */ void KeyboardPicks::initialise() { setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed)); mode = 0; dc = new KeyboardConfig(this); configs.append(dc); } /* KeyboardPicks::sizeHint {{{1 */ QSize KeyboardPicks::sizeHint() const { return QSize(240,fontMetrics().lineSpacing()); } /* KeyboardConfig::generateText {{{1 */ void KeyboardConfig::generateText(const QString &s) { #if defined(Q_WS_QWS) || defined(_WS_QWS_) for (int i=0; i<(int)backspaces; i++) { parent->emitKey( 0, Qt::Key_Backspace, 0, true, false ); parent->emitKey( 0, Qt::Key_Backspace, 0, false, false ); } for (int i=0; i<(int)s.length(); i++) { parent->emitKey( s[i].unicode(), 0, 0, true, false ); parent->emitKey( s[i].unicode(), 0, 0, false, false ); } parent->emitKey( 0, Qt::Key_Space, 0, true, false ); parent->emitKey( 0, Qt::Key_Space, 0, false, false ); backspaces = 0; #endif } /* Keyboard::paintEvent {{{1 */ void Keyboard::paintEvent(QPaintEvent* e) { QPainter painter(this); painter.setClipRect(e->rect()); drawKeyboard( painter ); picks->dc->draw( &painter ); } /* Keyboard::drawKeyboard {{{1 */ void Keyboard::drawKeyboard(QPainter &p, int row, int col) { QColor keycolor = QColor(240,240,240); QColor keycolor_pressed = QColor(171,183,198); QColor keycolor_lines = QColor(138,148,160); QColor textcolor = QColor(43,54,68); if (row != -1 && col != -1) { //just redraw one key int x = 0; for (int i = 0; i < col; i++) { x += keys.width(row, i) * defaultKeyWidth; } int y = (row - 1) * keyHeight + (usePicks ? picks->height() : 0); 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); @@ -681,194 +680,193 @@ ushort Keyboard::parseKoreanInput (ushort c) { break; } emit key( prev, prev, 0, true, false ); mchar = c; echar = 0; return combineKoreanChars(schar, mchar, 0); } else { schar = 0; mchar = 0; echar = 0; return c; } } else /*if (c == ' ')*/ return c; // and now... finally delete previous char, and return new char emit key( 8, Qt::Key_Backspace, 0, true, false ); return combineKoreanChars( schar, mchar, echar); } ushort Keyboard::combineKoreanChars(const ushort s, const ushort m, const ushort e) { return ((s - 0x1100) * 588) + ((m - 0x1161) * 28) + (e ? e - 0x11a7 : 0) + 0xac00; } ushort Keyboard::constoe(const ushort c) { // converts schars to echars if possible if (0x1100 <= c && c <= 0x1112) { // schar to echar switch (c) { case 0x1100: return 0x11a8; case 0x1101: return 0x11a9; case 0x1102: return 0x11ab; case 0x1103: return 0x11ae; case 0x1105: return 0x11af; case 0x1106: return 0x11b7; case 0x1107: return 0x11b8; case 0x1109: return 0x11ba; case 0x110a: return 0x11bb; case 0x110b: return 0x11bc; case 0x110c: return 0x11bd; case 0x110e: return 0x11be; case 0x110f: return 0x11bf; case 0x1110: return 0x11c0; case 0x1111: return 0x11c1; case 0x1112: return 0x11c2; default: return 0; } } else { //echar to schar switch (c) { case 0x11a8: return 0x1100; case 0x11a9: return 0x1101; case 0x11ab: return 0x1102; case 0x11ae: return 0x1103; case 0x11af: return 0x1105; case 0x11b7: return 0x1106; case 0x11b8: return 0x1107; case 0x11ba: return 0x1109; case 0x11bb: return 0x110a; case 0x11bc: return 0x110b; case 0x11bd: return 0x110c; case 0x11be: return 0x110e; case 0x11bf: return 0x110f; case 0x11c0: return 0x1110; case 0x11c1: return 0x1111; case 0x11c2: return 0x1112; default: return 0; } } } // Keys::Keys {{{1 Keys::Keys() { Config config("locale"); config.setGroup( "Language" ); QString l = config.readEntry( "Language" , "en" ); QString key_map = QPEApplication::qpeDir() + "/share/multikey/" - + /* l // testing korean for now */ - + "ko.keymap"; + + l + ".keymap"; setKeysFromFile(key_map); } Keys::Keys(const char * filename) { setKeysFromFile(filename); } // Keys::setKeysFromFile {{{2 void Keys::setKeysFromFile(const char * filename) { QFile f(filename); if (f.open(IO_ReadOnly)) { QTextStream t(&f); int row; int qcode; ushort unicode; int width; QString buf; QString comment; char * xpm[256]; //couldnt be larger than that... could it? QPixmap *xpm2pix = 0; buf = t.readLine(); while (buf) { if (buf.contains(QRegExp("^\\d+\\s+[0-1a-fx]+", FALSE, FALSE))) { // no $1 type referencing!!! this implementation of regexp sucks // dont know of any sscanf() type funcs in Qt lib QTextStream tmp (buf, IO_ReadOnly); tmp >> row >> qcode >> unicode >> width >> comment; buf = t.readLine(); int xpmLineCount = 0; xpm2pix = 0; // erase blank space while (buf.contains(QRegExp("^\\s*$")) && buf) buf = t.readLine(); while (buf.contains(QRegExp("^\\s*\".*\""))) { QString xpmBuf = buf.stripWhiteSpace(); xpm[xpmLineCount] = new char [xpmBuf.length()]; int j = 0; for (ushort i = 0; i < xpmBuf.length(); i++) { if (xpmBuf[i].latin1() != '"') { ((char *)xpm[xpmLineCount])[j] = xpmBuf.at(i).latin1(); j++; } } // have to close that facker up ((char *)xpm[xpmLineCount])[j] = '\0'; xpmLineCount++; buf = t.readLine(); } if (xpmLineCount) { xpm2pix = new QPixmap((const char **)xpm); for (int i = 0; i < xpmLineCount; i++) delete [] (xpm[i]); } setKey(row, qcode, unicode, width, xpm2pix); } else if (buf.contains(QRegExp("^[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) { QTextStream tmp (buf, IO_ReadOnly); ushort lower, shift; tmp >> lower >> shift; shiftMap.insert(lower, shift); buf = t.readLine(); } else if (buf.contains(QRegExp("^\\s*#"))) { buf = t.readLine(); } else { // blank line, or garbage buf = t.readLine(); } } f.close(); |