feat(todo): each project's Display: completed tasks, grouping, sorting and filters, synced (ADR 0033, D17)

- A Display button beside a project's menu (the Inbox's too), a dot
  on it while the project shows otherwise than at first, opens its
  sheet: completed tasks, grouping (date, deadline, added date,
  priority, label), sorting (name, date, deadline, added date,
  priority), filters by date, deadline, priority and label, and
  Reset all.
- The choices live in the project's sealed payload (ProjectView,
  written only once set), so every device shows the project alike.
- Grouped, the groups stand in the sections' place under pinned
  headings; rows are dragged only while sorted by hand by sections.
- Show done tasks moves from the menu into Display.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-01 18:41:12 +01:00
commit 7d1de304c8
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
5 changed files with 1878 additions and 81 deletions

View file

@ -14,8 +14,6 @@
"settingsVersion": "Version {version} (Build {build})",
"clear": "Entfernen",
"colorLabel": "Farbe",
"completedShow": "Erledigte zeigen",
"completedHide": "Erledigte ausblenden",
"dateTitle": "Datum",
"dateNextWeek": "Nächste Woche",
"dateWeekend": "Dieses Wochenende",
@ -168,5 +166,41 @@
"deadlineTitle": "Frist",
"orderChanged": "Reihenfolge geändert",
"addTaskCancel": "Hier ablegen zum Abbrechen",
"taskMovedTo": "Verschoben auf {day}"
"taskMovedTo": "Verschoben auf {day}",
"display": "Anzeige",
"displayCompleted": "Erledigte Aufgaben",
"displaySort": "Sortieren",
"displayGrouping": "Gruppierung",
"displaySorting": "Sortierung",
"displayFilter": "Filter",
"displayDeadline": "Frist",
"displayLabel": "Label",
"displayReset": "Alles zurücksetzen",
"displayDone": "Fertig",
"displayAll": "Alle",
"displayAny": "Beliebig",
"groupingNone": "Keine",
"groupingDate": "Datum",
"groupingDeadline": "Frist",
"groupingAdded": "Hinzugefügt am",
"groupingPriority": "Priorität",
"groupingLabel": "Label",
"sortingManual": "Manuell",
"sortingName": "Name",
"sortingDate": "Datum",
"sortingDeadline": "Frist",
"sortingAdded": "Hinzugefügt am",
"sortingPriority": "Priorität",
"rangeToday": "Heute",
"rangeThisWeek": "Diese Woche",
"rangeNext7": "Nächste 7 Tage",
"rangeThisMonth": "Dieser Monat",
"rangeNext30": "Nächste 30 Tage",
"rangeNoDate": "Kein Datum",
"rangeNoDeadline": "Keine Frist",
"viewNothingTitle": "Nichts passt",
"viewNothingHint": "Die Filter dieser Ansicht lassen hier jede Aufgabe aus. Unter Anzeige änderst du sie.",
"displaySave": "Speichern",
"displayCancel": "Abbrechen",
"groupNoLabel": "Ohne Label"
}

View file

