def __init__(self, *sets): gobject.GObject.__init__(self) if len(sets) > 0: self.sets = sets self.set = reduce(lambda big_set, set: big_set.union(set), sets[1:], sets[0]) else: self.sets = [SortedSet([])] self.set = SortedSet([])
class UnionSetEnumerator(gobject.GObject): __gtype_name__ = "UnionSetEnumerator" __gsignals__ = { "remove": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_PYOBJECT)), "add": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_PYOBJECT)) } def __init__(self, *sets): gobject.GObject.__init__(self) if len(sets) > 0: self.sets = sets self.set = reduce(lambda big_set, set: big_set.union(set), sets[1:], sets[0]) else: self.sets = [SortedSet([])] self.set = SortedSet([]) #cursor = property(lambda self: self._current_element, _set_cursor) def __len__(self): return len(self.set.data) def __contains__(self, element): try: return element in self.set except IndexError: return False def _before_add(self, _src, _pos, element): if element not in self.set: self.set.add(element) cursor_pos = bisect_left(self.set.data, element) self.emit('add', self, cursor_pos, element) def _before_remove(self, _src, _pos, element): if element in self.set: self.set.remove(element) self.emit('remove', self, bisect_left(self.set.data, element), element) def cursor_from_element(self, element=None): if element != None: return Cursor(self, bisect_left(self.set.data, element)) else: return Cursor(self) def remove(self, element): for set_ in self.sets: set_.remove(element)
def selected(self): cursor = self.controller.main_controller.store_controller.cursor if not cursor or not cursor.model: return indices = list( UnionSetEnumerator(SortedSet(cursor.model.stats['untranslated']), SortedSet(cursor.model.stats['fuzzy'])).set) if not indices: self.controller.select_default_mode() return cursor.indices = indices
class UnionSetEnumerator(gobject.GObject): __gtype_name__ = "UnionSetEnumerator" __gsignals__ = { "remove": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_PYOBJECT)), "add": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_INT, gobject.TYPE_PYOBJECT)) } def __init__(self, *sets): gobject.GObject.__init__(self) if len(sets) > 0: self.sets = sets self.set = reduce(lambda big_set, set: big_set.union(set), sets[1:], sets[0]) else: self.sets = [SortedSet([])] self.set = SortedSet([]) #cursor = property(lambda self: self._current_element, _set_cursor) def __len__(self): return len(self.set.data) def __contains__(self, element): try: return element in self.set except IndexError: return False def _before_add(self, _src, _pos, element): if element not in self.set: self.set.add(element) cursor_pos = bisect_left(self.set.data, element) self.emit('add', self, cursor_pos, element) def _before_remove(self, _src, _pos, element): if element in self.set: self.set.remove(element) self.emit('remove', self, bisect_left(self.set.data, element), element) def remove(self, element): for set_ in self.sets: set_.remove(element)