better Opened window handling
This commit is contained in:
parent
dce98d333a
commit
ae154195b5
@ -7,8 +7,8 @@ use egui::{
|
|||||||
FontFamily, Key, RichText, SidePanel, Slider, TopBottomPanel, Vec2, Visuals, Window,
|
FontFamily, Key, RichText, SidePanel, Slider, TopBottomPanel, Vec2, Visuals, Window,
|
||||||
};
|
};
|
||||||
use instant::Duration;
|
use instant::Duration;
|
||||||
use std::collections::HashMap;
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use std::{collections::BTreeMap, io::Read, ops::BitXorAssign, str};
|
use std::{collections::BTreeSet, io::Read, ops::BitXorAssign, str};
|
||||||
|
|
||||||
#[cfg(threading)]
|
#[cfg(threading)]
|
||||||
use rayon::iter::{IndexedParallelIterator, ParallelIterator};
|
use rayon::iter::{IndexedParallelIterator, ParallelIterator};
|
||||||
@ -272,6 +272,22 @@ impl Default for AppSettings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Opened {
|
||||||
|
pub help: bool,
|
||||||
|
pub info: bool,
|
||||||
|
pub side_panel: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Opened {
|
||||||
|
fn default() -> Opened {
|
||||||
|
Self {
|
||||||
|
help: true,
|
||||||
|
info: true,
|
||||||
|
side_panel: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// The actual application
|
/// The actual application
|
||||||
pub struct MathApp {
|
pub struct MathApp {
|
||||||
/// Stores vector of functions
|
/// Stores vector of functions
|
||||||
@ -299,7 +315,7 @@ pub struct MathApp {
|
|||||||
text_boxes_focused: bool,
|
text_boxes_focused: bool,
|
||||||
|
|
||||||
/// Stores opened windows/elements for later reference
|
/// Stores opened windows/elements for later reference
|
||||||
opened: HashMap<&'static str, bool>,
|
opened: Opened,
|
||||||
|
|
||||||
/// Stores settings (pretty self-explanatory)
|
/// Stores settings (pretty self-explanatory)
|
||||||
settings: AppSettings,
|
settings: AppSettings,
|
||||||
@ -315,7 +331,7 @@ impl Default for MathApp {
|
|||||||
last_info: (vec![None], Duration::ZERO),
|
last_info: (vec![None], Duration::ZERO),
|
||||||
dark_mode: true,
|
dark_mode: true,
|
||||||
text_boxes_focused: false,
|
text_boxes_focused: false,
|
||||||
opened: HashMap::from([("help", true), ("info", false), ("side_panel", true)]),
|
opened: Opened::default(),
|
||||||
settings: AppSettings::default(),
|
settings: AppSettings::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -349,10 +365,6 @@ impl MathApp {
|
|||||||
Self::default() // initialize `MathApp`
|
Self::default() // initialize `MathApp`
|
||||||
}
|
}
|
||||||
|
|
||||||
fn get_opened_mut(&mut self, id: &str) -> &mut bool { self.opened.get_mut(id).unwrap() }
|
|
||||||
|
|
||||||
fn get_opened(&self, id: &str) -> bool { *self.opened.get(id).unwrap() }
|
|
||||||
|
|
||||||
/// Creates SidePanel which contains configuration options
|
/// Creates SidePanel which contains configuration options
|
||||||
fn side_panel(&mut self, ctx: &Context) {
|
fn side_panel(&mut self, ctx: &Context) {
|
||||||
// Side Panel which contains vital options to the operation of the application
|
// Side Panel which contains vital options to the operation of the application
|
||||||
@ -552,7 +564,8 @@ impl epi::App for MathApp {
|
|||||||
// this is behind this check as if it wasn't, it would trigger if the user
|
// this is behind this check as if it wasn't, it would trigger if the user
|
||||||
// presses the h key in a text box as well
|
// presses the h key in a text box as well
|
||||||
if !self.text_boxes_focused {
|
if !self.text_boxes_focused {
|
||||||
self.get_opened_mut("side_panel")
|
self.opened
|
||||||
|
.side_panel
|
||||||
.bitxor_assign(ctx.input().key_down(Key::H));
|
.bitxor_assign(ctx.input().key_down(Key::H));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -563,10 +576,9 @@ impl epi::App for MathApp {
|
|||||||
TopBottomPanel::top("top_bar").show(ctx, |ui| {
|
TopBottomPanel::top("top_bar").show(ctx, |ui| {
|
||||||
ui.horizontal(|ui| {
|
ui.horizontal(|ui| {
|
||||||
// Button in top bar to toggle showing the side panel
|
// Button in top bar to toggle showing the side panel
|
||||||
let side_curr_open = self.get_opened("help");
|
self.opened.side_panel.bitxor_assign(
|
||||||
self.get_opened_mut("side_panel").bitxor_assign(
|
|
||||||
ui.add(Button::new("Panel"))
|
ui.add(Button::new("Panel"))
|
||||||
.on_hover_text(match side_curr_open {
|
.on_hover_text(match self.opened.side_panel {
|
||||||
true => "Hide Side Panel",
|
true => "Hide Side Panel",
|
||||||
false => "Show Side Panel",
|
false => "Show Side Panel",
|
||||||
})
|
})
|
||||||
@ -585,10 +597,9 @@ impl epi::App for MathApp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Toggles opening the Help window
|
// Toggles opening the Help window
|
||||||
let help_curr_open = self.get_opened("help");
|
self.opened.help.bitxor_assign(
|
||||||
self.get_opened_mut("help").bitxor_assign(
|
|
||||||
ui.add(Button::new("Help"))
|
ui.add(Button::new("Help"))
|
||||||
.on_hover_text(match help_curr_open {
|
.on_hover_text(match self.opened.help {
|
||||||
true => "Close Help Window",
|
true => "Close Help Window",
|
||||||
false => "Open Help Window",
|
false => "Open Help Window",
|
||||||
})
|
})
|
||||||
@ -596,10 +607,9 @@ impl epi::App for MathApp {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Toggles opening the Info window
|
// Toggles opening the Info window
|
||||||
let info_curr_open = self.get_opened("info");
|
self.opened.info.bitxor_assign(
|
||||||
self.get_opened_mut("info").bitxor_assign(
|
|
||||||
ui.add(Button::new("Info"))
|
ui.add(Button::new("Info"))
|
||||||
.on_hover_text(match info_curr_open {
|
.on_hover_text(match self.opened.info {
|
||||||
true => "Close Info Window",
|
true => "Close Info Window",
|
||||||
false => "Open Info Window",
|
false => "Open Info Window",
|
||||||
})
|
})
|
||||||
@ -631,7 +641,7 @@ impl epi::App for MathApp {
|
|||||||
// Help window with information for users
|
// Help window with information for users
|
||||||
Window::new("Help")
|
Window::new("Help")
|
||||||
.default_pos([200.0, 200.0])
|
.default_pos([200.0, 200.0])
|
||||||
.open(self.get_opened_mut("help"))
|
.open(&mut self.opened.help)
|
||||||
.resizable(false)
|
.resizable(false)
|
||||||
.collapsible(false)
|
.collapsible(false)
|
||||||
.show(ctx, |ui| {
|
.show(ctx, |ui| {
|
||||||
@ -661,7 +671,7 @@ impl epi::App for MathApp {
|
|||||||
// Window with information about the build and current commit
|
// Window with information about the build and current commit
|
||||||
Window::new("Info")
|
Window::new("Info")
|
||||||
.default_pos([200.0, 200.0])
|
.default_pos([200.0, 200.0])
|
||||||
.open(self.get_opened_mut("info"))
|
.open(&mut self.opened.info)
|
||||||
.resizable(false)
|
.resizable(false)
|
||||||
.collapsible(false)
|
.collapsible(false)
|
||||||
.show(ctx, |ui| {
|
.show(ctx, |ui| {
|
||||||
@ -669,7 +679,7 @@ impl epi::App for MathApp {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// If side panel is enabled, show it.
|
// If side panel is enabled, show it.
|
||||||
if self.get_opened("side_panel") {
|
if self.opened.side_panel {
|
||||||
self.side_panel(ctx);
|
self.side_panel(ctx);
|
||||||
} else {
|
} else {
|
||||||
self.text_boxes_focused = false;
|
self.text_boxes_focused = false;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user