@@ -134,10 +134,14 @@ fn setup_camera(mut commands: Commands) {
134134}
135135
136136fn load_tab (
137+ mut commands : Commands ,
138+ time : Res < Time > ,
137139 mut state : ResMut < NotationAppState > ,
140+ mut theme : ResMut < NotationTheme > ,
138141 entities : Query < Entity , With < GlobalTransform > > ,
139142 assets : ResMut < Assets < TabAsset > > ,
140143 mut evts : EventWriter < AddTabEvent > ,
144+ viewer_query : Query < ( Entity , & Arc < NotationViewer > ) , With < Arc < NotationViewer > > > ,
141145) {
142146 if state. window_width > 0.0 && state. window_height > 0.0 && state. tab . is_none ( ) && state. parse_error . is_none ( ) {
143147 let mut count = 0 ;
@@ -146,13 +150,34 @@ fn load_tab(
146150 }
147151 //A bit hacky to make sure despawning finished, otherwise might got panic with "Entity not exist"
148152 if count > 1 {
149- println ! ( "Waiting for entities to be despawned: {}" , count) ;
153+ if state. _despawn_delay_seconds > 0.0 {
154+ state. _despawn_delay_seconds -= time. delta_seconds ( ) ;
155+ println ! ( "load_tab(): Waiting to despawn: {} -> {}" , count, state. _despawn_delay_seconds) ;
156+ return ;
157+ }
158+ let mut despawn_count = 0 ;
159+ for ( entity, _viewer) in viewer_query. iter ( ) {
160+ commands. entity ( entity) . despawn_recursive ( ) ;
161+ despawn_count += 1 ;
162+ }
163+ if despawn_count > 0 {
164+ println ! ( "load_tab(): Despawning viewers: {} {}" , despawn_count, count) ;
165+ } else {
166+ println ! ( "load_tab(): Waiting for entities to be despawned: {}" , count) ;
167+ }
168+ return ;
169+ }
170+ if state. _load_tab_delay_seconds > 0.0 {
171+ state. _load_tab_delay_seconds -= time. delta_seconds ( ) ;
172+ println ! ( "load_tab(): Waiting to Load tab: -> {}" , state. _load_tab_delay_seconds) ;
150173 return ;
151174 }
175+ println ! ( "\n load_tab(): Loading: {}" , state. tab_path) ;
152176 if let Some ( asset) = assets. get ( & state. tab_asset ) {
153177 match Tab :: try_parse_arc ( asset. tab . clone ( ) ) {
154178 Ok ( tab) => {
155179 state. tab = Some ( tab. clone ( ) ) ;
180+ theme. loaded = true ;
156181 evts. send ( AddTabEvent ( tab) ) ;
157182 }
158183 Err ( err) => {
@@ -165,17 +190,19 @@ fn load_tab(
165190}
166191
167192fn handle_keyboard_inputs (
168- mut commands : Commands ,
169193 keyboard_input : Res < Input < KeyCode > > ,
170- mut state : ResMut < NotationAppState > ,
194+ mut app_state : ResMut < NotationAppState > ,
171195 mut settings : ResMut < NotationSettings > ,
196+ mut theme : ResMut < NotationTheme > ,
172197 mut midi_state : ResMut < MidiState > ,
173198 mut play_control_evts : EventWriter < PlayControlEvent > ,
174199 mut window_resized_evts : EventWriter < WindowResizedEvent > ,
175- viewer_query : Query < ( Entity , & Arc < NotationViewer > ) , With < Arc < NotationViewer > > > ,
176200) {
201+ if app_state. tab . is_none ( ) {
202+ return ;
203+ }
177204 if keyboard_input. just_released ( KeyCode :: LControl ) {
178- state . hide_control = !state . hide_control ;
205+ app_state . hide_control = !app_state . hide_control ;
179206 if !ControlView :: HUD_MODE {
180207 window_resized_evts. send ( WindowResizedEvent ( ) ) ;
181208 }
@@ -184,19 +211,23 @@ fn handle_keyboard_inputs(
184211 } else if keyboard_input. just_released ( KeyCode :: Return ) {
185212 crate :: viewer:: control:: ControlView :: play_or_stop ( & mut midi_state, & mut play_control_evts) ;
186213 } else if keyboard_input. just_released ( KeyCode :: Backslash ) {
187- crate :: viewer:: control:: ControlView :: toggle_layout_mode ( & mut commands , & mut state , & mut settings , & viewer_query ) ;
214+ crate :: viewer:: control:: ControlView :: toggle_layout_mode ( & mut app_state , & mut settings , & mut theme ) ;
188215 }
189216}
190217
191218fn handle_mouse_inputs (
192219 windows : Res < Windows > ,
193220 mouse_input : Res < Input < MouseButton > > ,
221+ app_state : Res < NotationAppState > ,
194222 settings : Res < NotationSettings > ,
195223 mut mouse_motion_events : EventReader < MouseMotion > ,
196224 mut mouse_wheel_input : EventReader < bevy:: input:: mouse:: MouseWheel > ,
197225 mut mouse_clicked : EventWriter < MouseClickedEvent > ,
198226 mut mouse_dragged : EventWriter < MouseDraggedEvent > ,
199227) {
228+ if app_state. tab . is_none ( ) {
229+ return ;
230+ }
200231 if mouse_input. just_released ( MouseButton :: Left ) {
201232 windows
202233 . get_primary ( )
@@ -235,6 +266,9 @@ fn handle_touch_inputs(
235266 mut mouse_clicked : EventWriter < MouseClickedEvent > ,
236267 //mut mouse_dragged: EventWriter<MouseDraggedEvent>,
237268) {
269+ if app_state. tab . is_none ( ) {
270+ return ;
271+ }
238272 for ( _index, finger) in touch_input. iter ( ) . enumerate ( ) {
239273 if touch_input. just_pressed ( finger. id ( ) ) {
240274 windows
@@ -288,6 +322,9 @@ fn on_window_resized(
288322 mut app_state : ResMut < NotationAppState > ,
289323 mut window_resized_evts : EventWriter < WindowResizedEvent > ,
290324) {
325+ if app_state. tab . is_none ( ) {
326+ return ;
327+ }
291328 for evt in evts. iter ( ) {
292329 if evt. width as usize != window. width as usize
293330 || evt. height as usize != window. height as usize
0 commit comments