use crate::{Dose, Mode, Projection};
use log::{error, info, warn};
#[allow(unused_imports)]
use crate::Controller;
#[derive(Debug, Clone, Default)]
pub struct Plane {
projection: Projection,
dose: Dose,
mode: Mode,
active: bool,
}
impl Plane {
#[must_use]
pub fn projection(&self) -> Projection {
self.projection
}
#[must_use]
pub fn dose(&self) -> Dose {
self.dose
}
#[must_use]
pub fn mode(&self) -> Mode {
self.mode
}
#[must_use]
pub fn active(&self) -> bool {
self.active
}
pub(crate) fn frontal() -> Self {
Self {
projection: Projection::Frontal,
..Default::default()
}
}
pub(crate) fn lateral() -> Self {
Self {
projection: Projection::Lateral,
..Default::default()
}
}
pub(crate) fn set_dose(&mut self, dose: Dose) {
if self.active() {
error!("Cannot set the dose while the X-ray is active");
return;
}
info!("Dose was set to {dose:?} for {:?} plane", self.projection);
self.dose = dose;
}
pub(crate) fn set_mode(&mut self, mode: Mode) {
if self.active() {
error!("Cannot set the mode while the X-ray is active");
return;
}
info!("Mode was set to {mode:?} for {:?} plane", self.projection);
self.mode = mode;
}
pub(crate) fn deactivate_xray(&mut self) {
if !self.active() {
warn!("Tried deactivating the X-ray, but it is already inactive");
return;
}
info!("{:?} X-ray deactivated", self.projection);
self.active = false;
}
pub(crate) fn activate_xray(&mut self) {
if self.active() {
warn!("Tried activating the X-ray, but it is already active");
return;
}
info!("{:?} X-ray activated", self.projection);
self.active = true;
}
pub(crate) fn set_and_activate_xray(&mut self, dose: Dose, mode: Mode) {
self.set_dose(dose);
self.set_mode(mode);
self.activate_xray();
}
}