This commit is contained in:
Sarah Jamie Lewis 2020-07-05 20:45:19 -07:00
parent f5908ef0d5
commit ca34a58760
9 changed files with 22 additions and 25 deletions

View File

@ -8,13 +8,13 @@ pub mod parser;
pub mod widget_builders;
use crate::parser::QML;
use crate::parser::{parse_qml, Value};
use crate::widget_builders::{QmlWidgetBuilder, QmlContext};
use crate::widget_builders::{QmlContext, QmlWidgetBuilder};
use evmap::{ReadHandle, WriteHandle};
use rand::Rng;
use std::borrow::BorrowMut;
use std::collections::VecDeque;
use std::sync::mpsc;
use rand::Rng;
#[macro_use]
extern crate pest_derive;
@ -40,8 +40,10 @@ impl Widget for MainViewState {
let (r, w) = evmap::new();
let mut qmlctx = QmlContext{ indexes: vec![], code: Default::default() };
let mut qmlctx = QmlContext {
indexes: vec![],
code: Default::default(),
};
let this = QmlWidgetBuilder::new().build(widget, 0, 0, top_level[0].0.clone(), top_level[0].1.clone(), ctx, qmlctx.borrow_mut()); //render_ctx(widget, ctx, &top_level, 0, 0, ids.borrow_mut()).unwrap();
ctx.register_state(
this,
@ -124,19 +126,16 @@ impl State for MVState {
fn update(&mut self, _registry: &mut Registry, ctx: &mut Context) {
match self.value_map.1.borrow_mut() {
Some(w) => {
self.engine.register_fn("rand_opacity", move || -> (f32) {
let mut rng = rand::thread_rng();
rng.gen_range(0.0,1.0) as f32
rng.gen_range(0.0, 1.0) as f32
});
for ((entity, property), code) in self.ids.code.iter() {
let result = self.engine.eval::<(f32)>(code.as_str());
let point = result.unwrap();
let point = result.unwrap();
println!("{}.{} = {} {:?}", entity, property, code, point);
ctx.child(entity.as_str()).set::<f32>(property, point);
}
for id in self.ids.indexes.iter() {
@ -148,7 +147,6 @@ impl State for MVState {
}
w.update(id.clone() + ".text", res.as_string());
}
}
w.refresh();
}

View File

@ -1,7 +1,7 @@
use crate::parser::Value::{QmlIdent, QmlString};
use crate::parser::{Value, QML};
use crate::state;
use crate::widget_builders::{WidgetBuilder, QmlContext};
use crate::widget_builders::{QmlContext, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;

View File

@ -1,5 +1,5 @@
use crate::parser::{Value, QML};
use crate::widget_builders::{parse_number, QmlWidgetBuilder, WidgetBuilder, QmlContext};
use crate::widget_builders::{parse_number, QmlContext, QmlWidgetBuilder, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;

View File

@ -1,7 +1,7 @@
use crate::parser::Value::{QmlIdent, QmlString};
use crate::parser::{Value, QML};
use crate::state;
use crate::widget_builders::{WidgetBuilder, QmlContext};
use crate::widget_builders::{QmlContext, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;
@ -21,7 +21,7 @@ impl WidgetBuilder for ImageBuilder {
qmlctx.indexes.push(text.clone());
text.clone()
}
_ => String::new()
_ => String::new(),
};
let src = match properties.get("source") {

View File

@ -1,6 +1,6 @@
use crate::parser::Value::QmlString;
use crate::parser::{parse_qml, Value, QML};
use crate::widget_builders::{parse_number, QmlWidgetBuilder, WidgetBuilder, QmlContext};
use crate::widget_builders::{parse_number, QmlContext, QmlWidgetBuilder, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;

View File

@ -8,19 +8,19 @@ use crate::widget_builders::textfield::TextBuilder;
use orbtk::prelude::*;
use orbtk::Entity;
use crate::widget_builders::image::ImageBuilder;
use crate::widget_builders::import::ImportBuilder;
use std::collections::HashMap;
use crate::widget_builders::image::ImageBuilder;
pub mod button;
pub mod grid;
pub mod image;
pub mod import;
pub mod rectangle;
pub mod textedit;
pub mod textfield;
pub mod image;
pub fn parse_color_property(properties: &HashMap<String,Value>, prop: &str) -> Color {
pub fn parse_color_property(properties: &HashMap<String, Value>, prop: &str) -> Color {
match properties.get(prop) {
Some(QmlString(col)) => match col.as_str() {
"red" => Color::rgb(0xff, 00, 00),
@ -39,9 +39,9 @@ fn parse_number(val: Option<&Value>) -> f64 {
}
#[derive(Clone)]
pub struct QmlContext{
pub struct QmlContext {
pub(crate) indexes: Vec<String>,
pub(crate) code: HashMap<(String, String),String>
pub(crate) code: HashMap<(String, String), String>,
}
pub trait WidgetBuilder {

View File

@ -1,6 +1,6 @@
use crate::parser::Value::QmlString;
use crate::parser::{Value, QML};
use crate::widget_builders::{parse_number, QmlWidgetBuilder, WidgetBuilder, QmlContext, parse_color_property};
use crate::widget_builders::{parse_color_property, parse_number, QmlContext, QmlWidgetBuilder, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;
@ -13,11 +13,10 @@ impl WidgetBuilder for RectangleBuilder {
let _width = parse_number(properties.get("width"));
let _height = parse_number(properties.get("height"));
let mut rect = Container::new();
rect = rect.background(parse_color_property(&properties, "color"));
rect = rect.border_brush(parse_color_property(&properties, "border.color"));
rect = rect.border_width(Thickness::new(1.0,1.0,1.0,1.0));
rect = rect.border_width(Thickness::new(1.0, 1.0, 1.0, 1.0));
rect = rect.attach(Grid::row(row as usize));
rect = rect.attach(Grid::column(col as usize));
let qwb = QmlWidgetBuilder::new();

View File

@ -1,7 +1,7 @@
use crate::parser::Value::{QmlIdent, QmlString};
use crate::parser::{Value, QML};
use crate::state;
use crate::widget_builders::{WidgetBuilder, QmlContext};
use crate::widget_builders::{QmlContext, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;

View File

@ -1,6 +1,6 @@
use crate::parser::Value::{QmlIdent, QmlString};
use crate::parser::{Value, QML};
use crate::widget_builders::{WidgetBuilder, QmlContext};
use crate::widget_builders::{QmlContext, WidgetBuilder};
use orbtk::prelude::HashMap;
use orbtk::prelude::*;
use orbtk::Entity;