diff options
author | OLFDB <olf@eisenzelt.de> | 2019-02-21 19:35:09 +0100 |
---|---|---|
committer | mvglasow <michael@vonglasow.com> | 2019-02-21 19:35:09 +0100 |
commit | 5aecfb6bfd1557795fd8b4a89ea619882aebd874 (patch) | |
tree | eacd6a84ff62f89744db4a8c7c6ec0b0f2eadb7f | |
parent | 0428ef92825cfa2d9949a9ea6ef84e0d98fb8fba (diff) | |
download | navit-5aecfb6bfd1557795fd8b4a89ea619882aebd874.tar.gz |
Add:gui/internal: Greek keyboard (#753)
-rw-r--r-- | navit/gui/internal/gui_internal_keyboard.c | 127 | ||||
-rw-r--r-- | navit/gui/internal/gui_internal_keyboard.h | 2 |
2 files changed, 125 insertions, 4 deletions
diff --git a/navit/gui/internal/gui_internal_keyboard.c b/navit/gui/internal/gui_internal_keyboard.c index 8e758de4f..19e48c468 100644 --- a/navit/gui/internal/gui_internal_keyboard.c +++ b/navit/gui/internal/gui_internal_keyboard.c @@ -33,6 +33,8 @@ void gui_internal_keyboard_to_upper_case(struct gui_priv *this) { gui_internal_keyboard_do(this, md->keyboard, VKBD_UMLAUT_UPPER | VKBD_FLAG_2); if (md->keyboard_mode == (VKBD_CYRILLIC_LOWER | VKBD_FLAG_2)) gui_internal_keyboard_do(this, md->keyboard, VKBD_CYRILLIC_UPPER | VKBD_FLAG_2); + if (md->keyboard_mode == (VKBD_GREEK_LOWER | VKBD_FLAG_2)) + gui_internal_keyboard_do(this, md->keyboard, VKBD_GREEK_UPPER | VKBD_FLAG_2); } /** @@ -56,6 +58,8 @@ void gui_internal_keyboard_to_lower_case(struct gui_priv *this) { gui_internal_keyboard_do(this, md->keyboard, VKBD_UMLAUT_LOWER | VKBD_FLAG_2); if (md->keyboard_mode == (VKBD_CYRILLIC_UPPER | VKBD_FLAG_2)) gui_internal_keyboard_do(this, md->keyboard, VKBD_CYRILLIC_LOWER | VKBD_FLAG_2); + if (md->keyboard_mode == (VKBD_GREEK_UPPER | VKBD_FLAG_2)) + gui_internal_keyboard_do(this, md->keyboard, VKBD_GREEK_LOWER | VKBD_FLAG_2); } /** @@ -118,7 +122,9 @@ struct gui_internal_keyb_mode { /*32: VKBD_UMLAUT_LOWER */ {"äöü", 2, VKBD_UMLAUT_UPPER, VKBD_LATIN_LOWER}, /*40: VKBD_CYRILLIC_UPPER*/ {"АБВ", 2, VKBD_CYRILLIC_LOWER, VKBD_LATIN_UPPER}, /*48: VKBD_CYRILLIC_LOWER*/ {"абв", 2, VKBD_CYRILLIC_UPPER, VKBD_LATIN_LOWER}, - /*56: VKBD_DEGREE */ {"DEG", 2, VKBD_FLAG_2, VKBD_FLAG_2} + /*56: VKBD_DEGREE */ {"DEG", 2, VKBD_FLAG_2, VKBD_FLAG_2}, + /*64: VKBD_GREEK_UPPER */ {"ABΓ", 2, VKBD_GREEK_LOWER, VKBD_LATIN_UPPER}, + /*72: VKBD_GREEK_LOWER */ {"abγ", 2, VKBD_GREEK_UPPER, VKBD_LATIN_LOWER} }; @@ -194,7 +200,9 @@ gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode) max_h=max_h/8; // Allows 3 results in the list when searching for Towns wkbd->p.y=max_h*2; if (((mode & VKBD_LAYOUT_MASK) == VKBD_CYRILLIC_UPPER) - || ((mode & VKBD_LAYOUT_MASK) == VKBD_CYRILLIC_LOWER)) { // Russian/Ukrainian/Belarussian layout needs more space... + || ((mode & VKBD_LAYOUT_MASK) == VKBD_CYRILLIC_LOWER) + || ((mode & VKBD_LAYOUT_MASK) == VKBD_GREEK_UPPER) + || ((mode & VKBD_LAYOUT_MASK) == VKBD_GREEK_LOWER)) { // Russian/Ukrainian/Belarussian/Greek layout needs more space... max_h=max_h*4/5; max_w=max_w*8/9; wkbd->cols=9; @@ -265,7 +273,7 @@ gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode) if (!(mode & VKBD_MASK_7)) { - SPACER(); + MODE(VKBD_GREEK_UPPER); KEY("-"); KEY("'"); wk=gui_internal_keyboard_key_data(this, wkbd, hide, 0, gui_internal_keyboard_change, wkbdb, NULL,max_w,max_h); @@ -273,7 +281,10 @@ gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode) SPACER(); SPACER(); } else { - SPACER(); + if (mode == VKBD_GREEK_UPPER) + MODE(VKBD_GREEK_LOWER); + else + MODE(VKBD_GREEK_UPPER); MODE(VKBD_CYRILLIC_UPPER); MODE(VKBD_CYRILLIC_LOWER); wk=gui_internal_keyboard_key_data(this, wkbd, hide, 0, gui_internal_keyboard_change, wkbdb, NULL,max_w,max_h); @@ -462,6 +473,112 @@ gui_internal_keyboard_do(struct gui_priv *this, struct widget *wkbdb, int mode) gui_internal_keyboard_key(this, wkbd, backspace,"\b",max_w,max_h); } + if ((mode & VKBD_LAYOUT_MASK) == VKBD_GREEK_UPPER) { + KEY("Α"); + KEY("Β"); + KEY("Γ"); + KEY("Δ"); + KEY("Ε"); + KEY("Ζ"); + KEY("Η"); + KEY("Θ"); + KEY("Ι"); + KEY("Κ"); + KEY("Λ"); + KEY("Μ"); + KEY("Ν"); + KEY("Ξ"); + KEY("Ο"); + KEY("Π"); + KEY("Ρ"); + KEY("Σ"); + KEY("Τ"); + KEY("Υ"); + KEY("Φ"); + KEY("Χ"); + KEY("Ψ"); + KEY("Ω"); + KEY("Ή"); + KEY("Ά"); + KEY("Ό"); + KEY("Ί"); + KEY("Ώ"); + KEY("Έ"); + KEY("Ύ"); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + gui_internal_keyboard_key(this, wkbd, space," ",max_w,max_h); + + wk=gui_internal_keyboard_key_data(this, wkbd, hide, 0, gui_internal_keyboard_change, wkbdb, NULL,max_w,max_h); + wk->datai = mode | VKBD_FLAG_1024; + + SWCASE(); + + MODE(VKBD_NUMERIC); + + SPACER(); + + gui_internal_keyboard_key(this, wkbd, backspace,"\b",max_w,max_h); + } + if ((mode & VKBD_LAYOUT_MASK) == VKBD_GREEK_LOWER) { + KEY("α"); + KEY("β"); + KEY("γ"); + KEY("δ"); + KEY("ε"); + KEY("ζ"); + KEY("η"); + KEY("θ"); + KEY("ι"); + KEY("κ"); + KEY("λ"); + KEY("μ"); + KEY("ν"); + KEY("ξ"); + KEY("ο"); + KEY("π"); + KEY("ρ"); + KEY("σ"); + KEY("τ"); + KEY("υ"); + KEY("φ"); + KEY("χ"); + KEY("ψ"); + KEY("ω"); + KEY("ή"); + KEY("ά"); + KEY("ό"); + KEY("ί"); + KEY("ώ"); + KEY("έ"); + KEY("ύ"); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + SPACER(); + gui_internal_keyboard_key(this, wkbd, space," ",max_w,max_h); + + wk=gui_internal_keyboard_key_data(this, wkbd, hide, 0, gui_internal_keyboard_change, wkbdb, NULL,max_w,max_h); + wk->datai = mode | VKBD_FLAG_1024; + + SWCASE(); + + MODE(VKBD_NUMERIC); + + SPACER(); + + gui_internal_keyboard_key(this, wkbd, backspace,"\b",max_w,max_h); + } if(md->search_list && md->search_list->type==widget_table) { @@ -608,6 +725,8 @@ int gui_internal_keyboard_init_mode(char *lang) { ret = VKBD_CYRILLIC_UPPER; else if (strstr(lang,"MN")) ret = VKBD_CYRILLIC_UPPER; + else if (strstr(lang,"GR")) + ret = VKBD_GREEK_UPPER; g_free(lang); return ret; } diff --git a/navit/gui/internal/gui_internal_keyboard.h b/navit/gui/internal/gui_internal_keyboard.h index b9887c915..945d2c5cb 100644 --- a/navit/gui/internal/gui_internal_keyboard.h +++ b/navit/gui/internal/gui_internal_keyboard.h @@ -11,6 +11,8 @@ enum vkbd_mode { VKBD_CYRILLIC_UPPER = 40, /*!< Cyrillic uppercase characters */ VKBD_CYRILLIC_LOWER = 48, /*!< Cyrillic lowercase characters */ VKBD_DEGREE = 56, /*!< Numeric keyboard with extra characters (NESW, degree, minute) for coordinate input */ + VKBD_GREEK_UPPER = 64, /*!< Greek uppercase letters */ + VKBD_GREEK_LOWER = 72, /*!< Greek lowercase letters */ /* modifiers and masks */ VKBD_FLAG_2 = 2, /* FIXME seems to show alpha/num switch (VKBD_NUMERIC and VKBD_LATIN_* only) and switches to lowercase after first character */ |