gled 2.1.1

gled is an application for creating animations and effects on artnet or wled light installations
pub mod widget;

use super::{action::UiAction, ChangeButton};
use crate::storage::asset::scene::instance::SceneInstance;
use egui::{Button, Checkbox, Color32, Context, Margin, Modifiers};

impl SceneInstance {
    pub fn config_ui(&mut self, ctx: &Context, ui: &mut egui::Ui) {
        let width = ui.available_width() - 20.0;
        ui.horizontal(|ui| {
            egui::Frame::none()
                .inner_margin(Margin::from(3.0))
                .show(ui, |ui| {
                    ui.set_max_width(width / 2.0);
                    ui.vertical(|ui| {
                        ui.label("Activation Input");
                        self.activation_input.change_button(ui);

                        ui.label("Flash Input");
                        self.flash_input.change_button(ui);

                        ui.label("Dimmer Input");
                        self.dimmer_input.change_button(ui);
                    });
                });
            egui::Frame::none()
                .inner_margin(Margin::from(3.0))
                .show(ui, |ui| {
                    ui.set_max_width(width / 2.0);
                    ui.vertical(|ui| {
                        ui.label("Active");
                        ui.add(Checkbox::new(&mut self.active, ""));

                        ui.label("Opacity");
                        ui.vertical_centered_justified(|ui| {
                            self.opacity.change_button(ui);
                        });

                        ui.label("Beat offset");
                        ui.vertical_centered_justified(|ui| {
                            self.beat_progression_offset.change_button(ui);
                        });
                    });
                });
        });

        egui::Frame::none()
            .inner_margin(Margin::from(6.0))
            .show(ui, |ui| {
                ui.set_min_width(ui.available_width());
                self.groups.change_button(ui);
            });

        egui::Frame::none()
            .inner_margin(Margin::from(6.0))
            .show(ui, |ui| {
                ui.vertical_centered_justified(|ui| {
                    if ui
                        .add(Button::new("🗐 Duplicate Scene").fill(Color32::DARK_BLUE))
                        .clicked()
                    {
                        UiAction::CloneSelectedSceneInstance.enqueue();
                    }
                });

                ui.vertical_centered_justified(|ui| {
                    if ui
                        .add(Button::new("🗑 Remove Scene").fill(Color32::DARK_RED))
                        .clicked()
                        || {
                            !ctx.wants_keyboard_input()
                                && ctx.input_mut(|i| {
                                    i.consume_key(Modifiers::default(), egui::Key::Backspace)
                                        || i.consume_key(Modifiers::default(), egui::Key::Delete)
                                })
                        }
                    {
                        UiAction::DeleteSelectedSceneInstance.enqueue();
                    }
                });
            });
    }
}