-rw-r--r-- | inputmethods/multikey/keyboard.cpp | 148 | ||||
-rw-r--r-- | inputmethods/multikey/keyboard.h | 6 |
2 files changed, 153 insertions, 1 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp index 28d5cab..1dd8ca1 100644 --- a/inputmethods/multikey/keyboard.cpp +++ b/inputmethods/multikey/keyboard.cpp @@ -43,3 +43,3 @@ Keyboard::Keyboard(QWidget* parent, const char* _name, WFlags f) : QFrame(parent, _name, f), shift(0), lock(0), ctrl(0), alt(0), - meta(0), circumflex(0), diaeresis(0), + meta(0), circumflex(0), diaeresis(0), baccent(0), accent(0), useLargeKeys(TRUE), usePicks(0), useRepeat(0), @@ -192,2 +192,6 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col) c = keys->diaeresis(keys->shift(c)); + else if (baccent && keys->baccent(keys->shift(c))) + c = keys->baccent(keys->shift(c)); + else if (accent && keys->accent(keys->shift(c))) + c = keys->accent(keys->shift(c)); else if (meta && keys->meta(keys->shift(c))) @@ -201,2 +205,6 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col) c = keys->circumflex(c); + else if (baccent && keys->baccent(c)) + c = keys->baccent(c); + else if (accent && keys->accent(c)) + c = keys->accent(c); else if (diaeresis && (keys->diaeresis(c) || c == 0x2c6)) { @@ -262,2 +270,6 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col) c = keys->diaeresis(keys->shift(c)); + else if (baccent && keys->baccent(keys->shift(c))) + c = keys->baccent(keys->shift(c)); + else if (accent && keys->accent(keys->shift(c))) + c = keys->accent(keys->shift(c)); else if (meta && keys->meta(keys->shift(c))) @@ -271,2 +283,6 @@ void Keyboard::drawKeyboard(QPainter &p, int row, int col) c = keys->circumflex(c); + else if (baccent && keys->baccent(c)) + c = keys->baccent(c); + else if (accent && keys->accent(c)) + c = keys->accent(c); else if (diaeresis && (keys->diaeresis(c) || c == 0x2c6)) { @@ -348,2 +364,37 @@ void Keyboard::mousePressEvent(QMouseEvent *e) + // Back accent character support + + if (unicode == 0x60) { + + unicode = 0; + if (shift || lock) { + + // circumblex + qkeycode = 0x2000; + } + else { + + // back accent + qkeycode = 0x2002; + } + } + + // Accent character support + + if (unicode == 0xb4) { + + unicode = 0; + if (shift || lock) { + + // diaeresis + qkeycode = 0x2001; + } + else { + + // accent + qkeycode = 0x2003; + } + } + + if (unicode == 0) { // either Qt char, or nothing @@ -474,2 +525,4 @@ void Keyboard::mousePressEvent(QMouseEvent *e) if (diaeresis) { *diaeresis = 0; diaeresis = 0; } + if (baccent) { *baccent = 0; baccent = 0; } + if (accent) { *accent = 0; accent = 0; } @@ -553,2 +606,46 @@ void Keyboard::mousePressEvent(QMouseEvent *e) qkeycode = 0; + + // Back accent + } else if (qkeycode == 0x2002) { + need_repaint = TRUE; + + if (baccent) { + + *baccent = 0; + baccent = 0; + + } else { + + baccent = keys->pressedPtr(row, col); + *baccent = true; + } + + + if (shift) { *shift = 0; shift = 0; } + if (meta) { *meta = 0; meta = 0; } + if (accent) { *accent = 0; accent = 0; } + + qkeycode = 0; + + // Accent + } else if (qkeycode == 0x2003) { + need_repaint = TRUE; + + if (accent) { + + *accent = 0; + accent = 0; + + } else { + + accent = keys->pressedPtr(row, col); + *accent = true; + } + + + if (shift) { *shift = 0; shift = 0; } + if (meta) { *meta = 0; meta = 0; } + if (baccent) { *baccent = 0; } + + qkeycode = 0; } @@ -566,2 +663,6 @@ void Keyboard::mousePressEvent(QMouseEvent *e) unicode = keys->diaeresis(keys->shift(unicode)); + else if (baccent && keys->baccent(keys->shift(unicode))) + unicode = keys->baccent(keys->shift(unicode)); + else if (accent && keys->accent(keys->shift(unicode))) + unicode = keys->accent(keys->shift(unicode)); else if (meta && keys->meta(keys->shift(unicode))) @@ -581,2 +682,8 @@ void Keyboard::mousePressEvent(QMouseEvent *e) } + else if (baccent && keys->baccent(unicode)) { + unicode = keys->baccent(unicode); + } + else if (accent && keys->accent(unicode)) { + unicode = keys->accent(unicode); + } } @@ -735,2 +842,4 @@ void Keyboard::resetState() if (diaeresis) { *diaeresis = 0; diaeresis = 0; } + if (baccent) { *baccent = 0; baccent = 0; } + if (accent) { *accent = 0; accent = 0; } @@ -1342,2 +1451,27 @@ void Keys::setKeysFromFile(const char * filename) { } + // back accent + else if (buf.contains(QRegExp("^\\s*b\\s+[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) { + + QTextStream tmp (buf, IO_ReadOnly); + ushort lower, shift; + QChar d; + tmp >> d >> lower >> shift; + + baccentMap.insert(lower, shift); + + qDebug ("Estoy añadiendo %i con %i", lower, shift); + buf = t.readLine(); + } + // accent + else if (buf.contains(QRegExp("^\\s*a\\s+[0-9a-fx]+\\s+[0-9a-fx]+\\s*$", FALSE, FALSE))) { + + QTextStream tmp (buf, IO_ReadOnly); + ushort lower, shift; + QChar d; + tmp >> d >> lower >> shift; + + accentMap.insert(lower, shift); + + buf = t.readLine(); + } @@ -1491,2 +1625,14 @@ ushort Keys::diaeresis(const ushort uni) { +ushort Keys::baccent(const ushort uni) { + + if(baccentMap[uni]) return baccentMap[uni]; + else return 0; +} + +ushort Keys::accent(const ushort uni) { + + if(accentMap[uni]) return accentMap[uni]; + else return 0; +} + bool *Keys::pressedPtr(const int row, const int col) { diff --git a/inputmethods/multikey/keyboard.h b/inputmethods/multikey/keyboard.h index 8af80d0..bc74e71 100644 --- a/inputmethods/multikey/keyboard.h +++ b/inputmethods/multikey/keyboard.h @@ -68,2 +68,4 @@ public: ushort diaeresis(const ushort); + ushort baccent(const ushort); + ushort accent(const ushort); QImage *pix(const int row, const int col); @@ -94,2 +96,4 @@ private: QMap<ushort,ushort> diaeresisMap; + QMap<ushort,ushort> baccentMap; + QMap<ushort,ushort> accentMap; @@ -140,2 +144,4 @@ private: bool *diaeresis; + bool *baccent; + bool *accent; |