Changeset 107 for trunk/chavier/gui.py
- Timestamp:
- 09/30/08 01:10:35 (4 years ago)
- Files:
-
- 1 modified
-
trunk/chavier/gui.py (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/chavier/gui.py
r105 r107 89 89 'Edit the current point of the current dataset', 90 90 self.edit_point), 91 ('edit_option', gtk.STOCK_EDIT, 'Edit op_tion', None, 92 'Edit the current option', 93 self.edit_option), 91 94 92 95 ('view', None, '_View', None, 'View', None), … … 121 124 <menuitem action="remove_point"/> 122 125 <menuitem action="edit_point"/> 126 <separator /> 127 <menuitem action="edit_option"/> 123 128 </menu> 124 129 <menu action="view"> … … 190 195 191 196 def _options_treeview_creator(self): 192 self.options_store = gtk.TreeStore(str, str )197 self.options_store = gtk.TreeStore(str, str, object) 193 198 options = self.app.get_default_options() 194 self._fill_options_store(options, None )195 196 treeview = gtk.TreeView(self.options_store)199 self._fill_options_store(options, None, self.app.OPTIONS_TYPES) 200 201 self.options_treeview = gtk.TreeView(self.options_store) 197 202 198 203 column1 = gtk.TreeViewColumn('Name', gtk.CellRendererText(), text=0) 199 treeview.append_column(column1)204 self.options_treeview.append_column(column1) 200 205 201 206 column2 = gtk.TreeViewColumn('Value', gtk.CellRendererText(), text=1) 202 treeview.append_column(column2)203 204 treeview.expand_all()207 self.options_treeview.append_column(column2) 208 209 self.options_treeview.expand_all() 205 210 206 211 scrolled_window = gtk.ScrolledWindow() 207 212 scrolled_window.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) 208 scrolled_window.add( treeview)209 treeview.show()213 scrolled_window.add(self.options_treeview) 214 self.options_treeview.show() 210 215 211 216 return scrolled_window 212 217 213 def _fill_options_store(self, options, parent_node ):218 def _fill_options_store(self, options, parent_node, types): 214 219 for name, value in options.items(): 220 value_type = types[name] 215 221 if isinstance(value, dict): 216 current_parent = self.options_store.append(parent_node, (name, None ))217 self._fill_options_store(value, current_parent )222 current_parent = self.options_store.append(parent_node, (name, None, None)) 223 self._fill_options_store(value, current_parent, value_type) 218 224 219 225 else: 226 print value_type 220 227 if value is not None: 221 228 value = str(value) 222 self.options_store.append(parent_node, (name, value ))229 self.options_store.append(parent_node, (name, value, value_type)) 223 230 224 231 def _get_current_dataset_tab(self): … … 252 259 return action.get_current_value() 253 260 261 def _get_options(self, iter): 262 options = {} 263 first_child = self.options_store.iter_children(iter) 264 if first_child is not None: 265 name = self.options_store.get_value(iter, 0) 266 options[name] = self._get_options(first_child) 267 268 iter = self.options_store.iter_next(iter) 269 while iter is not None: 270 name = self.options_store.get_value(iter, 0) 271 options[name] = self._get_options(iter) 272 iter = self.options_store.iter_next(iter) 273 274 return options 275 254 276 # Event and signal handlers 255 277 def delete_event(self, widget, event, data=None): … … 362 384 dialog.destroy() 363 385 386 def edit_option(self, action): 387 selection = self.options_treeview.get_selection() 388 model, selected = selection.get_selected() 389 if selected is None: 390 warning(self.main_window, "You must select the option to edit") 391 return 392 393 name, value, value_type = model.get(selected, 0, 1, 2) 394 parents = [] 395 parent = model.iter_parent(selected) 396 while parent is not None: 397 parents.append(model.get_value(parent, 0)) 398 parent = model.iter_parent(parent) 399 parents.reverse() 400 parents.append(name) 401 label = u'.'.join(parents) 402 403 dialog = OptionDialog(self.main_window, label, value, value_type) 404 response = dialog.run() 405 if response == gtk.RESPONSE_ACCEPT: 406 new_value = dialog.get_value() 407 model.set_value(selected, 1, new_value) 408 self.refresh() 409 dialog.destroy() 410 364 411 def refresh(self, action=None): 365 412 datasets = self._get_datasets() 366 413 if datasets: 367 # options = self._get_options() 414 root = self.options_store.get_iter_first() 415 options = self._get_options(root) 368 416 369 417 chart_type = self._get_chart_type() … … 415 463 buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, 416 464 gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) 417 super(PointDialog, self).__init__(u'Enter a name for the dataset',465 super(PointDialog, self).__init__(u'Enter the point values', 418 466 toplevel_window, flags, buttons) 419 467 … … 443 491 return (float(self.entries[u'x'].get_text()), 444 492 float(self.entries[u'y'].get_text())) 493 494 495 class OptionDialog(gtk.Dialog): 496 def __init__(self, toplevel_window, label, value, value_type): 497 flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT 498 buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, 499 gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) 500 super(OptionDialog, self).__init__(u'Enter the option value', 501 toplevel_window, flags, buttons) 502 503 504 hbox = gtk.HBox(spacing=6) 505 hbox.set_border_width(12) 506 507 label = gtk.Label(label) 508 hbox.pack_start(label, False, False) 509 510 self.entry = gtk.Entry() 511 self.entry.set_text(value) 512 self.entry.set_activates_default(True) 513 hbox.pack_start(self.entry, True, True) 514 515 self.vbox.pack_start(hbox, False, False) 516 517 self.vbox.show_all() 518 519 self.set_default_response(gtk.RESPONSE_ACCEPT) 520 521 def get_value(self): 522 return self.entry.get_text() 445 523 446 524
