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