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