painful part begins... NOW!
This commit is contained in:
parent
a512b21d23
commit
34772a0a56
3 changed files with 59 additions and 5 deletions
|
@ -4,13 +4,25 @@ use super::*;
|
|||
|
||||
pub struct Buffer {
|
||||
text: String,
|
||||
path: Option<PathBuf>
|
||||
path: Option<PathBuf>,
|
||||
}
|
||||
|
||||
impl Buffer {
|
||||
pub fn make_scratch<V>(cx: &mut ViewContext<V>) -> Model<Self> {
|
||||
cx.new_model(|_cx| Self::scratch())
|
||||
}
|
||||
|
||||
pub fn read(path: PathBuf) -> anyhow::Result<Self> {
|
||||
Ok(Self {
|
||||
text: std::fs::read_to_string(&path)?,
|
||||
path: Some(path),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn scratch() -> Self {
|
||||
Self {
|
||||
text: std::fs::read_to_string(path)
|
||||
text: String::new(),
|
||||
path: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,11 +4,27 @@ mod element;
|
|||
mod input;
|
||||
|
||||
pub struct Editor {
|
||||
focus_handle: FocusHandle,
|
||||
buffer: Model<crate::buffer::Buffer>
|
||||
}
|
||||
|
||||
impl Editor {
|
||||
pub fn make<V: 'static>(cx: &mut ViewContext<V>) -> View<Self> {
|
||||
cx.new_view(|cx| Self {
|
||||
buffer: crate::buffer::Buffer::make_scratch(cx),
|
||||
focus_handle: cx.focus_handle()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for Editor {
|
||||
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
||||
element::EditorElement::new(cx.view())
|
||||
}
|
||||
}
|
||||
|
||||
impl FocusableView for Editor {
|
||||
fn focus_handle(&self, cx: &AppContext) -> FocusHandle {
|
||||
self.focus_handle.clone()
|
||||
}
|
||||
}
|
||||
|
|
32
src/main.rs
32
src/main.rs
|
@ -1,3 +1,6 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use funnylog::Drain;
|
||||
use ming::*;
|
||||
|
||||
mod buffer;
|
||||
|
@ -5,19 +8,42 @@ mod editor;
|
|||
|
||||
struct Nite {
|
||||
editor: View<editor::Editor>,
|
||||
logger: Logger
|
||||
}
|
||||
|
||||
type Logger = funnylog::Logger<Arc<funnylog::IgnoreError<funnylog::filter::FilterDrain<funnylog::terminal::TerminalDrain<std::io::Stderr>>>>>;
|
||||
|
||||
impl Render for Nite {
|
||||
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
||||
div()
|
||||
.flex()
|
||||
.size(Length::Definite(DefiniteLength::Fraction(1f32)))
|
||||
.bg(transparent_black())
|
||||
.justify_center()
|
||||
.items_center()
|
||||
.text_xl()
|
||||
.text_color(white())
|
||||
.font_family("ComicShannsMono Nerd Font Mono")
|
||||
.child(self.editor.clone())
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let drain = Arc::new(funnylog::terminal::TerminalConfig::default().to_stderr().env_filter("RUST_LOG").ignore_error());
|
||||
funnylog::stdlog::setup(drain.clone());
|
||||
let logger = Logger::new(drain);
|
||||
|
||||
App::new().run(|cx| {
|
||||
cx.open_window(
|
||||
WindowOptions {
|
||||
..Default::default()
|
||||
},
|
||||
|cx| {
|
||||
let focus = cx.focus_handle();
|
||||
funnylog::info!(logger, "Hello from nite");
|
||||
|
||||
cx.new_view(|_cx| Nite {
|
||||
text: String::new(),
|
||||
cx.new_view(|cx| Nite {
|
||||
editor: editor::Editor::make(cx),
|
||||
logger
|
||||
})
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue