blob: d99e7cbc4f5dcef5d033899d3ff8fae107ff78c7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
/// Holds a string typed by the user and the cursor position.
/// Methods allow mutation of this string and movement of the cursor.
#[derive(Clone)]
pub struct Input {
pub string: String,
pub cursor_index: usize,
}
impl Default for Input {
fn default() -> Self {
Self {
string: "".to_owned(),
cursor_index: 0,
}
}
}
impl Input {
/// Empty the string and move the cursor to start.
pub fn reset(&mut self) {
self.string.clear();
self.cursor_index = 0;
}
/// Move the cursor to the start
pub fn cursor_start(&mut self) {
self.cursor_index = 0;
}
/// Move the cursor to the end
pub fn cursor_end(&mut self) {
self.cursor_index = self.string.len();
}
/// Move the cursor left if possible
pub fn cursor_left(&mut self) {
if self.cursor_index > 0 {
self.cursor_index -= 1
}
}
/// Move the cursor right if possible
pub fn cursor_right(&mut self) {
if self.cursor_index < self.string.len() {
self.cursor_index += 1
}
}
/// Backspace, delete the char under the cursor and move left
pub fn delete_char_left(&mut self) {
if self.cursor_index > 0 && !self.string.is_empty() {
self.string.remove(self.cursor_index - 1);
self.cursor_index -= 1;
}
}
/// Delete all chars right to the cursor
pub fn delete_chars_right(&mut self) {
self.string = self
.string
.chars()
.into_iter()
.take(self.cursor_index)
.collect();
}
/// Insert a char into the string at cursor index.
pub fn insert(&mut self, c: char) {
self.string.insert(self.cursor_index, c);
self.cursor_index += 1
}
/// replace the string with the content
pub fn replace(&mut self, content: String) {
self.string = content
}
}
|