use gled_model::asset::midi_controller::{
MidiEffectTarget, MidiSceneTarget, MidiValueSource, MidiValueSourceKind,
};
pub(super) fn value_source_from_kind(
kind: MidiValueSourceKind,
current: MidiValueSource,
) -> MidiValueSource {
match kind {
MidiValueSourceKind::SelectedSceneOpacity => MidiValueSource::SelectedSceneOpacity,
MidiValueSourceKind::SelectedSceneDistributed => MidiValueSource::SelectedSceneDistributed,
MidiValueSourceKind::SelectedEffectDistributed => {
MidiValueSource::SelectedEffectDistributed
}
MidiValueSourceKind::SelectedSceneOpacityLive => MidiValueSource::SelectedSceneOpacityLive,
MidiValueSourceKind::SelectedSceneEffectLive => MidiValueSource::SelectedSceneEffectLive {
effect: current_effect_from_value_source(¤t),
parameter: match current {
MidiValueSource::SelectedSceneEffectLive { parameter, .. } => parameter,
_ => Default::default(),
},
},
MidiValueSourceKind::EffectSelected => MidiValueSource::EffectSelected {
index: match current {
MidiValueSource::EffectSelected { index } => index,
_ => 0,
},
},
MidiValueSourceKind::SelectedSceneInputDimmer => MidiValueSource::SelectedSceneInputDimmer,
MidiValueSourceKind::SelectedSceneBeatOffset => MidiValueSource::SelectedSceneBeatOffset,
MidiValueSourceKind::SelectedSceneIgnoreMainDimmer => {
MidiValueSource::SelectedSceneIgnoreMainDimmer
}
MidiValueSourceKind::SelectedSceneSetOffsetOnFlash => {
MidiValueSource::SelectedSceneSetOffsetOnFlash
}
MidiValueSourceKind::MainDimmer => MidiValueSource::MainDimmer,
MidiValueSourceKind::BeatFlankPulse => match current {
MidiValueSource::BeatFlankPulse {
start_beat,
end_beat,
blackout_blink_value,
} => MidiValueSource::BeatFlankPulse {
start_beat,
end_beat,
blackout_blink_value,
},
_ => MidiValueSource::BeatFlankPulse {
start_beat: 0.0,
end_beat: 0.0,
blackout_blink_value: None,
},
},
MidiValueSourceKind::Blackout => match current {
MidiValueSource::Blackout { inverted, blink } => {
MidiValueSource::Blackout { inverted, blink }
}
_ => MidiValueSource::Blackout {
inverted: false,
blink: false,
},
},
MidiValueSourceKind::SceneOpacity => MidiValueSource::SceneOpacity {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneInputDimmer => MidiValueSource::SceneInputDimmer {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneBeatOffset => MidiValueSource::SceneBeatOffset {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneIgnoreMainDimmer => MidiValueSource::SceneIgnoreMainDimmer {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneSetOffsetOnFlash => MidiValueSource::SceneSetOffsetOnFlash {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneActive => MidiValueSource::SceneActive {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneFlashed => MidiValueSource::SceneFlashed {
target: current_target_from_value_source(¤t),
},
MidiValueSourceKind::SceneEffectSettingF32 => MidiValueSource::SceneEffectSettingF32 {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
setting_index: current_setting_index_from_value_source(¤t),
},
MidiValueSourceKind::SceneEffectOpacity => MidiValueSource::SceneEffectOpacity {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
},
MidiValueSourceKind::SceneEffectColorShift => MidiValueSource::SceneEffectColorShift {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
},
MidiValueSourceKind::SceneEffectBeatProgression => {
MidiValueSource::SceneEffectBeatProgression {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
}
}
MidiValueSourceKind::SceneEffectBeatOffset => MidiValueSource::SceneEffectBeatOffset {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
},
MidiValueSourceKind::SceneEffectSpeedExponent => {
MidiValueSource::SceneEffectSpeedExponent {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
}
}
MidiValueSourceKind::SceneEffectLayout => MidiValueSource::SceneEffectLayout {
target: current_target_from_value_source(¤t),
effect: current_effect_from_value_source(¤t),
},
}
}
fn current_target_from_value_source(source: &MidiValueSource) -> MidiSceneTarget {
match source {
MidiValueSource::SceneOpacity { target }
| MidiValueSource::SceneInputDimmer { target }
| MidiValueSource::SceneBeatOffset { target }
| MidiValueSource::SceneIgnoreMainDimmer { target }
| MidiValueSource::SceneSetOffsetOnFlash { target }
| MidiValueSource::SceneActive { target }
| MidiValueSource::SceneFlashed { target }
| MidiValueSource::SceneEffectSettingF32 { target, .. }
| MidiValueSource::SceneEffectOpacity { target, .. }
| MidiValueSource::SceneEffectColorShift { target, .. }
| MidiValueSource::SceneEffectBeatProgression { target, .. }
| MidiValueSource::SceneEffectBeatOffset { target, .. }
| MidiValueSource::SceneEffectSpeedExponent { target, .. }
| MidiValueSource::SceneEffectLayout { target, .. } => target.clone(),
_ => MidiSceneTarget::Selected,
}
}
fn current_effect_from_value_source(source: &MidiValueSource) -> MidiEffectTarget {
match source {
MidiValueSource::SceneEffectSettingF32 { effect, .. }
| MidiValueSource::SceneEffectOpacity { effect, .. }
| MidiValueSource::SceneEffectColorShift { effect, .. }
| MidiValueSource::SceneEffectBeatProgression { effect, .. }
| MidiValueSource::SceneEffectBeatOffset { effect, .. }
| MidiValueSource::SceneEffectSpeedExponent { effect, .. }
| MidiValueSource::SceneEffectLayout { effect, .. }
| MidiValueSource::SelectedSceneEffectLive { effect, .. } => *effect,
_ => MidiEffectTarget::Selected,
}
}
fn current_setting_index_from_value_source(source: &MidiValueSource) -> u8 {
match source {
MidiValueSource::SceneEffectSettingF32 { setting_index, .. } => *setting_index,
_ => 0,
}
}
pub(super) fn value_source_uses_active_value(source: &MidiValueSource) -> bool {
match source {
MidiValueSource::SelectedSceneIgnoreMainDimmer
| MidiValueSource::SelectedSceneSetOffsetOnFlash
| MidiValueSource::BeatFlankPulse { .. }
| MidiValueSource::Blackout { .. }
| MidiValueSource::SceneIgnoreMainDimmer { .. }
| MidiValueSource::SceneSetOffsetOnFlash { .. }
| MidiValueSource::SceneActive { .. }
| MidiValueSource::SceneFlashed { .. }
| MidiValueSource::EffectSelected { .. } => true,
MidiValueSource::SelectedSceneOpacity
| MidiValueSource::SelectedSceneDistributed
| MidiValueSource::SelectedEffectDistributed
| MidiValueSource::SelectedSceneEffectLive { .. }
| MidiValueSource::SelectedSceneOpacityLive
| MidiValueSource::SelectedSceneInputDimmer
| MidiValueSource::SelectedSceneBeatOffset
| MidiValueSource::MainDimmer
| MidiValueSource::SceneOpacity { .. }
| MidiValueSource::SceneInputDimmer { .. }
| MidiValueSource::SceneBeatOffset { .. }
| MidiValueSource::SceneEffectSettingF32 { .. }
| MidiValueSource::SceneEffectOpacity { .. }
| MidiValueSource::SceneEffectColorShift { .. }
| MidiValueSource::SceneEffectBeatProgression { .. }
| MidiValueSource::SceneEffectBeatOffset { .. }
| MidiValueSource::SceneEffectSpeedExponent { .. }
| MidiValueSource::SceneEffectLayout { .. } => false,
}
}