123
[meabook] / list.py
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 import pygtk
4 pygtk.require('2.0')
5 import gtk
6
7 from database import db 
8
9 class List:
10
11     def delete_event(self, widget, event, data=None):
12
13         print "delete event occurred"
14         return False
15
16     def destroy(self, widget, data=None):
17         print "destroy signal occurred"
18         gtk.main_quit()
19
20
21     def __init__(self):
22
23         gtk.rc_parse_string("style 'scroll' {\n"
24                             "    GtkRange::slider-width = 40\n"
25                             "}\n"
26                             "class 'GtkRange' style 'scroll'")        
27         #gtk.rc_parse_string("style 'scroll' {\n"
28         #                    "   GtkRange::slider-width = 40\n"
29         #                    "}\n"
30         #                    "class 'GtkRange' style 'scroll'")
31
32         self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
33                 
34         self.window.set_size_request(800, 480)
35         
36         #self.window.fullscreen();        
37
38         self.window.connect("delete_event", self.delete_event)
39     
40         self.window.connect("destroy", self.destroy)
41         #self.window.connect("window-state-event", self.window_state_cb)
42     
43         self.window.set_border_width(10)
44
45         vbox = gtk.VBox(False, 0)
46
47         self.hbox = gtk.HBox(False, 0)
48         
49         self.buttons = {} 
50         self.buttons[0] = gtk.Button(u"Всего")
51         self.max_buttons = 1;
52         self.buttons[0].connect("clicked", self.button_back, 0, 0)
53         self.hbox.add(self.buttons[0])
54         self.buttons[0].show()
55        
56
57         sw = gtk.ScrolledWindow()
58         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
59         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
60
61         vbox.pack_start(self.hbox, True, True, 0)
62         vbox.pack_end(sw, True, True, 0)
63         
64         self.dbo = db.DbSqlite()
65         data = self.dbo.get_list(0)
66
67         self.tree = gtk.TreeView()
68         self.show_list(0)
69         #store = gtk.ListStore(int, str, int)
70         #for d in data:
71         #    store.append([d, data[d], 0])
72         
73         self.tree.set_rules_hint(True)
74
75         self.tree.connect("row-activated", self.select_item)
76
77         t1 = gtk.CellRendererText()
78         column = gtk.TreeViewColumn("Id", t1, text=0)
79         column.set_sort_column_id(0)
80         column.set_visible(False)
81         self.tree.append_column(column)
82
83         t1 = gtk.CellRendererText()
84         column = gtk.TreeViewColumn("Name", t1, text=1)
85         column.set_sort_column_id(0)
86         self.tree.append_column(column)
87
88         t1 = gtk.CellRendererText()
89         column = gtk.TreeViewColumn("Type", t1, text=2)
90         column.set_sort_column_id(0)
91         column.set_visible(False)
92         self.tree.append_column(column)
93
94
95         sw.add(self.tree)
96
97         #st = gtk.ListStore(int, str)
98         #data = self.dbo.get_list(0)
99         #for d in self.data:
100         #    st.append([d, self.data[d]])
101         #self.tree.set_model(st) 
102
103         self.window.add(vbox)
104         self.window.show_all()
105     
106     
107         # and the window
108         self.window.show()
109
110     def select_item(self, widget, path, column):
111         
112         parent = widget.get_model()[path][0]
113         type = widget.get_model()[path][2]
114         if type == 1:
115             self.show_record(parent)
116             return
117         print parent
118         #create button for back
119         if self.buttons.has_key(self.max_buttons) == 0:
120             self.buttons[self.max_buttons] = gtk.Button()
121             self.hbox.add(self.buttons[self.max_buttons])
122         print self.buttons[self.max_buttons]
123         print self.buttons[self.max_buttons].get_label()
124         self.buttons[self.max_buttons].set_label(widget.get_model()[path][1])
125         self.buttons[self.max_buttons].connect("clicked", self.button_back, parent, self.max_buttons)
126
127         self.buttons[self.max_buttons].show()
128         self.max_buttons = self.max_buttons + 1
129 #        self.buttons[self.max_buttons] = gtk.Button()
130         self.show_list(parent)
131
132     def show_list(self, parent):
133
134         store = gtk.ListStore(int, str, int)
135         data = self.dbo.get_list(parent)
136         for d in data:
137             store.append([d, data[d], 0])
138         #add people
139         data = self.dbo.get_allrecords('cn', parent)
140         for d in data:
141             store.append([d, data[d], 1])
142         self.tree.set_model(store) 
143
144     def button_back(self, widget, id=None, number=None):
145
146         """return back"""
147         self.show_list(id)
148          
149         # delete not use buttons
150         while self.max_buttons - 1 > number:
151             self.buttons[self.max_buttons-1].set_label(" ");
152
153             self.max_buttons = self.max_buttons - 1
154         
155         print "button back data= %i " % number
156
157     def show_record(self, id):
158         self.dialog = gtk.Dialog("Item descrition", 
159                                 self.window, 
160                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
161                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
162         
163         rec = self.dbo.get_record(id)
164         #print rec
165         text = ""
166         tb = gtk.TextBuffer()
167
168         for r in rec:
169             #print "%s -> %s" % (r, rec[r])
170             text += "%s:  %s\n" % (r, rec[r])
171         
172         tb.insert_at_cursor(text)
173
174         sw = gtk.ScrolledWindow()
175         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
176         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
177         
178         tv = gtk.TextView(tb)
179         sw.add(tv)
180         
181         self.dialog.vbox.pack_start(sw)
182         self.dialog.set_size_request(600, 360)
183         tv.show()
184         sw.show()
185         response = self.dialog.run()
186         self.dialog.destroy()
187         print "response= %s" % response
188
189     def select_item1(self, widget, path, column):
190         
191         #print "select_item path:%s" % path
192         self.dialog = gtk.Dialog("Item descrition", 
193                                 self.window, 
194                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
195                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
196         model = widget.get_model()
197         id = model[path][0]
198         rec = self.dbo.get_record(id)
199         #print rec
200         text = ""
201         tb = gtk.TextBuffer()
202
203         for r in rec:
204             #print "%s -> %s" % (r, rec[r])
205             text += "%s:  %s\n" % (r, rec[r])
206         
207         tb.insert_at_cursor(text)
208
209         sw = gtk.ScrolledWindow()
210         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
211         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
212         
213         tv = gtk.TextView(tb)
214         sw.add(tv)
215         
216         self.dialog.vbox.pack_start(sw)
217         self.dialog.set_size_request(600, 360)
218         tv.show()
219         sw.show()
220         response = self.dialog.run()
221         self.dialog.destroy()
222         print "response= %s" % response
223
224
225     def main(self):
226         gtk.main()
227
228 if __name__ == "__main__":
229     app = List()
230     app.main()
231