Changeset 107 for trunk/chavier/gui.py

Show
Ignore:
Timestamp:
09/30/08 01:10:35 (4 years ago)
Author:
lgs
Message:

Add type information for the options so we can edit them

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/chavier/gui.py

    r105 r107  
    8989                 'Edit the current point of the current dataset', 
    9090                 self.edit_point), 
     91                ('edit_option', gtk.STOCK_EDIT, 'Edit op_tion', None, 
     92                 'Edit the current option', 
     93                 self.edit_option), 
    9194 
    9295                ('view', None, '_View', None, 'View', None), 
     
    121124      <menuitem action="remove_point"/> 
    122125      <menuitem action="edit_point"/> 
     126      <separator /> 
     127      <menuitem action="edit_option"/> 
    123128    </menu> 
    124129    <menu action="view"> 
     
    190195 
    191196    def _options_treeview_creator(self): 
    192         self.options_store = gtk.TreeStore(str, str) 
     197        self.options_store = gtk.TreeStore(str, str, object) 
    193198        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) 
    197202 
    198203        column1 = gtk.TreeViewColumn('Name', gtk.CellRendererText(), text=0) 
    199         treeview.append_column(column1) 
     204        self.options_treeview.append_column(column1) 
    200205 
    201206        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() 
    205210 
    206211        scrolled_window = gtk.ScrolledWindow() 
    207212        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() 
    210215 
    211216        return scrolled_window 
    212217 
    213     def _fill_options_store(self, options, parent_node): 
     218    def _fill_options_store(self, options, parent_node, types): 
    214219        for name, value in options.items(): 
     220            value_type = types[name] 
    215221            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) 
    218224 
    219225            else: 
     226                print value_type 
    220227                if value is not None: 
    221228                    value = str(value) 
    222                 self.options_store.append(parent_node, (name, value)) 
     229                self.options_store.append(parent_node, (name, value, value_type)) 
    223230 
    224231    def _get_current_dataset_tab(self): 
     
    252259        return action.get_current_value() 
    253260 
     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 
    254276    # Event and signal handlers 
    255277    def delete_event(self, widget, event, data=None): 
     
    362384        dialog.destroy() 
    363385 
     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 
    364411    def refresh(self, action=None): 
    365412        datasets = self._get_datasets() 
    366413        if datasets: 
    367 #            options = self._get_options() 
     414            root = self.options_store.get_iter_first() 
     415            options = self._get_options(root) 
    368416 
    369417            chart_type = self._get_chart_type() 
     
    415463        buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT, 
    416464                   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', 
    418466                                          toplevel_window, flags, buttons) 
    419467 
     
    443491        return (float(self.entries[u'x'].get_text()), 
    444492                float(self.entries[u'y'].get_text())) 
     493 
     494 
     495class 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() 
    445523 
    446524