Example #1
0
    def _setup_relations_list(self):
        self.relations_list = ListContainer(self.get_columns(), Gtk.Orientation.HORIZONTAL)
        self.relations_list._vbox.padding = 0
        self.model_vbox.pack_start(self.relations_list, True, True, 0)

        self.relations_list.set_list_type(ListType.UNADDABLE)

        self.relations_list.connect('remove-item',
                                    self._on_remove_item__clicked)
        self.relations_list.connect('edit-item', self._on_edit_item__clicked)

        self.relations_list.show()
Example #2
0
    def _setup_relations_list(self):
        self.relations_list = ListContainer(self.get_columns(), gtk.ORIENTATION_HORIZONTAL)
        self.relations_list._vbox.padding = 0
        self.model_vbox.pack_start(self.relations_list)

        self.relations_list.set_list_type(ListType.UNADDABLE)

        self.relations_list.connect('remove-item',
                                    self._on_remove_item__clicked)
        self.relations_list.connect('edit-item', self._on_edit_item__clicked)

        self.relations_list.show()
Example #3
0
	def __init__(self, mo, alarms = None, parent_model = None, event_ui=None):
		self.mo = mo
		self.alarms = alarms
		self.parent_model = parent_model
		self.event_ui = event_ui
		self.factory = Factory()

		columns = [
			Column("offsetformat", title='Offset'),
			Column("type", title='Type')
		]
		self.listcontainer_alarms = ListContainer(columns)
		self.listcontainer_alarms.add_items(alarms)
		self.listcontainer_alarms.connect('add-item', self.listcontainer__add_item)
		self.listcontainer_alarms.connect('remove-item', self.listcontainer__remove_item)
		self.listcontainer_alarms.connect('edit-item', self.listcontainer__edit_item)
Example #4
0
class BaseRelationshipEditorSlave(GladeSlaveDelegate):
    """An editor for relationships between objects

    BaseRelationshipEditor provides an easy way to edit (add/remove) relations
    between objects.

    It doesn't allow creations of new objects, only linking between them.
    (the linking might require new objects, though)

    For example, you could edit suppliers for a product (or produts supplied
    by an supplier).

    Subclasses must implement get_targets, get_columns, get_relations, and
    create_model.
    """
    gladefile = 'RelationshipEditor'
    target_name = None
    model_type = None
    editor = None

    def __init__(self, store, parent=None, visual_mode=False):
        self._parent = parent
        self.store = store
        self.visual_mode = visual_mode
        GladeSlaveDelegate.__init__(self, gladefile=self.gladefile)
        self._setup_widgets()

    def _setup_relations_list(self):
        self.relations_list = ListContainer(self.get_columns(), gtk.ORIENTATION_HORIZONTAL)
        self.relations_list._vbox.padding = 0
        self.model_vbox.pack_start(self.relations_list)

        self.relations_list.set_list_type(ListType.UNADDABLE)

        self.relations_list.connect('remove-item',
                                    self._on_remove_item__clicked)
        self.relations_list.connect('edit-item', self._on_edit_item__clicked)

        self.relations_list.show()

    def _setup_widgets(self):
        self.model_name_label.set_label(self.target_name + ':')
        targets = self.get_targets()
        self.target_combo.prefill(targets)

        self._setup_relations_list()

        size_group = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL)
        size_group.add_widget(self.add_button)
        size_group.add_widget(self.relations_list.edit_button)
        size_group.add_widget(self.relations_list.remove_button)

        self.add_button.set_sensitive(False)

        if not self.editor:
            self.relations_list.edit_button.set_sensitive(False)

        self.relations_list.add_items(self.get_relations())

        if self.visual_mode:
            self.target_combo.set_sensitive(False)
            self.add_button.set_sensitive(False)
            self.relations_list.set_list_type(ListType.READONLY)

    def get_targets(self):
        """Returns a list of valid taret objects.

        for instance, if suppliers for a product are being edited, then this
        should return a list fo suppliers.
        """
        raise NotImplementedError

    def get_columns(self):
        """Columns to display"""
        raise NotImplementedError

    def get_relations(self):
        """Returns the already existing relations.

        This may be entries from a maping table or entries from the target
        table itself, depending on the type of relationship
        """
        raise NotImplementedError

    def create_model(self):
        """This method should create the model when adding a new relationship.

        If the addition is canceled. It will automatically be removed.
        """
        raise NotImplementedError

    def add(self):
        model = self.create_model()

        if not model:
            return False

        if not self.editor:
            return model

        res = run_dialog(self.editor, self._parent, self.store, model)

        if not res:
            self.model_type.delete(id=model.id, store=self.store)

        return res

    def edit(self, model):
        return run_dialog(self.editor, self._parent, self.store, model)

    def remove(self, model):
        self.model_type.delete(model.id, store=self.store)
        return True

    def _run_editor(self, model=None):
        """Runs an editor for the relationship (if necessary).

        An editor may be necessary only if there is an mapping table and
        and extra information in this table.
        """
        if model is None:
            res = self.add()
        else:
            res = self.edit(model)

        return res

    def on_add_button__clicked(self, widget):
        result = self._run_editor()
        if result:
            self.relations_list.add_item(result)

    def on_target_combo__content_changed(self, widget):
        has_selected = self.target_combo.read() is not None
        self.add_button.set_sensitive(has_selected and not self.visual_mode)

    def _on_edit_item__clicked(self, list, item):
        if not self.editor:
            return

        result = self._run_editor(item)

        if result:
            self.relations_list.update_item(result)

    def _on_remove_item__clicked(self, list, item):
        if self.remove(item):
            self.relations_list.remove_item(item)
