dad31ef2b123f13f8338d99f6c2947b509d84cf5
[jamaendo] / jamaui / listbox.py
1 # what the fuck, GTK
2 import gtk
3 try:
4     import hildon
5     _using_helldon = False
6 except:
7     import helldon as hildon
8     _using_helldon = True
9
10 class ListBox(gtk.TreeView):
11     def __init__(self):
12         gtk.TreeView.__init__(self)
13         self.store = gtk.ListStore(str)
14         column = gtk.TreeViewColumn("Text")
15         textRenderer = gtk.CellRendererText()
16         column.pack_start(textRenderer, True)
17         column.set_attributes(textRenderer, text = 0)
18         self.append_column(column)
19         self.set_model(self.store)
20
21     def get_text(self, path):
22         it = self.store.get_iter(path)
23         if not it:
24             return None
25         ret = self.store.get(it, 0)
26         return ret[0]
27
28     def get_selected_text(self):
29         model, it = self.get_selection().get_selected()
30         if not it:
31             return None
32         ret = self.store.get(it, 0)
33         return ret[0]
34
35     def append(self, text):
36         self.store.append([text])
37
38     def on_select(self, callback, *args):
39         def cb(lb, path, col):
40             ret = self.get_text(path)
41             if ret:
42                 callback(ret, *args)
43         self.connect('row-activated', cb)
44
45 class ListDialog(gtk.Dialog):
46     def __init__(self, title, parent=None):
47         gtk.Dialog.__init__(self, title, parent if not _using_helldon else None)
48         self.listbox = ListBox()
49         panarea = hildon.PannableArea()
50         panarea.add(self.listbox)
51         panarea.set_size_request_policy(hildon.SIZE_REQUEST_CHILDREN)
52         self.vbox.pack_start(panarea, True, True, 0)
53
54         self.selected = None
55
56         def selector(selected, dialog):
57             if selected:
58                 self.selected = selected
59                 dialog.response(gtk.RESPONSE_OK)
60         self.listbox.on_select(selector, self)
61
62 class ButtonListDialog(gtk.Dialog):
63     def __init__(self, title, parent=None):
64         gtk.Dialog.__init__(self, title, parent if not _using_helldon else None)
65         self.panarea = hildon.PannableArea()
66         self.panarea.set_size_request(800, 400)
67         self.buttons = gtk.VBox(False, 0)
68         self.panarea.add_with_viewport(self.buttons)
69         self.vbox.pack_start(self.panarea, True, True, 0)
70
71     def add_button(self, label, clickcb, *args):
72         btn = hildon.Button(gtk.HILDON_SIZE_AUTO_WIDTH|gtk.HILDON_SIZE_FINGER_HEIGHT,
73                             hildon.BUTTON_ARRANGEMENT_VERTICAL)
74         btn.set_label(label)
75         btn.connect('clicked', clickcb, *args)
76         self.buttons.pack_start(btn, False, False, 0)
77