Files
Cagire/src/state/mod.rs

47 lines
1.5 KiB
Rust

pub trait CyclicEnum: Sized + Copy + PartialEq + 'static {
const VARIANTS: &'static [Self];
fn next(self) -> Self {
let pos = Self::VARIANTS.iter().position(|v| *v == self).unwrap_or(0);
Self::VARIANTS[(pos + 1) % Self::VARIANTS.len()]
}
fn prev(self) -> Self {
let len = Self::VARIANTS.len();
let pos = Self::VARIANTS.iter().position(|v| *v == self).unwrap_or(0);
Self::VARIANTS[(pos + len - 1) % len]
}
}
pub mod audio;
pub mod color_scheme;
pub mod editor;
pub mod effects;
pub mod file_browser;
pub mod live_keys;
pub mod modal;
pub mod options;
pub mod panel;
pub mod patterns_nav;
pub mod playback;
pub mod project;
pub mod sample_browser;
pub mod undo;
pub mod ui;
pub use audio::{AudioSettings, DeviceKind, EngineSection, LinkSetting, MainLayout, Metrics, ScopeMode, SettingKind, SpectrumMode};
pub use color_scheme::ColorScheme;
pub use editor::{
CopiedStepData, CopiedSteps, EditorContext, EditorTarget, EuclideanField, PatternField,
PatternPropsField, ScriptEditorState, ScriptField,
};
pub use live_keys::LiveKeyState;
pub use modal::{ConfirmAction, Modal, RenameTarget};
pub use options::{OptionsFocus, OptionsState};
pub use panel::{PanelFocus, PanelState, SidePanel};
pub use patterns_nav::{PatternsColumn, PatternsNav};
pub use playback::{PlaybackState, StagedChange, StagedMuteChange, StagedPropChange};
pub use project::ProjectState;
pub use sample_browser::{SampleBrowserState, SampleTree};
pub use ui::{DictFocus, FlashKind, HelpFocus, MinimapMode, UiState};