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, 4)
45
46         self.hbox = gtk.HBox(False, 2)
47         
48
49         sw = gtk.ScrolledWindow()
50         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
51         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
52
53         vbox.pack_start(self.hbox, True, True, 0)
54         vbox.pack_end(sw, True, True, 0)
55         
56         self.dbo = db.DbSqlite()
57         #data = self.dbo.get_allrecords('cn')
58         data = self.dbo.get_list(0)
59
60         store = gtk.ListStore(int, str, int)
61         for d in data:
62             store.append([d, data[d], 0])
63         
64         self.tree = gtk.TreeView(store)
65         self.tree.set_rules_hint(True)
66
67         self.tree.connect("row-activated", self.select_item)
68
69         t1 = gtk.CellRendererText()
70         column = gtk.TreeViewColumn("Id", t1, text=0)
71         column.set_sort_column_id(0)
72         column.set_visible(False)
73         self.tree.append_column(column)
74
75         t1 = gtk.CellRendererText()
76         column = gtk.TreeViewColumn("Name", t1, text=1)
77         column.set_sort_column_id(0)
78         self.tree.append_column(column)
79
80         t1 = gtk.CellRendererText()
81         column = gtk.TreeViewColumn("Type", t1, text=2)
82         column.set_sort_column_id(0)
83         column.set_visible(False)
84         self.tree.append_column(column)
85
86
87         sw.add(self.tree)
88
89         #st = gtk.ListStore(int, str)
90         #data = self.dbo.get_list(0)
91         #for d in self.data:
92         #    st.append([d, self.data[d]])
93         #self.tree.set_model(st) 
94
95         self.window.add(vbox)
96         self.window.show_all()
97     
98     
99         # and the window
100         self.window.show()
101
102     def select_item(self, widget, path, column):
103         
104         store = gtk.ListStore(int, str, int)
105         parent = widget.get_model()[path][0]
106         type = widget.get_model()[path][2]
107         if type == 1:
108             self.show_record(parent)
109             return
110         print parent
111         #create button for back
112         but = gtk.Button(widget.get_model()[path][1])
113         #add callback function
114         but.connect("clicked", self.button_back, parent)
115
116         self.hbox.add(but)
117         but.show()
118         data = self.dbo.get_list(parent)
119         for d in data:
120             store.append([d, data[d], 0])
121         #add people
122         data = self.dbo.get_allrecords('cn', parent)
123         for d in data:
124             store.append([d, data[d], 1])
125         self.tree.set_model(store)    
126
127     def button_back(self, widget, data=None):
128         print "button back data= %i " % data
129
130     def show_record(self, id):
131         self.dialog = gtk.Dialog("Item descrition", 
132                                 self.window, 
133                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
134                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
135         
136         rec = self.dbo.get_record(id)
137         #print rec
138         text = ""
139         tb = gtk.TextBuffer()
140
141         for r in rec:
142             #print "%s -> %s" % (r, rec[r])
143             text += "%s:  %s\n" % (r, rec[r])
144         
145         tb.insert_at_cursor(text)
146
147         sw = gtk.ScrolledWindow()
148         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
149         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
150         
151         tv = gtk.TextView(tb)
152         sw.add(tv)
153         
154         self.dialog.vbox.pack_start(sw)
155         self.dialog.set_size_request(600, 360)
156         tv.show()
157         sw.show()
158         response = self.dialog.run()
159         self.dialog.destroy()
160         print "response= %s" % response
161
162     def select_item1(self, widget, path, column):
163         
164         #print "select_item path:%s" % path
165         self.dialog = gtk.Dialog("Item descrition", 
166                                 self.window, 
167                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
168                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
169         model = widget.get_model()
170         id = model[path][0]
171         rec = self.dbo.get_record(id)
172         #print rec
173         text = ""
174         tb = gtk.TextBuffer()
175
176         for r in rec:
177             #print "%s -> %s" % (r, rec[r])
178             text += "%s:  %s\n" % (r, rec[r])
179         
180         tb.insert_at_cursor(text)
181
182         sw = gtk.ScrolledWindow()
183         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
184         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
185         
186         tv = gtk.TextView(tb)
187         sw.add(tv)
188         
189         self.dialog.vbox.pack_start(sw)
190         self.dialog.set_size_request(600, 360)
191         tv.show()
192         sw.show()
193         response = self.dialog.run()
194         self.dialog.destroy()
195         print "response= %s" % response
196
197
198     def main(self):
199         gtk.main()
200
201 if __name__ == "__main__":
202     app = List()
203     app.main()
204