Build system now standalone
[ttodo.git] / tde.h
blob846e1a0c86862ec34424d63645c5775dac71fc73
1 // This file is part of a terminal todo application.
2 //
3 // Copyright (C) 2006 by Mike Sharov <msharov@users.sourceforge.net>
4 // This file is free software, distributed under the MIT License.
5 //
6 // tde.h
7 //
9 #ifndef TDE_H_27699F347D16DF25781577481B852F4D
10 #define TDE_H_27699F347D16DF25781577481B852F4D
12 #include "config.h"
14 //----------------------------------------------------------------------
16 /// ToDo list entry.
17 class CTodoItem {
18 public:
19 enum EPriority {
20 priority_Directory,
21 priority_Highest,
22 priority_High,
23 priority_Medium,
24 priority_Low,
25 priority_Lowest,
26 priority_Last
28 typedef uint32_t id_t;
29 typedef const string& rctext_t;
30 typedef const CTodoItem& rcself_t;
31 private:
32 inline time_t MakeTimeT (uint32_t v) const { return (sizeof(time_t) > 4 ? ((time_t(m_Epoch) << 32) | v) : v); }
33 const char* TimeTText (uint32_t v) const;
34 public:
35 CTodoItem (id_t id = 0);
36 void read (istream& is);
37 void write (ostream& os) const;
38 size_t stream_size (void) const;
39 void MarkComplete (uint8_t progress = 100);
40 inline uint32_t Progress (void) const { return (m_Progress); }
41 inline bool Complete (void) const { return (Progress() == 100); }
42 inline time_t Created (void) const { return (MakeTimeT (m_Created)); }
43 inline time_t Done (void) const { return (MakeTimeT (m_Done)); }
44 inline const char* CreatedDateText (void) const { return (TimeTText (m_Created)); }
45 inline const char* DoneDateText (void) const { return (TimeTText (m_Done)); }
46 inline id_t Id (void) const { return (m_Id); }
47 inline bool HasSublist (void) const { return (m_bHasSublist); }
48 inline void SetHasSublist (bool v) { m_bHasSublist = v; }
49 inline rctext_t Text (void) const { return (m_Text); }
50 inline rctext_t Comment (void) const { return (m_Comment); }
51 inline void SetText (rctext_t v) { m_Text = v; }
52 inline void SetComment (rctext_t v) { m_Comment = v; }
53 inline uint8_t Refs (void) const { return (m_Refs); }
54 inline bool AddRef (void) { return (m_Refs < UINT8_MAX ? ++m_Refs : false); }
55 inline bool DelRef (void) { return (m_Refs > 0 ? --m_Refs : false); }
56 inline uint8_t Priority (void) const { return (m_Priority); }
57 inline void SetPriority (EPriority v) { m_Priority = v; }
58 inline bool operator< (rcself_t v) const { return (Id() < v.Id()); }
59 inline bool operator== (rcself_t v) const { return (Id() == v.Id()); }
60 private:
61 string m_Text; ///< Description of what to do.
62 string m_Comment; ///< Completion comment.
63 uint32_t m_Epoch; ///< Upper half of time_t for dates.
64 uint32_t m_Created; ///< When it was created.
65 uint32_t m_Done; ///< When it was completed.
66 id_t m_Id; ///< Unique id of the entry.
67 uint8_t m_Priority; ///< Priority value. See #EPriority.
68 uint8_t m_Progress; ///< Percent complete.
69 uint8_t m_bHasSublist; ///< true if there are dependencies.
70 uint8_t m_Refs; ///< Number of dependent items.
73 //----------------------------------------------------------------------
75 /// Provides dependency links between todo items.
76 class CTodoDep {
77 public:
78 typedef CTodoItem::id_t itemid_t;
79 typedef const CTodoDep& rcself_t;
80 public:
81 CTodoDep (itemid_t item = 0, itemid_t dep = 0) : m_ItemId (item), m_DepId (dep) { }
82 inline bool operator< (rcself_t v) const { return (m_ItemId < v.m_ItemId); }
83 inline bool operator== (rcself_t v) const { return (m_ItemId == v.m_ItemId); }
84 inline void read (istream& is) { is >> m_ItemId >> m_DepId; }
85 inline void write (ostream& os) const { os << m_ItemId << m_DepId; }
86 inline size_t stream_size (void) const { return (stream_size_of (m_ItemId) + stream_size_of (m_DepId)); }
87 public:
88 itemid_t m_ItemId; ///< Item id that has ...
89 itemid_t m_DepId; ///< ... this dependency.
92 //----------------------------------------------------------------------
94 enum { c_RootItemId };
96 //----------------------------------------------------------------------
98 typedef vector<CTodoItem> tdevec_t;
99 typedef vector<CTodoDep> tddepmap_t;
101 STD_STREAMABLE (CTodoItem)
102 STD_STREAMABLE (CTodoDep)
104 #endif