Priority: Converted 'priority' attribute to a UDA

- 'priority.long' and 'priority.short' formats now map to 'priority', and
  generate a warning.
- Man page updated.
- Converted priority urgency coefficients to UDA equivalents.
- Converted priority color rules to UDA color rules.
- Removed 'default.priority' support.
- Removed special sort handling for 'priority' field in Variant, added special
  UDA sort handling.
- Removed ColPriority.{h,cpp} source files.
- Removed asorted newly-unused variables.
- The 'show' command now highlights unused priority settings.
- Removed unused localized priority-relateѕ strings.
- Added legacy mapping for columns and sort columns for 'priority.long' and
  'priority.short' columns in report definitions.
- Removed priority color rules implementation.
- Removed obsolete tests for #860, #990, custom.priority_long.t.
- Updated various tests that set priority default, colors.
This commit is contained in:
Paul Beckingham
2015-04-04 19:30:33 -04:00
parent 7a9d314016
commit 5af4579741
33 changed files with 102 additions and 630 deletions

View File

@@ -147,7 +147,6 @@ std::string Config::_defaults =
"urgency.next.coefficient=15.0 # Urgency coefficient for 'next' special tag\n"
"urgency.due.coefficient=12.0 # Urgency coefficient for due dates\n"
"urgency.blocking.coefficient=8.0 # Urgency coefficient for blocking tasks\n"
"urgency.priority.coefficient=6.0 # Urgency coefficient for priorities\n"
"urgency.active.coefficient=4.0 # Urgency coefficient for active tasks\n"
"urgency.scheduled.coefficient=5.0 # Urgency coefficient for scheduled tasks\n"
"urgency.age.coefficient=2.0 # Urgency coefficient for age\n"
@@ -192,11 +191,11 @@ std::string Config::_defaults =
"# Project\n"
"color.project.none=\n"
"\n"
"# Priority\n"
"color.pri.H=color255\n"
"color.pri.L=color245\n"
"color.pri.M=color250\n"
"color.pri.none=\n"
"# Priority UDA\n"
"color.uda.priority.H=color255\n"
"color.uda.priority.L=color245\n"
"color.uda.priority.M=color250\n"
"color.uda.priority.none=\n"
"\n"
"# Tags\n"
"color.tag.next=rgb440\n"
@@ -267,11 +266,11 @@ std::string Config::_defaults =
"# Project\n"
"color.project.none=\n"
"\n"
"# Priority\n"
"color.pri.H=bold white\n"
"color.pri.M=white\n"
"color.pri.L=\n"
"color.pri.none=\n"
"# Priority UDA\n"
"color.uda.priority.H=bold white\n"
"color.uda.priority.M=white\n"
"color.uda.priority.L=\n"
"color.uda.priority.none=\n"
"\n"
"# Tags\n"
"color.tag.next=bold yellow\n"
@@ -319,13 +318,22 @@ std::string Config::_defaults =
"color.undo.before=red\n"
"\n"
#endif
"# UDA priority\n"
"uda.priority.type=string # UDA priority is a string type\n"
"uda.priority.label=Priority # UDA priority has a display label'\n"
"uda.priority.values=H,M,L, # UDA priority values are 'H', 'M', 'L' or ''\n"
" # UDA priority sorting is 'H' > 'M' > 'L' > '' (highest to lowest)\n"
"#uda.priority.default=M # UDA priority default value of 'M'\n"
"urgency.uda.priority.H.coefficient=6.0 # UDA priority coefficient for value 'H'\n"
"urgency.uda.priority.M.coefficient=3.9 # UDA priority coefficient for value 'M'\n"
"urgency.uda.priority.L.coefficient=1.8 # UDA priority coefficient for value 'L'\n"
"\n"
"# Here is the rule precedence order, highest to lowest.\n"
"# Note that these are just the color rule names, without the leading 'color.'\n"
"# and any trailing '.value'.\n"
"rule.precedence.color=deleted,completed,active,keyword.,tag.,uda.,project.,overdue,scheduled,due.today,due,blocked,blocking,recurring,tagged,pri.\n"
"\n"
"#default.project=foo # Default project for 'add' command\n"
"#default.priority=M # Default priority for 'add' command\n"
"#default.due=eom # Default due date for 'add' command\n"
"default.command=next # When no arguments are specified\n"
"\n"

View File

@@ -633,7 +633,6 @@ void Context::staticInitialization ()
CLI::minimumMatchLength = config.getInteger ("abbreviation.minimum");
Task::defaultProject = config.get ("default.project");
Task::defaultPriority = config.get ("default.priority");
Task::defaultDue = config.get ("default.due");
Task::searchCaseSensitive = Variant::searchCaseSensitive = config.getBoolean ("search.case.sensitive");
@@ -660,7 +659,6 @@ void Context::staticInitialization ()
for (i = columns.begin (); i != columns.end (); ++i)
Task::attributes[i->first] = i->second->type ();
Task::urgencyPriorityCoefficient = config.getReal ("urgency.priority.coefficient");
Task::urgencyProjectCoefficient = config.getReal ("urgency.project.coefficient");
Task::urgencyActiveCoefficient = config.getReal ("urgency.active.coefficient");
Task::urgencyScheduledCoefficient = config.getReal ("urgency.scheduled.coefficient");

