Skip to main content

gled_ui/
settings.rs

1//! The interface's own settings, which stay on the device showing it: how
2//! big the effect thumbnails are, with which palette they are drawn, and
3//! whether the browser may use MIDI. eframe stores them, in a file on the
4//! desktop and in the browser's local storage.
5
6use gled_model::{asset::palette::Palette, asset_id::AssetId};
7use serde::{Deserialize, Serialize};
8
9/// The key eframe stores the settings under.
10pub const STORAGE_KEY: &str = "gled_client_settings";
11
12#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
13#[serde(default)]
14pub struct ClientSettings {
15    effects_size: f32,
16    preview_palette: Option<AssetId<Palette>>,
17    /// The user connected the browser's MIDI devices once, so the page asks
18    /// for them again when it opens.
19    midi_access_wanted: bool,
20}
21
22impl Default for ClientSettings {
23    fn default() -> Self {
24        Self {
25            effects_size: 100.0,
26            preview_palette: None,
27            midi_access_wanted: false,
28        }
29    }
30}
31
32impl ClientSettings {
33    pub fn new(effects_size: f32, preview_palette: Option<AssetId<Palette>>) -> Self {
34        Self {
35            effects_size,
36            preview_palette,
37            ..Self::default()
38        }
39    }
40
41    pub(crate) fn effects_size(&self) -> f32 {
42        self.effects_size
43    }
44
45    pub(crate) fn effects_size_mut(&mut self) -> &mut f32 {
46        &mut self.effects_size
47    }
48
49    pub(crate) fn preview_palette(&self) -> Option<AssetId<Palette>> {
50        self.preview_palette
51    }
52
53    pub(crate) fn preview_palette_mut(&mut self) -> &mut Option<AssetId<Palette>> {
54        &mut self.preview_palette
55    }
56
57    pub(crate) fn midi_access_wanted(&self) -> bool {
58        self.midi_access_wanted
59    }
60
61    pub(crate) fn want_midi_access(&mut self) {
62        self.midi_access_wanted = true;
63    }
64}