/* * Mirai. Copyright (C) 2024 Vyn * This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only) * The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt */ #ifndef MIRAI_TASKITEM_H #define MIRAI_TASKITEM_H #include "using.h" #include #include namespace mirai { class BaseResource; class Day; enum TaskItemState { TODO, DONE }; struct TaskItemData { std::string text; TaskItemState state; Tags tags; }; class TaskItem { public: TaskItem(BaseResource *source, Day *day, const TaskItemData data); TaskItem &operator=(const TaskItemData &newData) { data = newData; onChange(); return *this; }; void markAsDone(); void markAsUndone(); void setDate(const std::string &date); void setText(const std::string &text); const std::string &getLine() const; const std::string &getText() const; const TaskItemState &getState() const; const Tags &getTags() const; bool hasTag(const std::string &tag) const; int id() const { return id_; } BaseResource *source() { return source_; } Day *day() { return day_; } private: void onChange(); static int nextId; int id_ = nextId++; TaskItemData data; BaseResource *source_; Day *day_; }; } // namespace mirai #endif