From b4f031e4a7765b986ff8c2504ec5cbb46c1d20c3 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 30 Mar 2009 00:29:28 -0400 Subject: [PATCH] New report columns - Added support for tag_indicator column. - Added support for recurrence_indicator column. --- ChangeLog | 6 +++- html/custom.html | 2 ++ html/task.html | 4 +++ src/T.cpp | 6 ++++ src/T.h | 1 + src/report.cpp | 48 +++++++++++++++++++++------- src/tests/custom.recur_ind.t | 61 ++++++++++++++++++++++++++++++++++++ src/tests/custom.tag_ind.t | 61 ++++++++++++++++++++++++++++++++++++ 8 files changed, 176 insertions(+), 13 deletions(-) create mode 100755 src/tests/custom.recur_ind.t create mode 100755 src/tests/custom.tag_ind.t diff --git a/ChangeLog b/ChangeLog index 60d63611d..043c48dbf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,7 @@ ------ current release --------------------------- -1.6.0 (?) +1.6.0 (4/?/2009) + Added support for new "append" command that adds more description text to an existing task. + Added support for the "weekdays" recurrence, which means a task can recur @@ -30,6 +30,10 @@ included in the data. + The task file format has changed slightly. Please back up your task data files before upgrading to 1.6.0. + + Added new column 'recurrence_indicator' that displays an 'R' if the task + is a recurring task. This column can be added to any custom report. + + Added new column 'tag_indicator' that displays a '+' if the task + has any tags. This column can be added to any custom report. ------ old releases ------------------------------ diff --git a/html/custom.html b/html/custom.html index c6b703eba..4072c0e3c 100644 --- a/html/custom.html +++ b/html/custom.html @@ -114,6 +114,8 @@ report.mine.sort=priority-,project+
  • recur
  • description_only
  • description +
  • tag_indicator +
  • recurrence_indicator

    diff --git a/html/task.html b/html/task.html index 03043ab1d..8ba45a30b 100644 --- a/html/task.html +++ b/html/task.html @@ -128,6 +128,10 @@ included in the data.

  • The task file format has changed slightly. Please back up your task data files before upgrading to 1.6.0. +
  • Added new column 'recurrence_indicator' that displays an 'R' if the task + is a recurring task. This column can be added to any custom report. +
  • Added new column 'tag_indicator' that displays a '+' if the task + has any tags. This column can be added to any custom report.

    diff --git a/src/T.cpp b/src/T.cpp index b7f038c35..9d6623279 100644 --- a/src/T.cpp +++ b/src/T.cpp @@ -113,6 +113,12 @@ void T::addRemoveTag (const std::string& tag) mRemoveTags.push_back (tag); } +//////////////////////////////////////////////////////////////////////////////// +int T::getTagCount () const +{ + return mTags.size (); +} + //////////////////////////////////////////////////////////////////////////////// void T::getTags (std::vector& all) const { diff --git a/src/T.h b/src/T.h index 5060ab634..4113b2f93 100644 --- a/src/T.h +++ b/src/T.h @@ -66,6 +66,7 @@ public: void getRemoveTags (std::vector&); // SPECIAL void addRemoveTag (const std::string&); // SPECIAL + int getTagCount () const; void getTags (std::vector&) const; void addTag (const std::string&); void addTags (const std::vector &); diff --git a/src/report.cpp b/src/report.cpp index 5d60baa81..314af719a 100644 --- a/src/report.cpp +++ b/src/report.cpp @@ -2283,6 +2283,28 @@ std::string handleCustomReport ( table.addCell (row, columnCount, tasks[row].getAttribute ("recur")); } + else if (*col == "recurrence_indicator") + { + table.addColumn (columnLabels[*col] != "" ? columnLabels[*col] : "R"); + table.setColumnWidth (columnCount, Table::minimum); + table.setColumnJustification (columnCount, Table::right); + + for (unsigned int row = 0; row < tasks.size (); ++row) + table.addCell (row, columnCount, + tasks[row].getAttribute ("recur") != "" ? "R" : ""); + } + + else if (*col == "tag_indicator") + { + table.addColumn (columnLabels[*col] != "" ? columnLabels[*col] : "T"); + table.setColumnWidth (columnCount, Table::minimum); + table.setColumnJustification (columnCount, Table::right); + + for (unsigned int row = 0; row < tasks.size (); ++row) + table.addCell (row, columnCount, + tasks[row].getTagCount () ? "+" : ""); + } + // Common to all columns. // Add underline. if (conf.get (std::string ("color"), true) || conf.get (std::string ("_forcecolor"), false)) @@ -2401,18 +2423,20 @@ void validReportColumns (const std::vector & columns) std::vector ::const_iterator it; for (it = columns.begin (); it != columns.end (); ++it) - if (*it != "id" && - *it != "uuid" && - *it != "project" && - *it != "priority" && - *it != "entry" && - *it != "start" && - *it != "due" && - *it != "age" && - *it != "active" && - *it != "tags" && - *it != "recur" && - *it != "description_only" && + if (*it != "id" && + *it != "uuid" && + *it != "project" && + *it != "priority" && + *it != "entry" && + *it != "start" && + *it != "due" && + *it != "age" && + *it != "active" && + *it != "tags" && + *it != "recur" && + *it != "recurrence_indicator" && + *it != "tag_indicator" && + *it != "description_only" && *it != "description") bad.push_back (*it); diff --git a/src/tests/custom.recur_ind.t b/src/tests/custom.recur_ind.t new file mode 100755 index 000000000..0c7746016 --- /dev/null +++ b/src/tests/custom.recur_ind.t @@ -0,0 +1,61 @@ +#! /usr/bin/perl +################################################################################ +## task - a command line task list manager. +## +## Copyright 2006 - 2009, Paul Beckingham. +## All rights reserved. +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 2 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, write to the +## +## Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, +## Boston, MA +## 02110-1301 +## USA +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 6; + +# Create the rc file. +if (open my $fh, '>', 'custom.rc') +{ + print $fh "data.location=.\n", + "report.foo.description=DESC\n", + "report.foo.columns=id,recurrence_indicator\n", + "report.foo.labels=ID,R\n", + "report.foo.sort=id+\n"; + close $fh; + ok (-r 'custom.rc', 'Created custom.rc'); +} + +# Generate the usage screen, and locate the custom report on it. +qx{../task rc:custom.rc add foo due:tomorrow recur:weekly}; +qx{../task rc:custom.rc add bar}; +my $output = qx{../task rc:custom.rc foo 2>&1}; +like ($output, qr/ID R/, 'Recurrence indicator heading'); +like ($output, qr/3\s+R/, 'Recurrence indicator t1'); +unlike ($output, qr/2\s+R/, 'No recurrence indicator t2'); + +# Cleanup. +unlink 'pending.data'; +ok (!-r 'pending.data', 'Removed pending.data'); + +unlink 'custom.rc'; +ok (!-r 'custom.rc', 'Removed custom.rc'); + +exit 0; + diff --git a/src/tests/custom.tag_ind.t b/src/tests/custom.tag_ind.t new file mode 100755 index 000000000..3bbfe5443 --- /dev/null +++ b/src/tests/custom.tag_ind.t @@ -0,0 +1,61 @@ +#! /usr/bin/perl +################################################################################ +## task - a command line task list manager. +## +## Copyright 2006 - 2009, Paul Beckingham. +## All rights reserved. +## +## This program is free software; you can redistribute it and/or modify it under +## the terms of the GNU General Public License as published by the Free Software +## Foundation; either version 2 of the License, or (at your option) any later +## version. +## +## This program is distributed in the hope that it will be useful, but WITHOUT +## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +## FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +## details. +## +## You should have received a copy of the GNU General Public License along with +## this program; if not, write to the +## +## Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, +## Boston, MA +## 02110-1301 +## USA +## +################################################################################ + +use strict; +use warnings; +use Test::More tests => 6; + +# Create the rc file. +if (open my $fh, '>', 'custom.rc') +{ + print $fh "data.location=.\n", + "report.foo.description=DESC\n", + "report.foo.columns=id,tag_indicator\n", + "report.foo.labels=ID,T\n", + "report.foo.sort=id+\n"; + close $fh; + ok (-r 'custom.rc', 'Created custom.rc'); +} + +# Generate the usage screen, and locate the custom report on it. +qx{../task rc:custom.rc add foo +tag}; +qx{../task rc:custom.rc add bar}; +my $output = qx{../task rc:custom.rc foo 2>&1}; +like ($output, qr/ID T/, 'Tag indicator heading'); +like ($output, qr/1\s+\+/, 'Tag indicator t1'); +unlike ($output, qr/2\s+\+/, 'No tag indicator t2'); + +# Cleanup. +unlink 'pending.data'; +ok (!-r 'pending.data', 'Removed pending.data'); + +unlink 'custom.rc'; +ok (!-r 'custom.rc', 'Removed custom.rc'); + +exit 0; +