Advertisement
loloof64

My Dioxus App (new version)

Jul 2nd, 2023
1,432
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.72 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 = use_rw(cx, || 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.read().as_mut().unwrap().dispose();
  17.             process_handler.needs_update();
  18.         },
  19.     );
  20.  
  21.     use_future(cx, (), move |_| async move {
  22.         loop {
  23.             let lines = process_handler_clone_3.read().as_mut().unwrap().read_output();
  24.             process_handler_clone_3.needs_update();
  25.             lines.into_iter().for_each(|line| println!("{}", line));
  26.             tokio::time::sleep(Duration::from_millis(10)).await;
  27.         }
  28.     });
  29.  
  30.     if *is_selecting_program.current() {
  31.         cx.render(rsx! {
  32.             FileExplorer {
  33.                 on_cancel: |_| is_selecting_program.set(false),
  34.                 on_validate: |path_string| {
  35.                     is_selecting_program.set(false);
  36.                     program_path.set(path_string);
  37.                 },
  38.             }
  39.         })
  40.     } else {
  41.         cx.render(rsx! {div {
  42.             style { include_str!("./style.css") }
  43.             div {
  44.                 class: "fieldsLine",
  45.                 input {
  46.                     value: "{command}",
  47.                     oninput: move |evt| command.set(evt.value.clone())
  48.                 }
  49.                 button {
  50.                     onclick: move |_| {
  51.                         process_handler_clone_2.read().as_mut().unwrap().send_command(command.to_string());
  52.                         process_handler_clone_2.needs_update();
  53.                     },
  54.                     "Send command"
  55.                 }
  56.             }
  57.         }
  58.         div {
  59.             class: "fieldsLine",
  60.             input {
  61.                 value: "{program_path}",
  62.                 oninput: move |evt| program_path.set(evt.value.clone())
  63.             }
  64.             button {
  65.                 onclick: move |_| is_selecting_program.set(true),
  66.                 "Select program"
  67.             }
  68.         }
  69.         button {
  70.             onclick: move |_| {
  71.                 match process_handler_clone.read().as_mut().unwrap().start_program(program_path.get()) {
  72.                     Err(e) => eprintln!("{}", e),
  73.                     _ => process_handler_clone.needs_update()
  74.                 }
  75.             },
  76.             "Start program"
  77.         },
  78.         })
  79.     }
  80. }
  81.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement