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_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.
78 typedef CTodoItem::id_t itemid_t
;
79 typedef const CTodoDep
& rcself_t
;
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
)); }
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
)