audio-oxide/au-o2-gui/src/editor/modules.rs

91 lines
3.9 KiB
Rust

use iced::Task;
use super::{Editor, Message};
use crate::engine::EngineCommand;
impl Editor {
pub(crate) fn handle_modules(&mut self, message: Message) -> Task<Message> {
match message {
Message::AddModuleToTrack(track_idx, module_type) => {
self.routing.handle_add_module(track_idx, module_type, &self.tracks, self.engine.as_ref());
}
Message::RemoveModuleFromTrack(track_idx, module_id) => {
let module_gui = &mut self.module_gui;
if self.routing.handle_remove_module(
track_idx, module_id, &mut self.tracks, self.engine.as_ref(),
&mut self.module_params,
&mut |mid| module_gui.handle_module_removed(mid),
) {
self.mark_dirty();
}
}
Message::ToggleModuleDisabled(track_idx, module_id) => {
if self.routing.handle_toggle_disabled(track_idx, module_id, &self.tracks, self.engine.as_ref()) {
self.mark_dirty();
}
}
Message::MoveModuleUp(track_idx, module_id) => {
if self.routing.handle_move_module_up(track_idx, module_id, &mut self.tracks, self.engine.as_ref()) {
self.mark_dirty();
}
}
Message::MoveModuleDown(track_idx, module_id) => {
if self.routing.handle_move_module_down(track_idx, module_id, &mut self.tracks, self.engine.as_ref()) {
self.mark_dirty();
}
}
Message::ShowModulePicker(track_idx) => {
self.routing.module_picker_track = Some(track_idx);
}
Message::HideModulePicker => {
self.routing.module_picker_track = None;
}
Message::LoadPluginOnTrack(track_idx, plugin_path) => {
self.routing.handle_load_plugin(track_idx, plugin_path, &self.tracks, self.engine.as_ref());
}
Message::SetAnalysisFftSize(size) => {
self.analysis_fft_size = size;
if let Some(ref engine) = self.engine {
engine.send(EngineCommand::SetHilbertFftSize { size });
}
}
Message::SetHilbertFftSize(size) => {
self.analysis_fft_size = size;
if let Some(ref engine) = self.engine {
engine.send(EngineCommand::SetHilbertFftSize { size });
}
}
Message::SetVisualizerBufferSize(_size) => {
}
Message::ExpandModule(module_id) => {
if self.module_params.expanded == Some(module_id) {
self.module_params.expanded = None;
} else {
self.module_params.expanded = Some(module_id);
if !self.module_params.descriptors.contains_key(&module_id) {
if let Some(ref engine) = self.engine {
engine.send(EngineCommand::QueryModuleParams { module_id });
}
}
}
}
Message::CollapseModule => {
self.module_params.expanded = None;
}
Message::SetModuleParam { module_id, key, value } => {
self.module_params.values.insert((module_id, key.clone()), value);
self.module_gui.write_param(module_id, &key, value);
if let Some(ref engine) = self.engine {
engine.send(EngineCommand::SetParam { module_id, key, value });
}
}
Message::SelectTrackAndExpandModule { track_index, module_id } => {
self.selected_track = Some(track_index);
return self.update(Message::ExpandModule(module_id));
}
_ => {}
}
Task::none()
}
}