2025-07-05 14:42:45 -04:00
|
|
|
use super::editor::TextEditor;
|
|
|
|
|
use crate::app::tab::Tab;
|
|
|
|
|
|
|
|
|
|
impl TextEditor {
|
|
|
|
|
pub fn get_active_tab(&self) -> Option<&Tab> {
|
|
|
|
|
self.tabs.get(self.active_tab_index)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn get_active_tab_mut(&mut self) -> Option<&mut Tab> {
|
|
|
|
|
self.tabs.get_mut(self.active_tab_index)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn add_new_tab(&mut self) {
|
|
|
|
|
self.tab_counter += 1;
|
|
|
|
|
self.tabs.push(Tab::new_empty(self.tab_counter));
|
|
|
|
|
self.active_tab_index = self.tabs.len() - 1;
|
2025-07-16 13:27:31 -04:00
|
|
|
if self.show_find && !self.find_query.is_empty() {
|
|
|
|
|
self.update_find_matches();
|
|
|
|
|
}
|
2025-07-05 14:42:45 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn close_tab(&mut self, tab_index: usize) {
|
|
|
|
|
if self.tabs.len() > 1 && tab_index < self.tabs.len() {
|
|
|
|
|
self.tabs.remove(tab_index);
|
|
|
|
|
if self.active_tab_index >= self.tabs.len() {
|
|
|
|
|
self.active_tab_index = self.tabs.len() - 1;
|
|
|
|
|
} else if self.active_tab_index > tab_index {
|
|
|
|
|
self.active_tab_index -= 1;
|
|
|
|
|
}
|
2025-07-16 13:27:31 -04:00
|
|
|
if self.show_find && !self.find_query.is_empty() {
|
|
|
|
|
self.update_find_matches();
|
|
|
|
|
}
|
2025-07-05 14:42:45 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn switch_to_tab(&mut self, tab_index: usize) {
|
|
|
|
|
if tab_index < self.tabs.len() {
|
|
|
|
|
self.active_tab_index = tab_index;
|
2025-07-16 13:27:31 -04:00
|
|
|
if self.show_find && !self.find_query.is_empty() {
|
|
|
|
|
self.update_find_matches();
|
|
|
|
|
}
|
2025-07-05 14:42:45 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|