use super::types::DrawingProperties;
#[derive(Clone, Debug, PartialEq, Default)]
pub enum ObjectTreeAction {
#[default]
None,
Select(usize),
AddToSelection(usize),
RangeSelect(usize),
ClearSelection,
SelectAll,
ToggleVisibility(usize),
ShowAll,
HideAll,
HideSelected,
ShowSelected,
ToggleLock(usize),
LockAll,
UnlockAll,
LockSelected,
UnlockSelected,
Delete(usize),
DeleteSelected,
Duplicate(usize),
DuplicateSelected,
OpenProperties(usize),
Rename(usize, String),
UpdateProperties(usize, DrawingProperties),
ChangeColor(usize, egui::Color32),
BringToFront(usize),
SendToBack(usize),
MoveUp(usize),
MoveDown(usize),
Reorder(usize, usize),
BringSelectedToFront,
SendSelectedToBack,
ZoomTo(usize),
PanTo(usize),
OpenIndicatorSettings(usize),
RemoveIndicator(usize),
SaveAsTemplate(String),
LoadTemplate(String),
DeleteTemplate(String),
RemoveAllDrawings,
RemoveAllIndicators,
ToggleDataWindow,
}
impl ObjectTreeAction {
pub fn is_none(&self) -> bool {
matches!(self, Self::None)
}
pub fn is_selection_action(&self) -> bool {
matches!(
self,
Self::Select(_)
| Self::AddToSelection(_)
| Self::RangeSelect(_)
| Self::ClearSelection
| Self::SelectAll
)
}
pub fn is_modification_action(&self) -> bool {
matches!(
self,
Self::Delete(_)
| Self::DeleteSelected
| Self::Duplicate(_)
| Self::DuplicateSelected
| Self::Rename(_, _)
| Self::UpdateProperties(_, _)
| Self::ChangeColor(_, _)
| Self::BringToFront(_)
| Self::SendToBack(_)
| Self::MoveUp(_)
| Self::MoveDown(_)
| Self::Reorder(_, _)
| Self::RemoveIndicator(_)
| Self::RemoveAllDrawings
| Self::RemoveAllIndicators
)
}
pub fn requires_confirmation(&self) -> bool {
matches!(
self,
Self::DeleteSelected
| Self::RemoveAllDrawings
| Self::RemoveAllIndicators
| Self::DeleteTemplate(_)
)
}
pub fn description(&self) -> String {
match self {
Self::None => "No action".to_string(),
Self::Select(id) => format!("Select object {id}"),
Self::Delete(id) => format!("Delete object {id}"),
Self::DeleteSelected => "Delete selected objects".to_string(),
Self::Duplicate(id) => format!("Duplicate object {id}"),
Self::ToggleVisibility(id) => format!("Toggle visibility for {id}"),
Self::ToggleLock(id) => format!("Toggle lock for {id}"),
Self::Rename(id, name) => format!("Rename {id} to '{name}'"),
Self::BringToFront(id) => format!("Bring {id} to front"),
Self::SendToBack(id) => format!("Send {id} to back"),
Self::ZoomTo(id) => format!("Zoom to object {id}"),
Self::RemoveAllDrawings => "Remove all drawings".to_string(),
Self::RemoveAllIndicators => "Remove all indicators".to_string(),
_ => format!("{self:?}"),
}
}
}