keyboard: add spanish and german, change backscpace, clear and accept to icons

This commit is contained in:
alfrix 2022-10-31 07:32:17 -03:00
parent 874212e166
commit 09ccd46528

View File

@ -1,3 +1,5 @@
import logging
import os
import gi import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
@ -5,62 +7,99 @@ from gi.repository import Gtk, GLib
class Keyboard(Gtk.Box): class Keyboard(Gtk.Box):
langs = ["de", "en", "es"]
def __init__(self, screen, close_cb, entry=None): def __init__(self, screen, close_cb, entry=None):
super().__init__(orientation=Gtk.Orientation.VERTICAL) super().__init__(orientation=Gtk.Orientation.VERTICAL)
self._gtk = screen.gtk
self.close_cb = close_cb self.close_cb = close_cb
self.keyboard = Gtk.Grid() self.keyboard = Gtk.Grid()
self.keyboard.set_direction(Gtk.TextDirection.LTR) self.keyboard.set_direction(Gtk.TextDirection.LTR)
self.timeout = self.clear_timeout = None self.timeout = self.clear_timeout = None
self.entry = entry self.entry = entry
self.keys = [ language = self.detect_language(screen._config.get_main_config().get("language", None))
[["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", ""], logging.info(f"Keyboard {language}")
["a", "s", "d", "f", "g", "h", "j", "k", "l", "'"],
["ABC", "z", "x", "c", "v", "b", "n", "m", ",", ".", "?123"],
["", " ", ""]
],
[["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", ""],
["A", "S", "D", "F", "G", "H", "J", "K", "L", "'"],
["?123", "Z", "X", "C", "V", "B", "N", "M", ",", ".", "abc"],
["", " ", ""]
],
[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ""],
["=", "-", "+", "*", "/", "\\", ":", ";", "'", "\""],
["abc", "(", ")", "#", "$", "!", "?", "@", "_", ",", "ABC"],
["", " ", ""]
]
]
self.labels = self.keys.copy() if language == "de":
self.keys = [
[["q", "w", "e", "r", "t", "z", "u", "i", "o", "p", "ü", ""],
["a", "s", "d", "f", "g", "h", "j", "k", "l", "ö", "ä"],
["ABC", "y", "x", "c", "v", "b", "n", "m", ",", ".", "?123"],
],
[["Q", "W", "E", "R", "T", "Z", "U", "I", "O", "P", "Ü", ""],
["A", "S", "D", "F", "G", "H", "J", "K", "L", "Ö", "Ä"],
["?123", "Y", "X", "C", "V", "B", "N", "M", ",", ".", "abc"],
],
[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "ß", ""],
["=", "-", "+", "*", "/", "\\", ":", ";", "'", "\"", "",],
["abc", "(", ")", "#", "$", "!", "?", "@", "_", ",", "ABC"],
]
]
else:
self.keys = [
[["q", "w", "e", "r", "t", "y", "u", "i", "o", "p", ""],
["a", "s", "d", "f", "g", "h", "j", "k", "l", "'"],
["ABC", "z", "x", "c", "v", "b", "n", "m", ",", ".", "?123"],
],
[["Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", ""],
["A", "S", "D", "F", "G", "H", "J", "K", "L", "'"],
["?123", "Z", "X", "C", "V", "B", "N", "M", ",", ".", "abc"],
],
[["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", ""],
["=", "-", "+", "*", "/", "\\", ":", ";", "'", "\""],
["abc", "(", ")", "#", "$", "!", "?", "@", "_", ",", "ABC"],
]
]
if language == "es":
self.keys[0][1].remove("'")
self.keys[0][1].append("ñ")
self.keys[1][1].remove("'")
self.keys[1][1].append("Ñ")
for pallet in self.keys:
pallet.append(["", " ", ""])
self.buttons = self.keys.copy()
for p, pallet in enumerate(self.keys): for p, pallet in enumerate(self.keys):
for r, row in enumerate(pallet): for r, row in enumerate(pallet):
for k, key in enumerate(row): for k, key in enumerate(row):
self.labels[p][r][k] = self._gtk.Button(key) if key == "":
self.labels[p][r][k].set_hexpand(True) self.buttons[p][r][k] = screen.gtk.ButtonImage("backspace", scale=.6)
self.labels[p][r][k].set_vexpand(True) elif key == "":
self.labels[p][r][k].connect('button-press-event', self.repeat, key) self.buttons[p][r][k] = screen.gtk.ButtonImage("cancel", scale=.6)
self.labels[p][r][k].connect('button-release-event', self.release) elif key == "":
self.labels[p][r][k].get_style_context().add_class("keyboard_pad") self.buttons[p][r][k] = screen.gtk.ButtonImage("complete", scale=.6)
else:
self.buttons[p][r][k] = screen.gtk.Button(key)
self.buttons[p][r][k].set_hexpand(True)
self.buttons[p][r][k].set_vexpand(True)
self.buttons[p][r][k].connect('button-press-event', self.repeat, key)
self.buttons[p][r][k].connect('button-release-event', self.release)
self.buttons[p][r][k].get_style_context().add_class("keyboard_pad")
self.pallet_nr = 0 self.pallet_nr = 0
self.set_pallet(self.pallet_nr) self.set_pallet(self.pallet_nr)
self.add(self.keyboard) self.add(self.keyboard)
def detect_language(self, language):
if language is None or language == "system_lang":
for language in self.langs:
if os.getenv('LANG').lower().startswith(language):
return language
return "en"
def set_pallet(self, p): def set_pallet(self, p):
pallet = self.keys[p] for _ in range(len(self.keys[self.pallet_nr]) + 1):
span = 2 self.keyboard.remove_row(0)
for r, row in enumerate(pallet[:-1]): self.pallet_nr = p
for r, row in enumerate(self.keys[p][:-1]):
for k, key in enumerate(row): for k, key in enumerate(row):
x = k * 2 + 1 if r == 1 else k * 2 x = k * 2 + 1 if r == 1 else k * 2
old = self.keyboard.get_child_at(x, r) self.keyboard.attach(self.buttons[p][r][k], x, r, 2, 1)
if old: self.keyboard.attach(self.buttons[p][3][0], 0, 4, 3, 1) # ✕
self.keyboard.remove(old) self.keyboard.attach(self.buttons[p][3][1], 3, 4, 16, 1) # Space
self.keyboard.attach(self.labels[p][r][k], x, r, span, 1) self.keyboard.attach(self.buttons[p][3][2], 19, 4, 3, 1) # ✔
if not self.keyboard.get_child_at(0, 4):
self.keyboard.attach(self.labels[p][3][0], 0, 4, 3, 1)
self.keyboard.attach(self.labels[p][3][1], 3, 4, 16, 1)
self.keyboard.attach(self.labels[p][3][2], 19, 4, 3, 1)
self.show_all() self.show_all()
def repeat(self, widget, event, key): def repeat(self, widget, event, key):