CmdCustom: Special case sequence override

This commit is contained in:
Paul Beckingham 2015-08-17 19:14:58 -04:00
parent 1ec650edd2
commit 23318103ed
2 changed files with 42 additions and 6 deletions

View file

@ -1246,6 +1246,9 @@ This sort order now specifies that there is a listing break between each
project. A listing break is simply a blank line, which provides a visual
grouping.
A special sort value of "none" indicates that no sorting is required, and tasks
will be presented in the order (if any) in which they are selected.
.TP
.B report.X.filter
This adds a filter to the report X so that only tasks matching the filter

View file

@ -97,14 +97,47 @@ int CmdCustom::execute (std::string& output)
std::vector <Task> filtered;
filter.subset (filtered);
// Sort the tasks.
std::vector <int> sequence;
if (sortOrder.size () &&
sortOrder[0] == "none")
{
// If context.cli2._id_ranges is [4,3,5], yield [1,0,2], which is the sort
// order of the filtereed list, which will contain [3,4,5].
sortOrder.clear ();
for (auto& i : context.cli2._id_ranges)
{
int first = strtol (i.first.c_str (), NULL, 10);
int second = strtol (i.second.c_str (), NULL, 10);
if (first == second)
{
//sequence.push_back (first - 1);
for (unsigned int t = 0; t < filtered.size (); ++t)
if (filtered[t].id == first)
sequence.push_back (t);
}
else
{
for (int id = first; id <= second; id++)
//sequence.push_back (id - 1);
for (unsigned int t = 0; t < filtered.size (); ++t)
if (filtered[t].id == id)
sequence.push_back (t);
}
}
}
else
{
// There is a sortOrder, so sorting will take place, which means the initial
// order of sequence is ascending.
for (unsigned int i = 0; i < filtered.size (); ++i)
sequence.push_back (i);
if (sortOrder.size () != 0 &&
sortOrder[0] != "none")
// Sort the tasks.
if (sortOrder.size ())
sort_tasks (filtered, sequence, reportSort);
}
// Configure the view.
ViewTask view;