@@ -48,13 +48,21 @@ impl TabPlugin {
4848impl ControlPanel {
4949 pub fn play_control_ui (
5050 ui : & mut Ui ,
51+ state : & mut NotationState ,
52+ theme : & mut NotationTheme ,
5153 settings : & mut NotationSettings ,
5254 midi_state : & mut MidiState ,
5355 play_control_evts : & mut EventWriter < PlayControlEvent > ,
5456 ) {
5557 CollapsingHeader :: new ( "Play Control" )
5658 . default_open ( true )
5759 . show ( ui, |ui| {
60+ let add_ready_section = settings. add_ready_section ;
61+ ui. checkbox ( & mut settings. add_ready_section , "Add Empty Bar" ) ;
62+ if add_ready_section != settings. add_ready_section {
63+ state. bars_range = None ;
64+ Control :: reload_tab ( state, theme) ;
65+ }
5866 let play_title = if midi_state. play_control . play_state . is_playing ( ) {
5967 "Pause"
6068 } else {
@@ -69,24 +77,26 @@ impl ControlPanel {
6977 MidiControl :: send_play_state_evt ( midi_state, play_control_evts) ;
7078 }
7179 }
72- } ) ;
73- let should_loop = settings. should_loop ;
74- ui. horizontal ( |ui| {
80+ let should_loop = settings. should_loop ;
7581 ui. checkbox ( & mut settings. should_loop , "Loop" ) ;
7682 if should_loop != settings. should_loop {
7783 MidiControl :: sync_should_loop ( settings, midi_state, play_control_evts)
7884 }
85+ } ) ;
86+ let begin_bar_number = state. calc_bar_number ( settings. add_ready_section , midi_state. play_control . begin_bar_ordinal ) ;
87+ let end_bar_number = state. calc_bar_number ( settings. add_ready_section , midi_state. play_control . end_bar_ordinal ) ;
88+ ui. horizontal ( |ui| {
7989 if ui
8090 . button ( format ! (
8191 "Begin: {}" ,
82- midi_state . play_control . begin_bar_ordinal
92+ begin_bar_number
8393 ) )
8494 . clicked ( )
8595 {
8696 MidiControl :: set_begin_bar_ordinal ( midi_state, play_control_evts) ;
8797 }
8898 if ui
89- . button ( format ! ( "End: {}" , midi_state . play_control . end_bar_ordinal ) )
99+ . button ( format ! ( "End: {}" , end_bar_number ) )
90100 . clicked ( )
91101 {
92102 MidiControl :: set_end_bar_ordinal ( midi_state, play_control_evts) ;
@@ -95,6 +105,23 @@ impl ControlPanel {
95105 MidiControl :: clear_begin_end ( midi_state, play_control_evts) ;
96106 }
97107 } ) ;
108+ if let Some ( ( begin, end) ) = state. bars_range {
109+ let ( begin, end) = if settings. add_ready_section {
110+ ( begin, end)
111+ } else {
112+ ( begin + 1 , end + 1 )
113+ } ;
114+ if ui. button ( format ! ( "Clear Visible Bars: {} - {}" , begin, end) ) . clicked ( ) {
115+ state. bars_range = None ;
116+ Control :: reload_tab ( state, theme) ;
117+ }
118+ } else if midi_state. play_control . has_selection ( settings. add_ready_section ) {
119+ let bars_range = ( midi_state. play_control . begin_bar_ordinal , midi_state. play_control . end_bar_ordinal ) ;
120+ if ui. button ( format ! ( "Set Visible Bars: {} - {}" , begin_bar_number, end_bar_number) ) . clicked ( ) {
121+ state. bars_range = Some ( bars_range) ;
122+ Control :: reload_tab ( state, theme) ;
123+ }
124+ }
98125 ui. separator ( ) ;
99126 let mut speed_factor = settings. speed_factor ;
100127 ui. add ( Slider :: new ( & mut speed_factor, 0.1 ..=2.0 ) . text ( "Speed" ) ) ;
0 commit comments