Skip to main content

SundanceApp

Location: src/MovieMakerCore/SundanceApp/

SundanceApp is the application framework of the engine — the code that owns the process once MovieMakerMain has finished bootstrapping COM/D3D/MF. Named after the original codename, its classes were recovered from RTTI (CSundanceApp, SundanceAppDataContext, CCommandLineParser, ...).

Components​

FileRole
SundanceAppMain.cpp/.hCSundanceApp — subsystem initialization, main window WndProc, message loop teardown
SundanceAppDataContext.cpp/.hIDispatch data-binding surface consumed by DirectUI markup
ProjectManager.cpp/.hProject file I/O orchestration, dirty state, save/save-as flows
AutoSaveManager.cpp/.hPeriodic crash-safe auto-save of the open project
ImportController.cpp/.hMedia import (files, devices) into the project
ExportController.cpp/.hExport/publish pipeline entry point
MediaBrowser.cpp/.hMedia browsing surface: thumbnail grid, drag-drop sources
ThumbnailCache.cpp/.hBackground thumbnail generation (image + video frames)
ClipboardManager.cpp/.hSystem clipboard chain and internal clipboard
UndoManager.cpp/.hTransaction-based undo/redo stack
PlaybackController.cpp/.hBridges UI transport controls to the storyboard transport
TimelineController.cpp/.hTimeline editing operations (split, trim, reorder)
CommandLineParser.cpp/.hStartup switches (open project, safemode)

The controller pattern​

Controllers translate UI intents into model mutations. A typical edit flows:

Undo/redo design​

Undo is transactional: every user action opens a transaction on UndoManager, applies one or more model mutations, and commits. Undo pops the transaction and replays its inverse operations in reverse. The design integrates with the clipboard so that "paste" can be undone as a unit, and with MovieProject dirty-state so unsaved-change prompts are exact.

Clipboard details worth knowing​

ClipboardManager participates in the Windows clipboard-viewer chain (via SundanceClipboardChainWindow in the UI layer) and additionally maintains an internal clipboard for rich Movie-Maker-specific payloads (extents with effects) that the system clipboard cannot represent. Two behaviors are pinned by hardening notes:

  • A GetClipboardData failure returns E_FAIL — it previously masked as S_FALSE (fixed in the 2026-09 hardening pass; see the module README).
  • Empty-clipboard / format-not-present remain S_FALSE by design — see S_FALSE semantics.

Auto-save​

AutoSaveManager writes the project to a recovery location on a timer and on dirty-state transitions, using the same writer as explicit saves (Serialization). Crash recovery on next launch offers the newest auto-save.

  • analysis/MovieMakerExe/ — launcher binary analysis
  • analysis/MovieMakerCore/ — engine binary analysis (RTTI, strings, imports)