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.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/inputmethods/multikey/keyboard.cpp b/inputmethods/multikey/keyboard.cpp
index b71f929..671868c 100644
--- a/inputmethods/multikey/keyboard.cpp
+++ b/inputmethods/multikey/keyboard.cpp
@@ -924,148 +924,158 @@ void Keys::setKeysFromFile(const char * filename) {
}
// 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);
}
// shift map
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();
}
// 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;
}
buf = t.readLine();
}
// comments
else if (buf.contains(QRegExp("^\\s*#"))) {
buf = t.readLine();
} else { // blank line, or garbage
buf = t.readLine();
}
}
f.close();
}
}
// Keys::setKey {{{2
void Keys::setKey(const int row, const int qcode, const ushort unicode,
const int width, QPixmap *pix) {
Key * key;
key = new Key;
key->qcode = qcode;
key->unicode = unicode;
key->width = width;
// share key->pressed between same keys
bool found = 0;
for (int i = 1; i <= 5; i++) {
for (unsigned int j = 0; j < keys[i].count(); j++)
if (keys[i].at(j)->qcode == qcode && keys[i].at(j)->unicode == unicode) {
key->pressed = keys[i].at(j)->pressed;
found = 1;
}
}
if (!found) {
key->pressed = new bool;
*(key->pressed) = 0;
}
key->pix = pix;
keys[row].append(key);
}
+
+// Keys::~Keys {{{2
+Keys::~Keys() {
+
+ for (int i = 1; i <= 5; i++)
+ for (unsigned int j = 0; j < keys[i].count(); j++)
+ delete keys[i].at(j);
+
+}
+
// Keys:: other functions {{{2
int Keys::width(const int row, const int col) {
return keys[row].at(col)->width;
}
ushort Keys::uni(const int row, const int col) {
return keys[row].at(col)->unicode;
}
int Keys::qcode(const int row, const int col) {
return keys[row].at(col)->qcode;
}
QPixmap *Keys::pix(const int row, const int col) {
return keys[row].at(col)->pix;
}
bool Keys::pressed(const int row, const int col) {
return *(keys[row].at(col)->pressed);
}
int Keys::numKeys(const int row) {
return keys[row].count();
}
void Keys::setPressed(const int row, const int col, const bool pressed) {
*(keys[row].at(col)->pressed) = pressed;
}
ushort Keys::shift(const ushort uni) {
if (shiftMap[uni]) {
return shiftMap[uni];
}
else
return 0;
}
bool *Keys::pressedPtr(const int row, const int col) {
return keys[row].at(col)->pressed;
}