clBookmarkDialog.py
00001
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
00008
00009 import gobject
00010 import gtk
00011
00012
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
00044 model = self.__create_model()
00045
00046
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
00056 hbox = gtk.HBox(True, 4)
00057 self.vbox.pack_start(hbox, False, False)
00058
00059
00060
00061
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
00077 model = gtk.ListStore(
00078 gobject.TYPE_STRING,
00079 gobject.TYPE_STRING,
00080 gobject.TYPE_BOOLEAN
00081 )
00082 return model
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096 def __add_columns(self, treeview):
00097
00098 model = treeview.get_model()
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
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
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
00131
00132
00133
00134
00135
00136
00137
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
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