Skip to content

Commit 6d54ca2

Browse files
committed
fixes #147, can only show selected bars, also make empty bar as setting
1 parent 4bf76e7 commit 6d54ca2

File tree

20 files changed

+152
-48
lines changed

20 files changed

+152
-48
lines changed

apps/notation_kb/src/index_panel.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ impl IndexPanel {
124124
theme.sizes.melody.note_height = 8.0;
125125
theme.sizes.melody.semitone_height = 8.0;
126126
theme.texts.melody.text_y = -18.0;
127+
settings.add_ready_section = false;
127128
settings.hide_mini_map = true;
128129
settings.hide_bar_number = true;
129130
settings.layout.focus_bar_ease_ms = 0;

apps/notation_kb/src/kb.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,13 @@ impl NotationKnowledgeBase {
4141
mut windows: ResMut<Windows>,
4242
mut state: ResMut<NotationState>,
4343
mut theme: ResMut<NotationTheme>,
44+
settings: Res<NotationSettings>,
4445
mut evts: EventWriter<AddTabEvent>,
4546
entities: Query<Entity, With<GlobalTransform>>,
4647
viewer_query: Query<(Entity, &TabViewer), With<TabViewer>>,
4748
index: Res<IndexPanel>,
4849
) {
49-
NotationApp::load_tab(&mut commands, &time, &mut windows, &mut state, &mut theme, &mut evts, &entities, &viewer_query, |tab_path| {
50+
NotationApp::load_tab(&mut commands, &time, &mut windows, &mut state, &mut theme, &settings, &mut evts, &entities, &viewer_query, |tab_path| {
5051
index.make_tab(tab_path)
5152
})
5253
}

apps/notation_kb/src/theory/scale.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl ScalePage {
137137
new_bar(8),
138138
new_bar(12),
139139
];
140-
let section = ProtoSection::new("notes".to_owned(), SectionKind::Rest, bars);
140+
let section = ProtoSection::new("notes".to_owned(), SectionKind::Ready, bars);
141141
ProtoTab::new(
142142
ProtoTab::new_uuid().as_str(),
143143
meta,

apps/notation_viewer/src/viewer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@ impl NotationViewer {
3636
mut windows: ResMut<Windows>,
3737
mut state: ResMut<NotationState>,
3838
mut theme: ResMut<NotationTheme>,
39+
settings: Res<NotationSettings>,
3940
mut evts: EventWriter<AddTabEvent>,
4041
entities: Query<Entity, With<GlobalTransform>>,
4142
viewer_query: Query<(Entity, &TabViewer), With<TabViewer>>,
4243
asset_server: Res<AssetServer>,
4344
assets: Res<Assets<TabAsset>>,
4445
) {
45-
NotationApp::load_tab(&mut commands, &time, &mut windows, &mut state, &mut theme, &mut evts, &entities, &viewer_query, |tab_path| {
46+
NotationApp::load_tab(&mut commands, &time, &mut windows, &mut state, &mut theme, &settings, &mut evts, &entities, &viewer_query, |tab_path| {
4647
NotationApp::load_tab_from_assets(&asset_server, &assets, tab_path)
4748
})
4849
}
49-
5050
fn handle_keyboard_inputs(
5151
keyboard_input: Res<Input<KeyCode>>,
5252
egui_ctx: Res<EguiContext>,

crates/notation_bevy/src/bar/bar_view.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ impl BarView {
137137
commands,
138138
assets,
139139
bar_entity,
140-
&bar.props.bar_ordinal.to_string(),
140+
bar.props.bar_number.to_string().as_str(),
141141
);
142142
}
143143
bar_entity

crates/notation_bevy/src/guitar/guitar_view.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ impl GuitarView {
355355
}
356356
} else {
357357
let position = TabState::get_position(&tab_state_query, None);
358-
if position.is_some() && position.unwrap().bar.bar_ordinal == 0 {
358+
if settings.add_ready_section && position.is_some() && position.unwrap().bar.bar_ordinal == 0 {
359359
for (finger_entity, mut finger_data) in finger_query.iter_mut() {
360360
finger_data.reset();
361361
finger_data.update(&mut commands, &theme, finger_entity);

crates/notation_bevy/src/midi/midi_control.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ use notation_model::play::play_control::TickResult;
66
use notation_model::prelude::{JumpToBarEvent, PlayControlEvent, BarPosition, Tab, Units};
77
use notation_model::tab_bar::TabBar;
88

9-
use crate::settings::layout_settings::LayoutMode;
109
use crate::tab::tab_plugin::{TabPlugin};
1110

12-
use crate::prelude::{NotationState, NotationSettings, NotationTheme};
11+
use crate::prelude::{NotationSettings};
1312

1413
pub struct MidiControl();
1514

@@ -236,7 +235,7 @@ impl MidiControl {
236235
play_control_evts: &mut EventWriter<PlayControlEvent>,
237236
) {
238237
midi_state.play_control.begin_bar_ordinal = 0;
239-
midi_state.play_control.end_bar_ordinal = midi_state.play_control.get_last_car_ordinal();
238+
midi_state.play_control.end_bar_ordinal = midi_state.play_control.get_last_bar_ordinal();
240239
Self::send_begin_end_evt(midi_state, play_control_evts);
241240
}
242241
pub fn set_begin_bar_ordinal(

crates/notation_bevy/src/midi/mod.rs

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,21 @@ impl TabPlugin {
4848
impl 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"));

crates/notation_bevy/src/mini/mini_bar.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use notation_bevy_utils::prelude::{
77
BevyUtil, GridCell, LayoutAnchor, LayoutChangedQuery, OutlineRectangle, ShapeOp, View,
88
ViewBundle,
99
};
10-
use notation_model::prelude::{PlayingState, Syllable, TabBar};
10+
use notation_model::prelude::{PlayingState, Syllable, TabBar, SectionKind};
1111

1212
use crate::prelude::{BarData, BarPlaying, NotationAssets, NotationTheme};
1313
use crate::prelude::NotationLayout;
@@ -105,15 +105,15 @@ impl MiniBar {
105105
commands
106106
.entity(shape_entity)
107107
.insert(BarPlaying::new(bar, PlayingState::Idle));
108-
if bar.props.bar_index == 0 && bar.props.section_ordinal > 0 {
108+
if bar.props.bar_index == 0 && bar.section.kind != SectionKind::Ready {
109109
let section_separator_data =
110110
MiniSectionSeparatorData::new(bar, MiniSectionSeparatorValue::new(0.0));
111111
section_separator_data.create(commands, theme, bar_entity);
112112
theme.texts.mini_map.spawn_bar_text(
113113
commands,
114114
assets,
115115
shape_entity,
116-
bar.props.bar_ordinal.to_string().as_str(),
116+
bar.props.bar_number.to_string().as_str(),
117117
);
118118
}
119119
bar_entity

crates/notation_bevy/src/notation/app.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ impl NotationApp {
222222
windows: &mut Windows,
223223
state: &mut NotationState,
224224
theme: &mut NotationTheme,
225+
settings: &NotationSettings,
225226
evts: &mut EventWriter<AddTabEvent>,
226227
entities_query: &Query<Entity, With<GlobalTransform>>,
227228
viewer_query: &Query<(Entity, &TabViewer), With<TabViewer>>,
@@ -274,7 +275,7 @@ impl NotationApp {
274275
}
275276
println!("\nload_tab(): Loading: {}", state.tab_path);
276277
if let Some(tab) = load_tab(state.tab_path.clone()) {
277-
match Tab::try_parse_arc(tab) {
278+
match Tab::try_parse_arc(tab, settings.add_ready_section, state.bars_range) {
278279
Ok(tab) => {
279280
state.tab = Some(tab.clone());
280281
if let Some(window) = windows.get_primary_mut() {

0 commit comments

Comments
 (0)