Skip to content

Commit 236c07b

Browse files
committed
event selection
1 parent c1a0d43 commit 236c07b

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

src/selection.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,22 @@ pub struct SelectedLine(pub Entity);
88
#[derive(Component, Debug)]
99
pub struct Selected;
1010

11+
/// Select a [Entity] in the world
1112
#[derive(Event)]
12-
pub struct SelectNoteEvent(pub Entity);
13+
pub struct SelectEvent(pub Entity);
1314

1415
pub struct SelectionPlugin;
1516

1617
impl Plugin for SelectionPlugin {
1718
fn build(&self, app: &mut App) {
18-
app.add_event::<SelectNoteEvent>()
19+
app.add_event::<SelectEvent>()
1920
.add_systems(Update, handle_select_event.run_if(project_loaded()));
2021
}
2122
}
2223

2324
pub fn handle_select_event(
2425
mut commands: Commands,
25-
mut select_events: EventReader<SelectNoteEvent>,
26+
mut select_events: EventReader<SelectEvent>,
2627
) {
2728
for event in select_events.read() {
2829
commands.entity(event.0).insert(Selected);

src/tab/timeline.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::{
1111
},
1212
constants::{BASE_ZOOM, CANVAS_WIDTH, INDICATOR_POSITION},
1313
misc::WorkingDirectory,
14-
selection::{SelectNoteEvent, Selected, SelectedLine},
14+
selection::{SelectEvent, Selected, SelectedLine},
1515
timing::{BpmList, ChartTime},
1616
};
1717
use crate::widgets::event::event_ui;
@@ -31,10 +31,10 @@ pub fn timeline_ui_system(
3131
selected_line_query: Res<SelectedLine>,
3232
timeline_viewport: Res<TimelineViewport>,
3333
bpm_list: Res<BpmList>,
34-
event_query: Query<(&LineEvent, &Parent)>,
34+
event_query: Query<(&LineEvent, &Parent, Entity, Option<&Selected>)>,
3535
note_query: Query<(&Note, &Parent, Entity, Option<&Selected>)>,
3636
working_dir: Res<WorkingDirectory>,
37-
mut select_events: EventWriter<SelectNoteEvent>,
37+
mut select_events: EventWriter<SelectEvent>,
3838
timeline: Timeline,
3939
timeline_settings: Res<TimelineSettings>,
4040
) {
@@ -67,7 +67,7 @@ pub fn timeline_ui_system(
6767

6868
let event_timeline_viewport = viewport.event_timeline_viewport();
6969

70-
for (event, parent) in event_query.iter() {
70+
for (event, parent, entity, selected) in event_query.iter() {
7171
if parent.get() != selected_line {
7272
continue;
7373
}
@@ -92,8 +92,8 @@ pub fn timeline_ui_system(
9292

9393
let center = egui::Pos2::new(x, y - size.y / 2.0);
9494

95-
if event_ui(ui, egui::Rect::from_center_size(center, size)).clicked() {
96-
println!("{:?}", event);
95+
if event_ui(ui, egui::Rect::from_center_size(center, size), selected.is_some()).clicked() {
96+
select_events.send(SelectEvent(entity));
9797
}
9898
}
9999

@@ -153,7 +153,7 @@ pub fn timeline_ui_system(
153153
);
154154

155155
if response.clicked() {
156-
select_events.send(SelectNoteEvent(entity));
156+
select_events.send(SelectEvent(entity));
157157
}
158158
}
159159

src/widgets/event.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
use egui::{Color32, Response, Sense, Ui};
22

3-
pub fn event_ui(ui: &mut Ui, rect: egui::Rect) -> Response {
3+
pub fn event_ui(ui: &mut Ui, rect: egui::Rect, selected: bool) -> Response {
44
let response = ui.allocate_rect(rect, Sense::click());
55
if ui.is_rect_visible(rect) {
66
ui.painter().rect(
77
rect,
88
0.0,
9-
Color32::LIGHT_BLUE,
9+
if selected {
10+
Color32::LIGHT_GREEN
11+
} else {
12+
Color32::LIGHT_BLUE
13+
},
1014
egui::Stroke::new(2.0, Color32::WHITE),
1115
);
1216
}

0 commit comments

Comments
 (0)