flowsurface_data/config/
state.rs1use super::ScaleFactor;
2use super::sidebar::Sidebar;
3use super::timezone::UserTimezone;
4use crate::layout::WindowSpec;
5use crate::{AudioStream, Layout, Theme};
6
7use serde::{Deserialize, Serialize};
8
9#[derive(Clone, Serialize, Deserialize, Default)]
10pub struct Layouts {
11 pub layouts: Vec<Layout>,
12 pub active_layout: Option<String>,
13}
14
15#[derive(Default, Clone, Deserialize, Serialize)]
16#[serde(default)]
17pub struct State {
18 pub layout_manager: Layouts,
19 pub selected_theme: Theme,
20 pub custom_theme: Option<Theme>,
21 pub main_window: Option<WindowSpec>,
22 pub timezone: UserTimezone,
23 pub sidebar: Sidebar,
24 pub scale_factor: ScaleFactor,
25 pub audio_cfg: AudioStream,
26 pub trade_fetch_enabled: bool,
27 pub size_in_quote_ccy: exchange::SizeUnit,
28}
29
30impl State {
31 pub fn from_parts(
32 layout_manager: Layouts,
33 selected_theme: Theme,
34 custom_theme: Option<Theme>,
35 main_window: Option<WindowSpec>,
36 timezone: UserTimezone,
37 sidebar: Sidebar,
38 scale_factor: ScaleFactor,
39 audio_cfg: AudioStream,
40 volume_size_unit: exchange::SizeUnit,
41 ) -> Self {
42 State {
43 layout_manager,
44 selected_theme: Theme(selected_theme.0),
45 custom_theme: custom_theme.map(|t| Theme(t.0)),
46 main_window,
47 timezone,
48 sidebar,
49 scale_factor,
50 audio_cfg,
51 trade_fetch_enabled: exchange::fetcher::is_trade_fetch_enabled(),
52 size_in_quote_ccy: volume_size_unit,
53 }
54 }
55}