123
[meabook] / list.py
1 #!/usr/bin/python
2 import pygtk
3 pygtk.require('2.0')
4 import gtk
5
6 from database import db 
7
8 class List:
9
10     def delete_event(self, widget, event, data=None):
11
12         print "delete event occurred"
13         return False
14
15     def destroy(self, widget, data=None):
16         print "destroy signal occurred"
17         gtk.main_quit()
18
19
20     def __init__(self):
21
22         gtk.rc_parse_string("style 'scroll' {\n"
23                             "    GtkRange::slider-width = 40\n"
24                             "}\n"
25                             "class 'GtkRange' style 'scroll'")        
26         #gtk.rc_parse_string("style 'scroll' {\n"
27         #                    "   GtkRange::slider-width = 40\n"
28         #                    "}\n"
29         #                    "class 'GtkRange' style 'scroll'")
30
31         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
32                 
33         self.window.set_size_request(800, 480)
34         
35         #self.window.fullscreen();        
36
37         self.window.connect("delete_event", self.delete_event)
38     
39         self.window.connect("destroy", self.destroy)
40         #self.window.connect("window-state-event", self.window_state_cb)
41     
42         self.window.set_border_width(10)
43
44         vbox = gtk.VBox(False, 8)
45
46         sw = gtk.ScrolledWindow()
47         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
48         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
49
50         vbox.pack_start(sw, True, True, 0)
51         
52         self.dbo = db.DbSqlite()
53         #data = self.dbo.get_allrecords('cn')
54         data = self.dbo.get_list(0)
55
56         store = gtk.ListStore(int, str)
57         for d in data:
58             store.append([d, data[d]])
59         
60         self.tree = gtk.TreeView(store)
61         self.tree.set_rules_hint(True)
62
63         self.tree.connect("row-activated", self.select_item)
64
65         t1 = gtk.CellRendererText()
66         column = gtk.TreeViewColumn("Id", t1, text=0)
67         column.set_sort_column_id(0)
68         column.set_visible(False)
69         self.tree.append_column(column)
70
71         t1 = gtk.CellRendererText()
72         column = gtk.TreeViewColumn("Name", t1, text=1)
73         column.set_sort_column_id(0)
74         self.tree.append_column(column)
75
76         sw.add(self.tree)
77
78         #st = gtk.ListStore(int, str)
79         #data = self.dbo.get_list(0)
80         #for d in self.data:
81         #    st.append([d, self.data[d]])
82         #self.tree.set_model(st) 
83
84         self.window.add(vbox)
85         self.window.show_all()
86     
87     
88         # and the window
89         self.window.show()
90
91     def select_item(self, widget, path, column):
92         
93         store = gtk.ListStore(int, str)
94         parent = widget.get_model()[path][0]
95         data = self.dbo.get_list(parent)
96         for d in data:
97             store.append([d, data[d]])
98         #add people
99         data = self.dbo.get_allrecords('cn', parent)
100         for d in data:
101             store.append([d, data[d]])
102         self.tree.set_model(store)    
103         print "set model"
104
105
106     def select_item1(self, widget, path, column):
107         
108         #print "select_item path:%s" % path
109         self.dialog = gtk.Dialog("Item descrition", 
110                                 self.window, 
111                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
112                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
113         model = widget.get_model()
114         id = model[path][0]
115         rec = self.dbo.get_record(id)
116         #print rec
117         text = ""
118         tb = gtk.TextBuffer()
119
120         for r in rec:
121             #print "%s -> %s" % (r, rec[r])
122             text += "%s:  %s\n" % (r, rec[r])
123         
124         tb.insert_at_cursor(text)
125
126         sw = gtk.ScrolledWindow()
127         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
128         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
129         
130         tv = gtk.TextView(tb)
131         sw.add(tv)
132         
133         self.dialog.vbox.pack_start(sw)
134         self.dialog.set_size_request(600, 360)
135         tv.show()
136         sw.show()
137         response = self.dialog.run()
138         self.dialog.destroy()
139         print "response= %s" % response
140
141
142     def main(self):
143         gtk.main()
144
145 if __name__ == "__main__":
146     app = List()
147     app.main()
148