flowsurface_data/config/
sidebar.rs1use serde::{Deserialize, Serialize};
2
3use crate::tickers_table;
4
5#[derive(Debug, Clone, PartialEq, Deserialize, Serialize)]
6#[serde(default)]
7pub struct Sidebar {
8 pub position: Position,
9 #[serde(skip)]
10 pub active_menu: Option<Menu>,
11 #[serde(default)]
12 pub tickers_table: Option<tickers_table::Settings>,
13}
14
15impl Sidebar {
16 pub fn set_menu(&mut self, new_menu: Menu) {
17 self.active_menu = Some(new_menu);
18 }
19
20 pub fn set_position(&mut self, position: Position) {
21 self.position = position;
22 }
23
24 pub fn is_menu_active(&self, menu: Menu) -> bool {
25 self.active_menu == Some(menu)
26 }
27
28 pub fn sync_tickers_table_settings(&mut self, settings: &tickers_table::Settings) {
29 self.tickers_table = Some(settings.clone());
30 }
31}
32
33impl Default for Sidebar {
34 fn default() -> Self {
35 Sidebar {
36 position: Position::Left,
37 active_menu: None,
38 tickers_table: None,
39 }
40 }
41}
42
43#[derive(Default, Debug, Clone, PartialEq, Copy, Deserialize, Serialize)]
44pub enum Position {
45 #[default]
46 Left,
47 Right,
48}
49
50impl std::fmt::Display for Position {
51 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
52 match self {
53 Position::Left => write!(f, "Left"),
54 Position::Right => write!(f, "Right"),
55 }
56 }
57}
58
59#[derive(Debug, Copy, Clone, PartialEq, Deserialize, Serialize)]
60pub enum Menu {
61 Layout,
62 Settings,
63 Audio,
64 ThemeEditor,
65 Network,
66}