clBookmarkDialog.py

00001 #!/usr/bin/env python
00002 '''Tree View/editable Cells
00003 
00004 This demo demonstrates the use of editable cells in a Gtkself.treeview..
00005 If you're new to the Gtkself.treeview. widgets and associates, look into the
00006 GtkListStore example first.'''
00007 # pygtk version: Maik Hertha <maik.hertha@berlin.de>
00008 
00009 import gobject
00010 import gtk
00011 
00012 #   columns
00013 (
00014   COLUMN_NAME,
00015   COLUMN_HASH,
00016   COLUMN_EDITABLE
00017 ) = range(3)
00018 
00019 
00020 class Dialog(gtk.Dialog):
00021     def __init__(self, parent=None, bookmarks=[]):
00022         gtk.Dialog.__init__(self)
00023 
00024         self.bookmarks = bookmarks
00025         self.deleted = []
00026 
00027         self.set_modal(True)
00028         self.set_title(_("Bookmarks"))
00029         self.set_border_width(5)
00030         self.set_default_size(320, 400)
00031 
00032 
00033         label = gtk.Label(_("Here you can edit your Bookmarks. Doubleclick on a field to change its name.\nSelect a field by singleclicking it and delete it with clicking 'remove'"))
00034         label.set_line_wrap(True)
00035         label.set_single_line_mode(False)
00036         self.vbox.pack_start(label, expand=False, fill=True)
00037 
00038         sw = gtk.ScrolledWindow()
00039         sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
00040         sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
00041         self.vbox.pack_start(sw)
00042 
00043         # create model
00044         model = self.__create_model()
00045 
00046         # create tree view
00047         self.treeview = gtk.TreeView(model)
00048         self.treeview.set_rules_hint(True)
00049         self.treeview.get_selection().set_mode(gtk.SELECTION_SINGLE)
00050 
00051         self.__add_columns(self.treeview)
00052 
00053         sw.add(self.treeview)
00054 
00055         # some buttons
00056         hbox = gtk.HBox(True, 4)
00057         self.vbox.pack_start(hbox, False, False)
00058 
00059 #        button = gtk.Button(stock=gtk.STOCK_ADD)
00060 #        button.connect("clicked", self.on_add_item_clicked, model)
00061 #        hbox.pack_start(button)
00062 
00063         button = gtk.Button(stock=gtk.STOCK_REMOVE)
00064         button.connect("clicked", self.on_remove_item_clicked, self.treeview)
00065         hbox.pack_start(button)
00066 
00067         self.add_button(gtk.STOCK_CANCEL, -1)
00068         self.add_button(gtk.STOCK_OK, 1)
00069 
00070         self.populate_list(self.bookmarks)
00071 
00072         self.show_all()
00073 
00074     def __create_model(self):
00075 
00076         # create list store
00077         model = gtk.ListStore(
00078             gobject.TYPE_STRING,
00079             gobject.TYPE_STRING,
00080             gobject.TYPE_BOOLEAN
00081        )
00082         return model
00083 
00084 #        # add items
00085 #        for item in bookmarks:
00086 #            iter = model.append()
00087 
00088 #            model.set (iter,
00089 #                  COLUMN_NAME, item[COLUMN_NAME],
00090 #                  COLUMN_HASH, item[COLUMN_HASH],
00091 #                  COLUMN_EDITABLE, True
00092 #           )
00093 #        return model
00094 
00095 
00096     def __add_columns(self, treeview):
00097 
00098         model = treeview.get_model()
00099 
00100 #        # number column
00101 #        renderer = gtk.CellRendererText()
00102 #        renderer.connect("edited", self.on_cell_edited, model)
00103 #        renderer.set_data("column", COLUMN_NUMBER)
00104 
00105 #        column = gtk.self.treeview.Column("Number", renderer, text=COLUMN_NUMBER,
00106 #                               HASH=COLUMN_HASH)
00107 #        self.treeview..append_column(column)
00108 
00109         # NAME column
00110         renderer = gtk.CellRendererText()
00111         renderer.connect("edited", self.on_cell_edited, model)
00112         renderer.set_data("column", COLUMN_NAME)
00113 
00114         column = gtk.TreeViewColumn(_("Your Bookmarks"), renderer, text=COLUMN_NAME, editable=COLUMN_EDITABLE)
00115         treeview.append_column(column)
00116 
00117     def populate_list(self, bookmark_list):
00118         model = self.treeview.get_model()
00119         for item in bookmark_list:
00120             new_item = [item['name'], item['hash']]
00121             #bookmarks.append(new_item)
00122 
00123             iter = model.append()
00124             model.set (iter,
00125                 COLUMN_NAME, new_item[COLUMN_NAME],
00126                 COLUMN_HASH, new_item[COLUMN_HASH],
00127                 COLUMN_EDITABLE, True
00128            )
00129 
00130 #    def on_add_item_clicked(self, button, model):
00131 #        new_item = ["Description here", True]
00132 #        bookmarks.append(new_item)
00133 
00134 #        iter = model.append()
00135 #        model.set (iter,
00136 #            COLUMN_NAME, new_item[COLUMN_NAME],
00137 #            COLUMN_HASH, new_item[COLUMN_HASH]
00138 #       )
00139 
00140 
00141     def on_remove_item_clicked(self, button, treeview):
00142 
00143         selection = treeview.get_selection()
00144         model, iter = selection.get_selected()
00145 
00146         if iter:
00147             path = model.get_path(iter)[0]
00148             model.remove(iter)
00149 
00150 #            del self.bookmarks[ path ]
00151             self.deleted.append({"name":self.bookmarks[path]['name'], "hash":self.bookmarks[path]['hash']})
00152             del self.bookmarks[path]
00153 
00154 
00155     def on_cell_edited(self, cell, path_string, new_text, model):
00156 
00157         iter = model.get_iter_from_string(path_string)
00158         path = model.get_path(iter)[0]
00159         column = cell.get_data("column")
00160 
00161         if column == COLUMN_NAME:
00162             old_text = model.get_value(iter, column)
00163             self.bookmarks[path]['name'] = new_text
00164 
00165             model.set(iter, column, self.bookmarks[path]['name'])
00166 
00167 
00168 

Generated on Thu Jun 4 19:08:24 2009 for Pyjama by  doxygen 1.5.8