ex_list/
ex_list.rs

1extern crate darkside;
2
3use darkside::list::*;
4use darkside::text::*;
5use darkside::*;
6
7fn main() {
8  new_app();
9  let mut str_vec = vec![];
10  let mut current_list = 1;
11  for i in 1..21 {
12    str_vec.push(format!("item {}", i));
13  }
14  let mut list_1 = new_list(10, 2, 20, 10, str_vec.clone());
15  let item_vec = vec![
16    String::from("This is long"),
17    String::from("This is longer"),
18    String::from("This is even longer"),
19    String::from("This is the longest one"),
20  ];
21  let mut list_2 = new_list(30, 2, 20, 10, item_vec.clone());
22
23  let mut instruction = new_text("Use <- to focus left list and -> for right list", 10, 12);
24  instruction = set_text_effects(instruction, vec![TextEffect::Bold]);
25
26  list_1 = set_list_fill_width(list_1, true);
27  list_2 = set_list_fill_width(list_2, true);
28  list_2 = set_list_text_overflow(list_2, TextOverflow::Ellipsis);
29
30  let _j_key = translate_key('j');
31  let _k_key = translate_key('k');
32  let up_key = KEY_UP;
33  let down_key = KEY_DOWN;
34  let left_key = KEY_LEFT;
35  let right_key = KEY_RIGHT;
36  let enter_key = KEY_RETURN;
37
38  loop {
39    render_list(&list_1);
40    render_list(&list_2);
41    render_text(&instruction);
42    let ch = wait_for_key();
43    if ch == _k_key || ch == up_key {
44      if current_list == 1 {
45        list_1 = move_prev_list_item(list_1);
46      } else {
47        list_2 = move_prev_list_item(list_2);
48      }
49    } else if ch == _j_key || ch == down_key {
50      if current_list == 1 {
51        list_1 = move_next_list_item(list_1);
52      } else {
53        list_2 = move_next_list_item(list_2);
54      }
55    } else if ch == left_key {
56      current_list = 1;
57    } else if ch == right_key {
58      current_list = 2;
59    } else if ch == enter_key {
60      let result_1 = str_vec
61        .get(get_list_selected_index(&list_1) as usize)
62        .unwrap();
63      let result_text_1 = new_text(&format!("Selected in left list: {}", result_1), 10, 13);
64      let result_2 = item_vec
65        .get(get_list_selected_index(&list_2) as usize)
66        .unwrap();
67      let result_text_2 = new_text(&format!("Selected in right list: {}", result_2), 10, 14);
68      render_text(&result_text_1);
69      render_text(&result_text_2);
70    }
71  }
72}