Feat: refactoring codebase

This commit is contained in:
2026-02-16 16:00:57 +01:00
parent 5385bf675a
commit 58624b64cf
49 changed files with 1852 additions and 1853 deletions

View File

@@ -9,67 +9,106 @@ pub const DOCS: &[DocEntry] = &[
// Getting Started
Section("Getting Started"),
Topic("Welcome", include_str!("../../docs/welcome.md")),
Topic("Moving Around", include_str!("../../docs/navigation.md")),
Topic(
"Moving Around",
include_str!("../../docs/getting-started/navigation.md"),
),
Topic(
"How Does It Work?",
include_str!("../../docs/how_it_works.md"),
include_str!("../../docs/getting-started/how_it_works.md"),
),
Topic(
"Banks & Patterns",
include_str!("../../docs/banks_patterns.md"),
include_str!("../../docs/getting-started/banks_patterns.md"),
),
Topic(
"Stage / Commit",
include_str!("../../docs/getting-started/staging.md"),
),
Topic(
"Using the Sequencer",
include_str!("../../docs/getting-started/grid.md"),
),
Topic(
"Editing a Step",
include_str!("../../docs/getting-started/editing.md"),
),
Topic("Stage / Commit", include_str!("../../docs/staging.md")),
Topic("Using the Sequencer", include_str!("../../docs/grid.md")),
Topic("Editing a Step", include_str!("../../docs/editing.md")),
// Forth fundamentals
Section("Forth"),
Topic("About Forth", include_str!("../../docs/about_forth.md")),
Topic("The Dictionary", include_str!("../../docs/dictionary.md")),
Topic("The Stack", include_str!("../../docs/stack.md")),
Topic("Creating Words", include_str!("../../docs/definitions.md")),
Topic("Control Flow", include_str!("../../docs/control_flow.md")),
Topic("The Prelude", include_str!("../../docs/prelude.md")),
Topic("Oddities", include_str!("../../docs/oddities.md")),
Topic(
"About Forth",
include_str!("../../docs/forth/about_forth.md"),
),
Topic(
"The Dictionary",
include_str!("../../docs/forth/dictionary.md"),
),
Topic("The Stack", include_str!("../../docs/forth/stack.md")),
Topic(
"Creating Words",
include_str!("../../docs/forth/definitions.md"),
),
Topic(
"Control Flow",
include_str!("../../docs/forth/control_flow.md"),
),
Topic("The Prelude", include_str!("../../docs/forth/prelude.md")),
Topic("Oddities", include_str!("../../docs/forth/oddities.md")),
// Audio Engine
Section("Audio Engine"),
Topic("Introduction", include_str!("../../docs/engine_intro.md")),
Topic("Settings", include_str!("../../docs/engine_settings.md")),
Topic("Sources", include_str!("../../docs/engine_sources.md")),
Topic("Samples", include_str!("../../docs/engine_samples.md")),
Topic("Wavetables", include_str!("../../docs/engine_wavetable.md")),
Topic("Filters", include_str!("../../docs/engine_filters.md")),
Topic("Introduction", include_str!("../../docs/engine/intro.md")),
Topic("Settings", include_str!("../../docs/engine/settings.md")),
Topic("Sources", include_str!("../../docs/engine/sources.md")),
Topic("Samples", include_str!("../../docs/engine/samples.md")),
Topic(
"Wavetables",
include_str!("../../docs/engine/wavetable.md"),
),
Topic("Filters", include_str!("../../docs/engine/filters.md")),
Topic(
"Modulation",
include_str!("../../docs/engine_modulation.md"),
include_str!("../../docs/engine/modulation.md"),
),
Topic(
"Distortion",
include_str!("../../docs/engine_distortion.md"),
include_str!("../../docs/engine/distortion.md"),
),
Topic("Space & Time", include_str!("../../docs/engine_space.md")),
Topic("Space & Time", include_str!("../../docs/engine/space.md")),
Topic(
"Audio-Rate Mod",
include_str!("../../docs/engine_audio_modulation.md"),
include_str!("../../docs/engine/audio_modulation.md"),
),
Topic(
"Words & Sounds",
include_str!("../../docs/engine/words.md"),
),
Topic("Words & Sounds", include_str!("../../docs/engine_words.md")),
// MIDI
Section("MIDI"),
Topic("Introduction", include_str!("../../docs/midi_intro.md")),
Topic("MIDI Output", include_str!("../../docs/midi_output.md")),
Topic("MIDI Input", include_str!("../../docs/midi_input.md")),
Topic("Introduction", include_str!("../../docs/midi/intro.md")),
Topic("MIDI Output", include_str!("../../docs/midi/output.md")),
Topic("MIDI Input", include_str!("../../docs/midi/input.md")),
// Tutorials
Section("Tutorials"),
Topic("Randomness", include_str!("../../docs/tutorial_randomness.md")),
Topic(
"Randomness",
include_str!("../../docs/tutorials/randomness.md"),
),
Topic(
"Notes & Harmony",
include_str!("../../docs/tutorial_harmony.md"),
include_str!("../../docs/tutorials/harmony.md"),
),
Topic(
"Generators",
include_str!("../../docs/tutorial_generators.md"),
include_str!("../../docs/tutorials/generators.md"),
),
Topic(
"Timing with at",
include_str!("../../docs/tutorials/at.md"),
),
Topic(
"Using Variables",
include_str!("../../docs/tutorials/variables.md"),
),
Topic("Timing with at", include_str!("../../docs/tutorial_at.md")),
Topic("Using Variables", include_str!("../../docs/tutorial_variables.md")),
];
pub fn topic_count() -> usize {

View File

@@ -1,5 +1,6 @@
pub mod categories;
pub mod docs;
pub mod onboarding;
mod script;
pub use cagire_forth::{

96
src/model/onboarding.rs Normal file
View File

@@ -0,0 +1,96 @@
use crate::page::Page;
pub fn for_page(page: Page) -> &'static [(&'static str, &'static [(&'static str, &'static str)])] {
match page {
Page::Main => &[
(
"The step sequencer grid. Each cell is a Forth script that produces sound when evaluated. During playback, active steps run left-to-right, top-to-bottom. Toggle steps on/off with t to build your pattern. The left panel shows playing patterns, the right side shows VU meters.",
&[
("Arrows", "navigate grid"),
("Space", "play / stop"),
("Enter", "edit step script"),
("t", "toggle step on/off"),
("p", "preview script"),
("Tab", "sample browser"),
("?", "all keybindings"),
],
),
(
"Enter opens the script editor (Esc saves and closes). Select ranges with Shift+arrows for bulk operations. Linked steps share one script: edit the source and all links update. Adjust pattern length/speed directly, or use euclidean distribution to spread a step rhythmically.",
&[
("Shift+Arrows", "select range"),
("Ctrl+C / V", "copy / paste steps"),
("Ctrl+D", "duplicate steps"),
("Ctrl+B", "paste as linked copies"),
("< > / [ ]", "length / speed"),
("e", "euclidean distribution"),
("+ - / T", "tempo adjust / set"),
],
),
],
Page::Patterns => &[
(
"Organize your project into banks and patterns. The left column lists 32 banks, the right shows patterns in the selected bank. Stage patterns to play or stop, then commit to apply all changes at once.",
&[
("Arrows", "navigate"),
("Enter", "open in sequencer"),
("Space", "stage play/stop"),
("c", "commit changes"),
("r", "rename"),
("e", "properties"),
("?", "all keys"),
],
),
(
"Mute and solo patterns to control the mix. Use euclidean distribution to generate rhythmic patterns from a single step. Select multiple patterns with Shift for bulk operations.",
&[
("m", "stage mute"),
("s", "stage solo"),
("E", "euclidean"),
("Shift+↑↓", "select range"),
("y", "copy"),
("P", "paste"),
],
),
],
Page::Engine => &[(
"Audio engine configuration. Select output and input devices, adjust buffer size and polyphony, and manage sample directories. The right side shows a live scope and spectrum analyzer.",
&[
("Tab", "switch section"),
("↑↓", "navigate"),
("←→", "adjust"),
("R", "restart engine"),
("A", "add samples"),
("?", "all keys"),
],
)],
Page::Options => &[(
"Global settings for display, UI, Link sync, MIDI, etc. All changes save automatically. Tutorial can be reset from here!",
&[
("↑↓", "navigate"),
("←→", "change value"),
("?", "all keys"),
],
)],
Page::Help => &[(
"Interactive documentation with executable Forth examples. Browse topics on the left, read content on the right. Code blocks can be run directly and evaluated by the sequencer engine.",
&[
("Tab", "switch panels"),
("↑↓", "navigate"),
("Enter", "run code block"),
("n/p", "next/prev example"),
("/", "search"),
("?", "all keys"),
],
)],
Page::Dict => &[(
"Complete reference of all Forth words by category. Each entry shows the word name, stack effect signature, description, and a usage example. Search filters across all categories.",
&[
("Tab", "switch panels"),
("↑↓", "navigate"),
("/", "search"),
("?", "all keys"),
],
)],
}
}