42 — Menu & Routing Redesign¶
Created: April 6, 2026
Status: In Progress
Owner: Chad
Depends on: Bug 100 fix (commit95730f624), Bug 94 fix (commit40c3b7071)
DFMEA: DFMEA-036 (Menu/Routing), DFMEA-037 (Dialog State)
Context¶
The ConstructiVision pull-down menu and routing architecture date from 2001.
User testing after Bug 100 revealed UX confusion: two different “new project”
paths lead to different dialogs, the 14-button progopts.dcl wall duplicates
the menu, and there is no way to directly edit the currently open drawing.
This document records the evidence-based redesign plan, its implementation phases, au3 compatibility constraints, and verification criteria.
Design Authority Sources¶
Primary — UI/UX Best Practices¶
Tag |
Source |
Key Principles Applied |
|---|---|---|
[S1] |
NNGroup “Dropdowns: Design Guidelines” (Whitenton, 2020) |
Gray out unavailable options (#2), avoid very long dropdowns (#3), keep labels visible (#6) |
[S2] |
NNGroup “Menu-Design Checklist: 17 UX Guidelines” (Sherwin, 2019) |
Clear/specific/familiar wording (#7), front-load key terms (#8), avoid multilevel cascading (#14), Fitts’s law — most-used items closest (#16) |
Secondary — Autodesk/AutoCAD Domain¶
Tag |
Source |
Key Takeaway |
|---|---|---|
[S3] |
AU SD125181 / SD323181 (Darren Young, “Advanced AutoLISP”) |
Separate utility functions from command entry points |
[S4] |
AU DV1543 (Lee Ambrosius, “Going on a Bug Hunt”) |
Explicit error handlers, fail gracefully |
[S5] |
Autodesk App Store Product Guidelines v2.0 |
Rejection risk includes poor UX fit |
[S6] |
AfraLISP DCL Reference (afralisp.net) |
Community-standard DCL dialog conventions |
Constraints¶
Tag |
Constraint |
Impact |
|---|---|---|
[C1] |
au3 test fixture (IMMUTABLE — Rule 10) — tests 6 progcont values via |
Menu label changes safe; routing logic changes must preserve au3 expected dialogs |
[C2] |
AutoCAD 2000 DCL — no native tab control |
Settings dialog deferred to future phase |
[C3] |
VLX vs Source mode mismatch |
progcont routing must work in source-mode (TB11) |
Problems Addressed¶
# |
Problem |
Source Violated |
|---|---|---|
1 |
“Drawing Setup” and “Create New Project” lead to different dialogs for same “new” intent |
[S2] #7 |
2 |
|
[S1] #3, [S3] |
3 |
|
[S5] |
4 |
“Drawing Setup” on an open drawing forces file selection |
[S2] #16 |
5 |
No “Edit Current Drawing” — requires browsing even when drawing is open |
[S2] #16 |
6 |
Panel-centric: site drawings are second-class |
[S2] #7 |
7 |
Unavailable options not visually differentiated |
[S1] #2 |
Phase 1: Menu Restructure (csv.mnu)¶
Rationale: Per [S2] #16 (Fitts’s law) most-used items go first. Per [S2] #8 front-load action verbs. Per [S2] #14 avoid multilevel cascading. Per [S2] #7 use clear, specific, familiar wording.
New Menu Layout¶
ConstructiVision (POP1)
├── Edit Current Drawing progcont=1 ← most-used action, top position
│ [--]
├── New Drawing progcont=262161 ← clear verb, front-loaded
├── Open Drawing progcont=262145 ← renamed from "Edit Existing Drawing"
│ [--]
├── New Project progcont=262153 ← clear verb
├── Edit Project Details progcont=524289 ← NEW: was buried in progopts
│ [--]
├──→ View [->
│ All Layers progcont=262209
│ Select Layers progcont=262273
│ [--]
│ Panel/Site Faces (6 direct cmds)
│ [--]
│ Isometric Views (4 direct cmds)
│ ←]
│ [--]
├──→ Print [->
│ All Layers progcont=262465
│ Select Layouts progcont=262657
│ [--]
│ Print Specific Items (5 presets)
│ ←]
│ [--]
├──→ Shading [->
│ Off / Hidden / Shaded
│ ←]
│ [--]
├── Materials List progcont=263169
├── Revision History progcont=264193
│ [--]
├── Batch Utilities progcont=262177 ← less-used, positioned lower
├── Slope Calculator progcont=8193
│ [--]
├── Settings... ← future [C2: deferred]
│ [--]
├── Registration / Help / About / Web / Support
Label Changes¶
Old (Ambiguous) |
New (Clear Verb) |
Rationale |
|---|---|---|
Drawing Setup |
Edit Current Drawing |
Front-loaded verb; no ambiguous “setup” [S2] #8 |
Create New Project |
New Project |
Shorter, scans faster [S2] #7 |
Create New Drawing |
New Drawing |
Same |
Edit Existing Drawing |
Open Drawing |
Implies browse+open action |
(none) |
Edit Project Details |
New — was hidden inside progopts |
au3 Compatibility ([C1])¶
The au3 sets progcont via (progn (setq progcont N)(c:csv)), not via menu clicks. The 6 tested progcont values must continue to route correctly regardless of menu label changes. Menu restructure affects only the .mnu file — routing logic changes in csv.lsp are the constraint.
progcont=1 strategy (Option A): Keep backward-compatible — show progopts.dcl when no CV drawing is open (matching au3’s “Drawing1” baseline). Only skip progopts when a CV drawing IS open. au3 tests on Drawing1 → still sees progopts → PASS.
Phase 2: Routing Rewrite (csv.lsp)¶
Step 1: Edit Current Drawing (progcont=1) — Context-Aware¶
Design: Per [S2] #16, the most frequent action should be most accessible. Per [S4], fail gracefully when no valid drawing is open.
progcont=1 invoked
├─ IF csv_open_con set → route to panel/site editor (unchanged)
├─ IF in AutoCAD dir OR no CV drawing (Drawing1)
│ → Show progopts.dcl (backward compat with au3) [C1]
└─ IF CV drawing IS open (csv_dwgtype = "panel" or "site")
→ Route DIRECTLY to mp_dlg (panel) or sdwg_dlg (site)
→ Skip project.dcl and progopts.dcl entirely
Step 2: New Project (progcont=262153) — Stop-After-Create¶
Current: projdet.dcl → new() → auto-launch panel editor
New: projdet.dcl → new() → stop. Print “Project created. Use ‘New Drawing’ to start a drawing.”
Step 3: Edit Project Details (progcont=524289) — New Feature¶
Detect current project via
curdirIf valid: open
projdet.dclpre-populated with existing project valuesIf none: alert “No project loaded. Open a project drawing first.”
projdet.lspaccepts optional pre-populated values
Step 4: New Drawing (progcont=262161) — Panel/Site Prompt¶
Current: getfiled → template selection → panel workflow
New: Panel-vs-site chooser via (getkword) → getfiled → appropriate editor
Au3 impact [C1]: MEDIUM — adds command-line prompt before getfiled. Safe fallback: keep getfiled first.
Step 5: Settings (DEFERRED per [C2])¶
DCL has no native tab control. Deferred to separate planning session.
Phase 3: Dialog Retirement¶
Retired from default path (per [S5]):¶
project.dcl— “New or Existing?” gatekeeper. Menu items make this explicit. Keep file for backward compat.progopts.dcl/lsp— 14-button wall [S1] #3 violation. Retained ONLY as fallback for progcont=1 on Drawing1 (au3 compat).
No new DCL files in this phase¶
Panel-vs-site chooser uses command-line (getkword) per AutoCAD convention [S6].
Phase 4: Verification¶
Functional Tests¶
Test |
Expected Result |
|---|---|
Edit Current Drawing on Drawing1 (no CV data) |
|
Edit Current Drawing on open panel drawing |
|
Edit Current Drawing on open site drawing |
|
New Drawing |
Panel/Site prompt → |
Open Drawing |
|
New Project |
|
Edit Project Details on open project |
|
Edit Project Details with no project |
Alert message |
au3 Compatibility Matrix [C1]¶
au3 Test |
progcont |
Current Dialog |
After Redesign |
Risk |
|---|---|---|---|---|
02-drawing-setup |
1 |
project.dcl→progopts |
progopts (Drawing1) |
LOW |
03-slope-calculator |
8193 |
slope_dlg.dcl |
slope_dlg.dcl |
NONE |
04-create-new-project |
262153 |
projdet.dcl |
projdet.dcl |
NONE |
05-create-new-drawing |
262161 |
getfiled |
getfiled (prompt first?) |
MEDIUM |
06-edit-existing-drawing |
262145 |
getfiled |
getfiled |
NONE |
07-batch-utilities |
262177 |
btch_dlg.dcl |
btch_dlg.dcl |
NONE |
Regression Criteria¶
All 13 existing progcont values must continue to route correctly
New progcont value (524289 for Edit Project Details) is additive — no collision risk
Full au3 validation on VM 108 after implementation
OCR compare against golden baseline (Rule 15)
Implementation Order¶
Step |
Scope |
Risk |
Dependencies |
|---|---|---|---|
1 |
|
LOW |
None |
2 |
|
MEDIUM |
Step 1 |
3 |
|
LOW |
None |
4 |
|
LOW |
None |
5 |
|
MEDIUM [C1] |
None |
6 |
Full au3 validation on VM 108 + OCR |
— |
Steps 1–5 |
Steps 1–3 are sequential. Steps 4–5 can parallel. Step 6 blocks on all prior.
Files Modified¶
File |
Action |
|---|---|
|
Restructure layout, rename items, add Edit Project Details |
|
Context-aware progcont=1, new routes, stop-after-create |
|
Add pre-populate logic for Edit Project Details |
|
Synced from x64 |
|
Synced from x64 |
|
Synced from x64 |
Decisions¶
Decision |
Rationale |
Source |
|---|---|---|
Retire progopts from default routing |
Duplicates menu; 14-button wall is bad UX |
[S1] #3, [S3] |
Keep progopts as Drawing1 fallback |
au3 compat: progcont=1 on Drawing1 must show dialog |
[C1] |
Retire project.dcl from routing |
Menu items make New/Existing explicit; extra click adds no value |
[S5] |
Context-aware progcont=1 |
Most-used action should be most accessible |
[S2] #16 |
Defer Settings tab dialog |
DCL has no native tabs; simulation is complex |
[C2] |
Use (getkword) for Panel/Site |
Command-line prompts standard for binary choices in AutoCAD |
[S6] |
Front-load verbs in menu labels |
“Edit”, “New”, “Open” scan faster than “Create New…” |
[S2] #8 |