PC Music Generator - a Virtual Modular Synthesizer
at main 88 lines 2.0 kB view raw
1use std::collections::BTreeMap; 2 3use serde::{ 4 Deserialize, 5 Serialize, 6}; 7use uuid::Uuid; 8 9use crate::{ 10 container::sizing::ModuleSize, 11 devices::description::DeviceKind, 12 visuals::{ 13 templates::WidgetTemplate, 14 VisualTheme, 15 }, 16 widgets::KnobRange, 17 Uuidentified, 18}; 19 20#[derive(Debug, Serialize, Deserialize, Clone)] 21pub struct ModuleDescription { 22 pub uuid: Uuid, 23 pub name: String, 24 pub theme: VisualTheme, 25 pub size: ModuleSize, 26 pub visuals: BTreeMap<usize, WidgetTemplate>, 27 pub devices: BTreeMap<usize, DeviceKind>, 28 pub connections: BTreeMap<usize, (usize, usize)>, 29} 30 31impl Uuidentified for ModuleDescription { 32 fn uuid(&self) -> Uuid { 33 self.uuid 34 } 35} 36 37#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)] 38pub struct KnobKind { 39 pub angle_range: KnobRange, 40 pub value_range: KnobRange, 41 pub speed: f32, 42} 43 44impl Default for KnobKind { 45 fn default() -> Self { 46 Self { 47 angle_range: (0., 360.).into(), 48 value_range: (0., 1.).into(), 49 speed: 0.1, 50 } 51 } 52} 53#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)] 54pub struct ToggleKind { 55 pub on: f32, 56 pub off: f32, 57} 58 59impl Default for ToggleKind { 60 fn default() -> Self { 61 Self { on: 1., off: 0. } 62 } 63} 64 65#[derive(Clone, Copy, PartialEq, Debug, Default, Serialize, Deserialize)] 66pub enum WidgetKind { 67 Knob(KnobKind), 68 Toggle(ToggleKind), 69 #[default] 70 Port, 71} 72 73impl std::fmt::Display for WidgetKind { 74 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { 75 match self { 76 WidgetKind::Knob(_) => f.write_str("Knob"), 77 WidgetKind::Toggle(_) => f.write_str("Toggle"), 78 _ => std::fmt::Debug::fmt(self, f), 79 } 80 } 81} 82 83impl WidgetKind { 84 pub fn all() -> [Self; 3] { 85 use WidgetKind::*; 86 [Knob(Default::default()), Toggle(Default::default()), Port] 87 } 88}