use crate::samplic::Parameter;
use indexmap::IndexMap;
use serde_derive::{Deserialize, Serialize};
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "snake_case", tag = "type")]
pub enum WidgetDescription {
TabBook {
tabs: Vec<Tab>,
tab_position: TabPosition,
},
AlignmentBox {
orientation: Orientation,
children: Vec<AlignmentBoxChild>,
},
ResultTable {
filter: IndexMap<String, Parameter>,
},
ResultGrid {
columns: u32,
},
StatisticsTable {
filter: IndexMap<String, Parameter>,
},
RatioTable {
properties:
(IndexMap<String, Parameter>, IndexMap<String, Parameter>),
},
Curve {
curve_index: usize,
},
PropertiesSelector {
properties: IndexMap<String, Parameter>,
child: Option<Box<WidgetDescription>>,
},
}
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "snake_case")]
pub struct AlignmentBoxChild {
pub description: WidgetDescription,
pub expand: bool,
}
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "snake_case")]
pub struct Tab {
pub label: TabLabel,
pub child: WidgetDescription,
}
#[derive(Clone, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "snake_case", tag = "type", content = "value")]
pub enum TabLabel {
ThemeIcon(String),
Text(String),
}
#[derive(Clone, Copy, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum TabPosition {
Left,
Right,
Top,
Bottom,
}
#[derive(Clone, Copy, Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum Orientation {
Horizontal,
Vertical,
}