mirror of https://codeberg.org/topola/topola.git
egui: get rid of unnecessary persistence of langid, separate into Config struct
This commit is contained in:
parent
2f672d41c2
commit
fa81cd360a
|
|
@ -16,6 +16,7 @@ use topola::{
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
activity::{ActivityStatus, ActivityStepperWithStatus},
|
activity::{ActivityStatus, ActivityStepperWithStatus},
|
||||||
|
config::Config,
|
||||||
error_dialog::ErrorDialog,
|
error_dialog::ErrorDialog,
|
||||||
file_receiver::FileReceiver,
|
file_receiver::FileReceiver,
|
||||||
layers::Layers,
|
layers::Layers,
|
||||||
|
|
@ -26,52 +27,36 @@ use crate::{
|
||||||
viewport::Viewport,
|
viewport::Viewport,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Deserialize/Serialize is needed to persist app state between restarts.
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
#[serde(default)]
|
|
||||||
pub struct App {
|
pub struct App {
|
||||||
|
config: Config,
|
||||||
translator: Translator,
|
translator: Translator,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
maybe_overlay: Option<Overlay>,
|
maybe_overlay: Option<Overlay>,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
arc_mutex_maybe_invoker: Arc<Mutex<Option<Invoker<SpecctraMesadata>>>>,
|
arc_mutex_maybe_invoker: Arc<Mutex<Option<Invoker<SpecctraMesadata>>>>,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
maybe_activity: Option<ActivityStepperWithStatus>,
|
maybe_activity: Option<ActivityStepperWithStatus>,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
content_channel: (Sender<String>, Receiver<String>),
|
content_channel: (Sender<String>, Receiver<String>),
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
history_channel: (Sender<String>, Receiver<String>),
|
history_channel: (Sender<String>, Receiver<String>),
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
viewport: Viewport,
|
viewport: Viewport,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
menu_bar: MenuBar,
|
menu_bar: MenuBar,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
status_bar: StatusBar,
|
status_bar: StatusBar,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
error_dialog: ErrorDialog,
|
error_dialog: ErrorDialog,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
maybe_layers: Option<Layers>,
|
maybe_layers: Option<Layers>,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
maybe_design: Option<SpecctraDesign>,
|
maybe_design: Option<SpecctraDesign>,
|
||||||
|
|
||||||
#[serde(skip)]
|
|
||||||
update_counter: f32,
|
update_counter: f32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for App {
|
impl Default for App {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
config: Config::default(),
|
||||||
translator: Translator::new(langid!("en-US")),
|
translator: Translator::new(langid!("en-US")),
|
||||||
maybe_overlay: None,
|
maybe_overlay: None,
|
||||||
arc_mutex_maybe_invoker: Arc::new(Mutex::new(None)),
|
arc_mutex_maybe_invoker: Arc::new(Mutex::new(None)),
|
||||||
|
|
@ -92,19 +77,15 @@ impl Default for App {
|
||||||
impl App {
|
impl App {
|
||||||
/// Called once on start.
|
/// Called once on start.
|
||||||
pub fn new(cc: &eframe::CreationContext<'_>, langid: LanguageIdentifier) -> Self {
|
pub fn new(cc: &eframe::CreationContext<'_>, langid: LanguageIdentifier) -> Self {
|
||||||
// Load previous app state if one exists.
|
let mut this = Self {
|
||||||
if let Some(storage) = cc.storage {
|
|
||||||
let this = Self {
|
|
||||||
translator: Translator::new(langid),
|
|
||||||
..eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default()
|
|
||||||
};
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
Self {
|
|
||||||
translator: Translator::new(langid),
|
translator: Translator::new(langid),
|
||||||
..Default::default()
|
..Default::default()
|
||||||
|
};
|
||||||
|
// Load previous app state if one exists.
|
||||||
|
if let Some(storage) = cc.storage {
|
||||||
|
this.config = eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
this
|
||||||
}
|
}
|
||||||
|
|
||||||
fn advance_state_by_dt(&mut self, dt: f32) {
|
fn advance_state_by_dt(&mut self, dt: f32) {
|
||||||
|
|
@ -196,7 +177,7 @@ impl App {
|
||||||
impl eframe::App for App {
|
impl eframe::App for App {
|
||||||
/// Called to save state before shutdown.
|
/// Called to save state before shutdown.
|
||||||
fn save(&mut self, storage: &mut dyn eframe::Storage) {
|
fn save(&mut self, storage: &mut dyn eframe::Storage) {
|
||||||
eframe::set_value(storage, eframe::APP_KEY, self);
|
eframe::set_value(storage, eframe::APP_KEY, &self.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called each time the UI has to be repainted.
|
/// Called each time the UI has to be repainted.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#[derive(Clone, Debug, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||||
|
#[serde(default)]
|
||||||
|
pub struct Config {
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for Config {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
mod action;
|
mod action;
|
||||||
mod activity;
|
mod activity;
|
||||||
mod app;
|
mod app;
|
||||||
|
mod config;
|
||||||
mod error_dialog;
|
mod error_dialog;
|
||||||
mod file_receiver;
|
mod file_receiver;
|
||||||
mod file_sender;
|
mod file_sender;
|
||||||
|
|
@ -16,18 +17,19 @@ mod viewport;
|
||||||
|
|
||||||
use app::App;
|
use app::App;
|
||||||
use sys_locale::get_locale;
|
use sys_locale::get_locale;
|
||||||
use unic_langid::langid;
|
use unic_langid::{LanguageIdentifier, langid};
|
||||||
|
|
||||||
|
fn get_langid() -> LanguageIdentifier {
|
||||||
|
get_locale()
|
||||||
|
.and_then(|langname| langname.parse().ok())
|
||||||
|
.unwrap_or(langid!("en-US"))
|
||||||
|
}
|
||||||
|
|
||||||
// Build to native.
|
// Build to native.
|
||||||
#[cfg(not(target_arch = "wasm32"))]
|
#[cfg(not(target_arch = "wasm32"))]
|
||||||
fn main() -> eframe::Result<()> {
|
fn main() -> eframe::Result<()> {
|
||||||
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
env_logger::init(); // Log to stderr (if you run with `RUST_LOG=debug`).
|
||||||
|
let langid = get_langid();
|
||||||
let langid = if let Some(langname) = get_locale() {
|
|
||||||
langname.parse().unwrap_or(langid!("en-US"))
|
|
||||||
} else {
|
|
||||||
langid!("en-US")
|
|
||||||
};
|
|
||||||
|
|
||||||
let native_options = eframe::NativeOptions {
|
let native_options = eframe::NativeOptions {
|
||||||
viewport: egui::ViewportBuilder::default()
|
viewport: egui::ViewportBuilder::default()
|
||||||
|
|
@ -49,7 +51,6 @@ fn main() {
|
||||||
|
|
||||||
// Redirect `log` message to `console.log`:
|
// Redirect `log` message to `console.log`:
|
||||||
eframe::WebLogger::init(log::LevelFilter::Debug).ok();
|
eframe::WebLogger::init(log::LevelFilter::Debug).ok();
|
||||||
|
|
||||||
let web_options = eframe::WebOptions::default();
|
let web_options = eframe::WebOptions::default();
|
||||||
|
|
||||||
wasm_bindgen_futures::spawn_local(async {
|
wasm_bindgen_futures::spawn_local(async {
|
||||||
|
|
@ -64,11 +65,12 @@ fn main() {
|
||||||
.dyn_into::<eframe::web_sys::HtmlCanvasElement>()
|
.dyn_into::<eframe::web_sys::HtmlCanvasElement>()
|
||||||
.expect("topola-egui was not a HtmlCanvasElement");
|
.expect("topola-egui was not a HtmlCanvasElement");
|
||||||
|
|
||||||
|
let langid = get_langid();
|
||||||
let start_result = eframe::WebRunner::new()
|
let start_result = eframe::WebRunner::new()
|
||||||
.start(
|
.start(
|
||||||
canvas,
|
canvas,
|
||||||
web_options,
|
web_options,
|
||||||
Box::new(|cc| Ok(Box::new(App::new(cc, langid!("en-US"))))),
|
Box::new(|cc| Ok(Box::new(App::new(cc, langid)))),
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue