alfrix 6cf639c083 refactor widget creation
improves performance and makes the code cleaner

* add parameters instead of calling methods afterwards
* remove a a lot of size requests
* remove parameters that are being set to the default value
* simplify dialogs containers
2024-01-02 08:14:51 -03:00

100 lines
3.4 KiB
Python

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class Keypad(Gtk.Box):
def __init__(self, screen, change_temp, pid_calibrate, close_function):
super().__init__(orientation=Gtk.Orientation.VERTICAL)
self.labels = {}
self.change_temp = change_temp
self.pid_calibrate = pid_calibrate
self.screen = screen
self._gtk = screen.gtk
numpad = Gtk.Grid(row_homogeneous=True, column_homogeneous=True)
numpad.set_direction(Gtk.TextDirection.LTR)
numpad.get_style_context().add_class('numpad')
keys = [
['1', 'numpad_tleft'],
['2', 'numpad_top'],
['3', 'numpad_tright'],
['4', 'numpad_left'],
['5', 'numpad_button'],
['6', 'numpad_right'],
['7', 'numpad_left'],
['8', 'numpad_button'],
['9', 'numpad_right'],
['B', 'numpad_bleft'],
['0', 'numpad_bottom'],
['E', 'numpad_bright']
]
for i in range(len(keys)):
k_id = f'button_{str(keys[i][0])}'
if keys[i][0] == "B":
self.labels[k_id] = self._gtk.Button("backspace", scale=1)
elif keys[i][0] == "E":
self.labels[k_id] = self._gtk.Button("complete", scale=1)
else:
self.labels[k_id] = Gtk.Button(label=keys[i][0])
self.labels[k_id].connect('clicked', self.update_entry, keys[i][0])
self.labels[k_id].get_style_context().add_class(keys[i][1])
self.labels[k_id].get_style_context().add_class("numpad_key")
numpad.attach(self.labels[k_id], i % 3, i / 3, 1, 1)
self.labels["keypad"] = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
self.labels['entry'] = Gtk.Entry()
self.labels['entry'].props.xalign = 0.5
self.labels['entry'].connect("activate", self.update_entry, "E")
self.pid = self._gtk.Button('heat-up', _('Calibrate') + ' PID', None, .66, Gtk.PositionType.LEFT, 1)
self.pid.connect("clicked", self.update_entry, "PID")
self.pid.set_sensitive(False)
self.pid.set_no_show_all(True)
b = self._gtk.Button('cancel', _('Close'), None, .66, Gtk.PositionType.LEFT, 1)
b.connect("clicked", close_function)
self.add(self.labels['entry'])
self.add(numpad)
self.bottom = Gtk.Box()
self.bottom.add(self.pid)
self.bottom.add(b)
self.add(self.bottom)
self.labels["keypad"] = numpad
def show_pid(self, can_pid):
self.pid.set_visible(can_pid)
def clear(self):
self.labels['entry'].set_text("")
def update_entry(self, widget, digit):
text = self.labels['entry'].get_text()
temp = self.validate_temp(text)
if digit == 'B':
if len(text) < 1:
return
self.labels['entry'].set_text(text[:-1])
elif digit == 'E':
self.change_temp(temp)
self.labels['entry'].set_text("")
elif digit == 'PID':
self.pid_calibrate(temp)
self.labels['entry'].set_text("")
elif len(text + digit) > 3:
return
else:
self.labels['entry'].set_text(text + digit)
self.pid.set_sensitive(self.validate_temp(self.labels['entry'].get_text()) > 9)
@staticmethod
def validate_temp(temp):
try:
return int(temp)
except ValueError:
return 0