Added missing files for native gui

This commit is contained in:
2026-08-17 10:41:06 +02:00
parent a3c8b4083d
commit 2b99c60dd3
3 changed files with 172 additions and 1 deletions
+128
View File
@@ -0,0 +1,128 @@
from gi.repository import Gtk
def load_from_dict(combobox, dictionary, selected=None, sort=False):
"""
Populates a simple combo box based on a given dictionary
Optionally, the list can be sorted in ascending order by value
The key fields must be of a uniform type
"""
if len(dictionary) > 0:
if type(next(iter(dictionary))) == int:
lst = Gtk.ListStore(int, str)
else:
lst = Gtk.ListStore(str, str)
else:
lst = Gtk.ListStore(str, str)
if sort:
for key in sorted(dictionary, key=dictionary.get):
lst.append((key, dictionary[key]))
else:
for item in dictionary.items():
lst.append(item)
combobox.set_model(lst)
cell = Gtk.CellRendererText()
combobox.pack_start(cell, True)
combobox.add_attribute(cell, 'text', 1)
if selected is not None:
activate_row(combobox, selected)
def refresh_dict(combobox, dictionary, keep_selection=True):
"""
Populates the data model of a combo box with new values
"""
model = combobox.get_model()
selected = get_value(combobox)
model.clear()
for item in dictionary.iteritems():
model.append(item)
if keep_selection:
activate_row(combobox, selected)
def get_list_value(combobox, decode=False):
model = combobox.get_model()
active = combobox.get_active()
if active < 0:
return None
if decode:
return model[active][0].decode('utf-8')
else:
return model[active][0]
def get_tree_value(combobox, decode=False):
model = combobox.get_model()
it = combobox.get_active_iter()
if it is None:
return None
val = model.get_value(it, 0)
if decode:
return val.decode('utf-8')
else:
return val
def get_value(combobox, decode=False):
"""
Liefert den Wert der ersten Spalte des verknüpften Modells
TODO Unterscheidung ListStore und TreeStore notwending?
Ggf. alles über den Iter?
"""
model = combobox.get_model()
active = combobox.get_active()
if active < 0:
return None
else:
if type(model) == gtk.TreeStore:
it = combobox.get_active_iter()
val = model.get_value(it, 0)
if decode:
return val.decode('utf-8')
else:
return val
else:
if decode:
return model[active][0].decode('utf-8')
else:
return model[active][0]
def search(model, treeiter, value, column):
"""
Suche einen TreeIter zu einem gegebenen Spaltenwert
"""
while treeiter:
compare_val = model.get_value(treeiter, column)
if value == compare_val:
return treeiter
result = search(model, model.iter_children(treeiter), value, column)
if result:
return result
treeiter = model.iter_next(treeiter)
return None
def activate_tree_row(combobox, value, column=0):
model = combobox.get_model()
it = search(model, model.iter_children(None), value, column)
combobox.set_active_iter(it)
def activate_row(combobox, value, column=0):
"""Zeigt einen bestimmten Listeneintrag an"""
model = combobox.get_model()
for row in model:
if row[column] == value:
combobox.set_active_iter(row.iter)
return
combobox.set_active(-1)
def has_list_value(combobox, value):
""" Prüft, ob in der zugrundeliegenden Liste ein Element vorhanden ist"""
model = combobox.get_model()
for row in model:
if row[0] == value:
return True
return False
def get_first_iter(combobox, columnindex, value):
"""Liefert einen Iter in die Liste, wo der Spalteninhalt mit einem vorgegebenen Wert beginnt"""
model = combobox.get_model()
for row in model:
if row[columnindex].startswith(value):
return row.iter
return None