Have you ever prepared a non-trivial meal and had to plan when to execute which task? (Like: The meatballs can be fried while the potatoes are cooking, but peeling the potatoes has to precede the cooking. But should I first peel the potatoes, or mix the salad, or prepare the meatballs? And when will each of these tasks have to be started such that the meal can be served at 1 o'clock p.m.?) At the latest when you find yourself making such a plan on a sheet of paper — then you should use GanttMeister.
GanttMeister knows tasks and projects. Tasks have a name as well as relative start and end times, while a project is basically a set of tasks. Tasks can be related: If a task t is required to precede a task u, we say that u depends on t. In this sense a project is not just a set, but an oriented graph, with the tasks as nodes and the dependencies as edges. Moreover, tasks can be flagged as "demanding". Two tasks are said to overlap if one of them starts before the other one ends, but ends after the other one starts.
GanttMeister projects always satisfy the following conditions:
The only known way of obtaining GanttMeister is to download it from here. (Decompress it using a ZIP utility like the "Archive Utility" of macOS or the "StuffIt Expander".)
Features and properties not explained in this documentation are regarded as obvious or irrelevant. Actually, most of the functionality will become clear by staring at the following pictures and inspecting the application menus — where you can see, for example, that projects can be saved to and opened from the file system. BTW, they are stored as human-readable JSON documents, so if you like, you can edit them with a text editor, which comes in handy if you e.g. decide to replace chard with spinach in a cooking project.
This is an example for what you could see when no task is selected:
The middle column lists the names of the tasks, the right panel shows their relative position in time and their duration — a kind of Gantt chart. The time direction is from left to right. Demanding tasks have a little blue square in their lower left corner.
You will notice that the times are displayed as plain numbers without measurement unit. This is intended. Attach whatever time unit you like. For cooking you would want to count minutes, for bigger projects maybe days.
And this is what you would see in this example when a task is selected:
The start time of the task is relative to the end of the project.
Dependencies are added by dragging from the task names list into the successors or predecessors pane of the selected task. Illegal dependencies (condition (2) above) are immediately denied. Dependencies are deleted by selecting a task name in this panel and hitting the delete or backspace key.
Tasks can be dragged to the left or right in the Gantt chart, changing their start and end times, but not their duration. GanttMeister does not allow to drag a task as far to the right that it ends after the start of a dependent task, and not as far to the left that it starts before a task it depends upon ends. Neither does it allow to drag a demanding task such that it gets into overlap with another demanding task — unless the shift key is pressed while dragging. Dragging to the left beyond the start of the project is possible if and only if the option key is down while dragging.
Whenever a change of a task would violate the project consistency conditions (1) or (3) listed above, then GanttMeister automatically moves other tasks away for keeping consistency.
The command Postpone Task moves the selected task as far into the future as it is possible without violating the constraints (1) or (3) or making the project end later.
Listview of SwiftUI.
… is available here, so you can check that the program does not try to raid your refrigerator.