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.buttons[self.max_buttons].set_label(widget.get_model()[path][1])
122         self.buttons[self.max_buttons].connect("clicked", self.button_back, parent, self.max_buttons)
123
124         self.hbox.add(self.buttons[self.max_buttons])
125         self.buttons[self.max_buttons].show()
126         self.max_buttons = self.max_buttons + 1
127         self.buttons[self.max_buttons] = gtk.Button()
128         self.show_list(parent)
129
130     def show_list(self, parent):
131
132         store = gtk.ListStore(int, str, int)
133         data = self.dbo.get_list(parent)
134         for d in data:
135             store.append([d, data[d], 0])
136         #add people
137         data = self.dbo.get_allrecords('cn', parent)
138         for d in data:
139             store.append([d, data[d], 1])
140         self.tree.set_model(store) 
141
142     def button_back(self, widget, id=None, number=None):
143
144         """return back"""
145         self.show_list(id)
146          
147         # delete not use buttons
148         while self.max_buttons - 1 > number:
149             self.buttons[self.max_buttons-1].set_label = "";
150
151             self.max_buttons = self.max_buttons - 1
152         
153         print "button back data= %i " % number
154
155     def show_record(self, id):
156         self.dialog = gtk.Dialog("Item descrition", 
157                                 self.window, 
158                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
159                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
160         
161         rec = self.dbo.get_record(id)
162         #print rec
163         text = ""
164         tb = gtk.TextBuffer()
165
166         for r in rec:
167             #print "%s -> %s" % (r, rec[r])
168             text += "%s:  %s\n" % (r, rec[r])
169         
170         tb.insert_at_cursor(text)
171
172         sw = gtk.ScrolledWindow()
173         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
174         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
175         
176         tv = gtk.TextView(tb)
177         sw.add(tv)
178         
179         self.dialog.vbox.pack_start(sw)
180         self.dialog.set_size_request(600, 360)
181         tv.show()
182         sw.show()
183         response = self.dialog.run()
184         self.dialog.destroy()
185         print "response= %s" % response
186
187     def select_item1(self, widget, path, column):
188         
189         #print "select_item path:%s" % path
190         self.dialog = gtk.Dialog("Item descrition", 
191                                 self.window, 
192                                 gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
193                                 (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
194         model = widget.get_model()
195         id = model[path][0]
196         rec = self.dbo.get_record(id)
197         #print rec
198         text = ""
199         tb = gtk.TextBuffer()
200
201         for r in rec:
202             #print "%s -> %s" % (r, rec[r])
203             text += "%s:  %s\n" % (r, rec[r])
204         
205         tb.insert_at_cursor(text)
206
207         sw = gtk.ScrolledWindow()
208         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
209         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
210         
211         tv = gtk.TextView(tb)
212         sw.add(tv)
213         
214         self.dialog.vbox.pack_start(sw)
215         self.dialog.set_size_request(600, 360)
216         tv.show()
217         sw.show()
218         response = self.dialog.run()
219         self.dialog.destroy()
220         print "response= %s" % response
221
222
223     def main(self):
224         gtk.main()
225
226 if __name__ == "__main__":
227     app = List()
228     app.main()
229