project.dcl — Project Selection Dialog

File: project.dcl
Version: v3.60
Category: Dialog Definitions
Size: 0.9 KB (27 lines)

Note

Project Navigation

Simple but critical dialog - determines whether user creates new project or opens existing one. Gateway to all ConstructiVision work.


Functional Purpose

What This Dialog Does

Project Workflow Selector

The project.dcl provides the project choice interface:

  1. Prompts user decision - New or Existing project

  2. Routes to appropriate workflow - new.dcl or file browser

  3. Validates project selection before proceeding

  4. Manages project context for entire session

User Need

Project Access Gateway

Users need clear decision point:

  • Create brand new project

  • Open existing project to continue work

  • Cancel if launched accidentally

Typical Workflow

Application Startup:

1. User launches ConstructiVision (CSV.lsp)
2. project.dcl opens (first dialog shown)
3. User sees prompt: "New Project or Existing Project?"
4. User choice:
   Option A: [New Project] ? new.dcl ? create structure
   Option B: [Existing Project] ? file browser ? open project
   Option C: [Cancel] ? exit to AutoCAD
5. Project loaded ? Main menu (csvmenu) appears

Dialog Structure

Visual Layout

?? ConstructiVision -- Project Options ???????????????
?                                                     ?
? Do you want to start a New Project, or work on    ?
? an Existing Project?                               ?
?                                                     ?
?  [New Project]  [Existing Project]  [Cancel] [Help]?
?                                                     ?
???????????????????????????????????????????????????????

Simple 4-button interface - intentionally minimal for quick decision


Control Semantics

Button Controls (4 total)

New Project:

  • new - Create new project button

  • Action: Set pnl = "new", close dialog

  • Routes to: new.dcl (new project dialog)

  • Effect: Project creation workflow

Existing Project:

  • old - Open existing project button

  • Default button (Enter key activates)

  • Action: Set pnl = "old", close dialog

  • Routes to: File browser ? select project directory

  • Effect: Load existing project data

Cancel:

  • cancel - Abort operation button

  • Action: Set ld = nil, pnl = "cancel", close

  • Effect: Return to AutoCAD without project

Help:

  • help - Show project help button

  • Action: Display project selection instructions


Integration with ConstructiVision

LSP Handler

Primary Handler: project.lsp

Key Logic:

(defun c:PROJECT ()
  ; Load project dialog
  (load_dialog "project.dcl")
  (new_dialog "project" dcl_id)
  
  ; Dialog returns pnl variable
  (start_dialog)
  (unload_dialog dcl_id)
  
  ; Route based on selection
  (cond
    ((= pnl "new")
      (new)  ; Call new.lsp - create project
    )
    ((= pnl "old")
      (open-existing-project)  ; File browser
    )
    ((= pnl "cancel")
      (princ "\nCancelled.")
    )
  )
)

(defun open-existing-project ()
  ; Show directory selection
  (setq pjdir (getfiled "Select Project Directory" "" "dwg" 16))
  (if pjdir
    (load-project pjdir)
  )
)

Integration Features:

  • ? Simple routing logic

  • ? Variable setting via actions

  • ? Default button (Existing Project most common)

  • ? Cancel safety mechanism

Called By

Primary Callers:

  • csv.lsp - Application startup (automatic)

  • csvmenu.lsp - File ? Switch Project

  • Direct command: PROJECT

Workflow Position:

ConstructiVision Launch (csv.lsp)
  ?
project.dcl (Project Selection) ? YOU ARE HERE
  ?? [New] ? new.dcl ? Create project
  ?? [Existing] ? File browser ? Load project
  ?? [Cancel] ? Return to AutoCAD

Global Variables

Variables Set by Dialog Actions:

New Project Selected:

