#!/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()