opening files works o.o

This commit is contained in:
lunarydess
2025-02-18 17:18:12 +01:00
parent 2245bd0feb
commit 6025512ff9
4 changed files with 22 additions and 13 deletions

View File

@@ -10,6 +10,7 @@ eframe = { version = "0.31", default-features = false, features = [
"glow", "persistence", "glow", "persistence",
"wayland", "wayland",
] } ] }
rfd = "0.15"
env_logger = "0.11" env_logger = "0.11"
serde = { version = "1", features = ["derive"] } serde = { version = "1", features = ["derive"] }
egui_code_editor = { git = "https://github.com/lunarydess/Application-Catnip-Editor.git", version = "0.3.0-develop" } egui_code_editor = { git = "https://github.com/lunarydess/Application-Catnip-Editor.git", version = "0.3.0-develop" }

View File

@@ -1,31 +1,35 @@
use std::fs;
use eframe::epaint::text::TextWrapMode; use eframe::epaint::text::TextWrapMode;
use egui::ThemePreference; use egui::{TextBuffer, ThemePreference};
use egui_code_editor::{CodeEditor, ColorTheme, Syntax, DEFAULT_THEMES}; use egui_code_editor::{CodeEditor, ColorTheme, Syntax, DEFAULT_THEMES};
use std::option::Option;
#[derive(serde::Deserialize, serde::Serialize)] #[derive(serde::Deserialize, serde::Serialize)]
#[serde(default)] #[serde(default)]
pub struct TemplateApp { pub struct CatnipApp {
label: String, label: String,
#[serde(skip)] #[serde(skip)]
editor_theme: ColorTheme, editor_theme: ColorTheme,
#[serde(skip)] #[serde(skip)]
editor_syntax: Syntax, editor_syntax: Syntax,
editor_text: String,
#[serde(skip)] #[serde(skip)]
value: f32, value: f32,
} }
impl Default for TemplateApp { impl Default for CatnipApp {
fn default() -> Self { fn default() -> Self {
Self { Self {
label: "Hello World!".to_owned(), label: "Hello World!".to_owned(),
editor_theme: ColorTheme::default(), editor_theme: ColorTheme::default(),
editor_syntax: Syntax::default(), editor_syntax: Syntax::default(),
editor_text: "".to_owned(),
value: 2.7, value: 2.7,
} }
} }
} }
impl TemplateApp { impl CatnipApp {
pub fn new(cc: &eframe::CreationContext<'_>) -> Self { pub fn new(cc: &eframe::CreationContext<'_>) -> Self {
if let Some(storage) = cc.storage { if let Some(storage) = cc.storage {
return eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default(); return eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default();
@@ -34,7 +38,7 @@ impl TemplateApp {
} }
} }
impl eframe::App for TemplateApp { impl eframe::App for CatnipApp {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
// top bar // top bar
egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { egui::TopBottomPanel::top("top_panel").show(ctx, |ui| {
@@ -42,6 +46,11 @@ impl eframe::App for TemplateApp {
let is_web = cfg!(target_arch = "wasm32"); let is_web = cfg!(target_arch = "wasm32");
if !is_web { if !is_web {
ui.menu_button("File", |ui| { ui.menu_button("File", |ui| {
if ui.button("Open …").clicked() {
if let Some(path) = rfd::FileDialog::new().pick_file() {
self.editor_text = fs::read_to_string(path.display().to_string()).unwrap();
}
}
if ui.button("Quit").clicked() { if ui.button("Quit").clicked() {
ctx.send_viewport_cmd(egui::ViewportCommand::Close); ctx.send_viewport_cmd(egui::ViewportCommand::Close);
} }
@@ -70,10 +79,9 @@ impl eframe::App for TemplateApp {
.wrap_mode(TextWrapMode::Wrap) .wrap_mode(TextWrapMode::Wrap)
.selected_text(format!("{:?}", &self.editor_theme.name)) .selected_text(format!("{:?}", &self.editor_theme.name))
.show_ui(ui, |ui| { .show_ui(ui, |ui| {
let themes = DEFAULT_THEMES.iter().clone(); DEFAULT_THEMES.iter().clone().for_each(|theme| {
for theme in themes {
ui.selectable_value(&mut self.editor_theme, *theme, theme.name); ui.selectable_value(&mut self.editor_theme, *theme, theme.name);
} });
}); });
// syntax selector // syntax selector
@@ -106,7 +114,7 @@ impl eframe::App for TemplateApp {
.with_theme(self.editor_theme) .with_theme(self.editor_theme)
.with_syntax(self.editor_syntax.clone()) .with_syntax(self.editor_syntax.clone())
.with_numlines(true) .with_numlines(true)
.show(ui, &mut self.label); .show(ui, &mut self.editor_text);
}); });
// header example: // header example:

View File

@@ -1,2 +1,2 @@
mod app; mod app;
pub use app::TemplateApp; pub use app::CatnipApp;

View File

@@ -1,10 +1,10 @@
use eframe::Renderer; use eframe::Renderer;
use Application_Catnip::TemplateApp; use Application_Catnip::CatnipApp;
fn main() { fn main() {
env_logger::init(); env_logger::init();
eframe::run_native( eframe::run_native(
"Meow", "Catnip Editor",
eframe::NativeOptions { eframe::NativeOptions {
centered: true, centered: true,
renderer: Renderer::Glow, renderer: Renderer::Glow,
@@ -13,7 +13,7 @@ fn main() {
.with_min_inner_size([300.0, 220.0]), .with_min_inner_size([300.0, 220.0]),
..Default::default() ..Default::default()
}, },
Box::new(|context| Ok(Box::new(TemplateApp::new(context)))), Box::new(|context| Ok(Box::new(CatnipApp::new(context)))),
) )
.expect("TODO: panic message"); .expect("TODO: panic message");
} }