1#!/usr/local/bin/python3.8
2
3from gi.repository import Gtk
4
5# truncate a string to single line 121 char max with ellipsis
6def shorten_value(value):
7    changed = False
8    trunc_pos = value.find("\n")
9    if trunc_pos >= 0:
10        changed = True
11        value = value[:trunc_pos]
12
13    if len(value) > 120:
14        changed = True
15        value = value[:120]
16
17    if changed:
18        value += "..."
19
20    return value
21
22class ResultTextDialog(Gtk.Dialog):
23    def __init__(self, title, text):
24        Gtk.Dialog.__init__(self, title, None, 0,
25                            (Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE))
26
27        self.set_default_size(350, 70)
28
29        label = Gtk.Label(text)
30        label.set_selectable(True)
31
32        box = self.get_content_area()
33        box.add(label)
34        self.show_all()
35
36        self.connect("response", self.on_response)
37        self.connect("close", self.on_close)
38
39    def on_close(self, data=None):
40        self.destroy()
41
42    def on_response(self, response_id, data=None):
43        self.destroy()
44
45class BaseListView(Gtk.ScrolledWindow):
46    def __init__(self, store):
47        Gtk.ScrolledWindow.__init__(self)
48        self.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
49        self.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
50
51        self.store = store
52        self.tree_view = Gtk.TreeView(self.store)
53
54        self.add(self.tree_view)
55        self.renderer_text = Gtk.CellRendererText()
56
57    def create_text_column(self, index, text):
58        column = Gtk.TreeViewColumn(text, self.renderer_text, text=index)
59        column.set_sort_column_id(index)
60        column.set_resizable(True)
61        self.tree_view.append_column(column)
62        return column
63
64class WindowAndActionBars(Gtk.Table):
65    def __init__(self, window):
66        Gtk.Table.__init__(self, 2, 2, False)
67
68        self.bottom = Gtk.HBox()
69        self.left = Gtk.VBox()
70
71        self.attach(window, 1, 2, 0, 1)
72        self.attach(self.left, 0, 1, 0, 1, 0, Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL)
73        self.attach(self.bottom, 0, 2, 1, 2, Gtk.AttachOptions.EXPAND|Gtk.AttachOptions.FILL, 0)
74
75    def add_to_left_bar(self, widget, padding=0):
76        self.left.set_border_width(2)
77        self.left.pack_start(widget, False, False, padding)
78
79    def add_to_bottom_bar(self, widget, padding=0):
80        self.bottom.set_border_width(2)
81        self.bottom.pack_start(widget, False, False, padding)
82
83class ImageButton(Gtk.Button):
84    def __init__(self, icon_name, size=Gtk.IconSize.MENU):
85        Gtk.Button.__init__(self)
86
87        image = Gtk.Image.new_from_icon_name(icon_name, size)
88        self.add(image)
89
90class ImageToggleButton(Gtk.ToggleButton):
91    def __init__(self, icon_name, size=Gtk.IconSize.MENU):
92        Gtk.ToggleButton.__init__(self)
93
94        image = Gtk.Image.new_from_icon_name(icon_name, size)
95        self.add(image)
96