gled-ui 2.31.1

gled's egui interface, shared by the desktop app and the browser
Documentation
use crate::app::client_timing::ClientTiming;
use crate::fixture_definition_editor::FixtureDefinitionsWindow;
use crate::fixture_editor::FixtureWindow;
use crate::settings::ClientSettings;
use egui::Context;
use gled_model::{asset::project::Project, collection::Collections};
use gled_protocol::state::{OutputConfig, SoundSnapshot};

pub(crate) mod about;
pub(crate) mod animation;
pub(crate) mod channel_overwrites;
pub(crate) mod curves;
pub(crate) mod errors;
pub(crate) mod external_devices;
pub(crate) mod git_config;
pub(crate) mod midi_controllers;
pub(crate) mod output_devices;
pub(crate) mod output_routings;
pub(crate) mod palettes;
pub(crate) mod projects;
pub(crate) mod scenes;
pub(crate) mod shortcuts;

#[derive(Debug, Default)]
pub(crate) struct Windows {
    pub(crate) about: about::AboutWindow,
    pub(crate) animations: animation::AnimationWindow,
    pub(crate) external_device_settings: external_devices::ExternalDeviceSettings,
    pub(crate) channel_overwrites: channel_overwrites::ChannelOverwritesWindow,
    pub(crate) curves: curves::CurvesWindow,
    pub(crate) errors: errors::ErrorsWindow,
    pub(crate) fixture_definitions: FixtureDefinitionsWindow,
    pub(crate) fixture_window: FixtureWindow,
    pub(crate) git_config: git_config::GitConfigWindow,
    pub(crate) midi_controllers: midi_controllers::MidiControllersWindow,
    pub(crate) output_devices: output_devices::OutputDevicesWindow,
    pub(crate) output_routings: output_routings::OutputRoutingsWindow,
    pub(crate) palettes: palettes::PalettesWindow,
    pub(crate) projects: projects::ProjectsWindow,
    pub(crate) scenes: scenes::ScenesWindow,
    pub(crate) shortcuts: shortcuts::ShortcutsWindow,
}

impl Windows {
    #[cfg_attr(feature = "profiling", profiling::function)]
    pub(crate) fn update(
        &mut self,
        ctx: &Context,
        timing: &ClientTiming,
        project: &mut Option<Project>,
        collections: &mut Collections,
        settings: &mut ClientSettings,
        output_config: &mut OutputConfig,
        sound_data: &SoundSnapshot,
        midi_monitor_receiver: &kanal::Receiver<gled_protocol::midi::MidiMonitorEvent>,
        test_command_sender: &kanal::Sender<gled_protocol::midi::TestCommand>,
        midi_learn_state: &mut crate::midi_learn::LearnState,
        status: &gled_protocol::state::ServerStatus,
    ) {
        self.about.update(ctx);
        self.animations
            .update(ctx, timing, collections, settings, sound_data);
        self.channel_overwrites.update(ctx, project, collections);
        self.curves.update(ctx, collections);
        self.errors.update(ctx);
        self.git_config.update(ctx, status);
        self.midi_controllers.update(
            ctx,
            project,
            collections,
            midi_monitor_receiver,
            test_command_sender,
            midi_learn_state,
        );
        let midi_diagnostics = self.midi_controllers.diagnostics();
        self.external_device_settings
            .update(ctx, project, collections, &midi_diagnostics, status);
        self.fixture_window.update(ctx, project, collections);
        if let Some(definition) = self.fixture_window.take_definitions_request() {
            self.fixture_definitions.open_with(definition);
        }
        self.fixture_definitions.update(ctx, collections);
        self.output_devices.update(ctx, collections);
        self.output_routings.update(ctx, collections, output_config);
        self.palettes.update(ctx, collections);
        self.projects.update(ctx, collections);
        self.scenes
            .update(ctx, timing, collections, settings, sound_data);
        self.shortcuts.update(ctx, project);
    }
}