From: Nil Gradisnik Date: Fri, 8 Dec 2017 02:53:57 +0000 (-0800) Subject: Sourceview text buffer X-Git-Url: https://git.ozva.co.uk/?a=commitdiff_plain;h=4c9d22e040bde3965c0e039f32d9d79291b970bc;p=gn-editor Sourceview text buffer --- diff --git a/Cargo.toml b/Cargo.toml index e227b6e..8c4f514 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,7 @@ horrorshow = "0.6" [dependencies.gtk] version = "0.3" -default-features = false -features = ["v3_22"] +features = ["v3_20"] [dev-dependencies] clippy = "0.0.175" diff --git a/src/gtk-ui.glade b/src/gtk-ui.glade index 7bfa1e1..83046f9 100644 --- a/src/gtk-ui.glade +++ b/src/gtk-ui.glade @@ -41,6 +41,9 @@ Author: Nil Gradisnik *.md + + 0 + False Markdown Rust @@ -72,6 +75,7 @@ Author: Nil Gradisnik 2 2 2 + text_buffer GTK_INPUT_HINT_SPELLCHECK | GTK_INPUT_HINT_WORD_COMPLETION | GTK_INPUT_HINT_NONE True True diff --git a/src/main.rs b/src/main.rs index 810c9eb..d0e433f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,6 @@ extern crate comrak; #[macro_use] extern crate horrorshow; -mod state; mod preview; mod utils; @@ -20,7 +19,7 @@ use gio::prelude::*; use gtk::prelude::*; use gtk::Builder; -use utils::{buffer_to_string, set_title}; +use utils::{buffer_to_string, set_title, configure_sourceview}; const NAME: &str = env!("CARGO_PKG_NAME"); const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -62,6 +61,9 @@ fn build_ui(application: >k::Application) { let about_button: gtk::ToolButton = builder.get_object("about_button").unwrap(); let text_view: sourceview::View = builder.get_object("text_view").unwrap(); + let text_buffer: sourceview::Buffer = builder.get_object("text_buffer").unwrap(); + configure_sourceview(&text_buffer); + let markdown_view: gtk::TextView = builder.get_object("markdown_view").unwrap(); let file_chooser: gtk::FileChooserDialog = builder.get_object("file_chooser").unwrap(); @@ -76,7 +78,7 @@ fn build_ui(application: >k::Application) { about_dialog.set_authors(&[AUTHORS]); about_dialog.set_comments(DESCRIPTION); - open_button.connect_clicked(clone!(header_bar, text_view, markdown_view => move |_| { + open_button.connect_clicked(clone!(header_bar, text_buffer, markdown_view => move |_| { file_chooser.show(); if file_chooser.run() == gtk::ResponseType::Ok.into() { @@ -93,23 +95,23 @@ fn build_ui(application: >k::Application) { header_bar.set_subtitle(subtitle); } - text_view.get_buffer().unwrap().set_text(&contents); + text_buffer.set_text(&contents); markdown_view.get_buffer().unwrap().set_text(&preview::render(&contents)); } file_chooser.hide(); })); - text_view.connect_key_release_event(clone!(text_view, markdown_view, live_button => move |_, _| { + text_view.connect_key_release_event(clone!(text_buffer, markdown_view, live_button => move |_, _| { if live_button.get_active() { - let markdown = buffer_to_string(text_view.get_buffer()).unwrap(); + let markdown = buffer_to_string(&text_buffer).unwrap(); markdown_view.get_buffer().unwrap().set_text(&preview::render(&markdown)); } Inhibit(true) })); - render_button.connect_clicked(clone!(text_view, markdown_view => move |_| { - let markdown = buffer_to_string(text_view.get_buffer()).unwrap(); + render_button.connect_clicked(clone!(text_buffer, markdown_view => move |_| { + let markdown = buffer_to_string(&text_buffer).unwrap(); markdown_view.get_buffer().unwrap().set_text(&preview::render(&markdown)); })); diff --git a/src/utils.rs b/src/utils.rs index 9928a7b..21a9210 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,6 +1,6 @@ use gtk::*; +use sourceview::*; use std::path::Path; -use gtk::TextBuffer; pub fn set_title(headerbar: &HeaderBar, path: &Path) { if let Some(filename) = path.file_name() { @@ -9,12 +9,18 @@ pub fn set_title(headerbar: &HeaderBar, path: &Path) { } } -pub fn buffer_to_string(buffer: Option) -> Option { - match buffer { - Some(buffer) => { - let (start, end) = buffer.get_bounds(); - buffer.get_text(&start, &end, false) - }, - None => panic!("Error getting string from buffer") - } +pub fn buffer_to_string(buffer: &Buffer) -> Option { + let (start, end) = buffer.get_bounds(); + buffer.get_text(&start, &end, false) +} + +pub fn configure_sourceview(buff: &Buffer) { + LanguageManager::new() + .get_language("markdown") + .map(|markdown| buff.set_language(&markdown)); + + let manager = StyleSchemeManager::new(); + manager + .get_scheme("classic") + .map(|theme| buff.set_style_scheme(&theme)); }