use std::fmt::{Display, Formatter};
use serde::Serialize;
use super::form::FormProperties;
use super::mdiform::MDIFormProperties;
use super::{Control, MenuControl};
#[derive(Debug, PartialEq, Clone, Serialize)]
pub enum FormRoot {
Form(Form),
MDIForm(MDIForm),
}
impl FormRoot {
#[must_use]
pub fn name(&self) -> &str {
match self {
FormRoot::Form(f) => &f.name,
FormRoot::MDIForm(m) => &m.name,
}
}
#[must_use]
pub fn name_mut(&mut self) -> &mut String {
match self {
FormRoot::Form(f) => &mut f.name,
FormRoot::MDIForm(m) => &mut m.name,
}
}
#[must_use]
pub fn controls(&self) -> &[Control] {
match self {
FormRoot::Form(f) => &f.controls,
FormRoot::MDIForm(m) => &m.controls,
}
}
#[must_use]
pub fn controls_mut(&mut self) -> &mut Vec<Control> {
match self {
FormRoot::Form(f) => &mut f.controls,
FormRoot::MDIForm(m) => &mut m.controls,
}
}
#[must_use]
pub fn menus(&self) -> &[MenuControl] {
match self {
FormRoot::Form(f) => &f.menus,
FormRoot::MDIForm(m) => &m.menus,
}
}
#[must_use]
pub fn is_form(&self) -> bool {
matches!(self, FormRoot::Form(_))
}
#[must_use]
pub fn is_mdi_form(&self) -> bool {
matches!(self, FormRoot::MDIForm(_))
}
}
impl Display for FormRoot {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
FormRoot::Form(form) => write!(f, "Form: {}", form.name),
FormRoot::MDIForm(mdi_form) => write!(f, "MDIForm: {}", mdi_form.name),
}
}
}
#[derive(Debug, PartialEq, Clone, Serialize)]
pub struct Form {
pub name: String,
pub tag: String,
pub index: i32,
pub properties: FormProperties,
pub controls: Vec<Control>,
pub menus: Vec<MenuControl>,
}
impl Display for Form {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"Form: {} ({} controls, {} menus)",
self.name,
self.controls.len(),
self.menus.len()
)
}
}
#[derive(Debug, PartialEq, Clone, Serialize)]
pub struct MDIForm {
pub name: String,
pub tag: String,
pub index: i32,
pub properties: MDIFormProperties,
pub controls: Vec<Control>,
pub menus: Vec<MenuControl>,
}
impl Display for MDIForm {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(
f,
"MDIForm: {} ({} controls, {} menus)",
self.name,
self.controls.len(),
self.menus.len()
)
}
}