summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOLFDB <olf@eisenzelt.de>2019-02-21 19:35:09 +0100
committermvglasow <michael@vonglasow.com>2019-02-21 19:35:09 +0100
commit5aecfb6bfd1557795fd8b4a89ea619882aebd874 (patch)
treeeacd6a84ff62f89744db4a8c7c6ec0b0f2eadb7f
parent0428ef92825cfa2d9949a9ea6ef84e0d98fb8fba (diff)
downloadnavit-5aecfb6bfd1557795fd8b4a89ea619882aebd874.tar.gz
Add:gui/internal: Greek keyboard (#753)
-rw-r--r--navit/gui/internal/gui_internal_keyboard.c127
-rw-r--r--navit/gui/internal/gui_internal_keyboard.h2
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 */