# MacProject Pro 1.5 interaction spec

What the original application does with menus, shortcuts, tools, mouse and keyboard, so the editor can behave the same and muscle memory carries over. It was read from the application's resources (menus, key tables, window layouts, cursors) and from its code; the menu tables give each item and its command key.

**Markers**

| Marker | Meaning |
|---|---|
| **[confirmed]** | Read directly from a resource, or seen in the running app earlier (file-format.md). |
| **[code]** | Read from the decompiled code (function addresses given). |
| **[guess]** | Inferred. Says from what. |

**Sources**

| Resource | What it holds |
|---|---|
| `MBAR`, `MENU` | Menus and items. |
| `mKey` | The app's own key table for its menu definition (`MDEF` 262), which carries modifiers. |
| `hmnu`, `hdlg`, `STR#` | Balloon Help. |
| `mntb` | Command number → menu item, including the "Buzzwords" undo names in `MENU` 128. |
| `view` | MacApp window layouts. |
| `CURS`, `SICN`, `cicn` | Cursors and icons. |
| `CODE` | Decompiled in the segments `CDoMouseCommand`, `CDoKeyCommand`, `CSchedule`, `CScheduleCommands`, `CChartObject`, `CRes`. |

## 1. Menu bar

The menu bar (`MBAR` 128) is, in order: Apple, **File, Edit, Chart, Layout, Task, Analyze, Organize, View**. **[confirmed]** The running app shows this order, with Help (the system Balloon Help menu) at the right. Hierarchical submenus come from `MBAR` 130.

### How shortcuts are encoded **[confirmed]**

- Main menus use a custom menu definition, `MDEF` 262. Each such menu has an `mKey` resource with one 6-byte entry per item:
  - 4 bytes, always 0;
  - a modifier byte (1 = ⌘, 3 = ⇧⌘);
  - the key.
- The `MENU` key bytes alone show duplicates (Close / Close Document both "W"). The `mKey` modifiers separate them.
- ⇧⌘A for Display Attributes was confirmed on screen in MacProject Pro itself.
- Submenus with the standard definition (Find, Arrange Charts…) take plain ⌘ from `MENU`.
- No item uses ⌥ or ⌃.

### Items whose text changes with context **[confirmed]**

These come from Balloon Help "compare" records and from `STR`. Each pair is one menu item whose title flips:

- **Edit ▸ Duplicate** (⌘D) depends on the active window or selection:
  - **Duplicate**: a Schedule Chart object.
  - **Insert Task**: a dependency line is selected.
  - **New Item**: Outline.
  - **New Task**: Project Table.
  - **New Resource**: Resource Table.
  - **New Allocation**: Allocation Table (`STR` 8704).
  - **New Dependency**: Dependency Table (`STR` 8705).
