def __init__(self, model, view): ''' model: should be an instance of class Accession view: should be an instance of AccessionEditorView ''' GenericEditorPresenter.__init__(self, model, view) self.session = object_session(model) self._dirty = False # initialize widgets self.refresh_view() # put model values in view # connect signals self.assign_simple_handler('loc_name_entry', 'name', UnicodeOrNoneValidator()) self.assign_simple_handler('loc_code_entry', 'code', UnicodeOrNoneValidator()) self.assign_simple_handler('loc_desc_textview', 'description', UnicodeOrNoneValidator()) self.refresh_sensitivity() if self.model not in self.session.new: self.view.widgets.loc_ok_and_add_button.set_sensitive(True) # the merger danger zone self.merger_candidate = None def on_location_select(location): logger.debug('merger candidate: %s' % location) self.merger_candidate = location from bauble.plugins.garden import init_location_comboentry init_location_comboentry(self, self.view.widgets.loc_merge_comboentry, on_location_select) self.view.connect('loc_merge_button', 'clicked', self.on_loc_merge_button_clicked)
def __init__(self, model, view): ''' :param model: should be an instance of Plant class :param view: should be an instance of PlantEditorView ''' super(PlantEditorPresenter, self).__init__(model, view) self.session = object_session(model) self._original_accession_id = self.model.accession_id self._original_code = self.model.code # if the model is in session.new then it might be a branched # plant so don't store it....is this hacky? self._original_quantity = None if model not in self.session.new: self._original_quantity = self.model.quantity self.__dirty = False # set default values for acc_type if self.model.id is None and self.model.acc_type is None: self.model.acc_type = u'Plant' notes_parent = self.view.widgets.notes_parent_box notes_parent.foreach(notes_parent.remove) self.notes_presenter = NotesPresenter(self, 'notes', notes_parent) from bauble.plugins.garden.propagation import PropagationTabPresenter self.prop_presenter = PropagationTabPresenter(self, self.model, self.view, self.session) # if the PlantEditor has been started with a new plant but # the plant is already associated with an accession if self.model.accession and not self.model.code: code = get_next_code(self.model.accession) if code: # if get_next_code() returns None then there was an error self.set_model_attr('code', code) self.refresh_view() # put model values in view self.change = PlantChange() self.session.add(self.change) self.change.plant = self.model self.change.from_location = self.model.location self.change.quantity = self.model.quantity def on_reason_changed(combo): it = combo.get_active_iter() self.change.reason = combo.get_model()[it][0] sensitive = False if self.model not in self.session.new: self.view.connect(self.view.widgets.reason_combo, 'changed', on_reason_changed) sensitive = True self.view.widgets.reason_combo.props.sensitive = sensitive self.view.widgets.reason_label.props.sensitive = sensitive self.view.connect('plant_date_entry', 'changed', self.on_date_entry_changed) def on_location_select(location): self.set_model_attr('location', location) if self.change.quantity is None: self.change.quantity = self.model.quantity from bauble.plugins.garden import init_location_comboentry init_location_comboentry(self, self.view.widgets.plant_loc_comboentry, on_location_select) # assign signal handlers to monitor changes now that the view has # been filled in def acc_get_completions(text): query = self.session.query(Accession) return query.filter(Accession.code.like(unicode('%s%%' % text))) def on_select(value): self.set_model_attr('accession', value) # reset the plant code to check that this is a valid code for the # new accession, fixes bug #103946 self.view.widgets.acc_species_label.set_markup('') if value is not None: sp_str = Species.str(self.model.accession.species, markup=True) self.view.widgets.acc_species_label.set_markup(sp_str) self.view.widgets.plant_code_entry.emit('changed') self.assign_completions_handler('plant_acc_entry', acc_get_completions, on_select=on_select) if self.model.accession: sp_str = Species.str(self.model.accession.species, markup=True) else: sp_str = '' self.view.widgets.acc_species_label.set_markup(sp_str) self.view.connect('plant_code_entry', 'changed', self.on_plant_code_entry_changed) self.assign_simple_handler('plant_acc_type_combo', 'acc_type') self.assign_simple_handler('plant_memorial_check', 'memorial') self.view.connect('plant_quantity_entry', 'changed', self.on_quantity_changed) self.view.connect('plant_loc_add_button', 'clicked', self.on_loc_button_clicked, 'add') self.view.connect('plant_loc_edit_button', 'clicked', self.on_loc_button_clicked, 'edit')