sql_cli/ui/traits/
buffer_ops.rs1use crate::buffer::{BufferAPI, BufferManager, EditMode};
2use crate::buffer_handler::BufferHandler;
3use crate::config::config::Config;
4use crate::cursor_manager::CursorManager;
5use tracing::info;
6
7pub trait BufferManagementBehavior {
10 fn buffer_manager(&mut self) -> &mut BufferManager;
12 fn buffer_handler(&mut self) -> &mut BufferHandler;
13 fn buffer(&self) -> &dyn BufferAPI;
14 fn buffer_mut(&mut self) -> &mut dyn BufferAPI;
15 fn config(&self) -> &Config;
16 fn cursor_manager(&mut self) -> &mut CursorManager;
17 fn set_input_text_with_cursor(&mut self, text: String, cursor: usize);
18
19 fn new_buffer(&mut self) {
23 let buffer_count = self.buffer_manager().all_buffers().len();
24 let mut new_buffer = crate::buffer::Buffer::new(buffer_count + 1);
25
26 let config = self.config();
28 new_buffer.set_compact_mode(config.display.compact_mode);
29 new_buffer.set_case_insensitive(config.behavior.case_insensitive_default);
30 new_buffer.set_show_row_numbers(config.display.show_row_numbers);
31
32 info!(target: "buffer",
33 "Creating new buffer with config: compact_mode={}, case_insensitive={}, show_row_numbers={}",
34 config.display.compact_mode,
35 config.behavior.case_insensitive_default,
36 config.display.show_row_numbers);
37
38 let index = self.buffer_manager().add_buffer(new_buffer);
39 self.buffer_mut()
40 .set_status_message(format!("Created new buffer #{}", index + 1));
41 }
42
43 fn next_buffer(&mut self) -> String;
45
46 fn previous_buffer(&mut self) -> String;
48
49 fn quick_switch_buffer(&mut self) -> String;
51
52 fn close_buffer(&mut self) -> (bool, String);
54
55 fn switch_to_buffer(&mut self, index: usize) -> String;
57
58 fn yank(&mut self) {
60 if let Some(buffer) = self.buffer_manager().current_mut() {
61 buffer.yank();
62
63 if buffer.get_edit_mode() == EditMode::SingleLine {
65 let text = buffer.get_input_text();
66 let cursor = buffer.get_input_cursor_position();
67 self.set_input_text_with_cursor(text, cursor);
68 self.cursor_manager().set_position(cursor);
69 }
70 }
71 }
72
73 fn buffer_count(&self) -> usize;
75
76 fn current_buffer_index(&self) -> usize;
78}