Source code for timelinelib.canvas.data.category

# Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018  Rickard Lindberg, Roger Lindberg
#
# This file is part of Timeline.
#
# Timeline is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Timeline is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Timeline.  If not, see <http://www.gnu.org/licenses/>.


from timelinelib.canvas.data.base import ItemBase
from timelinelib.canvas.data.immutable import ImmutableCategory
from timelinelib.canvas.drawing.drawers import get_progress_color


EXPORTABLE_FIELDS = FIELDS = (_("Name"), _("Color"), _("Progress Color"), _("Done Color"), _("Parent"))


[docs]class Category(ItemBase):
[docs] def __init__(self, db=None, id_=None, immutable_value=ImmutableCategory()): ItemBase.__init__(self, db, id_, immutable_value) self._parent = None
[docs] def duplicate(self, target_db=None): duplicate = ItemBase.duplicate(self, target_db=target_db) if duplicate.db is self.db: duplicate.parent = self.parent return duplicate
[docs] def update(self, name, color, font_color, parent=None): self.parent = None self.name = name self.color = color self.progress_color = get_progress_color(color) self.done_color = get_progress_color(color) if font_color is None: self.font_color = (0, 0, 0) else: self.font_color = font_color self.parent = parent return self
[docs] def save(self): self._update_parent_id() with self._db.transaction("Save category") as t: t.save_category(self._immutable_value, self.ensure_id()) return self
def _update_parent_id(self): if self.parent is None: self._immutable_value = self._immutable_value.update( parent_id=None ) elif self.parent.id is None: raise Exception("Unknown parent") else: self._immutable_value = self._immutable_value.update( parent_id=self.parent.id )
[docs] def delete(self): with self._db.transaction("Delete category") as t: t.delete_category(self.id) self.id = None
[docs] def reload(self): return self._db.get_category_by_id(self.id)
[docs] def get_name(self): return self._immutable_value.name
[docs] def set_name(self, name): self._immutable_value = self._immutable_value.update(name=name) return self
name = property(get_name, set_name)
[docs] def get_color(self): return self._immutable_value.color
[docs] def set_color(self, color): self._immutable_value = self._immutable_value.update(color=color) return self
color = property(get_color, set_color)
[docs] def get_progress_color(self): return self._immutable_value.progress_color
[docs] def set_progress_color(self, color): self._immutable_value = self._immutable_value.update(progress_color=color) return self
progress_color = property(get_progress_color, set_progress_color)
[docs] def get_done_color(self): return self._immutable_value.done_color
[docs] def set_done_color(self, color): self._immutable_value = self._immutable_value.update(done_color=color) return self
done_color = property(get_done_color, set_done_color)
[docs] def get_font_color(self): return self._immutable_value.font_color
[docs] def set_font_color(self, font_color): self._immutable_value = self._immutable_value.update(font_color=font_color) return self
font_color = property(get_font_color, set_font_color) def _get_parent(self): return self._parent
[docs] def set_parent(self, parent): self._parent = parent return self
parent = property(_get_parent, set_parent)
[docs] @staticmethod def get_exportable_fields(): return EXPORTABLE_FIELDS
[docs] def __repr__(self): return "Category<id=%r, name=%r, color=%r, font_color=%r>" % ( self.get_id(), self.get_name(), self.get_color(), self.get_font_color())
[docs] def __eq__(self, other): if self is other: return True return (isinstance(other, Category) and self.get_id() == other.get_id() and self.get_name() == other.get_name() and self.get_color() == other.get_color() and self.get_progress_color() == other.get_progress_color() and self.get_done_color() == other.get_done_color() and self.get_font_color() == other.get_font_color() and self._get_parent() == other._get_parent())
[docs] def __ne__(self, other): return not (self == other)
[docs]def sort_categories(categories): return sorted(list(categories), key=lambda category: category.get_name().lower())