From ba8f68deb96c68c0eb341101ba4433617e77ec36 Mon Sep 17 00:00:00 2001 From: Liby Lee Date: Wed, 9 Oct 2019 22:32:19 -0400 Subject: [PATCH] Done unhide all functionality --- src/main.rs | 2 + src/systems/geometry_actions/mod.rs | 3 ++ .../geometry_actions/unhide_all_handler.rs | 50 +++++++++++++++++++ src/systems/interactions/hide/mod.rs | 5 +- .../hide/unhide_all_via_keyboard.rs | 23 +++++++++ 5 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 src/systems/geometry_actions/unhide_all_handler.rs create mode 100644 src/systems/interactions/hide/unhide_all_via_keyboard.rs diff --git a/src/main.rs b/src/main.rs index ff461d8..a10af2a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,6 +32,7 @@ fn main() { .with(interactions::remove::RemoveSelectedViaDelete, "remove_selected_via_delete", &[]) .with(interactions::create::line::AbortCreateLineViaKeyboard, "abort_create_line_via_keyboard", &[]) .with(interactions::hide::HideSelectedViaKeyboard, "hide_selected_via_keyboard", &[]) + .with(interactions::hide::UnhideAllViaKeyboard, "unhide_all_via_keyboard", &[]) .with(interactions::history::UndoViaKeyboard, "undo_via_keyboard", &[]) .with(interactions::history::RedoViaKeyboard, "redo_via_keyboard", &[]) @@ -58,6 +59,7 @@ fn main() { .with(geometry_actions::SeldeAllHandler::default(), "selde_all_handler", &["selde_all_via_keyboard", "selde_via_mouse"]) .with(geometry_actions::RemoveSelectedHandler::default(), "remove_selected_handler", &["remove_selected_via_delete", "dependency_graph_cache"]) .with(geometry_actions::HideSelectedHandler::default(), "hide_selected_handler", &["hide_selected_via_keyboard"]) + .with(geometry_actions::UnhideAllHandler::default(), "unhide_all_handler", &["unhide_all_via_keyboard"]) // Geometry helpers .with(interactions::create::point::SnapPointSystem, "snap_point_system", &["spatial_hash_cache", "tool_state_manager", "viewport_state_manager"]) diff --git a/src/systems/geometry_actions/mod.rs b/src/systems/geometry_actions/mod.rs index 2f92ebb..eec58cd 100644 --- a/src/systems/geometry_actions/mod.rs +++ b/src/systems/geometry_actions/mod.rs @@ -4,6 +4,9 @@ pub use remove_selected_handler::*; mod hide_selected_handler; pub use hide_selected_handler::*; +mod unhide_all_handler; +pub use unhide_all_handler::*; + mod selde_all_handler; pub use selde_all_handler::*; diff --git a/src/systems/geometry_actions/unhide_all_handler.rs b/src/systems/geometry_actions/unhide_all_handler.rs new file mode 100644 index 0000000..93ec8e3 --- /dev/null +++ b/src/systems/geometry_actions/unhide_all_handler.rs @@ -0,0 +1,50 @@ +use specs::prelude::*; +use crate::{ + resources::{ + events::{ + GeometryAction, GeometryActionChannel, GeometryActionReader, + SketchEvent, SketchEventChannel + }, + }, + components::Hidden, +}; + +pub struct UnhideAllHandler { + geometry_action_reader: Option, +} + +impl Default for UnhideAllHandler { + fn default() -> Self { + Self { geometry_action_reader: None } + } +} + +impl<'a> System<'a> for UnhideAllHandler { + type SystemData = ( + Entities<'a>, + Read<'a, GeometryActionChannel>, + Write<'a, SketchEventChannel>, + ReadStorage<'a, Hidden>, + ); + + fn setup(&mut self, world: &mut World) { + Self::SystemData::setup(world); + self.geometry_action_reader = Some(world.fetch_mut::().register_reader()); + } + + fn run(&mut self, (entities, geometry_actiona_channel, mut sketch_event_channel, hidden): Self::SystemData) { + if let Some(reader_id) = &mut self.geometry_action_reader { + for event in geometry_actiona_channel.read(reader_id) { + match event { + GeometryAction::UnhideAll => { + for (entity, _) in (&entities, &hidden).join() { + sketch_event_channel.single_write(SketchEvent::unhide(entity)); + } + break; + }, + _ => (), + } + } + } + } +} \ No newline at end of file diff --git a/src/systems/interactions/hide/mod.rs b/src/systems/interactions/hide/mod.rs index df2e262..5a00f8e 100644 --- a/src/systems/interactions/hide/mod.rs +++ b/src/systems/interactions/hide/mod.rs @@ -1,2 +1,5 @@ mod hide_selected_via_keyboard; -pub use hide_selected_via_keyboard::*; \ No newline at end of file +pub use hide_selected_via_keyboard::*; + +mod unhide_all_via_keyboard; +pub use unhide_all_via_keyboard::*; \ No newline at end of file diff --git a/src/systems/interactions/hide/unhide_all_via_keyboard.rs b/src/systems/interactions/hide/unhide_all_via_keyboard.rs new file mode 100644 index 0000000..f718594 --- /dev/null +++ b/src/systems/interactions/hide/unhide_all_via_keyboard.rs @@ -0,0 +1,23 @@ +use specs::prelude::*; +use crate::{ + utilities::Key, + resources::{ + InputState, + events::{GeometryAction, GeometryActionChannel}, + }, +}; + +pub struct UnhideAllViaKeyboard; + +impl<'a> System<'a> for UnhideAllViaKeyboard { + type SystemData = ( + Read<'a, InputState>, + Write<'a, GeometryActionChannel>, + ); + + fn run(&mut self, (input_state, mut geometry_action_channel): Self::SystemData) { + if input_state.keyboard.just_activated(Key::H) && input_state.keyboard.is_shift_activated() && input_state.keyboard.is_command_activated() { + geometry_action_channel.single_write(GeometryAction::UnhideAll); + } + } +} \ No newline at end of file