Advertisement
loloof64

My Dioxus app

Jul 2nd, 2023
1,339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.49 KB | None | 0 0
  1. #[allow(non_snake_case)]
  2. fn App(cx: Scope) -> Element {
  3.     let program_path = use_state(cx, || "".to_string());
  4.     let command = use_state(cx, || "".to_string());
  5.     let is_selecting_program = use_state(cx, || false);
  6.  
  7.     let process_handler = Rc::new(RefCell::new(ProcessHandler::new()));
  8.     let process_handler_clone = process_handler.clone();
  9.     let process_handler_clone_2 = process_handler.clone();
  10.     let process_handler_clone_3 = process_handler.clone();
  11.  
  12.     use_component_lifecycle(
  13.         cx,
  14.         move || (),
  15.         move || {
  16.             process_handler.borrow_mut().dispose();
  17.         },
  18.     );
  19.  
  20.     use_future(cx, (), move |_| async move {
  21.         loop {
  22.             let lines = process_handler_clone_3.borrow_mut().read_output();
  23.             lines.into_iter().for_each(|line| println!("{}", line));
  24.             tokio::time::sleep(Duration::from_millis(10)).await;
  25.         }
  26.     });
  27.  
  28.     if *is_selecting_program.current() {
  29.         cx.render(rsx! {
  30.             FileExplorer {
  31.                 on_cancel: |_| is_selecting_program.set(false),
  32.                 on_validate: |path_string| {
  33.                     is_selecting_program.set(false);
  34.                     program_path.set(path_string);
  35.                 },
  36.             }
  37.         })
  38.     } else {
  39.         cx.render(rsx! {div {
  40.             style { include_str!("./style.css") }
  41.             div {
  42.                 class: "fieldsLine",
  43.                 input {
  44.                     value: "{command}",
  45.                     oninput: move |evt| command.set(evt.value.clone())
  46.                 }
  47.                 button {
  48.                     onclick: move |_| {
  49.                         process_handler_clone_2.borrow_mut().send_command(command.to_string());
  50.                     },
  51.                     "Send command"
  52.                 }
  53.             }
  54.         }
  55.         div {
  56.             class: "fieldsLine",
  57.             input {
  58.                 value: "{program_path}",
  59.                 oninput: move |evt| program_path.set(evt.value.clone())
  60.             }
  61.             button {
  62.                 onclick: move |_| is_selecting_program.set(true),
  63.                 "Select program"
  64.             }
  65.         }
  66.         button {
  67.             onclick: move |_| {
  68.                 match process_handler_clone.borrow_mut().start_program(program_path.get()) {
  69.                     Err(e) => eprintln!("{}", e),
  70.                     _ => ()
  71.                 }
  72.             },
  73.             "Start program"
  74.         },
  75.         })
  76.     }
  77. }
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement