66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Small GTK table with a window description for native speech checks."""
|
|
|
|
import gi
|
|
import os
|
|
|
|
gi.require_version("Gtk", "3.0")
|
|
gi.require_version("Gdk", "3.0")
|
|
gi.require_version("Atk", "1.0")
|
|
from gi.repository import Atk, Gdk, Gtk
|
|
|
|
|
|
window = Gtk.Window(title="Table presentation probe")
|
|
window.connect("destroy", Gtk.main_quit)
|
|
window.get_accessible().set_description("Select an item and press Enter to open it.")
|
|
store = Gtk.ListStore(str, str)
|
|
store.append(["Alpha", "Document"])
|
|
store.append(["Beta", "Shortcut"])
|
|
view = Gtk.TreeView(model=store)
|
|
view.get_accessible().set_name("Probe items")
|
|
name_column = Gtk.TreeViewColumn("Name")
|
|
icon_renderer = Gtk.CellRendererPixbuf()
|
|
icon_renderer.set_property("icon-name", "text-x-generic")
|
|
name_column.pack_start(icon_renderer, False)
|
|
name_renderer = Gtk.CellRendererText()
|
|
name_column.pack_start(name_renderer, True)
|
|
name_column.add_attribute(name_renderer, "text", 0)
|
|
view.append_column(name_column)
|
|
kind_renderer = Gtk.CellRendererText()
|
|
view.append_column(Gtk.TreeViewColumn("Kind", kind_renderer, text=1))
|
|
multi = os.environ.get("CTHULHU_GTK_TABLE_MULTI") == "1"
|
|
listRole = os.environ.get("CTHULHU_GTK_TABLE_LIST") == "1"
|
|
if multi:
|
|
view.get_selection().set_mode(Gtk.SelectionMode.MULTIPLE)
|
|
if multi or listRole:
|
|
box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
|
|
before = Gtk.Entry() if listRole else Gtk.Button(label="Before table")
|
|
if listRole:
|
|
before.get_accessible().set_name("Command")
|
|
view.get_accessible().set_role(Atk.Role.LIST)
|
|
|
|
def on_entry_key_press(_entry, event):
|
|
if event.keyval == Gdk.KEY_Down:
|
|
view.grab_focus()
|
|
view.get_selection().select_path(0)
|
|
return True
|
|
return False
|
|
|
|
before.connect("key-press-event", on_entry_key_press)
|
|
box.pack_start(before, False, False, 0)
|
|
box.pack_start(view, True, True, 0)
|
|
window.add(box)
|
|
else:
|
|
window.add(view)
|
|
view.get_selection().select_path(0)
|
|
if listRole and not multi:
|
|
view.get_selection().unselect_all()
|
|
if multi:
|
|
view.get_selection().select_path(1)
|
|
window.show_all()
|
|
if multi or listRole:
|
|
before.grab_focus()
|
|
else:
|
|
view.grab_focus()
|
|
Gtk.main()
|