use entity::collection::{create_notebook_hierarchy, Node};
use ui_rs::{action, application, ui};
use ui_rs::ui::*;
-use crate::backend::{Backend, BackendHandle};
+use crate::backend::{Backend, BackendHandle, BroadcastMessage};
use crate::window::*;
fn main() {
};
let (backend_handle, join_handle) = backend.start();
+ let brx = backend_handle.btx.subscribe();
let mut app = App {
backend: backend_handle,
+ broadcast_rx: brx,
notebooks: notebooks,
};
ui::app_run(&mut app);
struct App {
backend: BackendHandle,
+ broadcast_rx: tokio::sync::broadcast::Receiver<BroadcastMessage>,
notebooks: Vec<Node>,
}
impl App {
#[action]
pub fn message(&mut self, _action: &ActionEvent) {
- println!("app message handler");
+ while let Ok(msg) = self.broadcast_rx.try_recv() {
+ match msg {
+ BroadcastMessage::NotebookStructureUpdate(nodes) => self.notebooks = nodes,
+ _ => {}
+ }
+ }
}
}
app.toolbar_add_default("new_note", ToolbarItemPosition::Left);
app.toolbar_appmenu(|menu|{
- menu.item("New Window").onclick(|f| new_app_window() ).create();
+ menu.item("New Window").onclick(|_| new_app_window() ).create();
});
}
use proc_macro::TokenStream;
use quote::quote;
-use syn::{parse_macro_input, Attribute, Data, DeriveInput, Expr, ExprLit, GenericArgument, ImplItem, ItemImpl, Lit, Meta, PathArguments, Type};
+use syn::{parse_macro_input, Attribute, Data, DeriveInput, Expr, ExprLit, ImplItem, ItemImpl, Lit, Meta, Type};
#[proc_macro_derive(UiModel, attributes(bind))]
pub fn derive_ui_model(input: TokenStream) -> TokenStream {
pub trait Application<T: UiModel + UiActions>: AppActions<T> {
fn on_startup(&mut self, app: &AppContext<T>);
- fn on_new_window(&mut self, app: &AppContext<T>) {}
+ fn on_new_window(&mut self, _app: &AppContext<T>) {}
fn on_exit(&mut self, _app: &AppContext<T>) { }
}