- **Task ▸ Change to Milestone ↔ Change to Task** (⌘M; `STR` 9007/9008).
- **Task ▸ Mark Completed ↔ Mark Uncompleted** (⌘K; sets 100% / 0% done).
- **Task ▸ Show Task Info ↔ Show Summary Info** (⌘T; `STR` 8601/8602).
- **Task ▸ Go to Subproject ↔ Go to Linked Task**: a supertask or a link marker.
- **Layout ▸ Clean Up Schedule ↔ Clean Up Selection**.
- **Layout ▸ Change to Note ↔ Change to Annotation** (`STR#` 3000).
- **Layout ▸ Show Notes ↔ Hide Notes** (`STR#` 3001).
- **Organize ▸ Move to Schedule Chart ↔ Remove From Schedule Chart**. Removing asks first: "Remove selected task(s) from the Schedule Chart? … You cannot undo this action." (`STR#` 8902 #10).
- **Analyze ▸ Baseline All ↔ Baseline Selection**.
- **View ▸ Show/Hide Tools Palette, Task Palette, Cue Card**.
- **View ▸ Fit to Window ↔ Actual Size** (`STR` 9009/9010).
- **Edit ▸ Show Clipboard ↔ Hide Clipboard**.
- **Undo** reads "Undo <action>" or "Redo <action>" (`STR#` 250). The action names are the Buzzwords list in §7.

### Menu tables

#### Apple (`MENU` 1)

| # | Item | Shortcut |
|---|---|---|
| 1 | About MacProject Pro… |  |
| 2 | Help... | ⌘? (⌘/) |
| 3 | — | |

#### File (`MENU` 2)

| # | Item | Shortcut |
|---|---|---|
| 1 | New | ⌘N |
| 2 | Open… | ⌘O |
| 3 | Close | ⌘W |
| 4 | Close Document | ⇧⌘W |
| 5 | Save | ⌘S |
| 6 | Save As… | ⇧⌘S |
| 7 | Revert to Saved |  |
| 8 | Documents ▸ submenu 21 |  |
| 9 | — | |
| 10 | Import... |  |
| 11 | Export... |  |
| 12 | Exchange ▸ submenu 22 |  |
| 13 | Extensions ▸ submenu 25 |  |
| 14 | — | |
| 15 | Page Setup… | ⇧⌘P |
| 16 | Print Preview... |  |
| 17 | Print… | ⌘P |
| 18 | — | |
| 19 | Quit | ⌘Q |

#### Edit (`MENU` 3)

| # | Item | Shortcut |
|---|---|---|
| 1 | Undo | ⌘Z |
| 2 | — | |
| 3 | Cut | ⌘X |
| 4 | Copy | ⌘C |
| 5 | Paste | ⌘V |
| 6 | Clear |  |
| 7 | Duplicate | ⌘D |
| 8 | Select All | ⌘A |
| 9 | — | |
| 10 | Publishing ▸ submenu 12 |  |
| 11 | — | |
| 12 | Spelling ▸ submenu 10 |  |
| 13 | Find ▸ submenu 20 |  |
| 14 | — | |
| 15 | Preferences... |  |
| 16 | Show Clipboard |  |

#### Chart (`MENU` 4)

| # | Item | Shortcut |
|---|---|---|
| 1 | Outline |  |
| 2 | — | |
| 3 | Schedule Chart |  |
| 4 | Task Timeline |  |
| 5 | Project Table |  |
| 6 | — | |
| 7 | Resource Timeline |  |
| 8 | Resource Table |  |
| 9 | Resource Histogram |  |
| 10 | Allocation Table |  |
| 11 | — | |
| 12 | Cash Flow Table |  |
| 13 | Dependency Table |  |
| 14 | Project Overview |  |

#### Layout (`MENU` 5)

| # | Item | Shortcut |
|---|---|---|
| 1 | Use Autogrid |  |
| 2 | Clean Up Schedule |  |
| 3 | Schedule Chart Size... |  |
| 4 | Display Attributes... | ⇧⌘A |
| 5 | — | |
| 6 | Attributes... |  |
| 7 | Column Setup... |  |
| 8 | Timeline Setup... | ⌘U |
| 9 | Timeline Bars ▸ submenu 15 |  |
| 10 | — | |
| 11 | Change to Legend |  |
| 12 | Change to Note |  |
| 13 | Show/Hide Notes |  |
| 14 | — | |
| 15 | Font ▸ submenu 11 |  |
| 16 | Size ▸ submenu 13 |  |
| 17 | Style ▸ submenu 14 |  |
| 18 | Color ▸ submenu 18 |  |

#### Task (`MENU` 9)

| # | Item | Shortcut |
|---|---|---|
| 1 | Change to Milestone | ⌘M |
| 2 | Show Task Info... | ⌘T |
| 3 | Mark Completed | ⌘K |
| 4 | — | |
| 5 | Link to Subproject... | ⇧⌘L |
| 6 | Go to Subproject |  |
| 7 | Go to Supertask |  |
| 8 | Link to Task ... |  |
| 9 | — | |
| 10 | Attach Document... |  |
| 11 | Attach Note |  |
| 12 | — | |
| 13 | Lag Time... |  |

#### Analyze (`MENU` 6)

| # | Item | Shortcut |
|---|---|---|
| 1 | AutoCalc |  |
| 2 | Calculate Now | ⌘= |
| 3 | Calculate Using Planned |  |
| 4 | Calculate Using Actual |  |
| 5 | — | |
| 6 | Consolidate Project Family |  |
| 7 | Get Master Project Dates |  |
| 8 | — | |
| 9 | Show Calendar Info... | ⌘E |
| 10 | Duration Scale... | ⇧⌘D |
| 11 | — | |
| 12 | Resources... | ⌘R |
| 13 | Resource Scope... |  |
| 14 | Level Resources | ⌘L |
| 15 | Unlevel Resources |  |
| 16 | View Leveler Results |  |
| 17 | — | |
| 18 | Baseline All |  |

#### Organize (`MENU` 7)

| # | Item | Shortcut |
|---|---|---|
| 1 | Move to Task Palette | ⌘I |
| 2 | Move to Schedule Chart | ⇧⌘M |
| 3 | Make Custom Summary... |  |
| 4 | Make Outline Summary | ⇧⌘E |
| 5 | — | |
| 6 | Sort... | ⌘J |
| 7 | Sort Again | ⇧⌘J |
| 8 | — | |
| 9 | Search... | ⇧⌘F |
| 10 | Search Again | ⇧⌘H |
| 11 | Show All |  |

#### View (`MENU` 8)

| # | Item | Shortcut |
|---|---|---|
| 1 | Show Tool Palette | ⌘- |
| 2 | Show Task Palette | ⌘[ |
| 3 | Show Cue Card | ⌘] |
| 4 | — | |
| 5 | Arrange Charts ▸ submenu 23 |  |
| 6 | Fit to Window | ⇧⌘R |
| 7 | — | |
| 8 | Perspectives... |  |

### Submenus

#### Find (`MENU` 20)

| # | Item | Shortcut |
|---|---|---|
| 1 | Find... | ⌘F |
| 2 | Go To First | ⌘G |
| 3 | Find Next | ⌘H |

#### Spelling (`MENU` 10)

| # | Item | Shortcut |
|---|---|---|
| 1 | Check All… | ⌘Y |
| 2 | Check Selection… |  |
| 3 | — | |
| 4 | Spell Word… | ⇧⌘Y |
| 5 | Options… |  |
| 6 | — | |
| 7 | Install Dictionaries… |  |
| 8 | Edit User Dictionary… |  |

#### Publishing (`MENU` 12)

| # | Item | Shortcut |
|---|---|---|
| 1 | Create Publisher... |  |
| 2 | Subscribe To... |  |
| 3 | — | |
| 4 | Publisher Options... |  |
| 5 | Edition List... |  |
| 6 | — | |
| 7 | Suspend Edition Updates |  |
| 8 | Show Borders |  |

#### Size (`MENU` 13)

| # | Item | Shortcut |
|---|---|---|
| 1 | 9 Point |  |
| 2 | 10 Point |  |
| 3 | 12 Point |  |
| 4 | 14 Point |  |
| 5 | 18 Point |  |
| 6 | 24 Point |  |
| 7 | 36 Point |  |
| 8 | — | |
| 9 | Other… | ⇧⌘O |

#### Style (`MENU` 14)

| # | Item | Shortcut |
|---|---|---|
| 1 | Plain Text | ⇧⌘T |
| 2 | Bold | ⇧⌘B |
| 3 | Italic | ⇧⌘I |
| 4 | Underline | ⇧⌘U |
| 5 | Outline |  |
| 6 | Shadow |  |
| 7 | Condensed |  |
| 8 | Extended |  |

#### Shapes (`MENU` 15)

| # | Item | Shortcut |
|---|---|---|
| 1 | Bar Formats... |  |
| 2 | — | |

#### Arrange Charts (`MENU` 23)

| # | Item | Shortcut |
|---|---|---|
| 1 | Tile Across |  |
| 2 | Tile Down |  |
| 3 | Stack |  |
| 4 | Tile Special |  |
| 5 | — | |
| 6 | Current Document Only |  |

#### Exchange (`MENU` 22)

| # | Item | Shortcut |
|---|---|---|
| 1 | — | |
| 2 | Exchange Setup... |  |

### Shortcut collisions with macOS 27 (for the main session to decide)

| Key | MacProject Pro | macOS convention |
|---|---|---|
| ⌘H | Edit ▸ Find ▸ Find Next | Hide app |
| ⌘M | Task ▸ Change to Milestone | Minimize window |
| ⌘- | Show/Hide Tools Palette | Zoom out (MacProject zooms with the window's zoom icons) |
| ⌘= | Calculate Now | Zoom in |
| ⌘[ / ⌘] | Task Palette / Cue Card | Back / Forward |
| ⌘T | Show Task Info | Show Fonts |
| ⌘D | Duplicate / New … | — (same meaning) |
| ⌘E | Show Calendar Info | Use Selection for Find |
| ⌘L | Level Resources | — |
| ⌘K | Mark Completed | — |
| ⌘J | Sort… | — |
| ⌘R | Resources… | — |
| ⌘U | Timeline Setup | Underline |
| ⌘I | Move to Task Palette | Italic |
| ⌘B | — (Bold is ⇧⌘B) | Bold |
| ⌘G | Find ▸ Go To First | Find Next |
| ⌘Y | Spelling ▸ Check All | — |

MacProject uses ⇧⌘ for text styles (⇧⌘B/I/U/T) precisely because ⌘I/⌘U/⌘T are taken. Muscle memory wants ⌘M, ⌘T, ⌘K, ⌘D, ⌘E, ⌘L, ⌘R, ⌘J, ⌘= and ⇧⌘A as listed. Only ⌘H and ⌘M collide with system-wide items, and an app may rebind both by changing its own Hide and Minimize items.

## 2. Tools palette (View ▸ Show Tools Palette, ⌘-) **[confirmed]**

The palette (`view` 9003 "Tool Palette", class `TToolPalette`) is a floating window of **command buttons, not drawing tools**: 18 buttons of 21 × 21 px in 3 columns and 6 rows. Each button has a normal and a pressed `cicn` (12500–12535, named in the resource). The Balloon Help (`hdlg` 1010 → `STR#` 27001) says what each button does and when it's available.

| Row | Left (h 3) | Middle (h 26) | Right (h 49) |
|---|---|---|---|
| 1 (v 2) | **Outline** (`outl`): makes the Outline active | **Schedule Chart** (`pert`): makes the Schedule Chart active | **Task Timeline** (`tmln`) |
| 2 (v 25) | **Task Info** (`info`): opens Task Info for the selected task; available with a task selected | **Calendars** (`cale`): opens the Calendar Info window | **Column Setup** (`coln`): tables only |
| 3 (v 48) | **Sort** (`sort`): Sort dialog; not in Project Overview | **Search** (`sear`): Search dialog, to show, hide or select tasks | **Find** (`find`): Find dialog, to locate a task |
| 4 (v 71) | **Calculate** (`calc`): recalculates schedule and budget | **Level Resources** (`levl`) | **Create Perspective** (`pers`) |
| 5 (v 94) | **Save** (`save`) | **Print** (`prnt`) | **Print Preview** (`prev`) |
| 6 | **Fit to Window** (`fitw`): toggles with Actual Size | **Tile Down** (`tldn`) | **Tile Across** (`tlac`) |

Each button is the same command as its menu item:

| Button | Command | Menu item |
|---|---|---|
| Task Info | 1068 | Task ▸ Show Task Info |
| Calendars | 1043 | Analyze ▸ Show Calendar Info |
| Column Setup | 1080 | Layout ▸ Column Setup |
| Sort | 1058 | Organize ▸ Sort |
| Search | 1060 | Organize ▸ Search |
| Find | 1055 | Edit ▸ Find ▸ Find |
| Calculate | 1038 | Analyze ▸ Calculate Now |
| Level Resources | 1046 | Analyze ▸ Level Resources |
| Create Perspective | 1064 | View ▸ Perspectives |
| Save | 30 | File ▸ Save |
| Print | 178 | File ▸ Print |
| Print Preview | 194 | File ▸ Print Preview |
| Fit to Window | 1023 | View ▸ Fit to Window |
| Tile Down, Tile Across | 1123… | View ▸ Arrange Charts |

**[confirmed]** for the commands and menu items that Balloon Help names. The ID-to-command pairing is a **[guess]**: it follows from the ID order matching the menu order.

### Other floating windows **[confirmed]**

These come from Balloon Help (`STR#` 27000).

- **Task palette** (⌘[): holds Outline items that aren't on the Schedule Chart yet; dragging one onto the chart schedules it as a task.
  - Organize ▸ Move to Task Palette (⌘I) sends Outline items there.
  - The Drag Item cursor is `CURS` 9002.
- **Cue card** (⌘]): a list of the project's resource and calendar names for filling in fields; it stays empty until a field that takes one of those names is active. Clicking a name enters it in the active cell **[guess]**.

## 3. Window controls

### Every chart window, bottom-left **[confirmed]**

These come from `hdlg` 1000 → `STR#` 27000.

- **Zoom-in icon**: enlarges, up to 400%.
- **Zoom-out icon**: reduces, down to 3%.
- **Zoom percentage box**:
  - Click once to toggle between 100% and the most recently used zoom factor.
  - Double-click for the "View (%)" dialog (`view` 5000), which sets a custom zoom between 3% and 400%.
- **Fit to Window / Actual Size** (⇧⌘R). The page icon toggles: one click shrinks the chart to fit the window, the next returns it to actual size.

### Outline window palette (`view` 1002, `TTblOutlinePallete`) **[confirmed]**

Left to right:

- **◁ Left arrow (Move Left)**: promotes the selected item, with everything under it, one level up the hierarchy. Not available when the item isn't a descendant.
- **▷ Right arrow (Move Right)**: moves the item right, one level deeper. Not available for the first item, or the first child of its parent.
- **▽ Down arrow (Move Down)**: "appears below the item following it at the same level."
- **△ Up arrow (Move Up)**: "appears above the item preceding it at the same level." If the item is a descendant, it moves closer to its parent.
- **Level: [name]**: shows the selected item's level name.
- **Level pop-up** (`MENU` 8001: 1 Overview, 2 Objective, 3 Task, 4 Detail): shows a parent's children down to the chosen level and hides the rest. Its help mentions acting on the whole Outline with a modifier key but the text is cut off; most likely ⌥ **[guess]**.
- **Embedded text icon**: opens an item for a note of embedded text, and shows or hides that text; with ⌥ it does so for the whole Outline.

The undo names are "Move Left / Move Right / Move Up / Move Down" (commands 1910–1913) and "Drag Item" (1914): rows can be dragged to reorder **[confirmed]** (by the undo name).

### Calendar Info window (⌘E; `view` 14000) **[confirmed]**

- A **calendar pop-up** picks the calendar.
- A **weekday list**: click a day, or Shift-click for several.
- **A clock**: shaded segments are the working time of the selected days; choose days, then drag around the clock to set their hours. Hours are half-hour slots.
- **A month grid**: shaded dates are working days; clicking a date (a holiday, say) takes it out for that month and year. It has a month pop-up and year up/down arrows.
- **Calendar Options** button: add, delete or rename calendars; save one as a separate document, or link one.
- **Undo** button: discards the changes made since the last Enter, the last switch of calendar, or opening the window.
- Rule: "You must work at least one half hour on at least one work day."

## 4. Mouse gestures: Schedule Chart **[code]**

The Schedule Chart's `DoMouseCommand` is `CDoMouseCommand_3f90` @ 0x81b94.

### Modifier flags **[guess]**

The event record passed in has boolean modifier flags at +5, +6 and +8, and the click count at +0x10 **[code]**. They map as **+5 = ⌘, +6 = ⇧, +8 = ⌥**. This is a guess, from:

- the toolbox modifier bit order (cmd 8, shift 9, alphaLock 10, option 11);
- the Option-key `BitTst` below, which the New Task command mirrors from +8;
- Shift being re-checked when a marquee ends.

A second, confirmed point: the code reads the keyboard directly, with `GetKeys` + `BitTst`.

- `BitTst` 61 = key code 0x3A = **Option** **[code, confirmed constant]**.
- `BitTst` 63 = key code 0x38 = **Shift**.

### Hit testing **[code]**

`CDoMouseCommand_3d38` @ 0x8193c and `FUN_000815cc` test in this order:

1. notes in the front layer;
2. the box whose name is being edited;
3. dependency lines, within about 5–6 px of the line (part 1);
4. the other chart objects, by layer.

A chart object's hit test (`CChartObject` @ 0xf6b00…) returns:

| Part | Where | Note |
|---|---|---|
| 2 | Inside the inner rectangle | The name/text area. |
| 1 | The border band between the inner and outer rectangles | |
| 3–6 | The four corner handles | Live only when the object is already selected; then a single click resizes. |
| 12 | A 12 × 12 icon rectangle | Probably a collapsed note or note icon **[guess]**. |

### Gestures

| Gesture | Result | Evidence |
|---|---|---|
| **Drag in empty space** | Draws a **new task box**: a grey XOR rubber-band rectangle, `PenMode` 10. On release, a task with exactly that rectangle is created if it's at least **30 × 20 px**. A plain click or smaller drag creates nothing and **deselects all**. Undo "New Task". | `CScheduleCommands_3e88` → TNewTaskCommand I-method `FUN_000ceb84`; track/feedback `_4028`, `_4114`; DoIt `_41bc` (size check `>0x1d`, `>0x13`) **[code]** |
| **Hold ⌥ while drawing** | The rubber band becomes a rounded rectangle (20 × 20 corners) and the result is a **milestone**. The key is read live during the drag. | `BitTst` 61 in `_4028`; `Main_17b4(0x108)` milestone object in `_41bc` **[code]** |
| **⇧-drag in empty space** | **Selection rectangle**. Objects entirely inside are selected. If ⇧ is still down at release, the selection is extended; otherwise it's replaced. | `CScheduleCommands_3cd0` → `FUN_000d13e8`; `_6a9c` (`BitTst` 63, then select objects inside) **[code]**; the ⇧ mapping **[guess]** |
| **Click inside a task box** (part 2) | Selects it and puts an insertion point in its **name** (in-place editing). | `CScheduleCommands_3da4` → `CTextEdit_2e90` **[code]** |
| **Drag from inside a task box out past its edge** (more than 4 px outside) | Becomes a **dependency drag**: a rubber line follows the mouse. **Release on another task**: a dependency (finish-to-start). **Release in empty space**: a **new task is created there and linked** from the first; with ⌥ held it's a milestone. Undo "Dependent Task". | `CRes_2a60` (`PtInRect` against the box inset −4; creates command 11002) → `CScheduleCommands_435c` I-method, DoIt `_4970` (`BitTst` 61, `CConstruct_1bc8` new task, `CConstruct_09a8` new dependency) **[code]** |
| **Drag a task's border** (part 1) | **Moves** the selected boxes. Undo "Move" (1904). | `CScheduleCommands_3d0c` → `FUN_000cfde8` (command 1904) **[code]** |
| **⌥-click or ⌥-drag on a box** (any part) | Selects and **moves without entering text editing**: the interior also moves. | the +8 branch in `_3f90` sends parts 1, 2 and 12 to Move **[code]**; ⌥ **[guess]** |
| **Drag a corner handle of a selected box** | **Resize**. Undo "Resize" (1905). | `CScheduleCommands_3d54` → `FUN_000d06a4` **[code]** |
| **Double-click a task** | **Task Info**. | `CTaskInfo_00f0` **[code]** |
| **⌘-double-click a supertask** | **Go to Subproject** (opens the subproject). | the +5 branch; `CScheduleCommands_3ed4` → `CProjectCommands_06cc` **[code]**; ⌘ **[guess]** |
| **⌘-double-click an external (linked) task** | Go to Linked Task. | `CScheduleCommands_3f14` **[code]** |
| **Double-click a dependency line** | **Lag Time** dialog. | `CLagDlg_0670` **[code]** |
| **Double-click a legend** | **Display Attributes** dialog. | `CShowAttributesDlg_0000` (note +0x34) **[code]** |
| **Double-click note text** | Edits the note text (sticky/attached notes). | `CEditCommands_0c5c` / `CSelectCommands_1fa0` **[code]**; exact branch **[guess]** |
| **Click a dependency line** | Selects it. Then **⌘D = Insert Task** puts a new task between the two (Balloon Help). | **[code]** + **[confirmed]** |
| **Arrow keys** (no ⌥) with chart objects selected | **Nudge 1 px** (←→ horizontal, ↑↓ vertical). Undo "Move". | `CDoKeyCommand_0138`: char 0x1C/0x1D/0x1E/0x1F → `CScheduleCommands_0580` (dx/dy ±1) **[code]** |
| **Shift-click a box** | Adds to or removes from the selection. | **[guess]**: standard MacApp; the selection helper `CSchedule_167c` is called without deselecting |
| **Autogrid** (Layout ▸ Use Autogrid) | Snaps moves and new boxes to a 10 px grid. | the dependency command rounds positions down to multiples of 10 (`_435c`) **[code]**; grid spacing (10, 10) is in `dcst` +0x208 (NOTES) |

Other details:

- The Dependency **Lag Time** dialog (`view` 22000): Dependency radio buttons **Finish to Start, Start to Start, Finish to Finish**; **Time** (number) and its units; a **Calendar** pop-up. There is no Start to Finish **[confirmed]**.
- Constraint icons are drawn next to dates when "Date and duration icons" is on: `SICN` 257–264 (Start On, SNET, SNLT, Finish On, FNLT, FNET, ES, LF). An attached note shows `SICN` 3000 "StickyNote" (a page with a turned bottom-left corner). The shapes are **[confirmed]**; the ASCII renderings are in the regeneration output.

## 5. Mouse gestures: Task Timeline **[code]**

The handler is `CDoMouseCommand_6730` @ 0x84334, plus `CTimelineCommands`.

| Gesture | Result | Evidence |
|---|---|---|
| **⌥-drag a bar** | **Bar Move**: reschedules the task. Undo "Bar Move" (1918). | +8 → command 0x77e **[code]**; ⌥ **[guess]** |
| **Drag a bar's end handle** (part 11) | **Bar Resize** (duration) or **Percent Done Changes** (dragging the %-done marker). | `CTimelineCommands_0bb4`; commands 1919 and 1920 are both set up in `CTimelineCommands` +0xbd6 **[code]**; which handle does which **[guess]** |
| **⌘-double-click a row** | Go to Subproject. | +5 and click count 2 → `CProjectCommands_06cc` **[code]** |
| **Click or double-click a row** | Select; double-click opens Task Info. | `CTimelineCommands_1700(…, clickCount)` **[code]**; Task Info **[guess]** |

## 6. Tables and Outline

| Gesture | Result | Evidence |
|---|---|---|
| ⌘D | New Task, Item, Resource, Allocation or Dependency below the selected row, or at the bottom if nothing is selected. | Balloon Help **[confirmed]** |
| Drag a column header edge | Column Resize. | `CURS` 8200/8203 "Column Resizer"; undo 1901 **[confirmed]** |
| Drag a column header | Column Move. | `CURS` 8204; undo 1903 **[confirmed]** |
| Drag a row edge | Row Resize. | `CURS` 8300/8301; undo 1902 **[confirmed]** |
| Click a collapsed column | Uncollapses it. | `CURS` 8201 "ColUncollapseCursor"; `SICN` 8402 **[confirmed]** |
| Click a toggle cell | Toggles a yes/no attribute. | `CURS` 8700 "Toggle cursor", a checkmark; `SICN` 8700 "Toggle icons" **[confirmed]**; which cells **[guess]**: yes/no fields such as Critical |
| Return in a cell | Commits the entry; the default MacApp handling. | `CDoKeyCommand_0138`/`GRes_0f18` **[code]**; moves to the next row **[guess]** |
| Tab / ⇧Tab | Next / previous cell. | **[guess]**: standard MacApp table behaviour |
| Typing a resource or calendar name that doesn't exist | Asks "Create a new resource '^0'?". An empty name asks "No resource name was entered. Delete the resource/allocation?". | `STR#` 8902 **[confirmed]** |
| Resource allocated twice | "The resource '^0' can only be allocated to the task once." | `STR#` 8902 **[confirmed]** |
| Task IDs | "Task IDs must be unique." | `STR#` 8902 **[confirmed]** |

## 7. Keyboard (outside menus)

- **Arrow keys**: nudge Schedule Chart objects 1 px **[code]**. In text, they move the insertion point (TextEdit).
- **Return**: in tables, commits the cell **[code]**. ⌥-Return in the Schedule Chart's box text inserts a line break (box names hold carriage returns; samples have multi-line names) **[guess]**.
- **Delete/Backspace**: in text, deletes characters. With chart objects selected it's Edit ▸ Clear **[guess]**: Clear has no menu key, and backspace (char 8) is routed to the selection in `CDoKeyCommand_0138` together with the arrows.
- **Command-period** cancels long operations; standard Mac **[guess]**.
- Undo action names (Buzzwords, `MENU` 128) **[confirmed]**, to show as "Undo <name>": Page Setup Change, Move, Resize, Text Change, Font Type, Color, Font Style, Text Justify, Note Color, Change Type, Editing, Typing, Clear, Change to Milestone, Change to Task, Clean Up Schedule, Clean Up Selection, Baseline All, Baseline Selection, Calendar Changes, Column Resize, Row Resize, Column Move, Move, Resize, Mark Completed, Mark Uncompleted, New Task, New Resource, New Item, Duplicate, Insert Task, Move Left, Move Right, Move Up, Move Down, Drag Item, Task Info Changes, Summary Info Changes, Go to Subproject, Go to Linked Task, Dependent Task, Bar Move, Bar Resize, Percent Done Changes.

## 8. Task Info window (⌘T, double-click a task)

The window is `view` 8900, `TTaskInfoWindow`: a scroller around `view` 7778 "TaskInfoGuts", or 7777 "SummaryInfoGuts" for summaries. The labels are attribute names filled in at run time, so the resources don't hold them. The field list comes from checking MacProject Pro itself (file-format.md) (2026-10-17) **[confirmed]**; the grouping comes from the view tree **[confirmed]**. The guts are three collapsible sections (`TTaskInfoExpandView`).

**Section 1, task.** Static label and pop-up, then:

1. **Task Duration** (edit) with the unit (Weeks or Days…);
2. **Calendar Name** (pop-up `MENU` 8901);
3. **% Done** (edit);
4. a **resource grid**, editable cells: Resource, Work, Number, % Effort, Duration;
5. **Leveling Priority** (edit), labelled "(100 = Highest, 0 = Do Not Level)";
6. **Outline Number** (static).

**Section 2, schedule.**

- Earliest/Latest Start and Finish and slack (static).
- **Start constraint**: a date field plus a pop-up (`MENU` 9000: Start On, Start No Earlier Than, Start No Later Than, Early Start). Each has its small icon (`SICN` 257, 258, 259, 263).
- **Finish constraint**: a date plus a pop-up (`MENU` 9001: Finish On, Finish No Earlier Than, Finish No Later Than, Late Finish; `SICN` 260, 262, 261, 264).
- **Actual Start / Actual Finish**: edits with "S icons", `TTaskInfoSIcon`.
- **Costs**: Fixed Cost, Fixed Income, Actual Cost, Actual Income (edits).

**Section 3, custom fields.** An attribute pop-up plus a value edit.

- Edits are applied as "Task Info Changes" (undoable; command 1915).
- **Summary Info** shows Summary Name (edit), Search Formula (pop-up of saved searches) and 18 static rolled-up values, plus Custom Fields.
- Warning shown when the task duration changes (`STR#` 28000 #9): "Changing the task duration will not change the durations of any resources for that task."

## 9. Dialogs worth mirroring **[confirmed]**

| Dialog | View | Contents |
|---|---|---|
| Display Attributes (⇧⌘A) | 6000 | A sample box labelled "Task Name". "Select a corner, then choose an item to be displayed." The corner slots are in file-format.md. |
| Duration Scale (⇧⌘D) | 18000 | Radio buttons Minute, Hour, Day, Week, Month. |
| Lag Time | 22000 | See §4. |
| Link to Task | 23000 | Projects list, Tasks list, a Link button. "Task '^0' in the document '^1' is the starting task. Select the dependent task." (`TEXT` 23001) |
| Preferences | 3400–3408 | Panels: Document, Critical Path, Resources, Formats, Number Formats, Clean Up, Time (Timeline), Outline. |
| Timeline Setup (⌘U) | 2002 | — |
| Bar Formats | 2003, 2004 | — |
| Sort | 4002 | — |
| Search | 4003, 4004 | — |
| Column Setup | 8700 | — |
| Perspectives | 4000–4005 | — |
| Print Preview | 9152 | — |

---
Source: https://msitarzewski.github.io/GlassProject/behavior.html · MacProject Pro 1.5's menus, command keys, gestures and dialogs, which Glass Project follows.
