def __init__(self, parent, model, view, session): ''' :param model: an instance of class Propagation :param view: an instance of PropagationEditorView ''' super(SeedPresenter, self).__init__(model, view) self._dirty = False self.parent_ref = weakref.ref(parent) self.session = session self.propagation = self.model if not self.propagation._seed: self.propagation._seed = PropSeed() self.model = self.model._seed # TODO: if % germinated is not entered and nseeds and # # germinated are then automatically calculate the % germinated widgets = self.view.widgets distinct = lambda c: utils.get_distinct_values(c, self.session) # TODO: should also setup a completion on the entry utils.setup_text_combobox(self.view.widgets.seed_media_comboentry, distinct(PropSeed.media)) utils.setup_text_combobox(self.view.widgets.seed_container_comboentry, distinct(PropSeed.container)) utils.setup_text_combobox(self.view.widgets.seed_location_comboentry, distinct(PropSeed.location)) self.refresh_view() self.assign_simple_handler('seed_pretreatment_textview', 'pretreatment', editor.UnicodeOrNoneValidator()) # TODO: this should validate to an integer self.assign_simple_handler('seed_nseeds_entry', 'nseeds', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('seed_sown_entry', 'date_sown', editor.DateValidator()) utils.setup_date_button(self.view, 'seed_sown_entry', 'seed_sown_button') self.assign_simple_handler('seed_container_comboentry', 'container', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('seed_media_comboentry', 'media', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('seed_location_comboentry', 'location', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('seed_mvdfrom_entry', 'moved_from', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('seed_mvdto_entry', 'moved_to', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('seed_germdate_entry', 'germ_date', editor.DateValidator()) utils.setup_date_button(self.view, 'seed_germdate_entry', 'seed_germdate_button') self.assign_simple_handler('seed_ngerm_entry', 'nseedlings') self.assign_simple_handler('seed_pctgerm_entry', 'germ_pct') self.assign_simple_handler('seed_date_planted_entry', 'date_planted', editor.DateValidator()) utils.setup_date_button(self.view, 'seed_date_planted_entry', 'seed_date_planted_button')
def __init__(self, parent, model, view, session): ''' :param model: an instance of class Propagation :param view: an instance of PropagationEditorView ''' super(CuttingPresenter, self).__init__(model, view) self.parent_ref = weakref.ref(parent) self.session = session self._dirty = False # make the model for the presenter a PropCutting instead of a # Propagation self.propagation = self.model if not self.propagation._cutting: self.propagation._cutting = PropCutting() self.model = self.model._cutting init_combo = self.view.init_translatable_combo init_combo('cutting_type_combo', cutting_type_values, editor.UnicodeOrNoneValidator()) init_combo('cutting_length_unit_combo', length_unit_values) init_combo('cutting_tip_combo', tip_values) init_combo('cutting_leaves_combo', leaves_values) init_combo('cutting_buds_combo', flower_buds_values) init_combo('cutting_wound_combo', wound_values) init_combo('cutting_heat_unit_combo', bottom_heat_unit_values) widgets = self.view.widgets distinct = lambda c: utils.get_distinct_values(c, self.session) utils.setup_text_combobox(widgets.cutting_hormone_comboentry, distinct(PropCutting.hormone)) utils.setup_text_combobox(widgets.cutting_cover_comboentry, distinct(PropCutting.cover)) utils.setup_text_combobox(widgets.cutting_fungal_comboentry, distinct(PropCutting.fungicide)) utils.setup_text_combobox(widgets.cutting_location_comboentry, distinct(PropCutting.location)) utils.setup_text_combobox(widgets.cutting_container_comboentry, distinct(PropCutting.container)) utils.setup_text_combobox(widgets.cutting_media_comboentry, distinct(PropCutting.media)) # set default units units = prefs.prefs[prefs.units_pref] if units == u'imperial': self.model.length_unit = u'in' self.model.bottom_heat_unit = u'F' else: self.model.length_unit = u'mm' self.model.bottom_heat_unit = u'C' self.refresh_view() self.assign_simple_handler('cutting_type_combo', 'cutting_type') self.assign_simple_handler('cutting_length_entry', 'length') self.assign_simple_handler('cutting_length_unit_combo', 'length_unit') self.assign_simple_handler('cutting_tip_combo', 'tip') self.assign_simple_handler('cutting_leaves_combo', 'leaves') self.assign_simple_handler('cutting_lvs_reduced_entry', 'leaves_reduced_pct') self.assign_simple_handler('cutting_media_comboentry', 'media', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('cutting_container_comboentry', 'container', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('cutting_buds_combo', 'flower_buds') self.assign_simple_handler('cutting_wound_combo', 'wound') self.assign_simple_handler('cutting_fungal_comboentry', 'fungicide', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('cutting_hormone_comboentry', 'hormone', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('cutting_location_comboentry', 'location', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('cutting_cover_comboentry', 'cover', editor.UnicodeOrNoneValidator()) self.assign_simple_handler('cutting_heat_entry', 'bottom_heat_temp') self.assign_simple_handler('cutting_heat_unit_combo', 'bottom_heat_unit') self.assign_simple_handler('cutting_rooted_pct_entry', 'rooted_pct') model = gtk.ListStore(object) self.view.widgets.rooted_treeview.set_model(model) def _rooted_data_func(column, cell, model, treeiter, prop): v = model[treeiter][0] cell.set_property('text', getattr(v, prop)) cell = self.view.widgets.rooted_date_cell cell.props.editable = True self.view.connect(cell, 'edited', self.on_rooted_cell_edited, 'date') self.view.widgets.rooted_date_column.\ set_cell_data_func(cell, _rooted_data_func, 'date') cell = self.view.widgets.rooted_quantity_cell cell.props.editable = True self.view.connect(cell, 'edited', self.on_rooted_cell_edited, 'quantity') self.view.widgets.rooted_quantity_column.\ set_cell_data_func(cell, _rooted_data_func, 'quantity') self.view.connect('rooted_add_button', "clicked", self.on_rooted_add_clicked) self.view.connect('rooted_remove_button', "clicked", self.on_rooted_remove_clicked)
def __init__(self, parent, model, view, session): """ :param model: an instance of class Propagation :param view: an instance of PropagationEditorView """ super(CuttingPresenter, self).__init__(model, view) self.parent_ref = weakref.ref(parent) self.session = session self._dirty = False # make the model for the presenter a PropCutting instead of a # Propagation self.propagation = self.model if not self.propagation._cutting: self.propagation._cutting = PropCutting() self.model = self.model._cutting init_combo = self.view.init_translatable_combo init_combo("cutting_type_combo", cutting_type_values, editor.UnicodeOrNoneValidator()) init_combo("cutting_length_unit_combo", length_unit_values) init_combo("cutting_tip_combo", tip_values) init_combo("cutting_leaves_combo", leaves_values) init_combo("cutting_buds_combo", flower_buds_values) init_combo("cutting_wound_combo", wound_values) init_combo("cutting_heat_unit_combo", bottom_heat_unit_values) widgets = self.view.widgets distinct = lambda c: utils.get_distinct_values(c, self.session) utils.setup_text_combobox(widgets.cutting_hormone_comboentry, distinct(PropCutting.hormone)) utils.setup_text_combobox(widgets.cutting_cover_comboentry, distinct(PropCutting.cover)) utils.setup_text_combobox(widgets.cutting_fungal_comboentry, distinct(PropCutting.fungicide)) utils.setup_text_combobox(widgets.cutting_location_comboentry, distinct(PropCutting.location)) utils.setup_text_combobox(widgets.cutting_container_comboentry, distinct(PropCutting.container)) utils.setup_text_combobox(widgets.cutting_media_comboentry, distinct(PropCutting.media)) # set default units units = prefs.prefs[prefs.units_pref] if units == u"imperial": self.model.length_unit = u"in" self.model.bottom_heat_unit = u"F" else: self.model.length_unit = u"mm" self.model.bottom_heat_unit = u"C" self.refresh_view() self.assign_simple_handler("cutting_type_combo", "cutting_type") self.assign_simple_handler("cutting_length_entry", "length") self.assign_simple_handler("cutting_length_unit_combo", "length_unit") self.assign_simple_handler("cutting_tip_combo", "tip") self.assign_simple_handler("cutting_leaves_combo", "leaves") self.assign_simple_handler("cutting_lvs_reduced_entry", "leaves_reduced_pct") self.assign_simple_handler("cutting_media_comboentry", "media", editor.UnicodeOrNoneValidator()) self.assign_simple_handler("cutting_container_comboentry", "container", editor.UnicodeOrNoneValidator()) self.assign_simple_handler("cutting_buds_combo", "flower_buds") self.assign_simple_handler("cutting_wound_combo", "wound") self.assign_simple_handler("cutting_fungal_comboentry", "fungicide", editor.UnicodeOrNoneValidator()) self.assign_simple_handler("cutting_hormone_comboentry", "hormone", editor.UnicodeOrNoneValidator()) self.assign_simple_handler("cutting_location_comboentry", "location", editor.UnicodeOrNoneValidator()) self.assign_simple_handler("cutting_cover_comboentry", "cover", editor.UnicodeOrNoneValidator()) self.assign_simple_handler("cutting_heat_entry", "bottom_heat_temp") self.assign_simple_handler("cutting_heat_unit_combo", "bottom_heat_unit") self.assign_simple_handler("cutting_rooted_pct_entry", "rooted_pct") model = gtk.ListStore(object) self.view.widgets.rooted_treeview.set_model(model) def _rooted_data_func(column, cell, model, treeiter, prop): v = model[treeiter][0] cell.set_property("text", getattr(v, prop)) cell = self.view.widgets.rooted_date_cell cell.props.editable = True self.view.connect(cell, "edited", self.on_rooted_cell_edited, "date") self.view.widgets.rooted_date_column.set_cell_data_func(cell, _rooted_data_func, "date") cell = self.view.widgets.rooted_quantity_cell cell.props.editable = True self.view.connect(cell, "edited", self.on_rooted_cell_edited, "quantity") self.view.widgets.rooted_quantity_column.set_cell_data_func(cell, _rooted_data_func, "quantity") self.view.connect("rooted_add_button", "clicked", self.on_rooted_add_clicked) self.view.connect("rooted_remove_button", "clicked", self.on_rooted_remove_clicked)
def __init__(self, presenter, model=None): super(NotesPresenter.NoteBox, self).__init__() # open the glade file and extract the markup that the # expander will use filename = os.path.join(paths.lib_dir(), 'notes.glade') xml = etree.parse(filename) el = xml.find("//object[@id='notes_box']") builder = gtk.Builder() s = '<interface>%s</interface>' % etree.tostring(el) if sys.platform == 'win32': # NOTE: PyGTK for Win32 is broken so we have to include # this little hack # # TODO: is this only a specific set of version of # PyGTK/GTK...it was only tested with PyGTK 2.12 builder.add_from_string(s, -1) else: builder.add_from_string(s) self.widgets = utils.BuilderWidgets(builder) notes_box = self.widgets.notes_box self.widgets.remove_parent(notes_box) self.pack_start(notes_box, expand=True, fill=True) self.session = object_session(presenter.model) self.presenter = presenter if model: self.model = model else: self.model = presenter.note_cls() self.widgets.notes_expander.props.use_markup = True self.widgets.notes_expander.props.label = '' self.widgets.notes_expander.props.label_widget.\ ellipsize = pango.ELLIPSIZE_END # set the model values on the widgets mapper = object_mapper(self.model) values = utils.get_distinct_values(mapper.c['category'], self.session) utils.setup_text_combobox(self.widgets.category_comboentry, values) utils.set_widget_value(self.widgets.category_comboentry, self.model.category or '') utils.setup_date_button(None, self.widgets.date_entry, self.widgets.date_button) date_str = utils.today_str() if self.model.date: format = prefs.prefs[prefs.date_format_pref] date_str = self.model.date.strftime(format) utils.set_widget_value(self.widgets.date_entry, date_str) utils.set_widget_value(self.widgets.user_entry, self.model.user or '') buff = gtk.TextBuffer() self.widgets.note_textview.set_buffer(buff) utils.set_widget_value(self.widgets.note_textview, self.model.note or '') # connect the signal handlers self.widgets.date_entry.connect('changed', self.on_date_entry_changed) self.widgets.user_entry.connect('changed', self.on_user_entry_changed) # connect category comboentry widget and child entry self.widgets.category_comboentry.connect('changed', self.on_category_combo_changed) self.widgets.category_comboentry.child.connect('changed', self.on_category_entry_changed) buff.connect('changed', self.on_note_buffer_changed) self.widgets.notes_remove_button.connect('clicked', self.on_notes_remove_button) self.update_label() self.show_all()