feat: add interactive tutorial system with welcome and timeline basics tutorials#1491
feat: add interactive tutorial system with welcome and timeline basics tutorials#1491
Conversation
bd14543 to
3184b7a
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 70b404c0de
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Pull request overview
This PR implements a comprehensive interactive tutorial system for Beutl, including a tutorial service framework, overlay UI for displaying tutorial steps, and three built-in tutorials (Welcome, Timeline Basics, and Animation Editing). The system allows tutorials to be triggered automatically on first run or manually from the Help menu or home screen. Tutorial progress is persisted in configuration, and tutorials can target specific UI elements with highlighting and positioning.
Changes:
- Added tutorial infrastructure with
ITutorialService,TutorialServiceHandler, and supporting data models - Implemented
TutorialOverlayUI component with visual highlighting and step-by-step navigation - Created three built-in tutorials covering basic Beutl usage and animation editing
- Added tutorial configuration persistence with
TutorialConfiginGlobalConfiguration - Integrated tutorial access points in Help menu and editor home screen
- Added localized tutorial strings in separate
TutorialStringsresource files (English and Japanese)
Reviewed changes
Copilot reviewed 32 out of 34 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/Beutl.Core/Services/Tutorials/ITutorialService.cs | Interface defining tutorial service contract with methods for managing tutorial state |
| src/Beutl.Core/Services/Tutorials/TutorialService.cs | Static service locator for accessing the tutorial service |
| src/Beutl.Core/Services/Tutorials/TutorialDefinition.cs | Data model for tutorial metadata and configuration |
| src/Beutl.Core/Services/Tutorials/TutorialStep.cs | Data model for individual tutorial steps with callbacks and targeting |
| src/Beutl.Core/Services/Tutorials/TutorialState.cs | Runtime state tracking for active tutorials |
| src/Beutl.Core/Services/Tutorials/TargetElementDefinition.cs | Configuration for targeting UI elements in tutorial steps |
| src/Beutl.Core/Services/Tutorials/TutorialStepPlacement.cs | Enum for tutorial tip placement options |
| src/Beutl/Services/Tutorials/TutorialServiceHandler.cs | Implementation of tutorial service managing tutorial lifecycle |
| src/Beutl/Services/Tutorials/TutorialHelpers.cs | Utility functions for common tutorial operations (element finding, subscriptions) |
| src/Beutl/Services/Tutorials/WelcomeTutorial.cs | Welcome tutorial introducing basic Beutl features |
| src/Beutl/Services/Tutorials/TimelineBasicsTutorial.cs | Tutorial covering scene editing and animation basics |
| src/Beutl/Services/Tutorials/AnimationEditTutorial.cs | Advanced tutorial for graph editor and animation techniques |
| src/Beutl/Views/Tutorial/TutorialOverlay.axaml(.cs) | UI component displaying tutorial steps with visual highlighting |
| src/Beutl/Views/Tutorial/TutorialListDialog.axaml(.cs) | Dialog for selecting and launching tutorials |
| src/Beutl/Views/MainView.axaml(.cs) | Added tutorial overlay and menu integration |
| src/Beutl/Views/EditorHostFallback.axaml(.cs) | Added tutorial launcher on home screen |
| src/Beutl.Extensibility/TutorialExtension.cs | Base extension class for registering tutorials |
| src/Beutl/Services/PrimitiveImpls/DefaultTutorialExtension.cs | Built-in tutorial extension registering default tutorials |
| src/Beutl.Configuration/TutorialConfig.cs | Configuration for tracking completed tutorials |
| src/Beutl.Configuration/GlobalConfiguration.cs | Integration of tutorial config into global configuration |
| src/Beutl.Language/TutorialStrings.resx | English tutorial strings |
| src/Beutl.Language/TutorialStrings.ja.resx | Japanese tutorial strings |
| src/Beutl.Language/Strings.resx | Added "Tutorials" and "ToggleMute" strings |
| src/Beutl/App.axaml.cs | Initialization of tutorial service |
| src/Beutl/Services/StartupTasks/LoadPrimitiveExtensionTask.cs | Registration of tutorial extension |
Files not reviewed (2)
- src/Beutl.Language/Strings.Designer.cs: Language not supported
- src/Beutl.Language/TutorialStrings.Designer.cs: Language not supported
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
… file Extract tutorial-related localization strings from Strings.resx into a new TutorialStrings.resx file, and update all references in tutorial services and views accordingly. Add a Start Tutorial button to EditorHostFallback and a Tutorials menu item to the Help menu.
Add FulfillPrerequisites property to TutorialDefinition that allows tutorials to automatically satisfy their prerequisites when CanStart returns false. The TutorialServiceHandler now accepts an autoFulfillPrerequisites parameter that triggers this behavior. For TimelineBasicsTutorial, this creates a new project in ~/.beutl/tmp/tutorials and opens the scene automatically when no project is open.
…oved readability and maintainability
…age in TutorialOverlay
…od for better control over UI thread updates
df4d2be to
5079069
Compare
… in TimelineBasicsTutorial and TutorialHelpers
|
No TODO comments were found. |
Minimum allowed line rate is |
Description
Implements an interactive tutorial system for Beutl, including a tutorial service, overlay UI, and two built-in tutorials (Welcome and Timeline Basics). Tutorial strings are organized in a dedicated
TutorialStringsresource file (separate fromStrings.resx) to keep localization concerns modular. Tutorials can be triggered automatically on first run or first scene open, and can also be launched manually from the Help menu or the editor home screen.Breaking changes
None.
Fixed issues
None.