X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=list.py;h=def19def4dd6a497f688f8afc157378bb0a7d8f7;hb=f7f6ed680538807c31adf2838d3bb6bd8568639d;hp=8b33a31188b7d336ecbc1b7f093d41e44823a974;hpb=513ce250407eb3859d2b574681a957f0ce459a03;p=meabook diff --git a/list.py b/list.py index 8b33a31..def19de 100755 --- a/list.py +++ b/list.py @@ -1,99 +1,104 @@ #!/usr/bin/python +# -*- coding: utf-8 -*- import pygtk pygtk.require('2.0') import gtk from database import db -class HelloWorld: - - def hello(self, widget, data=None): - print "Hello World" +class List: def delete_event(self, widget, event, data=None): - # If you return FALSE in the "delete_event" signal handler, - # GTK will emit the "destroy" signal. Returning TRUE means - # you don't want the window to be destroyed. - # This is useful for popping up 'are you sure you want to quit?' - # type dialogs. - print "delete event occurred" - # Change FALSE to TRUE and the main window will not be destroyed - # with a "delete_event". + print "delete event occurred" return False def destroy(self, widget, data=None): print "destroy signal occurred" gtk.main_quit() + def __init__(self): gtk.rc_parse_string("style 'scroll' {\n" - " engine 'sapwood'{\n" - " GtkRange::slider-width = 40\n" - " }\n" + " GtkRange::slider-width = 40\n" "}\n" "class 'GtkRange' style 'scroll'") + #gtk.rc_parse_string("style 'scroll' {\n" + # " GtkRange::slider-width = 40\n" + # "}\n" + # "class 'GtkRange' style 'scroll'") self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + + self.window.set_size_request(800, 480) - self.window.set_size_request(600, 360) - - + #self.window.fullscreen(); - # When the window is given the "delete_event" signal (this is given - # by the window manager, usually by the "close" option, or on the - # titlebar), we ask it to call the delete_event () function - # as defined above. The data passed to the callback - # function is NULL and is ignored in the callback function. self.window.connect("delete_event", self.delete_event) - # Here we connect the "destroy" event to a signal handler. - # This event occurs when we call gtk_widget_destroy() on the window, - # or if we return FALSE in the "delete_event" callback. self.window.connect("destroy", self.destroy) + #self.window.connect("window-state-event", self.window_state_cb) - # Sets the border width of the window. self.window.set_border_width(10) - vbox = gtk.VBox(False, 8) + vbox = gtk.VBox(False, 0) + + self.hbox = gtk.HBox(False, 0) + + self.buttons = {} + self.buttons[0] = gtk.Button(u"Всего") + self.max_buttons = 1 + self.buttons[0].connect("clicked", self.button_back, 0, 0) + self.hbox.add(self.buttons[0]) + self.buttons[0].show() + sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) - #a = gtk.Adjustment(0, 100, 100, 0, 10, 10) - #sw.set_vadjustment() - - vbox.pack_start(sw, True, True, 0) + vbox.pack_start(self.hbox, False, True, 0) + vbox.pack_end(sw, True, True, 0) self.dbo = db.DbSqlite() - self.data = self.dbo.get_allrecords('cn') + data = self.dbo.get_list(0) - store = gtk.ListStore(int, str) - for d in self.data: - store.append([d, self.data[d]]) + self.tree = gtk.TreeView() + self.show_list(0) + #store = gtk.ListStore(int, str, int) + #for d in data: + # store.append([d, data[d], 0]) - tree = gtk.TreeView(store) - tree.set_rules_hint(True) + self.tree.set_rules_hint(True) - tree.connect("row-activated", self.select_item) + self.tree.connect("row-activated", self.select_item) t1 = gtk.CellRendererText() column = gtk.TreeViewColumn("Id", t1, text=0) column.set_sort_column_id(0) column.set_visible(False) - tree.append_column(column) + self.tree.append_column(column) t1 = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", t1, text=1) column.set_sort_column_id(0) - tree.append_column(column) + self.tree.append_column(column) + + t1 = gtk.CellRendererText() + column = gtk.TreeViewColumn("Type", t1, text=2) + column.set_sort_column_id(0) + column.set_visible(False) + self.tree.append_column(column) - sw.add(tree) + sw.add(self.tree) - + #st = gtk.ListStore(int, str) + #data = self.dbo.get_list(0) + #for d in self.data: + # st.append([d, self.data[d]]) + #self.tree.set_model(st) self.window.add(vbox) self.window.show_all() @@ -103,7 +108,86 @@ class HelloWorld: self.window.show() def select_item(self, widget, path, column): - print "select_item path:%s" % path + + parent = widget.get_model()[path][0] + type = widget.get_model()[path][2] + if type == 1: + self.show_record(parent) + return + print parent + #create button for back + if self.buttons.has_key(self.max_buttons) == 0: + self.buttons[self.max_buttons] = gtk.Button() + self.hbox.add(self.buttons[self.max_buttons]) + self.buttons[self.max_buttons].set_label(widget.get_model()[path][1]) + self.buttons[self.max_buttons].connect("clicked", self.button_back, parent, self.max_buttons) + + self.buttons[self.max_buttons].show() + self.hbox.add(self.buttons[self.max_buttons]) + self.max_buttons = self.max_buttons + 1 +# self.buttons[self.max_buttons] = gtk.Button() + self.show_list(parent) + + def show_list(self, parent): + + store = gtk.ListStore(int, str, int) + data = self.dbo.get_list(parent) + for d in data: + store.append([d, data[d], 0]) + #add people + data = self.dbo.get_allrecords('cn', parent) + for d in data: + store.append([d, data[d], 1]) + self.tree.set_model(store) + + def button_back(self, widget, id=None, number=None): + + """return back""" + self.show_list(id) + + # delete not use buttons + while self.max_buttons - 1 > number: + self.buttons[self.max_buttons-1].set_label(" ") + self.hbox.remove(self.buttons[self.max_buttons-1]) + self.max_buttons = self.max_buttons - 1 + + print "button back data= %i " % number + + def show_record(self, id): + self.dialog = gtk.Dialog("Item descrition", + self.window, + gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) + + rec = self.dbo.get_record(id) + #print rec + text = "" + tb = gtk.TextBuffer() + + for r in rec: + #print "%s -> %s" % (r, rec[r]) + text += "%s: %s\n" % (r, rec[r]) + + tb.insert_at_cursor(text) + + sw = gtk.ScrolledWindow() + sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + + tv = gtk.TextView(tb) + sw.add(tv) + + self.dialog.vbox.pack_start(sw) + self.dialog.set_size_request(600, 360) + tv.show() + sw.show() + response = self.dialog.run() + self.dialog.destroy() + print "response= %s" % response + + def select_item1(self, widget, path, column): + + #print "select_item path:%s" % path self.dialog = gtk.Dialog("Item descrition", self.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, @@ -111,14 +195,15 @@ class HelloWorld: model = widget.get_model() id = model[path][0] rec = self.dbo.get_record(id) - print rec + #print rec text = "" tb = gtk.TextBuffer() for r in rec: - print "%s -> %s" % (r, rec[r]) + #print "%s -> %s" % (r, rec[r]) text += "%s: %s\n" % (r, rec[r]) - tb.insert_at_cursor(text) + + tb.insert_at_cursor(text) sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) @@ -127,14 +212,9 @@ class HelloWorld: tv = gtk.TextView(tb) sw.add(tv) - #label = gtk.Label(text) - #sw.add(label) - #label.set_markup(text) self.dialog.vbox.pack_start(sw) - self.dialog.set_size_request(800, 480) - #label.show() + self.dialog.set_size_request(600, 360) tv.show() - #tb.show() sw.show() response = self.dialog.run() self.dialog.destroy() @@ -142,11 +222,9 @@ class HelloWorld: def main(self): - # All PyGTK applications must have a gtk.main(). Control ends here - # and waits for an event to occur (like a key press or mouse event). gtk.main() if __name__ == "__main__": - hello = HelloWorld() - hello.main() + app = List() + app.main()