(set 'pnl "new")  ; Flag for new project

Existing Project Selected:

(set 'pnl "old")  ; Flag for existing project

Cancelled:

(set 'ld nil)     ; Clear load flag
(set 'pnl "cancel")  ; Cancel flag

Subsequent Variables (after routing):

  • pjname - Project name (from selected directory)

  • curdir - Project directory path

  • project-active - Flag indicating project loaded

Data Flow

CSV.lsp launches
  ?
project.dcl opens
  ?
User clicks button
  ?
Button action sets pnl variable
  ?
Dialog closes (done_dialog)
  ?
project.lsp evaluates pnl:
  • "new" ? new.lsp
  • "old" ? file browser
  • "cancel" ? exit
  ?
Project loaded or created
  ?
csvmenu.lsp (main menu) activates

User Interaction Examples

Example 1: First Time User - New Project

Scenario: New user starting from scratch

1. User: Launches ConstructiVision
2. project.dcl: Opens automatically
3. Dialog: "New Project or Existing Project?"
4. User: Clicks [New Project]
5. System: Routes to new.dcl
6. User: Enters project name "First_Project"
7. System: Creates project structure
8. Result: Ready to create panels

Example 2: Returning User - Existing Project

Scenario: Continue work on yesterday’s project

1. User: Launches ConstructiVision
2. project.dcl: Opens
3. User: Clicks [Existing Project] (or just hits Enter - it's default)
4. System: Opens file browser
5. User: Navigates to C:\Projects\ABC_Building\
6. User: Selects project directory
7. System: Loads:
   • Project settings
   • Panel list
   • Weld connections
   • Defaults
8. Result: Project ready, panels accessible

Example 3: Accidental Launch - Cancel

Scenario: User opened ConstructiVision by accident

1. User: Accidentally runs CSV command
2. project.dcl: Opens
3. User: Realizes mistake
4. User: Clicks [Cancel]
5. System: Sets pnl="cancel", ld=nil
6. System: Returns to normal AutoCAD
7. Result: No project loaded, no changes

Special Features

Default Button Logic

Why “Existing Project” is default:

  • Most common use case (80%+ of launches)

  • Users typically work on same project multiple times

  • Hitting Enter immediately opens file browser

  • Faster workflow for daily users

Design Decision:

:button{
  key = "old";
  label = "Existing Project";
  is_default = true;  ? Enter key activates this
  ...
}

Button Actions (Inline LISP)

Immediate execution in DCL:

action = "(set 'pnl \"new\")(done_dialog)";

Benefits:

  • No separate action_tile needed

  • Faster execution

  • Simpler code

Pattern:

  1. Set variable (set 'pnl)

  2. Close dialog (done_dialog)

  3. Handler evaluates variable

Cancel Safety

Multiple cancel mechanisms:

:button{
  key = "cancel";
  is_cancel = true;  ? ESC key activates
  action = "(set 'ld nil)(set 'pnl \"cancel\")(done_dialog)";
}

Ensures:

  • ESC key works

  • Explicit cancel button

  • Both set proper flags

  • Safe return to AutoCAD



Design Philosophy

Simplicity is Key

Why so simple?

  • Critical decision point

  • Should not overwhelm user

  • Clear binary choice

  • Fast for experts

  • Obvious for beginners

Two Paths Forward

The dialog’s only job:

Question: "Which path?"
  ?? Path A: Create something new
  ?? Path B: Continue existing work

No complexity:

  • No options

  • No configuration

  • No confusion

  • Just a decision


Architectural Role

Position in Application

Application Launch
  ?
project.dcl (THE GATEWAY) ? YOU ARE HERE
  ??? New Project Path
  ?     ?
  ?   new.dcl ? Project Creation
  ?
  ??? Existing Project Path
        ?
      File Browser ? Load Project
        ?
      [Both paths converge]
        ?
      csvmenu.lsp (Main Menu)
        ?
      Panel Design Workflows

Critical Gateway Function

Why CRITICAL:

  • First user interaction after launch

  • Determines entire session context

  • No project = no work possible

  • Simple but essential

Impact:

  • Affects: Every subsequent operation

  • Controls: Which project is active

  • Manages: Session-wide context


Technical Notes

Dialog Attributes

project : dialog {
  label = "ConstructiVision -- Project Options";
  children_alignment = centered;  // Center all elements
  // Simple button row layout
}

Minimal Design

Intentionally small:

  • Only 27 lines of DCL

  • 4 buttons total

  • 1 text prompt

  • No complex controls

Philosophy:

  • Less is more at decision points

  • Reduce cognitive load

  • Enable fast choices


Common Issues & Solutions

Issue: User Confused Which to Pick

Solution: Help button explains:

  • New Project: Starting fresh, no existing files

  • Existing Project: Continue previous work

Issue: User Picks Wrong Option

Solution: Can always use File ? Switch Project

Issue: Cancel Doesn’t Work

Check:

  • is_cancel = true attribute set

  • Action properly sets variables

  • ESC key handled


Documentation Metadata

Analysis Date: 2026-01-20
Method: Manual enhancement with source analysis
Completeness: ? COMPREHENSIVE

Documentation Quality:

  • ? Functional purpose (gateway decision)

  • ? User workflows (all three paths)

  • ? Design philosophy explained

  • ? Architectural role clarified

  • ? Integration with launch sequence

Enhancement Status: ? [5/20] COMPLETE


End of Document