Load in from S-expr file

main
~erin 2023-04-28 21:52:05 -04:00
parent aa336e60d4
commit e2b0b6b0f6
Signed by: erin
GPG Key ID: 9A8E308CEFA37A47
7 changed files with 107 additions and 94 deletions

156
dist/fplanner.js vendored
View File

@ -215,7 +215,7 @@ function makeMutClosure(arg0, arg1, dtor, f) {
function __wbg_adapter_32(arg0, arg1) {
try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h6b7aee7372379c0b(retptr, arg0, arg1);
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1082de2ba93ea56e(retptr, arg0, arg1);
var r0 = getInt32Memory0()[retptr / 4 + 0];
var r1 = getInt32Memory0()[retptr / 4 + 1];
if (r1) {
@ -227,7 +227,7 @@ function __wbg_adapter_32(arg0, arg1) {
}
function __wbg_adapter_35(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha0ce2942859e959a(arg0, arg1, addHeapObject(arg2));
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h2640ff30468f914a(arg0, arg1, addHeapObject(arg2));
}
function __wbg_adapter_38(arg0, arg1, arg2) {
@ -882,6 +882,13 @@ function getImports() {
const ret = getObject(arg0).setTimeout(getObject(arg1), arg2);
return ret;
}, arguments) };
imports.wbg.__wbg_matches_7b5ad9e6bb56f1f3 = function(arg0) {
const ret = getObject(arg0).matches;
return ret;
};
imports.wbg.__wbg_drawBuffersWEBGL_dfb0d803ea7ebe07 = function(arg0, arg1) {
getObject(arg0).drawBuffersWEBGL(getObject(arg1));
};
imports.wbg.__wbg_addEventListener_615d4590d38da1c9 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));
}, arguments) };
@ -913,20 +920,17 @@ function getImports() {
const ret = getObject(arg0).getContext(getStringFromWasm0(arg1, arg2), getObject(arg3));
return isLikeNone(ret) ? 0 : addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_matches_7b5ad9e6bb56f1f3 = function(arg0) {
const ret = getObject(arg0).matches;
imports.wbg.__wbg_now_c644db5194be8437 = function(arg0) {
const ret = getObject(arg0).now();
return ret;
};
imports.wbg.__wbg_drawBuffersWEBGL_dfb0d803ea7ebe07 = function(arg0, arg1) {
getObject(arg0).drawBuffersWEBGL(getObject(arg1));
};
imports.wbg.__wbg_writeText_eb90459f8e0f70d4 = function(arg0, arg1, arg2) {
const ret = getObject(arg0).writeText(getStringFromWasm0(arg1, arg2));
return addHeapObject(ret);
};
imports.wbg.__wbg_now_c644db5194be8437 = function(arg0) {
const ret = getObject(arg0).now();
return ret;
imports.wbg.__wbg_dataTransfer_445ade328cdd17c8 = function(arg0) {
const ret = getObject(arg0).dataTransfer;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_items_6415b6b2cd06ac5f = function(arg0) {
const ret = getObject(arg0).items;
@ -943,10 +947,6 @@ function getImports() {
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
}, arguments) };
imports.wbg.__wbg_dataTransfer_445ade328cdd17c8 = function(arg0) {
const ret = getObject(arg0).dataTransfer;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_length_03c61261420b999d = function(arg0) {
const ret = getObject(arg0).length;
return ret;
@ -963,6 +963,17 @@ function getImports() {
const ret = getObject(arg0).videoHeight;
return ret;
};
imports.wbg.__wbg_name_ccf3024ae4e3ac54 = function(arg0, arg1) {
const ret = getObject(arg1).name;
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
imports.wbg.__wbg_lastModified_32c6de706a583a54 = function(arg0) {
const ret = getObject(arg0).lastModified;
return ret;
};
imports.wbg.__wbg_keyCode_b33194be2ceec53b = function(arg0) {
const ret = getObject(arg0).keyCode;
return ret;
@ -1005,27 +1016,6 @@ function getImports() {
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
}, arguments) };
imports.wbg.__wbg_clipboardData_ac331f6733f5f16f = function(arg0) {
const ret = getObject(arg0).clipboardData;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_preventDefault_16b2170b12f56317 = function(arg0) {
getObject(arg0).preventDefault();
};
imports.wbg.__wbg_stopPropagation_7647c9985222f9b0 = function(arg0) {
getObject(arg0).stopPropagation();
};
imports.wbg.__wbg_name_ccf3024ae4e3ac54 = function(arg0, arg1) {
const ret = getObject(arg1).name;
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
imports.wbg.__wbg_lastModified_32c6de706a583a54 = function(arg0) {
const ret = getObject(arg0).lastModified;
return ret;
};
imports.wbg.__wbg_parentElement_0e8c9afce5cb9d6e = function(arg0) {
const ret = getObject(arg0).parentElement;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
@ -1034,14 +1024,6 @@ function getImports() {
const ret = getObject(arg0).appendChild(getObject(arg1));
return addHeapObject(ret);
}, arguments) };
imports.wbg.__wbg_width_8a17f65e11a44bf6 = function(arg0) {
const ret = getObject(arg0).width;
return ret;
};
imports.wbg.__wbg_height_641410e41fce27a6 = function(arg0) {
const ret = getObject(arg0).height;
return ret;
};
imports.wbg.__wbg_identifier_3e06c0d82cde247d = function(arg0) {
const ret = getObject(arg0).identifier;
return ret;
@ -1109,12 +1091,15 @@ function getImports() {
const ret = getObject(arg0).getBoundingClientRect();
return addHeapObject(ret);
};
imports.wbg.__wbg_data_70b505c651722930 = function(arg0, arg1) {
const ret = getObject(arg1).data;
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
imports.wbg.__wbg_clipboardData_ac331f6733f5f16f = function(arg0) {
const ret = getObject(arg0).clipboardData;
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_preventDefault_16b2170b12f56317 = function(arg0) {
getObject(arg0).preventDefault();
};
imports.wbg.__wbg_stopPropagation_7647c9985222f9b0 = function(arg0) {
getObject(arg0).stopPropagation();
};
imports.wbg.__wbg_href_bb86bb94d1c6861b = function() { return handleError(function (arg0, arg1) {
const ret = getObject(arg1).href;
@ -1172,6 +1157,14 @@ function getImports() {
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
}, arguments) };
imports.wbg.__wbg_width_8a17f65e11a44bf6 = function(arg0) {
const ret = getObject(arg0).width;
return ret;
};
imports.wbg.__wbg_height_641410e41fce27a6 = function(arg0) {
const ret = getObject(arg0).height;
return ret;
};
imports.wbg.__wbg_size_5ce324b99223d189 = function(arg0) {
const ret = getObject(arg0).size;
return ret;
@ -1187,15 +1180,6 @@ function getImports() {
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
imports.wbg.__wbg_drawArraysInstancedANGLE_403faa11d52ccf6d = function(arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).drawArraysInstancedANGLE(arg1 >>> 0, arg2, arg3, arg4);
};
imports.wbg.__wbg_drawElementsInstancedANGLE_0230afc27cf9cec9 = function(arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).drawElementsInstancedANGLE(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);
};
imports.wbg.__wbg_vertexAttribDivisorANGLE_6bbb3df4c6e7d08b = function(arg0, arg1, arg2) {
getObject(arg0).vertexAttribDivisorANGLE(arg1 >>> 0, arg2 >>> 0);
};
imports.wbg.__wbg_size_88fc46d83abb907c = function(arg0) {
const ret = getObject(arg0).size;
return ret;
@ -1204,6 +1188,13 @@ function getImports() {
const ret = getObject(arg0).arrayBuffer();
return addHeapObject(ret);
};
imports.wbg.__wbg_data_70b505c651722930 = function(arg0, arg1) {
const ret = getObject(arg1).data;
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len0 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len0;
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
};
imports.wbg.__wbg_setProperty_21e2e7868b86a93e = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
}, arguments) };
@ -1223,22 +1214,6 @@ function getImports() {
const ret = getObject(arg0).left;
return ret;
};
imports.wbg.__wbg_length_e330009c21d43b27 = function(arg0) {
const ret = getObject(arg0).length;
return ret;
};
imports.wbg.__wbg_get_460ba3644fab1c42 = function(arg0, arg1) {
const ret = getObject(arg0)[arg1 >>> 0];
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_width_716d2242c9bd6c20 = function(arg0) {
const ret = getObject(arg0).width;
return ret;
};
imports.wbg.__wbg_height_d45e4d57562f8ae0 = function(arg0) {
const ret = getObject(arg0).height;
return ret;
};
imports.wbg.__wbg_getItem_f0d43fc4e780b652 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
@ -1261,6 +1236,23 @@ function getImports() {
const ret = getObject(arg0)[arg1 >>> 0];
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_drawArraysInstancedANGLE_403faa11d52ccf6d = function(arg0, arg1, arg2, arg3, arg4) {
getObject(arg0).drawArraysInstancedANGLE(arg1 >>> 0, arg2, arg3, arg4);
};
imports.wbg.__wbg_drawElementsInstancedANGLE_0230afc27cf9cec9 = function(arg0, arg1, arg2, arg3, arg4, arg5) {
getObject(arg0).drawElementsInstancedANGLE(arg1 >>> 0, arg2, arg3 >>> 0, arg4, arg5);
};
imports.wbg.__wbg_vertexAttribDivisorANGLE_6bbb3df4c6e7d08b = function(arg0, arg1, arg2) {
getObject(arg0).vertexAttribDivisorANGLE(arg1 >>> 0, arg2 >>> 0);
};
imports.wbg.__wbg_length_e330009c21d43b27 = function(arg0) {
const ret = getObject(arg0).length;
return ret;
};
imports.wbg.__wbg_get_460ba3644fab1c42 = function(arg0, arg1) {
const ret = getObject(arg0)[arg1 >>> 0];
return isLikeNone(ret) ? 0 : addHeapObject(ret);
};
imports.wbg.__wbg_instanceof_HtmlInputElement_5c9d54338207f061 = function(arg0) {
let result;
try {
@ -1287,6 +1279,14 @@ function getImports() {
imports.wbg.__wbg_setvalue_a706abe70dab1b65 = function(arg0, arg1, arg2) {
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
};
imports.wbg.__wbg_width_716d2242c9bd6c20 = function(arg0) {
const ret = getObject(arg0).width;
return ret;
};
imports.wbg.__wbg_height_d45e4d57562f8ae0 = function(arg0) {
const ret = getObject(arg0).height;
return ret;
};
imports.wbg.__wbg_framebufferTextureMultiviewOVR_0ae55d2aa52fd2cb = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {
getObject(arg0).framebufferTextureMultiviewOVR(arg1 >>> 0, arg2 >>> 0, getObject(arg3), arg4, arg5, arg6);
};
@ -1818,16 +1818,16 @@ function getImports() {
const ret = wasm.memory;
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper4239 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper4374 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 308, __wbg_adapter_32);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper4240 = function(arg0, arg1, arg2) {
imports.wbg.__wbindgen_closure_wrapper4376 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 308, __wbg_adapter_35);
return addHeapObject(ret);
};
imports.wbg.__wbindgen_closure_wrapper4340 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 348, __wbg_adapter_38);
imports.wbg.__wbindgen_closure_wrapper4475 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 349, __wbg_adapter_38);
return addHeapObject(ret);
};

BIN
dist/fplanner_bg.wasm vendored

Binary file not shown.

View File

@ -1,7 +1,7 @@
pub mod components;
pub mod draw;
mod structure;
use serde_lexpr::{from_str, print::*, to_string_custom};
use serde_lexpr::{from_str, print, to_string_custom};
use chrono::prelude::Utc;
use chrono_humanize::HumanTime;
@ -88,15 +88,28 @@ impl eframe::App for PlannerApp {
// The top panel is often a good place for a menu bar:
egui::menu::bar(ui, |ui| {
ui.menu_button("File", |ui| {
if ui.button("Load").clicked() {
if let Some(path) = rfd::FileDialog::new()
.add_filter("plan", &["splan"])
.set_title("Load Plan")
.pick_file()
{
let read = std::fs::read_to_string(path.display().to_string()).unwrap();
println!("{}", &read);
let sexpr: structure::Project = from_str(&read).unwrap();
println!("{:?}", &sexpr);
*current_project = sexpr;
}
}
if ui.button("Save As").clicked() {
let options = Options::default();
let options = print::Options::default();
let sexpr = to_string_custom(
&current_project,
options
.with_keyword_syntax(KeywordSyntax::ColonPrefix)
.with_nil_syntax(NilSyntax::Token)
.with_bool_syntax(BoolSyntax::Token)
.with_vector_syntax(VectorSyntax::Octothorpe),
.with_keyword_syntax(print::KeywordSyntax::ColonPrefix)
.with_nil_syntax(print::NilSyntax::Token)
.with_bool_syntax(print::BoolSyntax::Token)
.with_vector_syntax(print::VectorSyntax::Octothorpe),
)
.unwrap();

View File

@ -10,7 +10,7 @@ pub enum Unit {
Foot(f64),
}
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone)]
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone, Debug)]
pub enum ComponentType {
Wall,
Door,
@ -20,7 +20,7 @@ pub enum ComponentType {
Furniture,
}
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone)]
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone, Debug)]
pub enum Material {
Metal,
Wood,
@ -29,7 +29,7 @@ pub enum Material {
Cement,
}
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone)]
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone, Debug)]
#[serde(default)]
pub struct Component {
pub id: Uuid,

View File

@ -1,7 +1,7 @@
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone)]
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone, Debug)]
pub struct Position(f64, f64, f64);
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone)]
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Clone, Debug)]
pub enum Shape {
Circle(Position, f64), // Centre, Radius
Rectangle(Position, Position), // Top-left, Bottom-right

View File

@ -4,7 +4,7 @@ use uuid::Uuid;
use super::components::Component;
#[derive(serde::Deserialize, serde::Serialize, PartialEq)]
#[derive(serde::Deserialize, serde::Serialize, PartialEq, Debug)]
pub enum License {
MIT,
GPL,
@ -12,7 +12,7 @@ pub enum License {
CNPL,
}
#[derive(serde::Deserialize, serde::Serialize, Clone)]
#[derive(serde::Deserialize, serde::Serialize, Clone, Debug)]
#[serde(default)]
pub struct Layer {
pub zindex: usize,
@ -32,7 +32,7 @@ impl Default for Layer {
}
}
#[derive(serde::Deserialize, serde::Serialize)]
#[derive(serde::Deserialize, serde::Serialize, Debug)]
#[serde(default)] // if we add new fields, give them default values when deserializing old state
pub struct Project {
pub id: Uuid,

View File

@ -1,9 +1,9 @@
(
(id . "5d932ba0-8912-4e53-95b7-5152bab827ac")
(name . "Meow")
(name . "Test Edit!")
(created . "2023-04-29T00:28:43.560471889Z")
(modified "2023-04-29T00:30:40.945891620Z")
(license . CNPL)
(license . MIT)
(layers
(0
(zindex . 0)