diff --git a/README.md b/README.md
index 54965db..6c128eb 100644
--- a/README.md
+++ b/README.md
@@ -20,10 +20,6 @@ Install the QtCore, QtGui and QtWidgets libraries and build headers, along with
The above will place the qteletextmaker executable in the same directory as the source, type `./qteletextmaker` in the terminal to launch. Optionally, type `make install` afterwards to place the executable into /usr/local/bin.
## Current limitations
-At the moment QTeletextMaker is in pre-alpha status so many features are not finished yet. The most-often encountered limitations are detailed here.
-
-Keymapping between ASCII and Teletext character sets is not yet implemented e.g. in English pressing the hash key will type a pound sign instead, and in other languages the square and curly brackets keys need to be pressed to obtain the accented characters.
-
The following X/26 enhancement triplets are not rendered by the editor, although the list is fully aware of them.
- Invocation of Objects from POP and GPOP pages.
- DRCS characters.
diff --git a/keymap.h b/keymap.h
new file mode 100644
index 0000000..b8fb63c
--- /dev/null
+++ b/keymap.h
@@ -0,0 +1,545 @@
+/*
+ * Copyright (C) 2020, 2021 Gavin MacGregor
+ *
+ * This file is part of QTeletextMaker.
+ *
+ * QTeletextMaker is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * QTeletextMaker is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with QTeletextMaker. If not, see .
+ */
+
+#ifndef KEYMAP_H
+#define KEYMAP_H
+
+#include
+
+static const QMap keymapping[24] = {
+ // Only used by X/26 enhancements, not directly by keyboard
+ { // 0 Latin G0
+ },
+
+ { // 1 Cyrillic G0 1 Serbian/Croatian
+ { 0x0427, 0x40 }, // Ч CYRILLIC CAPITAL LETTER CHE
+ { 0x0410, 0x41 }, // А CYRILLIC CAPITAL LETTER A
+ { 0x0411, 0x42 }, // Б CYRILLIC CAPITAL LETTER BE
+ { 0x0426, 0x43 }, // Ц CYRILLIC CAPITAL LETTER TSE
+ { 0x0414, 0x44 }, // Д CYRILLIC CAPITAL LETTER DE
+ { 0x0415, 0x45 }, // Е CYRILLIC CAPITAL LETTER IE
+ { 0x0424, 0x46 }, // Ф CYRILLIC CAPITAL LETTER EF
+ { 0x0413, 0x47 }, // Г CYRILLIC CAPITAL LETTER GHE
+ { 0x0425, 0x48 }, // Х CYRILLIC CAPITAL LETTER HA
+ { 0x0418, 0x49 }, // И CYRILLIC CAPITAL LETTER I
+ { 0x0408, 0x4a }, // Ј CYRILLIC CAPITAL LETTER JE
+ { 0x041a, 0x4b }, // К CYRILLIC CAPITAL LETTER KA
+ { 0x041b, 0x4c }, // Л CYRILLIC CAPITAL LETTER EL
+ { 0x041c, 0x4d }, // М CYRILLIC CAPITAL LETTER EM
+ { 0x041d, 0x4e }, // Н CYRILLIC CAPITAL LETTER EN
+ { 0x041e, 0x4f }, // О CYRILLIC CAPITAL LETTER O
+ { 0x041f, 0x50 }, // П CYRILLIC CAPITAL LETTER PE
+ { 0x040c, 0x51 }, // Ќ CYRILLIC CAPITAL LETTER KJE
+ { 0x0420, 0x52 }, // Р CYRILLIC CAPITAL LETTER ER
+ { 0x0421, 0x53 }, // С CYRILLIC CAPITAL LETTER ES
+ { 0x0422, 0x54 }, // Т CYRILLIC CAPITAL LETTER TE
+ { 0x0423, 0x55 }, // У CYRILLIC CAPITAL LETTER U
+ { 0x0412, 0x56 }, // В CYRILLIC CAPITAL LETTER VE
+ { 0x0403, 0x57 }, // Ѓ CYRILLIC CAPITAL LETTER GJE
+ { 0x0409, 0x58 }, // Љ CYRILLIC CAPITAL LETTER LJE
+ { 0x040a, 0x59 }, // Њ CYRILLIC CAPITAL LETTER NJE
+ { 0x0417, 0x5a }, // З CYRILLIC CAPITAL LETTER ZE
+ { 0x040b, 0x5b }, // Ћ CYRILLIC CAPITAL LETTER TSHE
+ { 0x0416, 0x5c }, // Ж CYRILLIC CAPITAL LETTER ZHE
+ { 0x0402, 0x5d }, // Ђ CYRILLIC CAPITAL LETTER DJE
+ { 0x0428, 0x5e }, // Ш CYRILLIC CAPITAL LETTER SHA
+ { 0x040f, 0x5f }, // Џ CYRILLIC CAPITAL LETTER DZHE
+ { 0x0447, 0x60 }, // ч CYRILLIC SMALL LETTER CHE
+ { 0x0430, 0x61 }, // а CYRILLIC SMALL LETTER A
+ { 0x0431, 0x62 }, // б CYRILLIC SMALL LETTER BE
+ { 0x0446, 0x63 }, // ц CYRILLIC SMALL LETTER TSE
+ { 0x0434, 0x64 }, // д CYRILLIC SMALL LETTER DE
+ { 0x0435, 0x65 }, // е CYRILLIC SMALL LETTER IE
+ { 0x0444, 0x66 }, // ф CYRILLIC SMALL LETTER EF
+ { 0x0433, 0x67 }, // г CYRILLIC SMALL LETTER GHE
+ { 0x0445, 0x68 }, // х CYRILLIC SMALL LETTER HA
+ { 0x0438, 0x69 }, // и CYRILLIC SMALL LETTER I
+ { 0x0458, 0x6a }, // ј CYRILLIC SMALL LETTER JE
+ { 0x043a, 0x6b }, // к CYRILLIC SMALL LETTER KA
+ { 0x043b, 0x6c }, // л CYRILLIC SMALL LETTER EL
+ { 0x043c, 0x6d }, // м CYRILLIC SMALL LETTER EM
+ { 0x043d, 0x6e }, // н CYRILLIC SMALL LETTER EN
+ { 0x043e, 0x6f }, // о CYRILLIC SMALL LETTER O
+ { 0x043f, 0x70 }, // п CYRILLIC SMALL LETTER PE
+ { 0x045c, 0x71 }, // ќ CYRILLIC SMALL LETTER KJE
+ { 0x0440, 0x72 }, // р CYRILLIC SMALL LETTER ER
+ { 0x0441, 0x73 }, // с CYRILLIC SMALL LETTER ES
+ { 0x0442, 0x74 }, // т CYRILLIC SMALL LETTER TE
+ { 0x0443, 0x75 }, // у CYRILLIC SMALL LETTER U
+ { 0x0432, 0x76 }, // в CYRILLIC SMALL LETTER VE
+ { 0x0453, 0x77 }, // ѓ CYRILLIC SMALL LETTER GJE
+ { 0x0459, 0x78 }, // љ CYRILLIC SMALL LETTER LJE
+ { 0x045a, 0x79 }, // њ CYRILLIC SMALL LETTER NJE
+ { 0x0437, 0x7a }, // з CYRILLIC SMALL LETTER ZE
+ { 0x045b, 0x7b }, // ћ CYRILLIC SMALL LETTER TSHE
+ { 0x0436, 0x7c }, // ж CYRILLIC SMALL LETTER ZHE
+ { 0x0452, 0x7d }, // ђ CYRILLIC SMALL LETTER DJE
+ { 0x0448, 0x7e } // ш CYRILLIC SMALL LETTER SHA
+ },
+
+ { // 2 Cyrillic G0 2 Russian/Bulgarian
+ { 0x044b, 0x26 }, // ы CYRILLIC SMALL LETTER YERU
+ { 0x042e, 0x40 }, // Ю CYRILLIC CAPITAL LETTER YU
+ { 0x0410, 0x41 }, // А CYRILLIC CAPITAL LETTER A
+ { 0x0411, 0x42 }, // Б CYRILLIC CAPITAL LETTER BE
+ { 0x0426, 0x43 }, // Ц CYRILLIC CAPITAL LETTER TSE
+ { 0x0414, 0x44 }, // Д CYRILLIC CAPITAL LETTER DE
+ { 0x0415, 0x45 }, // Е CYRILLIC CAPITAL LETTER IE
+ { 0x0424, 0x46 }, // Ф CYRILLIC CAPITAL LETTER EF
+ { 0x0413, 0x47 }, // Г CYRILLIC CAPITAL LETTER GHE
+ { 0x0425, 0x48 }, // Х CYRILLIC CAPITAL LETTER HA
+ { 0x0418, 0x49 }, // И CYRILLIC CAPITAL LETTER I
+ { 0x0419, 0x4a }, // Й CYRILLIC CAPITAL LETTER SHORT I
+ { 0x041a, 0x4b }, // К CYRILLIC CAPITAL LETTER KA
+ { 0x041b, 0x4c }, // Л CYRILLIC CAPITAL LETTER EL
+ { 0x041c, 0x4d }, // М CYRILLIC CAPITAL LETTER EM
+ { 0x041d, 0x4e }, // Н CYRILLIC CAPITAL LETTER EN
+ { 0x041e, 0x4f }, // О CYRILLIC CAPITAL LETTER O
+ { 0x041f, 0x50 }, // П CYRILLIC CAPITAL LETTER PE
+ { 0x042f, 0x51 }, // Я CYRILLIC CAPITAL LETTER YA
+ { 0x0420, 0x52 }, // Р CYRILLIC CAPITAL LETTER ER
+ { 0x0421, 0x53 }, // С CYRILLIC CAPITAL LETTER ES
+ { 0x0422, 0x54 }, // Т CYRILLIC CAPITAL LETTER TE
+ { 0x0423, 0x55 }, // У CYRILLIC CAPITAL LETTER U
+ { 0x0416, 0x56 }, // Ж CYRILLIC CAPITAL LETTER ZHE
+ { 0x0412, 0x57 }, // В CYRILLIC CAPITAL LETTER VE
+ { 0x042c, 0x58 }, // Ь CYRILLIC CAPITAL LETTER SOFT SIGN
+ { 0x042a, 0x59 }, // Ъ CYRILLIC CAPITAL LETTER HARD SIGN
+ { 0x0417, 0x5a }, // З CYRILLIC CAPITAL LETTER ZE
+ { 0x0428, 0x5b }, // Ш CYRILLIC CAPITAL LETTER SHA
+ { 0x042d, 0x5c }, // Э CYRILLIC CAPITAL LETTER E
+ { 0x0429, 0x5d }, // Щ CYRILLIC CAPITAL LETTER SHCHA
+ { 0x0427, 0x5e }, // Ч CYRILLIC CAPITAL LETTER CHE
+ { 0x042b, 0x5f }, // Ы CYRILLIC CAPITAL LETTER YERU
+ { 0x044e, 0x60 }, // ю CYRILLIC SMALL LETTER YU
+ { 0x0430, 0x61 }, // а CYRILLIC SMALL LETTER A
+ { 0x0431, 0x62 }, // б CYRILLIC SMALL LETTER BE
+ { 0x0446, 0x63 }, // ц CYRILLIC SMALL LETTER TSE
+ { 0x0434, 0x64 }, // д CYRILLIC SMALL LETTER DE
+ { 0x0435, 0x65 }, // е CYRILLIC SMALL LETTER IE
+ { 0x0444, 0x66 }, // ф CYRILLIC SMALL LETTER EF
+ { 0x0433, 0x67 }, // г CYRILLIC SMALL LETTER GHE
+ { 0x0445, 0x68 }, // х CYRILLIC SMALL LETTER HA
+ { 0x0438, 0x69 }, // и CYRILLIC SMALL LETTER I
+ { 0x0439, 0x6a }, // й CYRILLIC SMALL LETTER SHORT I
+ { 0x043a, 0x6b }, // к CYRILLIC SMALL LETTER KA
+ { 0x043b, 0x6c }, // л CYRILLIC SMALL LETTER EL
+ { 0x043c, 0x6d }, // м CYRILLIC SMALL LETTER EM
+ { 0x043d, 0x6e }, // н CYRILLIC SMALL LETTER EN
+ { 0x043e, 0x6f }, // о CYRILLIC SMALL LETTER O
+ { 0x043f, 0x70 }, // п CYRILLIC SMALL LETTER PE
+ { 0x044f, 0x71 }, // я CYRILLIC SMALL LETTER YA
+ { 0x0440, 0x72 }, // р CYRILLIC SMALL LETTER ER
+ { 0x0441, 0x73 }, // с CYRILLIC SMALL LETTER ES
+ { 0x0442, 0x74 }, // т CYRILLIC SMALL LETTER TE
+ { 0x0443, 0x75 }, // у CYRILLIC SMALL LETTER U
+ { 0x0436, 0x76 }, // ж CYRILLIC SMALL LETTER ZHE
+ { 0x0432, 0x77 }, // в CYRILLIC SMALL LETTER VE
+ { 0x044c, 0x78 }, // ь CYRILLIC SMALL LETTER SOFT SIGN
+ { 0x044a, 0x79 }, // ъ CYRILLIC SMALL LETTER HARD SIGN
+ { 0x0437, 0x7a }, // з CYRILLIC SMALL LETTER ZE
+ { 0x0448, 0x7b }, // ш CYRILLIC SMALL LETTER SHA
+ { 0x044d, 0x7c }, // э CYRILLIC SMALL LETTER E
+ { 0x0449, 0x7d }, // щ CYRILLIC SMALL LETTER SHCHA
+ { 0x0447, 0x7e } // ч CYRILLIC SMALL LETTER CHE
+ },
+
+ { // 3 Cyrillic G0 3 Ukranian
+ { 0x0457, 0x26 }, // ї CYRILLIC SMALL LETTER YI
+ { 0x042e, 0x40 }, // Ю CYRILLIC CAPITAL LETTER YU
+ { 0x0410, 0x41 }, // А CYRILLIC CAPITAL LETTER A
+ { 0x0411, 0x42 }, // Б CYRILLIC CAPITAL LETTER BE
+ { 0x0426, 0x43 }, // Ц CYRILLIC CAPITAL LETTER TSE
+ { 0x0414, 0x44 }, // Д CYRILLIC CAPITAL LETTER DE
+ { 0x0415, 0x45 }, // Е CYRILLIC CAPITAL LETTER IE
+ { 0x0424, 0x46 }, // Ф CYRILLIC CAPITAL LETTER EF
+ { 0x0413, 0x47 }, // Г CYRILLIC CAPITAL LETTER GHE
+ { 0x0425, 0x48 }, // Х CYRILLIC CAPITAL LETTER HA
+ { 0x0418, 0x49 }, // И CYRILLIC CAPITAL LETTER I
+ { 0x0419, 0x4a }, // Й CYRILLIC CAPITAL LETTER SHORT I
+ { 0x041a, 0x4b }, // К CYRILLIC CAPITAL LETTER KA
+ { 0x041b, 0x4c }, // Л CYRILLIC CAPITAL LETTER EL
+ { 0x041c, 0x4d }, // М CYRILLIC CAPITAL LETTER EM
+ { 0x041d, 0x4e }, // Н CYRILLIC CAPITAL LETTER EN
+ { 0x041e, 0x4f }, // О CYRILLIC CAPITAL LETTER O
+ { 0x041f, 0x50 }, // П CYRILLIC CAPITAL LETTER PE
+ { 0x042f, 0x51 }, // Я CYRILLIC CAPITAL LETTER YA
+ { 0x0420, 0x52 }, // Р CYRILLIC CAPITAL LETTER ER
+ { 0x0421, 0x53 }, // С CYRILLIC CAPITAL LETTER ES
+ { 0x0422, 0x54 }, // Т CYRILLIC CAPITAL LETTER TE
+ { 0x0423, 0x55 }, // У CYRILLIC CAPITAL LETTER U
+ { 0x0416, 0x56 }, // Ж CYRILLIC CAPITAL LETTER ZHE
+ { 0x0412, 0x57 }, // В CYRILLIC CAPITAL LETTER VE
+ { 0x042c, 0x58 }, // Ь CYRILLIC CAPITAL LETTER SOFT SIGN
+ { 0x0406, 0x59 }, // І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+ { 0x0417, 0x5a }, // З CYRILLIC CAPITAL LETTER ZE
+ { 0x0428, 0x5b }, // Ш CYRILLIC CAPITAL LETTER SHA
+ { 0x0404, 0x5c }, // Є CYRILLIC CAPITAL LETTER UKRAINIAN IE
+ { 0x0429, 0x5d }, // Щ CYRILLIC CAPITAL LETTER SHCHA
+ { 0x0427, 0x5e }, // Ч CYRILLIC CAPITAL LETTER CHE
+ { 0x0407, 0x5f }, // Ї CYRILLIC CAPITAL LETTER YI
+ { 0x044e, 0x60 }, // ю CYRILLIC SMALL LETTER YU
+ { 0x0430, 0x61 }, // а CYRILLIC SMALL LETTER A
+ { 0x0431, 0x62 }, // б CYRILLIC SMALL LETTER BE
+ { 0x0446, 0x63 }, // ц CYRILLIC SMALL LETTER TSE
+ { 0x0434, 0x64 }, // д CYRILLIC SMALL LETTER DE
+ { 0x0435, 0x65 }, // е CYRILLIC SMALL LETTER IE
+ { 0x0444, 0x66 }, // ф CYRILLIC SMALL LETTER EF
+ { 0x0433, 0x67 }, // г CYRILLIC SMALL LETTER GHE
+ { 0x0445, 0x68 }, // х CYRILLIC SMALL LETTER HA
+ { 0x0438, 0x69 }, // и CYRILLIC SMALL LETTER I
+ { 0x0439, 0x6a }, // й CYRILLIC SMALL LETTER SHORT I
+ { 0x043a, 0x6b }, // к CYRILLIC SMALL LETTER KA
+ { 0x043b, 0x6c }, // л CYRILLIC SMALL LETTER EL
+ { 0x043c, 0x6d }, // м CYRILLIC SMALL LETTER EM
+ { 0x043d, 0x6e }, // н CYRILLIC SMALL LETTER EN
+ { 0x043e, 0x6f }, // о CYRILLIC SMALL LETTER O
+ { 0x043f, 0x70 }, // п CYRILLIC SMALL LETTER PE
+ { 0x044f, 0x71 }, // я CYRILLIC SMALL LETTER YA
+ { 0x0440, 0x72 }, // р CYRILLIC SMALL LETTER ER
+ { 0x0441, 0x73 }, // с CYRILLIC SMALL LETTER ES
+ { 0x0442, 0x74 }, // т CYRILLIC SMALL LETTER TE
+ { 0x0443, 0x75 }, // у CYRILLIC SMALL LETTER U
+ { 0x0436, 0x76 }, // ж CYRILLIC SMALL LETTER ZHE
+ { 0x0432, 0x77 }, // в CYRILLIC SMALL LETTER VE
+ { 0x044c, 0x78 }, // ь CYRILLIC SMALL LETTER SOFT SIGN
+ { 0x0456, 0x79 }, // і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ { 0x0437, 0x7a }, // з CYRILLIC SMALL LETTER ZE
+ { 0x0448, 0x7b }, // ш CYRILLIC SMALL LETTER SHA
+ { 0x0454, 0x7c }, // є CYRILLIC SMALL LETTER UKRAINIAN IE
+ { 0x0449, 0x7d }, // щ CYRILLIC SMALL LETTER SHCHA
+ { 0x0447, 0x7e } // ч CYRILLIC SMALL LETTER CHE
+ },
+
+ { // 4 Greek
+ { 0x0390, 0x40 }, // ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+ { 0x0391, 0x41 }, // Α GREEK CAPITAL LETTER ALPHA
+ { 0x0392, 0x42 }, // Β GREEK CAPITAL LETTER BETA
+ { 0x0393, 0x43 }, // Γ GREEK CAPITAL LETTER GAMMA
+ { 0x0394, 0x44 }, // Δ GREEK CAPITAL LETTER DELTA
+ { 0x0395, 0x45 }, // Ε GREEK CAPITAL LETTER EPSILON
+ { 0x0396, 0x46 }, // Ζ GREEK CAPITAL LETTER ZETA
+ { 0x0397, 0x47 }, // Η GREEK CAPITAL LETTER ETA
+ { 0x0398, 0x48 }, // Θ GREEK CAPITAL LETTER THETA
+ { 0x0399, 0x49 }, // Ι GREEK CAPITAL LETTER IOTA
+ { 0x039a, 0x4a }, // Κ GREEK CAPITAL LETTER KAPPA
+ { 0x039b, 0x4b }, // Λ GREEK CAPITAL LETTER LAMBDA
+ { 0x039c, 0x4c }, // Μ GREEK CAPITAL LETTER MU
+ { 0x039d, 0x4d }, // Ν GREEK CAPITAL LETTER NU
+ { 0x039e, 0x4e }, // Ξ GREEK CAPITAL LETTER XI
+ { 0x039f, 0x4f }, // Ο GREEK CAPITAL LETTER OMICRON
+ { 0x03a0, 0x50 }, // Π GREEK CAPITAL LETTER PI
+ { 0x03a1, 0x51 }, // Ρ GREEK CAPITAL LETTER RHO
+ { 0x03a3, 0x53 }, // Σ GREEK CAPITAL LETTER SIGMA
+ { 0x03a4, 0x54 }, // Τ GREEK CAPITAL LETTER TAU
+ { 0x03a5, 0x55 }, // Υ GREEK CAPITAL LETTER UPSILON
+ { 0x03a6, 0x56 }, // Φ GREEK CAPITAL LETTER PHI
+ { 0x03a7, 0x57 }, // Χ GREEK CAPITAL LETTER CHI
+ { 0x03a8, 0x58 }, // Ψ GREEK CAPITAL LETTER PSI
+ { 0x03a9, 0x59 }, // Ω GREEK CAPITAL LETTER OMEGA
+ { 0x03aa, 0x5a }, // Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+ { 0x03ab, 0x5b }, // Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ { 0x03ac, 0x5c }, // ά GREEK SMALL LETTER ALPHA WITH TONOS
+ { 0x03ad, 0x5d }, // έ GREEK SMALL LETTER EPSILON WITH TONOS
+ { 0x03ae, 0x5e }, // ή GREEK SMALL LETTER ETA WITH TONOS
+ { 0x03af, 0x5f }, // ί GREEK SMALL LETTER IOTO WITH TONOS
+ { 0x03b0, 0x60 }, // ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+ { 0x03b1, 0x61 }, // α GREEK SMALL LETTER ALPHA
+ { 0x03b2, 0x62 }, // β GREEK SMALL LETTER BETA
+ { 0x03b3, 0x63 }, // γ GREEK SMALL LETTER GAMMA
+ { 0x03b4, 0x64 }, // δ GREEK SMALL LETTER DELTA
+ { 0x03b5, 0x65 }, // ε GREEK SMALL LETTER EPSILON
+ { 0x03b6, 0x66 }, // ζ GREEK SMALL LETTER ZETA
+ { 0x03b7, 0x67 }, // η GREEK SMALL LETTER ETA
+ { 0x03b8, 0x68 }, // θ GREEK SMALL LETTER THETA
+ { 0x03b9, 0x69 }, // ι GREEK SMALL LETTER IOTA
+ { 0x03ba, 0x6a }, // κ GREEK SMALL LETTER KAPPA
+ { 0x03bb, 0x6b }, // λ GREEK SMALL LETTER LAMBDA
+ { 0x03bc, 0x6c }, // μ GREEK SMALL LETTER MU
+ { 0x03bd, 0x6d }, // ν GREEK SMALL LETTER NU
+ { 0x03be, 0x6e }, // ξ GREEK SMALL LETTER XI
+ { 0x03bf, 0x6f }, // ο GREEK SMALL LETTER OMICRON
+ { 0x03c0, 0x70 }, // π GREEK SMALL LETTER PI
+ { 0x03c1, 0x71 }, // ρ GREEK SMALL LETTER RHO
+ { 0x03c2, 0x72 }, // ς GREEK SMALL LETTER FINAL SIGMA
+ { 0x03c3, 0x73 }, // σ GREEK SMALL LETTER SIGMA
+ { 0x03c4, 0x74 }, // τ GREEK SMALL LETTER TAU
+ { 0x03c5, 0x75 }, // υ GREEK SMALL LETTER UPSILON
+ { 0x03c6, 0x76 }, // φ GREEK SMALL LETTER PHI
+ { 0x03c7, 0x77 }, // χ GREEK SMALL LETTER CHI
+ { 0x03c8, 0x78 }, // ψ GREEK SMALL LETTER PSI
+ { 0x03c9, 0x79 }, // ω GREEK SMALL LETTER OMEGA
+ { 0x03ca, 0x7a }, // ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA
+ { 0x03cb, 0x7b }, // ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ { 0x03cc, 0x7c }, // ό GREEK SMALL LETTER OMICRON WITH TONOS
+ { 0x03cd, 0x7d }, // ύ GREEK SMALL LETTER UPSILON WITH TONOS
+ { 0x03ce, 0x7e } // ώ GREEK SMALL LETTER OMEGA WITH TONOS
+ },
+
+ { // TODO 5 Arabic G0
+ },
+
+ { // 6 Hebrew G0
+ { 0x05d0, 0x60 }, // א HEBREW LETTER ALEF
+ { 0x05d1, 0x61 }, // ב HEBREW LETTER BET
+ { 0x05d2, 0x62 }, // ג HEBREW LETTER GIMEL
+ { 0x05d3, 0x63 }, // ד HEBREW LETTER DALET
+ { 0x05d4, 0x64 }, // ה HEBREW LETTER HE
+ { 0x05d5, 0x65 }, // ו HEBREW LETTER VAV
+ { 0x05d6, 0x66 }, // ז HEBREW LETTER ZAYIN
+ { 0x05d7, 0x67 }, // ח HEBREW LETTER HET
+ { 0x05d8, 0x68 }, // ט HEBREW LETTER TET
+ { 0x05d9, 0x69 }, // י HEBREW LETTER YOD
+ { 0x05da, 0x6a }, // ך HEBREW LETTER FINAL KAF
+ { 0x05db, 0x6b }, // כ HEBREW LETTER KAF
+ { 0x05dc, 0x6c }, // ל HEBREW LETTER LAMED
+ { 0x05dd, 0x6d }, // ם HEBREW LETTER FINAL MEM
+ { 0x05de, 0x6e }, // מ HEBREW LETTER MEM
+ { 0x05df, 0x6f }, // ן HEBREW LETTER FINAL NUN
+ { 0x05e0, 0x70 }, // נ HEBREW LETTER NUN
+ { 0x05e1, 0x71 }, // ס HEBREW LETTER SAMEKH
+ { 0x05e2, 0x72 }, // ע HEBREW LETTER AYIN
+ { 0x05e3, 0x73 }, // ף HEBREW LETTER FINAL PE
+ { 0x05e4, 0x74 }, // פ HEBREW LETTER PE
+ { 0x05e5, 0x75 }, // ץ HEBREW LETTER FINAL TSADI
+ { 0x05e6, 0x76 }, // צ HEBREW LETTER TSADI
+ { 0x05e7, 0x77 }, // ק HEBREW LETTER QOF
+ { 0x05e8, 0x78 }, // ר HEBREW LETTER RESH
+ { 0x05e9, 0x79 }, // ש HEBREW LETTER SHIN
+ { 0x05ea, 0x7a }, // ת HEBREW LETTER TAV
+ { 0x20aa, 0x7b }, // ₪ NEW SHEQEL SIGN
+ { 0x00be, 0x7d }, // ½ VULGAR FRACTION THREE QUARTERS
+ { 0x00f7, 0x7e } // ÷ DIVISION SIGN
+ },
+
+ // Only used by X/26 enhancements, not directly by keyboard
+ { // 7 Latin G2
+ },
+ { // 8 Cyrillic G2
+ },
+ { // 9 Greek G2
+ },
+ { // 10 Arabic G2
+ },
+
+ { // 11 Czech/Slovak
+ { 0x016f, 0x24 }, // ů LATIN SMALL LETTER U WITH RING ABOVE
+ { 0x010d, 0x40 }, // č LATIN SMALL LETTER C WITH CARON
+ { 0x0165, 0x5b }, // ť LATIN SMALL LETTER T WITH CARON
+ { 0x017e, 0x5c }, // ž LATIN SMALL LETTER Z WITH CARON
+ { 0x00fd, 0x5d }, // ý LATIN SMALL LETTER Y WITH ACUTE
+ { 0x00ed, 0x5e }, // í LATIN SMALL LETTER I WITH ACUTE
+ { 0x0159, 0x5f }, // ř LATIN SMALL LETTER R WITH CARON
+ { 0x00e9, 0x60 }, // é LATIN SMALL LETTER E WITH ACUTE
+ { 0x00e1, 0x7b }, // á LATIN SMALL LETTER A WITH ACUTE
+ { 0x011b, 0x7c }, // ě LATIN SMALL LETTER E WITH CARON
+ { 0x00fa, 0x7d }, // ú LATIN SMALL LETTER U WITH ACUTE
+ { 0x0161, 0x7e } // š LATIN SMALL LETTER S WITH CARON
+ },
+
+ { // 12 English
+ { 0x00a3, 0x23 }, // £ POUND SIGN
+ { 0x0023, 0x5f }, // # NUMBER SIGN
+ { 0x005f, 0x60 }, // ─ LOW LINE - rendered as U+2500 BOX DRAWINGS LIGHT HORIZONTAL
+
+ { 0x00bc, 0x7b }, // ¼ VULGAR FRACTION ONE QUARTER
+ { 0x00bd, 0x5c }, // ½ VULGAR FRACTION ONE HALF
+ { 0x00be, 0x7b }, // ½ VULGAR FRACTION THREE QUARTERS
+ { 0x00f7, 0x7e } // ÷ DIVISION SIGN
+ },
+
+ { // 13 Estonian
+ { 0x00f5, 0x24 }, // õ LATIN SMALL LETTER O WITH TILDE
+ { 0x0160, 0x40 }, // Š LATIN CAPITAL LETTER S WITH CARON
+ { 0x00c4, 0x5b }, // Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ { 0x00d6, 0x5c }, // Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ { 0x017d, 0x5d }, // Ž LATIN CAPITAL LETTER Z WITH CARON
+ { 0x00dc, 0x5e }, // Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ { 0x00d5, 0x5f }, // Õ LATIN CAPITAL LETTER O WITH TILDE
+ { 0x0161, 0x60 }, // š LATIN SMALL LETTER S WITH CARON
+ { 0x00e4, 0x7b }, // ä LATIN SMALL LETTER A WITH DIAERESIS
+ { 0x00f6, 0x7c }, // ö LATIN SMALL LETTER O WITH DIAERESIS
+ { 0x017e, 0x7d }, // ž LATIN SMALL LETTER Z WITH CARON
+ { 0x00fc, 0x7e } // ü LATIN SMALL LETTER U WITH DIAERESIS
+ },
+
+ { // 14 French - aze qsd wxc
+ { 0x00e9, 0x23 }, // é LATIN SMALL LETTER E WITH ACUTE
+ { 0x00ef, 0x24 }, // ï LATIN SMALL LETTER I WITH DIAERESIS
+ { 0x00e0, 0x40 }, // à LATIN SMALL LETTER A WITH GRAVE
+ { 0x00eb, 0x5b }, // ë LATIN SMALL LETTER E WITH DIAERESIS
+ { 0x00ea, 0x5c }, // ê LATIN SMALL LETTER E WITH CIRCUMFLEX
+ { 0x00f9, 0x5d }, // ù LATIN SMALL LETTER U WITH GRAVE
+ { 0x00ee, 0x5e }, // î LATIN SMALL LETTER I WITH CIRCUMFLEX
+ { 0x0023, 0x5f }, // # NUMBER SIGN
+ { 0x00e8, 0x60 }, // è LATIN SMALL LETTER E WITH GRAVE
+ { 0x00e2, 0x7b }, // â LATIN SMALL LETTER A WITH CIRCUMFLEX
+ { 0x00f4, 0x7c }, // ô LATIN SMALL LETTER O WITH CIRCUMFLEX
+ { 0x00fb, 0x7d }, // û LATIN SMALL LETTER U WITH CIRCUMFLEX
+ { 0x00e7, 0x7e } // ç LATIN SMALL LETTER C WITH CEDILLA
+ },
+
+ { // 15 German
+ { 0x00a7, 0x40 }, // § SECTION SIGN
+ { 0x00c4, 0x5b }, // Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ { 0x00d6, 0x5c }, // Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ { 0x00dc, 0x5d }, // Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ { 0x00b0, 0x60 }, // ° DEGREE SIGN
+ { 0x00e4, 0x7b }, // ä LATIN SMALL LETTER A WITH DIAERESIS
+ { 0x00f6, 0x7c }, // ö LATIN SMALL LETTER O WITH DIAERESIS
+ { 0x00fc, 0x7d }, // ü LATIN SMALL LETTER U WITH DIAERESIS
+ { 0x00df, 0x7e } // ß LATIN SMALL LETTER SHARP S
+ },
+
+ { // 16 Italian
+ { 0x00a3, 0x23 }, // £ POUND SIGN
+ { 0x00e9, 0x40 }, // é LATIN SMALL LETTER E WITH ACUTE
+ { 0x00b0, 0x5b }, // ° DEGREE SIGN
+ { 0x00e7, 0x5c }, // ç LATIN SMALL LETTER C WITH CEDILLA
+ { 0x0023, 0x5f }, // # NUMBER SIGN
+ { 0x00f9, 0x60 }, // ù LATIN SMALL LETTER U WITH GRAVE
+ { 0x00e0, 0x7b }, // à LATIN SMALL LETTER A WITH GRAVE
+ { 0x00f2, 0x7c }, // ò LATIN SMALL LETTER O WITH GRAVE
+ { 0x00e8, 0x7d }, // è LATIN SMALL LETTER E WITH GRAVE
+ { 0x00ec, 0x7e } // ì LATIN SMALL LETTER I WITH GRAVE
+ },
+
+ { // 17 Lettish/Lithuanian
+ { 0x0160, 0x40 }, // Š LATIN CAPITAL LETTER S WITH CARON
+ { 0x0117, 0x5b }, // ė LATIN SMALL LETTER E WITH DOT ABOVE
+ { 0x0119, 0x5c }, // ę LATIN SMALL LETTER E WITH OGONEK
+ { 0x017d, 0x5d }, // Ž LATIN CAPITAL LETTER Z WITH CARON
+ { 0x010d, 0x5e }, // č LATIN SMALL LETTER C WITH CARON
+ { 0x016b, 0x5f }, // ū LATIN SMALL LETTER U WITH MACRON
+ { 0x0161, 0x60 }, // š LATIN SMALL LETTER S WITH CARON
+ { 0x0105, 0x7b }, // ą LATIN SMALL LETTER A WITH OGONEK
+ { 0x0173, 0x7c }, // ų LATIN SMALL LETTER U WITH OGONEK
+ { 0x017e, 0x7d }, // ž LATIN SMALL LETTER Z WITH CARON
+ { 0x012f, 0x7e } // į LATIN SMALL LETTER I WITH OGONEK
+ },
+
+ { // 18 Polish
+ { 0x0144, 0x24 }, // ń LATIN SMALL LETTER N WITH ACUTE
+ { 0x0105, 0x40 }, // ą LATIN SMALL LETTER A WITH OGONEK
+ { 0x017b, 0x5b }, // Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE - rendered as U+01B5 ...WITH STROKE
+ { 0x015a, 0x5c }, // Ś LATIN CAPITAL LETTER S WITH ACUTE
+ { 0x0141, 0x5d }, // Ł LATIN CAPITAL LETTER L WITH STROKE
+ { 0x0107, 0x5e }, // ć LATIN SMALL LETTER C WITH ACUTE
+ { 0x00f3, 0x5f }, // ó LATIN SMALL LETTER O WITH ACUTE
+ { 0x0119, 0x60 }, // ę LATIN SMALL LETTER E WITH OGONEK
+ { 0x017c, 0x7b }, // ż LATIN SMALL LETTER Z WITH DOT ABOVE
+ { 0x015b, 0x7c }, // ś LATIN SMALL LETTER S WITH ACUTE
+ { 0x0142, 0x7d }, // ł LATIN SMALL LETTER L WITH STROKE
+ { 0x017a, 0x7e } // ź LATIN SMALL LETTER Z WITH ACUTE
+ },
+
+ { // 19 Portuguese/Spanish
+ { 0x00e7, 0x23 }, // ç LATIN SMALL LETTER C WITH CEDILLA
+ { 0x00a1, 0x40 }, // ¡ INVERTED EXCLAMATION MARK
+ { 0x00e1, 0x5b }, // á LATIN SMALL LETTER A WITH ACUTE
+ { 0x00e9, 0x5c }, // é LATIN SMALL LETTER E WITH ACUTE
+ { 0x00ed, 0x5d }, // í LATIN SMALL LETTER I WITH ACUTE
+ { 0x00f3, 0x5e }, // ó LATIN SMALL LETTER O WITH ACUTE
+ { 0x00fa, 0x5f }, // ú LATIN SMALL LETTER U WITH ACUTE
+ { 0x00bf, 0x60 }, // ¿ INVERTED QUESTION MARK
+ { 0x00fc, 0x7b }, // ü LATIN SMALL LETTER U WITH DIAERESIS
+ { 0x00f1, 0x7c }, // ñ LATIN SMALL LETTER N WITH TILDE
+ { 0x00e8, 0x7d }, // è LATIN SMALL LETTER E WITH GRAVE
+ { 0x00e0, 0x7e } // à LATIN SMALL LETTER A WITH GRAVE
+ },
+
+ { // 20 Rumanian
+ { 0x00a4, 0x24 }, // ¤ CURRENCY SIGN
+ { 0x021a, 0x40 }, // Ț LATIN CAPITAL LETTER T WITH COMMA BELOW
+ { 0x00c2, 0x5b }, // Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+ { 0x0218, 0x5c }, // Ș LATIN CAPITAL LETTER S WITH COMMA BELOW
+ { 0x0102, 0x5d }, // Ă LATIN CAPITAL LETTER A WITH BREVE
+ { 0x00c3, 0x5e }, // Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+ { 0x0131, 0x5f }, // ı LATIN SMALL LETTER DOTLESS I
+ { 0x021b, 0x60 }, // ț LATIN SMALL LETTER T WITH COMMA BELOW
+ { 0x00e2, 0x7b }, // â LATIN SMALL LETTER A WITH CIRCUMFLEX
+ { 0x0219, 0x7c }, // ș LATIN SMALL LETTER S WITH COMMA BELOW
+ { 0x0103, 0x7d }, // ă LATIN SMALL LETTER A WITH BREVE
+ { 0x00ee, 0x7e } // î LATIN SMALL LETTER I WITH CIRCUMFLEX
+ },
+
+ { // 21 Serbian/Croatian/Slovenian
+ { 0x00cb, 0x24 }, // Ë LATIN CAPITAL LETTER E WITH DIAERESIS
+ { 0x010c, 0x40 }, // Č LATIN CAPITAL LETTER C WITH CARON
+ { 0x0106, 0x5b }, // Ć LATIN CAPITAL LETTER C WITH ACUTE
+ { 0x017d, 0x5c }, // Ž LATIN CAPITAL LETTER Z WITH CARON
+ { 0x0110, 0x5d }, // Đ LATIN CAPITAL LETTER D WITH STROKE
+ { 0x0160, 0x5e }, // Š LATIN CAPITAL LETTER S WITH CARON
+ { 0x00eb, 0x5f }, // ë LATIN SMALL LETTER E WITH DIAERESIS
+ { 0x010d, 0x60 }, // č LATIN SMALL LETTER C WITH CARON
+ { 0x0107, 0x7b }, // ć LATIN SMALL LETTER C WITH ACUTE
+ { 0x017e, 0x7c }, // ž LATIN SMALL LETTER Z WITH CARON
+ { 0x0111, 0x7d }, // đ LATIN SMALL LETTER D WITH STROKE
+ { 0x0161, 0x7e } // š LATIN SMALL LETTER S WITH CARON
+ },
+
+ { // 22 Swedish/Finnish/Hungarian
+ { 0x00a4, 0x24 }, // ¤ CURRENCY SIGN
+ { 0x00c9, 0x40 }, // É LATIN CAPITAL LETTER E WITH ACUTE
+ { 0x00c4, 0x5b }, // Ä LATIN CAPITAL LETTER A WITH DIAERESIS
+ { 0x00d6, 0x5c }, // Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ { 0x00c5, 0x5d }, // Å LATIN CAPITAL LETTER A WITH RING ABOVE
+ { 0x00dc, 0x5e }, // Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ { 0x00e9, 0x60 }, // é LATIN SMALL LETTER E WITH ACUTE
+ { 0x00e4, 0x7b }, // ä LATIN SMALL LETTER A WITH DIAERESIS
+ { 0x00f6, 0x7c }, // ö LATIN SMALL LETTER O WITH DIAERESIS
+ { 0x00e5, 0x7d }, // å LATIN SMALL LETTER A WITH RING ABOVE
+ { 0x00fc, 0x7e } // ü LATIN SMALL LETTER U WITH DIAERESIS
+ },
+
+ { // 23 Turkish
+ { 0x20ba, 0x23 }, // ₺ TURKISH LIRA SIGN
+ { 0x011f, 0x24 }, // ğ LATIN SMALL LETTER G WITH BREVE
+ { 0x0130, 0x40 }, // İ LATIN CAPITAL LETTER I WITH DOT ABOVE
+ { 0x015e, 0x5b }, // Ş LATIN CAPITAL LETTER S WITH CEDILLA
+ { 0x00d6, 0x5c }, // Ö LATIN CAPITAL LETTER O WITH DIAERESIS
+ { 0x00c7, 0x5d }, // Ç LATIN CAPITAL LETTER C WITH CEDILLA
+ { 0x00dc, 0x5e }, // Ü LATIN CAPITAL LETTER U WITH DIAERESIS
+ { 0x011e, 0x5f }, // Ğ LATIN CAPITAL LETTER G WITH BREVE
+ { 0x0131, 0x60 }, // ı LATIN SMALL LETTER DOTLESS I
+ { 0x015f, 0x7b }, // ş LATIN SMALL LETTER S WITH CEDILLA
+ { 0x00f6, 0x7c }, // ö LATIN SMALL LETTER O WITH DIAERESIS
+ { 0x00e7, 0x7d }, // ç LATIN SMALL LETTER C WITH CEDILLA
+ { 0x00fc, 0x7e } // ü LATIN SMALL LETTER U WITH DIAERESIS
+ }
+};
+
+
+// Native scan codes to toggle mosaic bits - different platforms have different scan codes!
+// Order is top left, top right, middle left, middle right, bottom left, bottom right,
+// invert, set all, clear all
+
+#ifdef Q_OS_UNIX
+static constexpr quint32 mosaicNativeScanCodes[9] = {
+ 0x18, 0x19, 0x26, 0x27, 0x34, 0x35, 0x1b, 0x29, 0x36
+};
+#elif defined(Q_OS_WIN)
+static constexpr quint32 mosaicNativeScanCodes[9] = {
+ 0x10, 0x11, 0x1e, 0x1f, 0x2c, 0x2d, 0x13, 0x21, 0x2e
+};
+#else
+#define QTTM_NONATIVESCANCODES
+#endif
+
+#endif
diff --git a/mainwidget.cpp b/mainwidget.cpp
index 63ff529..b4f9fd0 100644
--- a/mainwidget.cpp
+++ b/mainwidget.cpp
@@ -34,6 +34,7 @@
#include "mainwidget.h"
#include "document.h"
+#include "keymap.h"
#include "levelonecommands.h"
#include "levelonepage.h"
#include "render.h"
@@ -43,6 +44,7 @@ TeletextWidget::TeletextWidget(QFrame *parent) : QFrame(parent)
{
this->resize(QSize(480, 250));
this->setAttribute(Qt::WA_NoSystemBackground);
+ this->setAttribute(Qt::WA_InputMethodEnabled, true);
m_teletextDocument = new TeletextDocument();
m_levelOnePage = m_teletextDocument->currentSubPage();
m_pageRender.setTeletextPage(m_levelOnePage);
@@ -66,6 +68,17 @@ TeletextWidget::~TeletextWidget()
delete m_teletextDocument;
}
+// Re-implemented so compose/dead keys work properly
+void TeletextWidget::inputMethodEvent(QInputMethodEvent* event)
+{
+ if (!event->commitString().isEmpty()) {
+ QKeyEvent keyEvent(QEvent::KeyPress, 0, Qt::NoModifier, event->commitString());
+
+ keyPressEvent(&keyEvent);
+ }
+ event->accept();
+}
+
void TeletextWidget::subPageSelected()
{
m_levelOnePage = m_teletextDocument->currentSubPage();
@@ -223,55 +236,96 @@ void TeletextWidget::changeSize()
void TeletextWidget::keyPressEvent(QKeyEvent *event)
{
if (event->key() < 0x01000000) {
- char keyPressed = *qPrintable(event->text());
-// if (attributes[cursorRow][cursorColumn].mosaics && (keyPressed < 0x40 || keyPressed > 0x5f) && (((keyPressed >= '1' && keyPressed <= '9') && (event->modifiers() & Qt::KeypadModifier)) || (keyPressed >= 'a' && keyPressed <= 'z'))) {
- if (m_pageRender.level1MosaicAttribute(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn()) && (keyPressed < 0x40 || keyPressed > 0x5f) && (((keyPressed >= '1' && keyPressed <= '9') && (event->modifiers() & Qt::KeypadModifier)) || (keyPressed >= 'a' && keyPressed <= 'z'))) {
- if (!(m_levelOnePage->character(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn()) & 0x20))
- setCharacter(0x20);
- switch (event->key()) {
- case Qt::Key_Q:
- case Qt::Key_7:
- toggleCharacterBit(0x01); // Top left
- break;
- case Qt::Key_W:
- case Qt::Key_8:
- toggleCharacterBit(0x02); // Top right
- break;
- case Qt::Key_A:
- case Qt::Key_4:
- toggleCharacterBit(0x04); // Middle left
- break;
- case Qt::Key_S:
- case Qt::Key_5:
- toggleCharacterBit(0x08); // Middle right
- break;
- case Qt::Key_Z:
- case Qt::Key_1:
- toggleCharacterBit(0x10); // Bottom left
- break;
- case Qt::Key_X:
- case Qt::Key_2:
- toggleCharacterBit(0x40); // Bottom right
- break;
- case Qt::Key_R:
- case Qt::Key_9:
- toggleCharacterBit(0x5f); // Invert
- break;
- case Qt::Key_F:
- case Qt::Key_6:
- toggleCharacterBit(0x7f); // Set all
- break;
- case Qt::Key_C:
- case Qt::Key_3:
- toggleCharacterBit(0x20); // Clear all
- break;
+ // A character-typing key was pressed
+ // Try to keymap it, if not keymapped then plain ASCII code (may be) returned
+ char mappedKeyPress = keymapping[m_pageRender.level1CharSet(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn())].value(event->text().at(0), *qPrintable(event->text()));
+ // If outside ASCII map then the character can't be represented by current Level 1 character set
+ // Map it to block character so it doesn't need to be inserted-between later on
+ if (mappedKeyPress & 0x80)
+ mappedKeyPress = 0x7f;
+ if (m_pageRender.level1MosaicAttribute(m_teletextDocument->cursorRow(), m_teletextDocument->cursorColumn()) && (mappedKeyPress < 0x40 || mappedKeyPress > 0x5f)) {
+ // We're on a mosaic and a blast-through character was NOT pressed
+ if (event->key() >= Qt::Key_1 && event->key() <= Qt::Key_9 && event->modifiers() & Qt::KeypadModifier) {
+ switch (event->key()) {
+ case Qt::Key_7:
+ toggleCharacterBit(0x01); // Top left
+ break;
+ case Qt::Key_8:
+ toggleCharacterBit(0x02); // Top right
+ break;
+ case Qt::Key_4:
+ toggleCharacterBit(0x04); // Middle left
+ break;
+ case Qt::Key_5:
+ toggleCharacterBit(0x08); // Middle right
+ break;
+ case Qt::Key_1:
+ toggleCharacterBit(0x10); // Bottom left
+ break;
+ case Qt::Key_2:
+ toggleCharacterBit(0x40); // Bottom right
+ break;
+ case Qt::Key_9:
+ toggleCharacterBit(0x5f); // Invert
+ break;
+ case Qt::Key_6:
+ toggleCharacterBit(0x7f); // Set all
+ break;
+ case Qt::Key_3:
+ toggleCharacterBit(0x20); // Clear all
+ break;
+ }
+ return;
}
+ if (event->key() == Qt::Key_Space) {
+ setCharacter(0x20);
+ return;
+ }
+
+ // This macro is defined in keymap.h if no native scan codes are defined
+ // for the platform we are compiling on
+#ifndef QTTM_NONATIVESCANCODES
+ if (event->nativeScanCode() > 1) {
+ switch (event->nativeScanCode()) {
+ case mosaicNativeScanCodes[0]:
+ toggleCharacterBit(0x01); // Top left
+ break;
+ case mosaicNativeScanCodes[1]:
+ toggleCharacterBit(0x02); // Top right
+ break;
+ case mosaicNativeScanCodes[2]:
+ toggleCharacterBit(0x04); // Middle left
+ break;
+ case mosaicNativeScanCodes[3]:
+ toggleCharacterBit(0x08); // Middle right
+ break;
+ case mosaicNativeScanCodes[4]:
+ toggleCharacterBit(0x10); // Bottom left
+ break;
+ case mosaicNativeScanCodes[5]:
+ toggleCharacterBit(0x40); // Bottom right
+ break;
+ case mosaicNativeScanCodes[6]:
+ toggleCharacterBit(0x5f); // Invert
+ break;
+ case mosaicNativeScanCodes[7]:
+ toggleCharacterBit(0x7f); // Set all
+ break;
+ case mosaicNativeScanCodes[8]:
+ toggleCharacterBit(0x20); // Clear all
+ break;
+ }
+ return;
+ } else
+ qDebug("nativeScanCode not usable! Please use numeric keypad to toggle mosaic bits.");
+#else
+ qDebug("nativeScanCode was not compiled in! Please use numeric keypad to toggle mosaic bits.");
+#endif
+
+ // TODO some contingency plan if nativeScanCode didn't work?
return;
}
- if (keyPressed == 0x20)
- setCharacter((event->modifiers() & Qt::ShiftModifier) ? 0x7f : 0x20);
- else
- setCharacter(keyPressed);
+ setCharacter(mappedKeyPress);
return;
}
switch (event->key()) {
diff --git a/mainwidget.h b/mainwidget.h
index 30d5da9..99e248e 100644
--- a/mainwidget.h
+++ b/mainwidget.h
@@ -47,6 +47,8 @@ public:
QSize sizeHint() { return QSize(480+(pageRender()->leftSidePanelColumns()+pageRender()->rightSidePanelColumns())*12, 250); }
+ void inputMethodEvent(QInputMethodEvent *);
+
TeletextDocument* document() const { return m_teletextDocument; }
TeletextPageRender *pageRender() { return &m_pageRender; }
diff --git a/qteletextmaker.pro b/qteletextmaker.pro
index 7cab281..c0b01ed 100644
--- a/qteletextmaker.pro
+++ b/qteletextmaker.pro
@@ -2,6 +2,7 @@ QT += widgets
requires(qtConfig(filedialog))
HEADERS = document.h \
+ keymap.h \
levelonecommands.h \
levelonepage.h \
loadsave.h \