1 // This file is part of a terminal todo application.
3 // Copyright (C) 2006 by Mike Sharov <msharov@users.sourceforge.net>
4 // This file is free software, distributed under the MIT License.
9 #ifndef TDE_H_27699F347D16DF25781577481B852F4D
10 #define TDE_H_27699F347D16DF25781577481B852F4D
14 //----------------------------------------------------------------------
28 typedef uint32_t id_t
;
29 typedef const string
& rctext_t
;
30 typedef const CTodoItem
& rcself_t
;
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;
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()); }
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_Started
; ///< When work started.
66 uint32_t m_Effort
; ///< How much work has been done on it.
67 uint32_t m_Due
; ///< When it should be completed.
68 uint32_t m_Done
; ///< When it was completed.
69 id_t m_Id
; ///< Unique id of the entry.
70 uint8_t m_Priority
; ///< Priority value. See #EPriority.
71 uint8_t m_Progress
; ///< Percent complete.
72 uint8_t m_bHasSublist
; ///< true if there are dependencies.
73 uint8_t m_Refs
; ///< Number of dependent items.
76 //----------------------------------------------------------------------
78 /// Provides dependency links between todo items.
81 typedef CTodoItem::id_t itemid_t
;
82 typedef const CTodoDep
& rcself_t
;
84 CTodoDep (itemid_t item
= 0, itemid_t dep
= 0) : m_ItemId (item
), m_DepId (dep
) { }
85 inline bool operator< (rcself_t v
) const { return (m_ItemId
< v
.m_ItemId
); }
86 inline bool operator== (rcself_t v
) const { return (m_ItemId
== v
.m_ItemId
); }
87 inline void read (istream
& is
) { is
>> m_ItemId
>> m_DepId
; }
88 inline void write (ostream
& os
) const { os
<< m_ItemId
<< m_DepId
; }
89 inline size_t stream_size (void) const { return (stream_size_of (m_ItemId
) + stream_size_of (m_DepId
)); }
91 itemid_t m_ItemId
; ///< Item id that has ...
92 itemid_t m_DepId
; ///< ... this dependency.
95 //----------------------------------------------------------------------
97 enum { c_RootItemId
};
99 //----------------------------------------------------------------------
101 typedef vector
<CTodoItem
> tdevec_t
;
102 typedef vector
<CTodoDep
> tddepmap_t
;
104 STD_STREAMABLE (CTodoItem
)
105 STD_STREAMABLE (CTodoDep
)