View File

@@ -65,14 +65,12 @@ static const float epsilon = 0.000001;
#endif
std::string Task::defaultProject = "";
std::string Task::defaultPriority = "";
std::string Task::defaultDue = "";
bool Task::searchCaseSensitive = true;
bool Task::regex = false;
std::map <std::string, std::string> Task::attributes;
std::map <std::string, float> Task::coefficients;
float Task::urgencyPriorityCoefficient = 0.0;
float Task::urgencyProjectCoefficient = 0.0;
float Task::urgencyActiveCoefficient = 0.0;
float Task::urgencyScheduledCoefficient = 0.0;
@@ -1396,14 +1394,6 @@ void Task::validate (bool applyDefault /* = true */)
set ("project", Task::defaultProject);
}
// Override with default.priority, if not specified.
if (Task::defaultPriority != "" &&
! has ("priority"))
{
if (context.columns["priority"]->validate (Task::defaultPriority))
set ("priority", Task::defaultPriority);
}
// Override with default.due, if not specified.
if (Task::defaultDue != "" &&
! has ("due"))
@@ -1489,17 +1479,6 @@ void Task::validate (bool applyDefault /* = true */)
throw std::string (format (STRING_TASK_VALID_RECUR, value));
}
}
// Priorities must be valid.
if (has ("priority"))
{
std::string priority = get ("priority");
if (priority != "H" &&
priority != "M" &&
priority != "L" &&
priority != "")
throw format (STRING_TASK_VALID_PRIORITY, priority);
}
}
////////////////////////////////////////////////////////////////////////////////
@@ -1657,7 +1636,6 @@ float Task::urgency_c () const
{
float value = 0.0;
#ifdef PRODUCT_TASKWARRIOR
value += fabsf (Task::urgencyPriorityCoefficient) > epsilon ? (urgency_priority () * Task::urgencyPriorityCoefficient) : 0.0;
value += fabsf (Task::urgencyProjectCoefficient) > epsilon ? (urgency_project () * Task::urgencyProjectCoefficient) : 0.0;
value += fabsf (Task::urgencyActiveCoefficient) > epsilon ? (urgency_active () * Task::urgencyActiveCoefficient) : 0.0;
value += fabsf (Task::urgencyScheduledCoefficient) > epsilon ? (urgency_scheduled () * Task::urgencyScheduledCoefficient) : 0.0;
@@ -1744,18 +1722,6 @@ float Task::urgency ()
return urgency_value;
}
////////////////////////////////////////////////////////////////////////////////
float Task::urgency_priority () const
{
const std::string& value = get_ref ("priority");
if (value == "H") return 1.0;
else if (value == "M") return 0.65;
else if (value == "L") return 0.3;
return 0.0;
}
////////////////////////////////////////////////////////////////////////////////
float Task::urgency_inherit () const
{
@@ -1777,7 +1743,6 @@ float Task::urgency_inherit () const
v += it->urgency_annotations ();
v += it->urgency_due ();
v += it->urgency_next ();
v += it->urgency_priority ();
v += it->urgency_scheduled ();
v += it->urgency_waiting ();

View File

@@ -37,14 +37,12 @@ class Task : public std::map <std::string, std::string>
{
public:
static std::string defaultProject;
static std::string defaultPriority;
static std::string defaultDue;
static bool searchCaseSensitive;
static bool regex;
static std::map <std::string, std::string> attributes; // name -> type
static std::map <std::string, float> coefficients;
static std::map <std::string, std::vector <std::string> > customOrder;
static float urgencyPriorityCoefficient;
static float urgencyProjectCoefficient;
static float urgencyActiveCoefficient;
static float urgencyScheduledCoefficient;
@@ -165,7 +163,6 @@ private:
const std::string decode (const std::string&) const;
public:
float urgency_priority () const;
float urgency_project () const;
float urgency_active () const;
float urgency_scheduled () const;

View File

@@ -315,14 +315,6 @@ bool Variant::operator< (const Variant& other) const
return left._string < right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string != "H" && right._string == "H") return true;
else if (left._string == "L" && right._string == "M") return true;
else if (left._string == "" && right._string != "") return true;
else return false;
}
else
{
if (left._string == right._string)
return false;
@@ -474,15 +466,6 @@ bool Variant::operator<= (const Variant& other) const
return left._string <= right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string == right._string ) return true;
else if ( right._string == "H") return true;
else if (left._string == "L" && right._string == "M") return true;
else if (left._string == "" ) return true;
else return false;
}
else
{
if (left._string == right._string)
return true;
@@ -634,14 +617,6 @@ bool Variant::operator> (const Variant& other) const
return left._string > right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string == "H" && right._string != "H") return true;
else if (left._string == "M" && right._string == "L") return true;
else if (left._string != "" && right._string == "") return true;
else return false;
}
else
{
if (left._string == right._string)
return false;
@@ -793,15 +768,6 @@ bool Variant::operator>= (const Variant& other) const
return left._string >= right._string;
case type_string:
if (left.source () == "priority" || right.source () == "priority")
{
if (left._string == right._string ) return true;
else if (left._string == "H" ) return true;
else if (left._string == "M" && right._string == "L") return true;
else if ( right._string == "" ) return true;
else return false;
}
else
{
if (left._string == right._string)
return true;

View File

@@ -135,7 +135,6 @@ int main (int argc, const char** argv)
cli.entity ("attribute", "mask");
cli.entity ("attribute", "modified");
cli.entity ("attribute", "parent");
cli.entity ("attribute", "priority");
cli.entity ("attribute", "project");
cli.entity ("attribute", "recur");
cli.entity ("attribute", "scheduled");

View File

@@ -17,7 +17,6 @@ set (columns_SRCS Column.cpp Column.h
ColMask.cpp ColMask.h
ColModified.cpp ColModified.h
ColParent.cpp ColParent.h
ColPriority.cpp ColPriority.h
ColProject.cpp ColProject.h
ColRecur.cpp ColRecur.h
ColScheduled.cpp ColScheduled.h

View File

@@ -1,141 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// http://www.opensource.org/licenses/mit-license.php
//
////////////////////////////////////////////////////////////////////////////////
#include <cmake.h>
#include <Context.h>
#include <ColPriority.h>
#include <text.h>
#include <i18n.h>
extern Context context;
////////////////////////////////////////////////////////////////////////////////
ColumnPriority::ColumnPriority ()
{
_name = "priority";
_type = "string";
_style = "short";
_label = STRING_COLUMN_LABEL_PRI;
_styles.push_back ("short");
_styles.push_back ("long");
_examples.push_back ("H");
_examples.push_back ("High");
}
////////////////////////////////////////////////////////////////////////////////
ColumnPriority::~ColumnPriority ()
{
}
////////////////////////////////////////////////////////////////////////////////
// Allow lower case, but implicitly convert.
bool ColumnPriority::validate (std::string& value)
{
if (value == "h") { value = "H"; return true; }
else if (value == "m") { value = "M"; return true; }
else if (value == "l") { value = "L"; return true; }
return value == "H" || value == "M" || value == "L" || value == "";
}
////////////////////////////////////////////////////////////////////////////////
// Overriden so that style <----> label are linked.
// Note that you can not determine which gets called first.
void ColumnPriority::setStyle (const std::string& value)
{
_style = value;
if (_style == "long" && _label == STRING_COLUMN_LABEL_PRI)
_label = STRING_COLUMN_LABEL_PRIORITY;
}
////////////////////////////////////////////////////////////////////////////////
// Set the minimum and maximum widths for the value.
void ColumnPriority::measure (Task& task, unsigned int& minimum, unsigned int& maximum)
{
minimum = maximum = 0;
if (task.has (_name))
{
std::string priority = task.get (_name);
if (priority == "")
minimum = maximum = 0;
else
minimum = maximum = 1;
if (_style == "long")
{
if (priority == "H") minimum = maximum = 4;
else if (priority == "M") minimum = maximum = 6;
else if (priority == "L") minimum = maximum = 3;
}
else if (_style != "default" &&
_style != "short")
throw format (STRING_COLUMN_BAD_FORMAT, "priority", _style);
}
}
////////////////////////////////////////////////////////////////////////////////
void ColumnPriority::render (
std::vector <std::string>& lines,
Task& task,
int width,
Color& color)
{
if (task.has (_name))
{
std::string priority = task.get (_name);
if (_style == "long")
{
if (priority == "H") priority = "High";
else if (priority == "M") priority = "Medium";
else if (priority == "L") priority = "Low";
}
lines.push_back (color.colorize (leftJustify (priority, width)));
}
}
////////////////////////////////////////////////////////////////////////////////
std::string ColumnPriority::modify (std::string& value)
{
if (value == "h") value = "H";
else if (value == "m") value = "M";
else if (value == "l") value = "L";
return value;
}
////////////////////////////////////////////////////////////////////////////////
bool ColumnPriority::can_modify ()
{
return true;
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -1,53 +0,0 @@
////////////////////////////////////////////////////////////////////////////////
//
// Copyright 2006 - 2015, Paul Beckingham, Federico Hernandez.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// http://www.opensource.org/licenses/mit-license.php
//
////////////////////////////////////////////////////////////////////////////////
#ifndef INCLUDED_COLPRIORITY
#define INCLUDED_COLPRIORITY
#include <vector>
#include <string>
#include <Column.h>
#include <Color.h>
#include <Task.h>
class ColumnPriority : public Column
{
public:
ColumnPriority ();
~ColumnPriority ();
bool validate (std::string&);
void setStyle (const std::string&);
void measure (Task&, unsigned int&, unsigned int&);
void render (std::vector <std::string>&, Task&, int, Color&);
std::string modify (std::string&);
bool can_modify ();
private:
};
#endif
////////////////////////////////////////////////////////////////////////////////

View File

@@ -37,7 +37,6 @@
#include <ColMask.h>
#include <ColModified.h>
#include <ColParent.h>
#include <ColPriority.h>
#include <ColProject.h>
#include <ColRecur.h>
#include <ColScheduled.h>
@@ -88,7 +87,6 @@ Column* Column::factory (const std::string& name, const std::string& report)
else if (column_name == "mask") c = new ColumnMask ();
else if (column_name == "modified") c = new ColumnModified ();
else if (column_name == "parent") c = new ColumnParent ();
else if (column_name == "priority") c = new ColumnPriority ();
else if (column_name == "project") c = new ColumnProject ();
else if (column_name == "recur") c = new ColumnRecur ();
else if (column_name == "scheduled") c = new ColumnScheduled ();
@@ -131,7 +129,6 @@ void Column::factory (std::map <std::string, Column*>& all)
c = new ColumnMask (); all[c->_name] = c;
c = new ColumnModified (); all[c->_name] = c;
c = new ColumnParent (); all[c->_name] = c;
c = new ColumnPriority (); all[c->_name] = c;
c = new ColumnProject (); all[c->_name] = c;
c = new ColumnRecur (); all[c->_name] = c;
c = new ColumnScheduled (); all[c->_name] = c;

View File

@@ -206,8 +206,7 @@ std::string CmdEdit::formatTask (Task task, const std::string& dateformat)
<< "# Status: " << ucFirst (Task::statusToText (task.getStatus ())) << "\n" // L10N safe ucFirst.
<< "# Mask: " << task.get ("mask") << "\n"
<< "# iMask: " << task.get ("imask") << "\n"
<< " Project: " << task.get ("project") << "\n"
<< " Priority: " << task.get ("priority") << "\n";
<< " Project: " << task.get ("project") << "\n";
std::vector <std::string> tags;
task.getTags (tags);
@@ -343,25 +342,6 @@ void CmdEdit::parseTask (Task& task, const std::string& after, const std::string
}
}
// priority
value = findValue (after, "\n Priority:");
if (task.get ("priority") != value)
{
if (value != "")
{
if (context.columns["priority"]->validate (value))
{
context.footnote (STRING_EDIT_PRIORITY_MOD);
task.set ("priority", value);
}
}
else
{
context.footnote (STRING_EDIT_PRIORITY_DEL);
task.remove ("priority");
}
}
// tags
value = findValue (after, "\n Tags:");
std::vector <std::string> tags;

View File

@@ -150,14 +150,6 @@ int CmdInfo::execute (std::string& output)
view.set (row, 1, task->get ("project"));
}
// priority
if (task->has ("priority"))
{
row = view.addRow ();
view.set (row, 0, STRING_COLUMN_LABEL_PRIORITY);
view.set (row, 1, task->get ("priority"));
}
// dependencies: blocked
{
std::vector <Task> blocked;
@@ -420,7 +412,6 @@ int CmdInfo::execute (std::string& output)
urgencyDetails.add (Column::factory ("string", "")); // Result
urgencyTerm (urgencyDetails, "project", task->urgency_project (), Task::urgencyProjectCoefficient);
urgencyTerm (urgencyDetails, "priority", task->urgency_priority (), Task::urgencyPriorityCoefficient);
urgencyTerm (urgencyDetails, "active", task->urgency_active (), Task::urgencyActiveCoefficient);
urgencyTerm (urgencyDetails, "scheduled", task->urgency_scheduled (), Task::urgencyScheduledCoefficient);
urgencyTerm (urgencyDetails, "waiting", task->urgency_waiting (), Task::urgencyWaitingCoefficient);

View File

@@ -82,7 +82,6 @@ int CmdProjects::execute (std::string& output)
std::map <std::string, int> unique;
bool no_project = false;
std::string project;
std::string priority;
std::vector <Task>::iterator task;
for (task = filtered.begin (); task != filtered.end (); ++task)
{

View File

@@ -142,7 +142,6 @@ int CmdShow::execute (std::string& output)
" debug.tls"
" default.command"
" default.due"
" default.priority"
" default.project"
" defaultheight"
" defaultwidth"
@@ -200,7 +199,6 @@ int CmdShow::execute (std::string& output)
" urgency.inherit.coefficient"
" urgency.due.coefficient"
" urgency.next.coefficient"
" urgency.priority.coefficient"
" urgency.project.coefficient"
" urgency.tags.coefficient"
" urgency.waiting.coefficient"
@@ -367,15 +365,6 @@ int CmdShow::execute (std::string& output)
out << format (STRING_CMD_SHOW_CONFIG_ERROR, "calendar.holidays", calendarholidays)
<< "\n";
// Check for bad values in rc.default.priority.
std::string defaultPriority = context.config.get ("default.priority");
if (defaultPriority != "H" &&
defaultPriority != "M" &&
defaultPriority != "L" &&
defaultPriority != "")
out << format (STRING_CMD_SHOW_CONFIG_ERROR, "default.priority", defaultPriority)
<< "\n";
// Verify installation. This is mentioned in the documentation as the way
// to ensure everything is properly installed.

View File

@@ -86,7 +86,6 @@
#include <Context.h>
#include <ColProject.h>
#include <ColPriority.h>
#include <ColDue.h>
extern Context context;

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Hinzugefügt"
#define STRING_COLUMN_LABEL_AGE "Alter"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorität"
#define STRING_COLUMN_LABEL_PROJECT "Projekt"
#define STRING_COLUMN_LABEL_UNTIL "Bis"
#define STRING_COLUMN_LABEL_WAIT "Aufgeschoben"
@@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Projekt geändert."
#define STRING_EDIT_PROJECT_DEL "Projekt gelöscht."
#define STRING_EDIT_PRIORITY_MOD "Wichtigkeit geändert."
#define STRING_EDIT_PRIORITY_DEL "Wichtigkeit gelöscht."
#define STRING_EDIT_DESC_MOD "Beschreibung geändert."
#define STRING_EDIT_DESC_REMOVE_ERR "Beschreibung kann nicht entfernt werden."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Erstelldatum kann nicht entfernt werden."
@@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Warnung: Das '{1}'-Datum ist nach dem '{2}'-Datum."
#define STRING_TASK_VALID_REC_DUE "Wiederholende Aufgaben müssen eine Fälligkeit besitzen."
#define STRING_TASK_VALID_RECUR "Wiederhol-Periode '{1}' ist ungültig."
#define STRING_TASK_VALID_PRIORITY "Die Wichtigkeit kann die Werte 'H', 'M' oder 'L' annehmen, nicht jedoch '{1}'."
#define STRING_TASK_SAFETY_VALVE "Dieser Befehl hat keinen Filter und wird alle Aufgaben verändern. Sind Sie sicher?"
#define STRING_TASK_SAFETY_FAIL "Befehl an Ausführung gehindert."
#define STRING_TASK_SAFETY_ALLOW "Kein Filter angegeben, und durch den konfigurierten 'allow.empty.filter'-Wert wurde keine Aktion durchgeführt."
@@ -1029,4 +1024,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Added"
#define STRING_COLUMN_LABEL_AGE "Age"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priority"
#define STRING_COLUMN_LABEL_PROJECT "Project"
#define STRING_COLUMN_LABEL_UNTIL "Until"
#define STRING_COLUMN_LABEL_WAIT "Wait"
@@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Project modified."
#define STRING_EDIT_PROJECT_DEL "Project deleted."
#define STRING_EDIT_PRIORITY_MOD "Priority modified."
#define STRING_EDIT_PRIORITY_DEL "Priority deleted."
#define STRING_EDIT_DESC_MOD "Description modified."
#define STRING_EDIT_DESC_REMOVE_ERR "Cannot remove description."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Cannot remove creation date."
@@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Warning: You have specified that the '{1}' date is after the '{2}' date."
#define STRING_TASK_VALID_REC_DUE "A recurring task must also have a 'due' date."
#define STRING_TASK_VALID_RECUR "The recurrence value '{1}' is not valid."
#define STRING_TASK_VALID_PRIORITY "Priority values may be 'H', 'M' or 'L', not '{1}'."
#define STRING_TASK_SAFETY_VALVE "This command has no filter, and will modify all tasks. Are you sure?"
#define STRING_TASK_SAFETY_FAIL "Command prevented from running."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Kreita"
#define STRING_COLUMN_LABEL_AGE "Aĝo"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Gr"
#define STRING_COLUMN_LABEL_PRIORITY "Graveco"
#define STRING_COLUMN_LABEL_PROJECT "Projekto"
#define STRING_COLUMN_LABEL_UNTIL "Ĝis"
#define STRING_COLUMN_LABEL_WAIT "Atendu"
@@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Modifis la projekton."
#define STRING_EDIT_PROJECT_DEL "Viŝis la projekton."
#define STRING_EDIT_PRIORITY_MOD "Modifis la gravecon."
#define STRING_EDIT_PRIORITY_DEL "Viŝis la gravecon."
#define STRING_EDIT_DESC_MOD "Modifis la priskribon."
#define STRING_EDIT_DESC_REMOVE_ERR "Ne povis viŝi la priskribon."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Ne povis viŝi la krean daton."
@@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Averto: Vi specifis daton '{1}' post dato '{2}'."
#define STRING_TASK_VALID_REC_DUE "Reokazanta tasko devas ankaŭ havi daton 'due'."
#define STRING_TASK_VALID_RECUR "Reokaz-valoro '{1}' ne estas valida."
#define STRING_TASK_VALID_PRIORITY "Gravec-valoro povas esti 'H', 'M', aŭ 'L', sed ne '{1}'."
#define STRING_TASK_SAFETY_VALVE "Tiu komando ne havas filtrilo, do ĝi modifos ĉian taskon. Ĉu vi estas certa?"
#define STRING_TASK_SAFETY_FAIL "Antaŭmalebligis komandon."
#define STRING_TASK_SAFETY_ALLOW "Vi ne specifis filtrilon. Laŭ la valoro 'allow.empty.filter', ne faros nenion."
@@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Añadida"
#define STRING_COLUMN_LABEL_AGE "Edad"
#define STRING_COLUMN_LABEL_ID "ID" // |esp-ESP|==|eng-USA|
#define STRING_COLUMN_LABEL_PRI "Pri" // |esp-ESP|==|eng-USA|
#define STRING_COLUMN_LABEL_PRIORITY "Prioridad"
#define STRING_COLUMN_LABEL_PROJECT "Proyecto"
#define STRING_COLUMN_LABEL_UNTIL "Hasta"
#define STRING_COLUMN_LABEL_WAIT "Espera"
@@ -717,8 +715,6 @@
#define STRING_EDIT_PROJECT_MOD "Proyecto modificado."
#define STRING_EDIT_PROJECT_DEL "Proyecto eliminado."
#define STRING_EDIT_PRIORITY_MOD "Prioridad modificada."
#define STRING_EDIT_PRIORITY_DEL "Prioridad eliminada."
#define STRING_EDIT_DESC_MOD "Descripción modificada."
#define STRING_EDIT_DESC_REMOVE_ERR "No se puede eliminar la descripción."
#define STRING_EDIT_ENTRY_REMOVE_ERR "No se puede eliminar la fecha de creación."
@@ -883,7 +879,6 @@
#define STRING_TASK_VALID_BEFORE "Advertencia: ha especificado que la fecha '{1}' es después de la fecha '{2}'."
#define STRING_TASK_VALID_REC_DUE "Una tarea recurrente debe tener también una fecha de vencimiento."
#define STRING_TASK_VALID_RECUR "El valor de recurrencia '{1}' no es válido."
#define STRING_TASK_VALID_PRIORITY "Valores de prioridad pueden ser 'H', 'M' o 'L', no '{1}'."
#define STRING_TASK_SAFETY_VALVE "Este comando no tiene filtro, y modificará todas las tareas. ¿Está seguro?"
#define STRING_TASK_SAFETY_FAIL "Se impidió la ejecución del comando."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@@ -1051,4 +1046,7 @@
#define STRING_UTIL_KIBIBYTES "KiB" // |esp-ESP|==|eng-USA|
#define STRING_UTIL_BYTES "B" // |esp-ESP|==|eng-USA|
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Ajoutée"
#define STRING_COLUMN_LABEL_AGE "Age"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorité"
#define STRING_COLUMN_LABEL_PROJECT "Projet"
#define STRING_COLUMN_LABEL_UNTIL "Until"
#define STRING_COLUMN_LABEL_WAIT "Attente"
@@ -707,8 +705,6 @@
#define STRING_EDIT_PROJECT_MOD "Projet modifié."
#define STRING_EDIT_PROJECT_DEL "Projet supprimé."
#define STRING_EDIT_PRIORITY_MOD "Priorité modifiée."
#define STRING_EDIT_PRIORITY_DEL "Priorité supprimée."
#define STRING_EDIT_DESC_MOD "Description modifiée."
#define STRING_EDIT_DESC_REMOVE_ERR "Impossible de supprimer la description."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Impossible de supprimer la date de création."
@@ -873,7 +869,6 @@
#define STRING_TASK_VALID_BEFORE "Warning: You have specified that the '{1}' date is after the '{2}' date."
#define STRING_TASK_VALID_REC_DUE "A recurring task must also have a 'due' date."
#define STRING_TASK_VALID_RECUR "The recurrence value '{1}' is not valid."
#define STRING_TASK_VALID_PRIORITY "Priority values may be 'H', 'M' or 'L', not '{1}'."
#define STRING_TASK_SAFETY_VALVE "This command has no filter, and will modify all tasks. Are you sure?"
#define STRING_TASK_SAFETY_FAIL "Command prevented from running."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@@ -1025,4 +1020,7 @@
#define STRING_UTIL_KIBIBYTES "kio"
#define STRING_UTIL_BYTES "o"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Aggiunto"
#define STRING_COLUMN_LABEL_AGE "Età"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorità"
#define STRING_COLUMN_LABEL_PROJECT "Progetto"
#define STRING_COLUMN_LABEL_UNTIL "Fino a"
#define STRING_COLUMN_LABEL_WAIT "Attesa"
@@ -707,8 +705,6 @@
#define STRING_EDIT_PROJECT_MOD "Progetto modificato."
#define STRING_EDIT_PROJECT_DEL "Progetto cancellato."
#define STRING_EDIT_PRIORITY_MOD "Progetto modificato."
#define STRING_EDIT_PRIORITY_DEL "Priorità cancellata."
#define STRING_EDIT_DESC_MOD "Descrizione modificata."
#define STRING_EDIT_DESC_REMOVE_ERR "Impossibile rimuovere la descrizione."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Impossibile rimuovere la data di creazione."
@@ -873,7 +869,6 @@
#define STRING_TASK_VALID_BEFORE "Warning: data '{1}' con valore successivo alla data '{2}'."
#define STRING_TASK_VALID_REC_DUE "Un task periodico deve avere una data di scadenza."
#define STRING_TASK_VALID_RECUR "Il valore di periodicità '{1}' non è valido."
#define STRING_TASK_VALID_PRIORITY "I valori di priorità possono essere 'H', 'M' o 'L', non '{1}'."
#define STRING_TASK_SAFETY_VALVE "Questo comando non ha filtro, e modificherà tutti i task. Sicuro?"
#define STRING_TASK_SAFETY_FAIL "Prevenuta l'esecuzione del comando."
#define STRING_TASK_SAFETY_ALLOW "You did not specify a filter, and with the 'allow.empty.filter' value, no action is taken."
@@ -1025,4 +1020,7 @@
#define STRING_UTIL_KIBIBYTES "Kb"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Dodane"
#define STRING_COLUMN_LABEL_AGE "Wiek"
#define STRING_COLUMN_LABEL_ID "ID"
#define STRING_COLUMN_LABEL_PRI "Pri"
#define STRING_COLUMN_LABEL_PRIORITY "Priorytet"
#define STRING_COLUMN_LABEL_PROJECT "Projekt"
#define STRING_COLUMN_LABEL_UNTIL "Do"
#define STRING_COLUMN_LABEL_WAIT "Czeka"
@@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Projekt zmieniony."
#define STRING_EDIT_PROJECT_DEL "Projekt usunięty."
#define STRING_EDIT_PRIORITY_MOD "Priorytet zmieniony."
#define STRING_EDIT_PRIORITY_DEL "Priorytet usunięty."
#define STRING_EDIT_DESC_MOD "Opis zmieniony."
#define STRING_EDIT_DESC_REMOVE_ERR "Nie można usunąć opisu."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Nie można usunąć daty utworzenia."
@@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Uwaga: podałeś datę '{1}' jako datę po '{2}'."
#define STRING_TASK_VALID_REC_DUE "Zadanie cykliczne musi posiadać datę zakończenia."
#define STRING_TASK_VALID_RECUR "Wartość '{1}' określająca okres zadania jest niepoprawna."
#define STRING_TASK_VALID_PRIORITY "Poprawne wartości określające priorytet to 'H', 'M' lub 'L', nie '{1}'."
#define STRING_TASK_SAFETY_VALVE "Nie nałożono filtra, wszystkie zadania zostaną poddane modyfikacji. Czy chcesz kontynuować?"
#define STRING_TASK_SAFETY_FAIL "Niedopuszczono do wykonania polecenia."
#define STRING_TASK_SAFETY_ALLOW "Brak filtra, z aktywną flagą 'allow.empty.filter', nie podjęto akcji."
@@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB"
#define STRING_UTIL_BYTES "B"
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -204,8 +204,6 @@
#define STRING_COLUMN_LABEL_ADDED "Adicionada"
#define STRING_COLUMN_LABEL_AGE "Idade"
#define STRING_COLUMN_LABEL_ID "ID" // |por-PRT|==|eng-USA|
#define STRING_COLUMN_LABEL_PRI "Pri" // |por-PRT|==|eng-USA|
#define STRING_COLUMN_LABEL_PRIORITY "Prioridade"
#define STRING_COLUMN_LABEL_PROJECT "Projeto"
#define STRING_COLUMN_LABEL_UNTIL "Até"
#define STRING_COLUMN_LABEL_WAIT "Adiada"
@@ -708,8 +706,6 @@
#define STRING_EDIT_PROJECT_MOD "Projeto modificado."
#define STRING_EDIT_PROJECT_DEL "Projeto removido."
#define STRING_EDIT_PRIORITY_MOD "Prioridade modificada."
#define STRING_EDIT_PRIORITY_DEL "Prioridade removida."
#define STRING_EDIT_DESC_MOD "Descrição modificada."
#define STRING_EDIT_DESC_REMOVE_ERR "Não é possível remover a descrição."
#define STRING_EDIT_ENTRY_REMOVE_ERR "Não é possível remover a data de criação."
@@ -874,7 +870,6 @@
#define STRING_TASK_VALID_BEFORE "Aviso: Especificou que a data de '{1}' é posterior à data de '{2}'."
#define STRING_TASK_VALID_REC_DUE "Uma tarefa recorrente necessita de uma data de vencimento."
#define STRING_TASK_VALID_RECUR "O valor de recorrência '{1}' não é válido."
#define STRING_TASK_VALID_PRIORITY "Valores de prioridade podem ser 'A', 'M' ou 'B', não '{1}'."
#define STRING_TASK_SAFETY_VALVE "Este comando não possui um filtro e irá modificar todas as tarefas. Tem a certeza?"
#define STRING_TASK_SAFETY_FAIL "Execução do comando abortada."
#define STRING_TASK_SAFETY_ALLOW "Não especificou um filtro e com o valor de 'allow.empty.filter', nenhuma ação foi tomada."
@@ -1026,4 +1021,7 @@
#define STRING_UTIL_KIBIBYTES "KiB" // |por-PRT|==|eng-USA|
#define STRING_UTIL_BYTES "B" // |por-PRT|==|eng-USA|
// Legacy
#define STRING_LEGACY_PRIORITY "Legacy attribute found. Please change '{1}' to '{2}'."
#endif

View File

@@ -54,6 +54,21 @@ void legacyColumnMap (std::string& name)
// 2014-01-26: recurrence_indicator --> recur.indicator Mapping removed
// 2014-01-26: tag_indicator --> tags.indicator Mapping removed
// 2014-01-26: description_only --> description.desc Mapping removed
// One-time initialization, on demand.
static std::map <std::string, std::string> legacyMap;
if (! legacyMap.size ())
{
legacyMap["priority."] = "priority";
}
// If a legacy column was used, complain about it, but modify it anyway.
std::map <std::string, std::string>::iterator found = legacyMap.find (name);
if (found != legacyMap.end ())
{
context.footnote (format (STRING_LEGACY_PRIORITY, name, found->second));
name = found->second;
}
}
////////////////////////////////////////////////////////////////////////////////
@@ -71,6 +86,21 @@ void legacySortColumnMap (std::string& name)
// 2014-01-26: recurrence_indicator --> recur Mapping removed
// 2014-01-26: tag_indicator --> tags Mapping removed
// 2014-01-26: description_only --> description Mapping removed
// One-time initialization, on demand.
static std::map <std::string, std::string> legacyMap;
if (! legacyMap.size ())
{
legacyMap["priority."] = "priority";
}
// If a legacy column was used, complain about it, but modify it anyway.
std::map <std::string, std::string>::iterator found = legacyMap.find (name);
if (found != legacyMap.end ())
{
context.footnote (format (STRING_LEGACY_PRIORITY, name, found->second));
name = found->second;
}
}
////////////////////////////////////////////////////////////////////////////////

View File

@@ -111,34 +111,6 @@ static void colorizeTagged (Task& task, const Color& base, Color& c)
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityL (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "L")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityM (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "M")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityH (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "H")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizePriorityNone (Task& task, const Color& base, Color& c)
{
if (task.get ("priority") == "")
c.blend (base);
}
////////////////////////////////////////////////////////////////////////////////
static void colorizeActive (Task& task, const Color& base, Color& c)
{
@@ -329,10 +301,6 @@ void autoColorize (Task& task, Color& c)
if (*r == "color.blocked") colorizeBlocked (task, base, c);
else if (*r == "color.blocking") colorizeBlocking (task, base, c);
else if (*r == "color.tagged") colorizeTagged (task, base, c);
else if (*r == "color.pri.L") colorizePriorityL (task, base, c);
else if (*r == "color.pri.M") colorizePriorityM (task, base, c);
else if (*r == "color.pri.H") colorizePriorityH (task, base, c);
else if (*r == "color.pri.none") colorizePriorityNone (task, base, c);
else if (*r == "color.active") colorizeActive (task, base, c);
else if (*r == "color.scheduled") colorizeScheduled (task, base, c);
else if (*r == "color.until") colorizeUntil (task, base, c);

View File

@@ -79,8 +79,6 @@ static bool sort_compare (int left, int right)
int right_number;
float left_real;
float right_real;
char left_char;
char right_char;
std::vector <std::string>::iterator k;
for (k = global_keys.begin (); k != global_keys.end (); ++k)
@@ -133,25 +131,6 @@ static bool sort_compare (int left, int right)
: (left_string > right_string);
}
// Priority.
else if (field == "priority")
{
left_char = ((*global_data)[left].get (field))[0];
right_char = ((*global_data)[right].get (field))[0];
if (left_char == right_char)
continue;
if (ascending)
return (left_char == '\0' && right_char != '\0') ||
(left_char == 'L' && (right_char == 'M' || right_char == 'H')) ||
(left_char == 'M' && right_char == 'H');
return (left_char != '\0' && right_char == '\0') ||
(left_char == 'M' && right_char == 'L') ||
(left_char == 'H' && (right_char == 'M' || right_char == 'L'));
}
// Due Date.
else if (field == "due")
{