Split the document into the base document and the current list view document.
[ttodo.git] / tde.h
blob34930f666f0768cae22e7cade6dbff44d1e45061
1 // tde.h
2 //
4 #ifndef TDE_H_27699F347D16DF25781577481B852F4D
5 #define TDE_H_27699F347D16DF25781577481B852F4D
7 #include <utui.h>
9 //----------------------------------------------------------------------
11 /// ToDo list entry.
12 class CTodoItem {
13 public:
14 enum EPriority {
15 priority_Directory,
16 priority_Highest,
17 priority_High,
18 priority_Medium,
19 priority_Low,
20 priority_Lowest,
21 priority_Last
23 typedef uint32_t id_t;
24 typedef const string& rctext_t;
25 typedef const CTodoItem& rcself_t;
26 private:
27 inline time_t MakeTimeT (uint32_t v) const { return (sizeof(time_t) > 4 ? ((time_t(m_Epoch) << 32) | v) : v); }
28 const char* TimeTText (uint32_t v) const;
29 public:
30 CTodoItem (id_t id = 0);
31 void read (istream& is);
32 void write (ostream& os) const;
33 size_t stream_size (void) const;
34 void MarkComplete (uint8_t progress = 100);
35 inline uint32_t Progress (void) const { return (m_Progress); }
36 inline bool Complete (void) const { return (Progress() == 100); }
37 inline time_t Created (void) const { return (MakeTimeT (m_Created)); }
38 inline time_t Done (void) const { return (MakeTimeT (m_Done)); }
39 inline const char* CreatedDateText (void) const { return (TimeTText (m_Created)); }
40 inline const char* DoneDateText (void) const { return (TimeTText (m_Done)); }
41 inline id_t Id (void) const { return (m_Id); }
42 inline bool HasSublist (void) const { return (m_bHasSublist); }
43 inline void SetHasSublist (bool v) { m_bHasSublist = v; }
44 inline rctext_t Text (void) const { return (m_Text); }
45 inline rctext_t Comment (void) const { return (m_Comment); }
46 inline void SetText (rctext_t v) { m_Text = v; }
47 inline void SetComment (rctext_t v) { m_Comment = v; }
48 inline uint8_t Refs (void) const { return (m_Refs); }
49 inline bool AddRef (void) { return (m_Refs < UINT8_MAX ? ++m_Refs : false); }
50 inline bool DelRef (void) { return (m_Refs > 0 ? --m_Refs : false); }
51 inline uint8_t Priority (void) const { return (m_Priority); }
52 inline void SetPriority (EPriority v) { m_Priority = v; }
53 inline bool operator< (rcself_t v) const { return (Id() < v.Id()); }
54 inline bool operator== (rcself_t v) const { return (Id() == v.Id()); }
55 private:
56 string m_Text; ///< Description of what to do.
57 string m_Comment; ///< Completion comment.
58 uint32_t m_Epoch; ///< Upper half of time_t for dates.
59 uint32_t m_Created; ///< When it was created.
60 uint32_t m_Done; ///< When it was completed.
61 id_t m_Id; ///< Unique id of the entry.
62 uint8_t m_Priority; ///< Priority value. See #EPriority.
63 uint8_t m_Progress; ///< Percent complete.
64 uint8_t m_bHasSublist; ///< true if there are dependencies.
65 uint8_t m_Refs; ///< Number of dependent items.
68 //----------------------------------------------------------------------
70 /// Provides dependency links between todo items.
71 class CTodoDep {
72 public:
73 typedef CTodoItem::id_t itemid_t;
74 typedef const CTodoDep& rcself_t;
75 public:
76 CTodoDep (itemid_t item = 0, itemid_t dep = 0) : m_ItemId (item), m_DepId (dep) { }
77 inline bool operator< (rcself_t v) const { return (m_ItemId < v.m_ItemId); }
78 inline bool operator== (rcself_t v) const { return (m_ItemId == v.m_ItemId); }
79 inline void read (istream& is) { is >> m_ItemId >> m_DepId; }
80 inline void write (ostream& os) const { os << m_ItemId << m_DepId; }
81 inline size_t stream_size (void) const { return (stream_size_of (m_ItemId) + stream_size_of (m_DepId)); }
82 public:
83 itemid_t m_ItemId; ///< Item id that has ...
84 itemid_t m_DepId; ///< ... this dependency.
87 //----------------------------------------------------------------------
89 enum { c_RootItemId };
91 //----------------------------------------------------------------------
93 typedef vector<CTodoItem> tdevec_t;
94 typedef vector<CTodoDep> tddepmap_t;
96 STD_STREAMABLE (CTodoItem)
97 STD_STREAMABLE (CTodoDep)
99 #endif