@ -30,8 +30,6 @@
},
"clear": "Clear",
"colorLabel": "Colour",
"completedShow": "Show done tasks",
"completedHide": "Hide done tasks",
"dateTitle": "Date",
"dateNextWeek": "Next week",
"dateWeekend": "This weekend",
@ -466,5 +464,149 @@
"type": "String"
}
}
},
"display": "Display",
"@display": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayCompleted": "Completed tasks",
"@displayCompleted": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displaySort": "Sort",
"@displaySort": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayGrouping": "Grouping",
"@displayGrouping": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displaySorting": "Sorting",
"@displaySorting": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayFilter": "Filter",
"@displayFilter": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayDeadline": "Deadline",
"@displayDeadline": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayLabel": "Label",
"@displayLabel": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayReset": "Reset all",
"@displayReset": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayDone": "Done",
"@displayDone": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayAll": "All",
"@displayAll": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayAny": "Any",
"@displayAny": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupingNone": "None",
"@groupingNone": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupingDate": "Date",
"@groupingDate": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupingDeadline": "Deadline",
"@groupingDeadline": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupingAdded": "Added date",
"@groupingAdded": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupingPriority": "Priority",
"@groupingPriority": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupingLabel": "Label",
"@groupingLabel": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"sortingManual": "Manual",
"@sortingManual": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"sortingName": "Name",
"@sortingName": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"sortingDate": "Date",
"@sortingDate": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"sortingDeadline": "Deadline",
"@sortingDeadline": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"sortingAdded": "Added date",
"@sortingAdded": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"sortingPriority": "Priority",
"@sortingPriority": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeToday": "Today",
"@rangeToday": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeThisWeek": "This week",
"@rangeThisWeek": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeNext7": "Next 7 days",
"@rangeNext7": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeThisMonth": "This month",
"@rangeThisMonth": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeNext30": "Next 30 days",
"@rangeNext30": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeNoDate": "No date",
"@rangeNoDate": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"rangeNoDeadline": "No deadline",
"@rangeNoDeadline": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"viewNothingTitle": "Nothing matches",
"@viewNothingTitle": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"viewNothingHint": "This view's filters leave out every task here. Display changes them.",
"@viewNothingHint": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displaySave": "Save",
"@displaySave": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"displayCancel": "Cancel",
"@displayCancel": {
"description": "A project's Display sheet and what it shows (ADR 0033, D17)."
},
"groupNoLabel": "No label",
"@groupNoLabel": {
"description": "A project's group of tasks without a label (ADR 0033, D17)."
}
}

View file

@ -184,18 +184,6 @@ abstract class AppLocalizations {
/// **'Colour'**
String get colorLabel;
/// No description provided for @completedShow.
///
/// In en, this message translates to:
/// **'Show done tasks'**
String get completedShow;
/// No description provided for @completedHide.
///
/// In en, this message translates to:
/// **'Hide done tasks'**
String get completedHide;
/// No description provided for @dateTitle.
///
/// In en, this message translates to:
@ -1113,6 +1101,222 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Moved to {day}'**
String taskMovedTo(String day);
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Display'**
String get display;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Completed tasks'**
String get displayCompleted;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Sort'**
String get displaySort;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Grouping'**
String get displayGrouping;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Sorting'**
String get displaySorting;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Filter'**
String get displayFilter;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Deadline'**
String get displayDeadline;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Label'**
String get displayLabel;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Reset all'**
String get displayReset;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Done'**
String get displayDone;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'All'**
String get displayAll;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Any'**
String get displayAny;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'None'**
String get groupingNone;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Date'**
String get groupingDate;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Deadline'**
String get groupingDeadline;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Added date'**
String get groupingAdded;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Priority'**
String get groupingPriority;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Label'**
String get groupingLabel;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Manual'**
String get sortingManual;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Name'**
String get sortingName;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Date'**
String get sortingDate;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Deadline'**
String get sortingDeadline;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Added date'**
String get sortingAdded;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Priority'**
String get sortingPriority;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Today'**
String get rangeToday;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'This week'**
String get rangeThisWeek;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Next 7 days'**
String get rangeNext7;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'This month'**
String get rangeThisMonth;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Next 30 days'**
String get rangeNext30;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'No date'**
String get rangeNoDate;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'No deadline'**
String get rangeNoDeadline;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Nothing matches'**
String get viewNothingTitle;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'This view\'s filters leave out every task here. Display changes them.'**
String get viewNothingHint;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Save'**
String get displaySave;
/// A project's Display sheet and what it shows (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'Cancel'**
String get displayCancel;
/// A project's group of tasks without a label (ADR 0033, D17).
///
/// In en, this message translates to:
/// **'No label'**
String get groupNoLabel;
}
class _AppLocalizationsDelegate

View file

