Guest User

Untitled

a guest
Mar 3rd, 2015
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.00 KB | None | 0 0
  1. fn add_cargo_handler(
  2.     button: &gtk::Button,
  3.     project_path_str: String,
  4.     args: Vec<&str>,
  5.     build_term: Rc<RefCell<gtk::VteTerminal>>,
  6.     current_pid: Rc<Cell<i32>>)
  7. {
  8.     button.connect(gtk::signals::Clicked::new(&mut move || {
  9.         match build_term.borrow_mut().fork_command(project_path_str.as_slice(), args.as_slice()) {
  10.             Ok(pid) => current_pid.set(pid),
  11.             Err(s) => println!("{}", s)
  12.         }
  13.     }));
  14. }
  15.  
  16. fn create_builder(project_path_str: &str) -> gtk::Box {
  17.     let run_button = gtk::Button::new_with_label("Run").unwrap();
  18.     let build_button = gtk::Button::new_with_label("Build").unwrap();
  19.     let test_button = gtk::Button::new_with_label("Test").unwrap();
  20.     let clean_button = gtk::Button::new_with_label("Clean").unwrap();
  21.  
  22.     let mut build_buttons = gtk::Box::new(gtk::Orientation::Horizontal, 0).unwrap();
  23.     build_buttons.add(&run_button);
  24.     build_buttons.add(&build_button);
  25.     build_buttons.add(&test_button);
  26.     build_buttons.add(&clean_button);
  27.  
  28.     let build_term = gtk::VteTerminal::new().unwrap();
  29.     let mut builder = gtk::Box::new(gtk::Orientation::Vertical, 0).unwrap();
  30.     builder.add(&build_buttons);
  31.     builder.pack_start(&build_term, true, true, 0);
  32.  
  33.     let build_term_rc = Rc::new(RefCell::new(build_term));
  34.     let current_pid_rc = Rc::new(Cell::new(-1));
  35.  
  36.     add_cargo_handler(&run_button, String::from_str(project_path_str),
  37.         vec!["cargo", "run"], build_term_rc.clone(), current_pid_rc.clone());
  38.     add_cargo_handler(&build_button, String::from_str(project_path_str),
  39.         vec!["cargo", "build", "--release"], build_term_rc.clone(), current_pid_rc.clone());
  40.     add_cargo_handler(&test_button, String::from_str(project_path_str),
  41.         vec!["cargo", "test"], build_term_rc.clone(), current_pid_rc.clone());
  42.     add_cargo_handler(&clean_button, String::from_str(project_path_str),
  43.         vec!["cargo", "clean"], build_term_rc.clone(), current_pid_rc.clone());
  44.  
  45.     builder.show_all();
  46.     builder
  47. }
Advertisement
Add Comment
Please, Sign In to add comment