Example #5
0
class BaseRelationshipEditorSlave(GladeSlaveDelegate):
    """An editor for relationships between objects

    BaseRelationshipEditor provides an easy way to edit (add/remove) relations
    between objects.

    It doesn't allow creations of new objects, only linking between them.
    (the linking might require new objects, though)

    For example, you could edit suppliers for a product (or produts supplied
    by an supplier).

    Subclasses must implement get_targets, get_columns, get_relations, and
    create_model.
    """
    domain = 'stoq'
    gladefile = 'RelationshipEditor'
    target_name = None
    model_type = None
    editor = None

    def __init__(self, store, parent=None, visual_mode=False):
        self._parent = parent
        self.store = store
        self.visual_mode = visual_mode
        GladeSlaveDelegate.__init__(self, gladefile=self.gladefile)
        self._setup_widgets()

    def _setup_relations_list(self):
        self.relations_list = ListContainer(self.get_columns(), Gtk.Orientation.HORIZONTAL)
        self.relations_list._vbox.padding = 0
        self.model_vbox.pack_start(self.relations_list, True, True, 0)

        self.relations_list.set_list_type(ListType.UNADDABLE)

        self.relations_list.connect('remove-item',
                                    self._on_remove_item__clicked)
        self.relations_list.connect('edit-item', self._on_edit_item__clicked)

        self.relations_list.show()

    def _setup_widgets(self):
        self.model_name_label.set_label(self.target_name + ':')
        targets = self.get_targets()
        self.target_combo.prefill(targets)

        self._setup_relations_list()

        size_group = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL)
        size_group.add_widget(self.add_button)
        size_group.add_widget(self.relations_list.edit_button)
        size_group.add_widget(self.relations_list.remove_button)

        self.add_button.set_sensitive(False)

        if not self.editor:
            self.relations_list.edit_button.set_sensitive(False)

        self.relations_list.add_items(self.get_relations())

        if self.visual_mode:
            self.target_combo.set_sensitive(False)
            self.add_button.set_sensitive(False)
            self.relations_list.set_list_type(ListType.READONLY)

    def get_targets(self):
        """Returns a list of valid taret objects.

        for instance, if suppliers for a product are being edited, then this
        should return a list fo suppliers.
        """
        raise NotImplementedError

    def get_columns(self):
        """Columns to display"""
        raise NotImplementedError

    def get_relations(self):
        """Returns the already existing relations.

        This may be entries from a maping table or entries from the target
        table itself, depending on the type of relationship
        """
        raise NotImplementedError

    def create_model(self):
        """This method should create the model when adding a new relationship.

        If the addition is canceled. It will automatically be removed.
        """
        raise NotImplementedError

    def add(self):
        model = self.create_model()

        if not model:
            return False

        if not self.editor:
            return model

        res = run_dialog(self.editor, self._parent, self.store, model)

        if not res:
            self.model_type.delete(id=model.id, store=self.store)

        return res

    def edit(self, model):
        return run_dialog(self.editor, self._parent, self.store, model)

    def remove(self, model):
        self.model_type.delete(model.id, store=self.store)
        return True

    def _run_editor(self, model=None):
        """Runs an editor for the relationship (if necessary).

        An editor may be necessary only if there is an mapping table and
        and extra information in this table.
        """
        if model is None:
            res = self.add()
        else:
            res = self.edit(model)

        return res

    def on_add_button__clicked(self, widget):
        result = self._run_editor()
        if result:
            self.relations_list.add_item(result)

    def on_target_combo__content_changed(self, widget):
        has_selected = self.target_combo.read() is not None
        self.add_button.set_sensitive(has_selected and not self.visual_mode)

    def _on_edit_item__clicked(self, list, item):
        if not self.editor:
            return

        result = self._run_editor(item)

        if result:
            self.relations_list.update_item(result)

    def _on_remove_item__clicked(self, list, item):
        if self.remove(item):
            self.relations_list.remove_item(item)
Example #6
0
class AlarmsEditUI(ListContainer):
	def __init__(self, mo, alarms = None, parent_model = None, event_ui=None):
		self.mo = mo
		self.alarms = alarms
		self.parent_model = parent_model
		self.event_ui = event_ui
		self.factory = Factory()

		columns = [
			Column("offsetformat", title='Offset'),
			Column("type", title='Type')
		]
		self.listcontainer_alarms = ListContainer(columns)
		self.listcontainer_alarms.add_items(alarms)
		self.listcontainer_alarms.connect('add-item', self.listcontainer__add_item)
		self.listcontainer_alarms.connect('remove-item', self.listcontainer__remove_item)
		self.listcontainer_alarms.connect('edit-item', self.listcontainer__edit_item)

	def listcontainer__add_item(self, *args):
		start_time = self.event_ui.dateedit_start.dt
		delta = datetime.timedelta()
		alarm = self.factory.alarm(delta, self.parent_model)
		alarm = miniorganizer.ui.AlarmEditUI(self.mo, alarm, start_time).run()
		if alarm:
			self.alarms.append(alarm)
			self.listcontainer_alarms.add_item(alarm)

	def listcontainer__remove_item(self, listcontainer, alarm):
		self.alarms.remove(alarm)
		self.listcontainer_alarms.remove_item(alarm)

	def listcontainer__edit_item(self, listcontainer, alarm):
		start_time = self.event_ui.dateedit_start.dt
		x = miniorganizer.ui.AlarmEditUI(self.mo, alarm, start_time)
		alarm = x.run()
		if alarm:
			self.listcontainer_alarms.update_item(alarm)

	def set_sensitive(self, state):
		self.listcontainer_alarms.set_sensitive(state)