Namespace Serenity.Menu.Infrastructure.Editor.Builder
Classes
CreateMenuServiceSettingsWindow
Step-by-step window for creating (or updating) the project-wide UnityMenuServiceSettingsDefinition asset. The stepped-wizard scaffolding — the header and breadcrumb, the body scroll, the footer and its error gate, and the select-and-ping a finished run ends with — comes from Serenity.Global.Infrastructure.Editor.SerenityStepWizardWindow`1; this window declares only its own step table and what the primary action does. Get-or-create target resolution goes through Serenity.Global.Infrastructure.Editor.SerenityWizardTargetAsset and Serenity.Global.Infrastructure.Editor.SerenityWizardTargetAssetGui. Menus themselves are still authored through the Composite View Builder — this wizard only covers the menu SERVICE settings (the controller id and border margin). The window only collects input and renders results; MenuServiceSettingsCreator does the actual validation and generation work.
Controller Id and Border Margin are edited through a Serenity.Global.Infrastructure.Editor.SerenityWizardScratchDraft<>
scratch instance (via Serenity.Menu.Infrastructure.Editor.Builder.CreateMenuServiceSettingsWindow._draftLifecycle) rather than mirrored local fields, so an
update-in-place run can never silently revert either — or any future field this asset grows — to its
static template default, mirroring CreateSystemConfigurationSettingsWindow.
MenuCreator
Creates and updates menu assets, plus the project-wide menu service settings singleton they depend on.
All asset mutation for the Menu Manager wizard lives here; the window only collects input (through
MenuDraft) and renders results. Mirrors HudCreator: static class, Input/Result
DTOs, Validate then Create, one menu asset created or updated per MenuDraft in the batch.
MenuCreator.Input
What the caller wants created or updated.
MenuCreator.Result
What was created or updated.
MenuDraft
One menu being authored in the Menu Manager wizard: a scratch UnityMenuSettingsDefinition
the author edits through the wizard's inspector GUIs before MenuCreator ever touches a
real asset. Mirrors CreateHudWindow's own scratch-instance pattern for a HUD element, composing
the generic Serenity.Global.Infrastructure.Editor.SerenityWizardScratchDraft<> mechanics for the scratch instance itself
and adding only what a menu draft needs beyond that: the planned asset file name and the guid-seeding
rules a menu's own transition wiring depends on.
MenuManagerWindow
Step-by-step window that manages every view reachable from the main menu, plus the project-wide menu
service settings singleton they depend on. Mirrors CreateHudWindow's information design (a master
list beside a detail pane, live validation cached once per frame, a Preview control under the breadcrumb)
generalized to a batch of separate assets rather than one asset's own element array — each
MenuDraft is its own scratch UnityMenuSettingsDefinition, so the list is a plain
List<T> rather than a UnityEditor.SerializedProperty array. The window only
collects input and renders results; MenuCreator does every asset mutation.
The stepped-wizard scaffolding — the header and breadcrumb, the body scroll, the footer and its error gate, and the select-and-ping a finished run ends with — comes from Serenity.Global.Infrastructure.Editor.SerenityStepWizardWindow`1; this window declares only its own step table, the preview launcher it draws under the breadcrumb, and what the primary action does.
MenuServiceSettingsCreator
Generates (or updates) the project-wide UnityMenuServiceSettingsDefinition asset from a single description. Runs on SingletonSettingsCreationEngine<TSettings, TInput, TResult>: this class stays the caller-facing static surface — Input/Result DTOs, ValidateIdentity/Validate/Create, ResolveSettingsContext<TSettings>(string, string) for "edit existing" detection — and forwards every member to one MenuServiceSettingsCreator.Engine instance that supplies the module's own fields. CreateMenuServiceSettingsWindow only collects input and renders results; every asset mutation lives in the engine.
MenuServiceSettingsCreator.Input
Everything needed to create or update the settings asset.
MenuServiceSettingsCreator.Result
Outcome of a Create(Input) call.
MenuServiceSettingsFieldsGui
The Menu Service Settings identity fields (Asset Name, Id, Controller Id, Border Margin) shared by CreateMenuServiceSettingsWindow and MenuManagerWindow's own Settings step — both wizards get or create the same UnityMenuServiceSettingsDefinition singleton, so the fields that describe it are drawn in exactly one place. Pure presentation over caller-owned values, mirroring Serenity.Global.Infrastructure.Editor.SerenityWizardTargetAssetGui's own "no window state" contract.
MenuServiceSettingsStepGui
The Menu Manager wizard's Settings step: the project-wide UnityMenuServiceSettingsDefinition singleton target, its identity fields, and the folder new menu assets are written to. Owns every field MenuManagerWindow used to carry directly for this step, plus the drawing and validation logic that only ever touches them — a facet with its own serialized state and its own reason to change, kept out of the window so the window's own file does not grow with a fifth step's worth of fields and helpers on top of the other four.
MenuValidationSnapshot
One ValidateWithDraftIssues(Input) pass: the batch-wide
Serenity.Global.Infrastructure.Editor.SerenityCreationValidationResult every other creation engine already returns, plus that same
scan's own per-draft breakdown — one entry per Drafts position, in the same
order. Exists so MenuManagerWindow can compute the whole batch's findings exactly ONCE per
OnGUI and still hand each draft its own slice to Serenity.Menu.Infrastructure.Editor.Builder.ViewNodeListGui and
Serenity.Menu.Infrastructure.Editor.Builder.MenuDraftDetailGui, instead of either re-scanning the whole project a second (or
once-per-row) time through a per-draft call of its own.
Serenity.Menu.Infrastructure.Editor.Builder.MenuValidationSnapshot.GraphIssues and Serenity.Menu.Infrastructure.Editor.Builder.MenuValidationSnapshot.Rows extend the same "compute once per frame" contract to the
Menus step's navigation graph: MenuManagerWindow builds them alongside Result
and IssuesByDraft in its own OnBeforeDrawStep, so both live on this one snapshot
instead of a second per-frame cache. A snapshot built by ValidateWithDraftIssues(Input)
alone — outside the wizard, e.g. a headless validator — carries neither: both default to empty.
Structs
MenuServiceSettingsFieldsGui.Result
The fields' values after this pass — the caller assigns each back to its own state,
the same contract every other SerenityWizardFieldGui caller already follows.
Enums
CreateMenuServiceSettingsWindow.WizardStep
Public rather than private because C# requires a class's base type to be at least as accessible as the class itself, and this enum is that base type's argument.
MenuManagerWindow.WizardStep
Public rather than private because C# requires a class's base type to be at least as accessible as the class itself, and this enum is that base type's argument.