@@ -11,11 +11,12 @@ use crate::sim::chain::AmplifierChain;
1111pub struct AmplifierApp {
1212 processor_manager : ProcessorManager ,
1313 stages : Vec < StageConfig > ,
14- selected_stage_type : StageType ,
1514 is_recording : bool ,
1615 preset_manager : PresetManager ,
1716 selected_preset : Option < String > ,
1817 preset_bar : PresetBar ,
18+ stage_list : StageList ,
19+ control_bar : Control ,
1920 new_preset_name : String ,
2021 show_save_input : bool ,
2122}
@@ -43,14 +44,18 @@ impl AmplifierApp {
4344 Vec :: new ( )
4445 } ;
4546
47+ let stage_list = StageList :: new ( stages. clone ( ) ) ;
48+ let control_bar = Control :: new ( StageType :: default ( ) ) ;
49+
4650 let app = Self {
4751 processor_manager,
4852 stages,
49- selected_stage_type : StageType :: default ( ) ,
5053 is_recording : false ,
5154 preset_manager,
5255 selected_preset,
5356 preset_bar,
57+ stage_list,
58+ control_bar,
5459 new_preset_name : String :: new ( ) ,
5560 show_save_input : false ,
5661 } ;
@@ -63,33 +68,38 @@ impl AmplifierApp {
6368
6469 pub fn update ( & mut self , message : Message ) -> Task < Message > {
6570 let mut should_update_chain = false ;
71+ let mut should_update_stages = false ;
6672
6773 match message {
6874 Message :: AddStage => {
69- let new_stage = StageConfig :: create_default ( self . selected_stage_type ) ;
75+ let new_stage = StageConfig :: create_default ( self . control_bar . selected ( ) ) ;
7076 self . stages . push ( new_stage) ;
7177 should_update_chain = true ;
78+ should_update_stages = true ;
7279 }
7380 Message :: RemoveStage ( idx) => {
7481 if idx < self . stages . len ( ) {
7582 self . stages . remove ( idx) ;
7683 }
7784 should_update_chain = true ;
85+ should_update_stages = true ;
7886 }
7987 Message :: MoveStageUp ( idx) => {
8088 if idx > 0 {
8189 self . stages . swap ( idx - 1 , idx) ;
8290 should_update_chain = true ;
91+ should_update_stages = true ;
8392 }
8493 }
8594 Message :: MoveStageDown ( idx) => {
8695 if idx < self . stages . len ( ) . saturating_sub ( 1 ) {
8796 self . stages . swap ( idx, idx + 1 ) ;
8897 should_update_chain = true ;
98+ should_update_stages = true ;
8999 }
90100 }
91101 Message :: StageTypeSelected ( stage_type) => {
92- self . selected_stage_type = stage_type;
102+ self . control_bar . set_selected_stage_type ( stage_type) ;
93103 }
94104 Message :: PresetSelected ( preset_name) => {
95105 if let Some ( preset) = self . preset_manager . get_preset_by_name ( & preset_name) {
@@ -98,6 +108,7 @@ impl AmplifierApp {
98108 self . preset_bar
99109 . set_selected_preset ( Some ( preset_name. clone ( ) ) ) ;
100110 should_update_chain = true ;
111+ should_update_stages = true ;
101112 info ! ( "Loaded preset: {preset_name}" ) ;
102113 }
103114 }
@@ -205,6 +216,7 @@ impl AmplifierApp {
205216 Message :: Stage ( idx, stage_msg) => {
206217 if self . update_stage ( idx, stage_msg) {
207218 should_update_chain = true ;
219+ should_update_stages = true
208220 }
209221 }
210222 }
@@ -213,6 +225,10 @@ impl AmplifierApp {
213225 self . update_processor_chain ( ) ;
214226 }
215227
228+ if should_update_stages {
229+ self . stage_list . set_stages ( & self . stages ) ;
230+ }
231+
216232 Task :: none ( )
217233 }
218234
@@ -308,14 +324,14 @@ impl AmplifierApp {
308324 self . processor_manager . set_amp_chain ( chain) ;
309325 }
310326
311- pub fn view ( & self ) -> Element < Message > {
327+ pub fn view ( & self ) -> Element < ' _ , Message > {
312328 use iced:: widget:: { column, container} ;
313329
314330 container (
315331 column ! [
316332 self . preset_bar. view( ) ,
317- StageList :: new ( & self . stages ) . view( ) ,
318- Control :: new ( self . selected_stage_type , self . is_recording) . view ( )
333+ self . stage_list . view( ) ,
334+ self . control_bar . view ( self . is_recording) ,
319335 ]
320336 . spacing ( 20 )
321337 . padding ( 20 ) ,
0 commit comments