1 // Copyright (c) 2006 by Mike Sharov <msharov@users.sourceforge.net>
6 #ifndef TDDOC_H_31474BC008E2711A4DD60C960CFF3439
7 #define TDDOC_H_31474BC008E2711A4DD60C960CFF3439
11 /// Global commands for this application.
25 cmd_Item_Priority_Highest
,
26 cmd_Item_Priority_High
,
27 cmd_Item_Priority_Medium
,
28 cmd_Item_Priority_Low
,
29 cmd_Item_Priority_Lowest
,
32 /// \class CTodoDocument tddoc.h tddoc.h
33 class CTodoDocument
: public CDocument
{
35 typedef set
<CTodoEntry
> todoset_t
;
36 typedef const todolist_t
& rctodolist_t
;
37 typedef const CTodoEntry
& rcentry_t
;
38 typedef CTodoEntry::id_t itemid_t
;
39 typedef const string
& rcfname_t
;
40 /// Provides dependency links between todo items.
41 class DLL_LOCAL CDependency
{
43 typedef const CDependency
& rcself_t
;
45 CDependency (itemid_t item
= 0, itemid_t dep
= 0) : m_ItemId (item
), m_DepId (dep
) { }
46 inline bool operator< (rcself_t v
) const { return (m_ItemId
< v
.m_ItemId
); }
47 inline bool operator== (rcself_t v
) const { return (m_ItemId
== v
.m_ItemId
); }
48 inline void read (istream
& is
) { is
>> m_ItemId
>> m_DepId
; }
49 inline void write (ostream
& os
) const { os
<< m_ItemId
<< m_DepId
; }
50 inline size_t stream_size (void) const { return (stream_size_of (m_ItemId
) + stream_size_of (m_DepId
)); }
52 itemid_t m_ItemId
; ///< Item id that has ...
53 itemid_t m_DepId
; ///< ... this dependency.
56 f_CompleteVisible
= CDocument::f_Last
,
61 virtual void read (istream
& is
);
62 virtual void write (ostream
& os
) const;
63 virtual size_t stream_size (void) const;
64 virtual void Open (rcfname_t filename
);
65 virtual void Save (void);
66 void UpdateCurrentEntry (rcentry_t e
);
67 rcentry_t
CurrentEntry (void) const;
68 inline uint32_t Selection (void) const { return (m_Selection
.back()); }
69 inline size_t ListSize (void) const { return (m_List
.size()); }
70 inline rctodolist_t
List (void) const { return (m_List
); }
71 inline void SetSelection (uoff_t v
) { m_Selection
.back() = v
; UpdateAllViews(); }
72 inline void ToggleCompleteVisible (void) { SetFlag (f_CompleteVisible
, !Flag (f_CompleteVisible
)); ReloadList(); }
73 inline size_t NestingDepth (void) const { return (m_Stack
.size() - 1); }
74 void SetCurrentEntryPriority (CTodoEntry::EPriority p
);
75 void RemoveCurrentEntry (void);
76 void AppendEntry (void);
77 void MarkEntryComplete (void);
78 void EnterCurrentEntry (void);
79 void LeaveCurrentEntry (void);
80 void PasteLinkToEntry (itemid_t id
);
82 virtual void OnCommand (cmd_t c
);
83 virtual void OnUpdateCommandUI (rcmd_t rc
) const;
85 typedef vector
<CDependency
> depmap_t
;
86 typedef todolist_t::iterator iitem_t
;
87 typedef todolist_t::const_iterator icitem_t
;
88 typedef depmap_t::iterator idep_t
;
89 typedef depmap_t::const_iterator icdep_t
;
90 typedef pair
<depmap_t::iterator
, depmap_t::iterator
> deprange_t
;
91 typedef vector
<itemid_t
> itstack_t
;
92 typedef vector
<uint32_t> selstack_t
;
94 void VerifyData (void);
95 void DescendByCwd (void);
96 inline iitem_t
FindItem (itemid_t id
);
97 inline icitem_t
FindItem (itemid_t id
) const;
98 inline iitem_t
FindCurrentItem (void);
99 inline deprange_t
CurrentItemDeps (void);
100 bool ItemNameIsADirectory (rcfname_t name
) const;
101 void UpdateEntryDirectoryFlag (iitem_t icuri
) const;
102 void UpdateItemProgress (icdep_t first
, icdep_t last
);
103 void UpdateCompleteStatus (itemid_t dep
);
104 inline itemid_t
GetNextItemId (void) const;
105 void SetList (itemid_t lid
);
106 void ReloadList (void);
107 inline itemid_t
ItemId (void) const { return (m_Stack
.back()); }
108 bool VisibleOrderLess (itemid_t i1
, itemid_t i2
) const;
109 void ResortVisibleList (void);
111 todoset_t m_Todos
; ///< List of all entries.
112 todolist_t m_List
; ///< Currently selected list.
113 depmap_t m_Deps
; ///< List of dependencies between todos.
114 itstack_t m_Stack
; ///< The callstack of the currently active list.
115 selstack_t m_Selection
; ///< Index of the selected entry.
118 STD_STREAMABLE (CTodoDocument::CDependency
)