1 // Copyright (c) 2006 by Mike Sharov <msharov@users.sourceforge.net>
9 //----------------------------------------------------------------------
11 static const uint32_t c_RootItemId
= 0;
12 static const iff::fmt_t fmt_TodoList
= IFF_SFMT("TODO");
13 static const iff::fmt_t fmt_Item
= IFF_SFMT("TITM");
14 static const iff::fmt_t fmt_Dep
= IFF_SFMT("TDEP");
16 static const uint32_t c_CurrentVersion
= 1;
18 //----------------------------------------------------------------------
20 class DLL_LOCAL CTodoHeader
{
22 inline CTodoHeader (void) : m_Version (c_CurrentVersion
), m_Flags (0) { }
23 inline void read (istream
& is
) { is
>> m_Version
>> m_Flags
; }
24 inline void write (ostream
& os
) const { os
<< m_Version
<< m_Flags
; }
25 inline size_t stream_size (void) const { return (stream_size_of (m_Version
) + stream_size_of (m_Flags
)); }
27 uint32_t m_Version
; ///< File format's version number.
28 bitset
<32> m_Flags
; ///< Various flags. None for now.
31 STD_STREAMABLE (CTodoHeader
)
33 //----------------------------------------------------------------------
35 /// Default constructor.
36 CTodoDocument::CTodoDocument (void)
40 m_Selection (SIZE_MAX
),
41 m_ItemId (c_RootItemId
)
45 /// Reads the object from stream \p is.
46 void CTodoDocument::read (istream
& is
)
49 iff::ReadChunk (is
, h
, fmt_TodoList
);
50 iff::ReadVector (is
, m_Todos
, fmt_Item
);
51 iff::ReadVector (is
, m_Deps
, fmt_Dep
);
54 /// Writes the object to stream \p os.
55 void CTodoDocument::write (ostream
& os
) const
58 iff::WriteChunk (os
, h
, fmt_TodoList
);
59 iff::WriteVector (os
, m_Todos
, fmt_Item
);
60 iff::WriteVector (os
, m_Deps
, fmt_Dep
);
63 /// Returns the size of the written object.
64 size_t CTodoDocument::stream_size (void) const
66 return (iff::chunk_size_of (CTodoHeader()) +
67 iff::vector_size_of (m_Todos
) +
68 iff::vector_size_of (m_Deps
));
71 void CTodoDocument::LoadData (void)
74 buf
.read_file (".todo");
77 SetList (c_RootItemId
);
81 void CTodoDocument::SaveData (void) const
83 memblock
buf (stream_size_of (*this));
86 buf
.write_file (".todo");
89 void CTodoDocument::SetList (itemid_t lid
)
94 void CTodoDocument::UpdateCurrentEntry (rcentry_t e
)
96 m_Todos
[m_Selection
] = e
;
97 SetFlag (flag_Changed
);
100 CTodoDocument::rcentry_t
CTodoDocument::CurrentEntry (void) const
102 static const CTodoEntry s_NullEntry
;
103 return (m_Selection
< m_Todos
.size() ? m_Todos
[m_Selection
] : s_NullEntry
);
106 void CTodoDocument::RemoveCurrentEntry (void)
108 m_Todos
.erase (m_Todos
.iat (m_Selection
));
109 SetSelection (min (m_Selection
, uoff_t (m_Todos
.size() - 1)));
112 void CTodoDocument::AppendEntry (void)
114 m_Todos
.insert (m_Todos
.iat (m_Selection
+ 1));
115 SetSelection (m_Selection
+ 1);
118 void CTodoDocument::MarkEntryComplete (void)
120 m_Todos
[m_Selection
].MarkComplete (!m_Todos
[m_Selection
].Complete() * 100);
121 SetSelection (m_Selection
);