use crate::fixture_definition_editor::edit::{DefinitionEdit, Edit, EditorAction};
use crate::fixture_definition_editor::state::EditorState;
use egui::{Button, Ui};
pub(crate) fn show(ui: &mut Ui, edit: &mut Edit<'_>, state: &mut EditorState) {
for (index, mode) in edit.value.modes.iter().enumerate() {
let label = format!("{} ยท {} groups", mode.name, mode.group_count());
if ui.selectable_label(state.mode == index, label).clicked() {
state.mode = index;
}
}
ui.horizontal(|ui| {
if ui.button("Add mode").clicked() {
let name = format!("Mode {}", edit.value.modes.len());
state.mode = edit.change(state, |definition| definition.add_mode(name));
}
let editable = state.mode > 0;
if ui.add_enabled(editable, Button::new("Remove")).clicked() {
let mode = state.mode;
if edit.try_change(state, |definition| definition.remove_mode(mode)) {
state.mode = mode.saturating_sub(1);
}
}
});
if state.mode == 0 {
ui.weak("\"individual\" gives every pixel its own group. Add a mode to group pixels.");
return;
}
ui.horizontal(|ui| {
ui.label("Name");
let mode = state.mode;
let mut name = edit
.value
.modes
.get(mode)
.map(|mode| mode.name.clone())
.unwrap_or_default();
let response = ui.text_edit_singleline(&mut name);
edit.tracked(&response, |definition| {
if let Some(mode) = definition.modes.get_mut(mode) {
mode.name = name;
}
});
});
let selected = !state.selection.is_empty();
ui.horizontal_wrapped(|ui| {
let shortcut = ui.ctx().format_shortcut(&egui::KeyboardShortcut::new(
egui::Modifiers::COMMAND,
egui::Key::G,
));
let group = Button::new("Group selection").shortcut_text(shortcut);
if ui.add_enabled(selected, group).clicked() {
EditorAction::Group.apply(edit, state);
}
if ui
.add_enabled(selected, Button::new("Ungroup selection"))
.clicked()
{
EditorAction::Ungroup.apply(edit, state);
}
if ui.button("Each its own group").clicked() {
EditorAction::EachOwnGroup.apply(edit, state);
}
});
}