use eframe::egui::{self, scroll_area::State}; use ropey; #[derive(Default)] pub struct ERopey { pub rope: ropey::Rope, viewbuffer: String, } impl egui::widgets::TextBuffer for ERopey { fn is_mutable(&self) -> bool { true } fn as_str(&self) -> &str { self.rope.slice(..).as_str().unwrap() } fn insert_text(&mut self, text: &str, char_index: usize) -> usize { let first = self.rope.len_chars(); self.rope.insert(char_index, text); let second = self.rope.len_chars(); second-first } fn delete_char_range(&mut self, char_range: std::ops::Range) { self.rope.remove(char_range); } fn type_id(&self) -> std::any::TypeId { std::any::TypeId::of::() } }