81 lines
2.1 KiB
Rust
81 lines
2.1 KiB
Rust
use std::io::Read;
|
|
|
|
use chrono::NaiveDate;
|
|
use egui_extras::DatePickerButton;
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::PROJECT_FOLDER;
|
|
|
|
#[derive(Serialize, Deserialize)]
|
|
pub struct ProjectContext {
|
|
date: NaiveDate,
|
|
project_name: String,
|
|
project_author: String,
|
|
project_description: String,
|
|
}
|
|
|
|
impl ProjectContext {
|
|
#[allow(dead_code)]
|
|
pub fn new() -> Self {
|
|
Self::default()
|
|
}
|
|
|
|
pub fn load() -> Self {
|
|
let path = PROJECT_FOLDER.join("context.json");
|
|
if let Ok(mut file) = std::fs::File::open(path) {
|
|
let mut contents = String::new();
|
|
file.read_to_string(&mut contents).unwrap();
|
|
if let Ok(proj) = serde_json::from_str(&contents) {
|
|
return proj;
|
|
}
|
|
}
|
|
Self::default()
|
|
}
|
|
|
|
pub fn save(&self) {
|
|
let path = PROJECT_FOLDER.join("context.json");
|
|
let content = serde_json::to_string_pretty(self).unwrap();
|
|
std::fs::write(path, content).unwrap();
|
|
}
|
|
|
|
#[allow(dead_code)]
|
|
pub fn ui(&mut self, ui: &mut egui::Ui) {
|
|
// table
|
|
egui::Grid::new("context_editor")
|
|
.striped(true)
|
|
.num_columns(2)
|
|
.show(ui, |ui| {
|
|
ui.label("Project Name");
|
|
ui.text_edit_singleline(&mut self.project_name);
|
|
|
|
ui.end_row();
|
|
|
|
ui.label("Project Author");
|
|
ui.text_edit_singleline(&mut self.project_author);
|
|
|
|
ui.end_row();
|
|
|
|
ui.label("Project Description");
|
|
ui.text_edit_singleline(&mut self.project_description);
|
|
|
|
ui.end_row();
|
|
|
|
ui.label("Date");
|
|
ui.add(DatePickerButton::new(&mut self.date));
|
|
|
|
ui.end_row();
|
|
});
|
|
}
|
|
}
|
|
|
|
impl Default for ProjectContext {
|
|
fn default() -> Self {
|
|
Self {
|
|
date: chrono::Local::now().naive_local().into(),
|
|
project_name: "New Project".to_string(),
|
|
project_author: "Your Name".to_string(),
|
|
project_description: "Description of your project".to_string(),
|
|
}
|
|
}
|
|
}
|