@ -55,12 +55,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get colorLabel => 'Farbe';
@override
String get completedShow => 'Erledigte zeigen';
@override
String get completedHide => 'Erledigte ausblenden';
@override
String get dateTitle => 'Datum';
@ -718,4 +712,113 @@ class AppLocalizationsDe extends AppLocalizations {
String taskMovedTo(String day) {
return 'Verschoben auf $day';
}
@override
String get display => 'Anzeige';
@override
String get displayCompleted => 'Erledigte Aufgaben';
@override
String get displaySort => 'Sortieren';
@override
String get displayGrouping => 'Gruppierung';
@override
String get displaySorting => 'Sortierung';
@override
String get displayFilter => 'Filter';
@override
String get displayDeadline => 'Frist';
@override
String get displayLabel => 'Label';
@override
String get displayReset => 'Alles zurücksetzen';
@override
String get displayDone => 'Fertig';
@override
String get displayAll => 'Alle';
@override
String get displayAny => 'Beliebig';
@override
String get groupingNone => 'Keine';
@override
String get groupingDate => 'Datum';
@override
String get groupingDeadline => 'Frist';
@override
String get groupingAdded => 'Hinzugefügt am';
@override
String get groupingPriority => 'Priorität';
@override
String get groupingLabel => 'Label';
@override
String get sortingManual => 'Manuell';
@override
String get sortingName => 'Name';
@override
String get sortingDate => 'Datum';
@override
String get sortingDeadline => 'Frist';
@override
String get sortingAdded => 'Hinzugefügt am';
@override
String get sortingPriority => 'Priorität';
@override
String get rangeToday => 'Heute';
@override
String get rangeThisWeek => 'Diese Woche';
@override
String get rangeNext7 => 'Nächste 7 Tage';
@override
String get rangeThisMonth => 'Dieser Monat';
@override
String get rangeNext30 => 'Nächste 30 Tage';
@override
String get rangeNoDate => 'Kein Datum';
@override
String get rangeNoDeadline => 'Keine Frist';
@override
String get viewNothingTitle => 'Nichts passt';
@override
String get viewNothingHint =>
'Die Filter dieser Ansicht lassen hier jede Aufgabe aus. Unter Anzeige änderst du sie.';
@override
String get displaySave => 'Speichern';
@override
String get displayCancel => 'Abbrechen';
@override
String get groupNoLabel => 'Ohne Label';
}

View file

@ -55,12 +55,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get colorLabel => 'Colour';
@override
String get completedShow => 'Show done tasks';
@override
String get completedHide => 'Hide done tasks';
@override
String get dateTitle => 'Date';
@ -717,6 +711,115 @@ class AppLocalizationsEn extends AppLocalizations {
String taskMovedTo(String day) {
return 'Moved to $day';
}
@override
String get display => 'Display';
@override
String get displayCompleted => 'Completed tasks';
@override
String get displaySort => 'Sort';
@override
String get displayGrouping => 'Grouping';
@override
String get displaySorting => 'Sorting';
@override
String get displayFilter => 'Filter';
@override
String get displayDeadline => 'Deadline';
@override
String get displayLabel => 'Label';
@override
String get displayReset => 'Reset all';
@override
String get displayDone => 'Done';
@override
String get displayAll => 'All';
@override
String get displayAny => 'Any';
@override
String get groupingNone => 'None';
@override
String get groupingDate => 'Date';
@override
String get groupingDeadline => 'Deadline';
@override
String get groupingAdded => 'Added date';
@override
String get groupingPriority => 'Priority';
@override
String get groupingLabel => 'Label';
@override
String get sortingManual => 'Manual';
@override
String get sortingName => 'Name';
@override
String get sortingDate => 'Date';
@override
String get sortingDeadline => 'Deadline';
@override
String get sortingAdded => 'Added date';
@override
String get sortingPriority => 'Priority';
@override
String get rangeToday => 'Today';
@override
String get rangeThisWeek => 'This week';
@override
String get rangeNext7 => 'Next 7 days';
@override
String get rangeThisMonth => 'This month';
@override
String get rangeNext30 => 'Next 30 days';
@override
String get rangeNoDate => 'No date';
@override
String get rangeNoDeadline => 'No deadline';
@override
String get viewNothingTitle => 'Nothing matches';
@override
String get viewNothingHint =>
'This view\'s filters leave out every task here. Display changes them.';
@override
String get displaySave => 'Save';
@override
String get displayCancel => 'Cancel';
@override
String get groupNoLabel => 'No label';
}
/// The translations for English, as used in the United Kingdom (`en_GB`).