From: Nil Gradisnik Date: Wed, 6 Dec 2017 04:01:51 +0000 (-0800) Subject: Utils X-Git-Url: https://git.ozva.co.uk/?a=commitdiff_plain;h=7e9622b853b93612108f33dda703aacafd7807fd;p=gn-editor Utils --- diff --git a/src/main.rs b/src/main.rs index 6e5e7fd..810c9eb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,9 @@ extern crate comrak; #[macro_use] extern crate horrorshow; +mod state; mod preview; +mod utils; use std::env::args; use std::fs::File; @@ -17,7 +19,8 @@ use std::io::BufReader; use gio::prelude::*; use gtk::prelude::*; use gtk::Builder; -use gtk::TextBuffer; + +use utils::{buffer_to_string, set_title}; const NAME: &str = env!("CARGO_PKG_NAME"); const VERSION: &str = env!("CARGO_PKG_VERSION"); @@ -50,6 +53,9 @@ fn build_ui(application: >k::Application) { let window: gtk::ApplicationWindow = builder.get_object("window").expect("Couldn't get window"); window.set_application(application); + let header_bar: gtk::HeaderBar = builder.get_object("header_bar").unwrap(); + header_bar.set_title(NAME); + let open_button: gtk::ToolButton = builder.get_object("open_button").unwrap(); let render_button: gtk::ToolButton = builder.get_object("render_button").unwrap(); let live_button: gtk::ToggleToolButton = builder.get_object("live_button").unwrap(); @@ -70,7 +76,7 @@ fn build_ui(application: >k::Application) { about_dialog.set_authors(&[AUTHORS]); about_dialog.set_comments(DESCRIPTION); - open_button.connect_clicked(clone!(text_view, markdown_view => move |_| { + open_button.connect_clicked(clone!(header_bar, text_view, markdown_view => move |_| { file_chooser.show(); if file_chooser.run() == gtk::ResponseType::Ok.into() { @@ -81,6 +87,12 @@ fn build_ui(application: >k::Application) { let mut contents = String::new(); let _ = reader.read_to_string(&mut contents); + set_title(&header_bar, &filename); + if let Some(parent) = filename.parent() { + let subtitle: &str = &parent.to_string_lossy(); + header_bar.set_subtitle(subtitle); + } + text_view.get_buffer().unwrap().set_text(&contents); markdown_view.get_buffer().unwrap().set_text(&preview::render(&contents)); } @@ -90,14 +102,14 @@ fn build_ui(application: >k::Application) { text_view.connect_key_release_event(clone!(text_view, markdown_view, live_button => move |_, _| { if live_button.get_active() { - let markdown = buffer_to_string(text_view.get_buffer()); + let markdown = buffer_to_string(text_view.get_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()); + let markdown = buffer_to_string(text_view.get_buffer()).unwrap(); markdown_view.get_buffer().unwrap().set_text(&preview::render(&markdown)); })); @@ -118,14 +130,6 @@ fn build_ui(application: >k::Application) { window.show_all(); } -fn buffer_to_string(buffer: Option) -> String { - let buffer = buffer.unwrap(); - let (start, end) = buffer.get_bounds(); - let text = buffer.get_text(&start, &end, false); - - text.unwrap() -} - fn main() { let application = gtk::Application::new("com.github.markdown-rs", gio::ApplicationFlags::empty()) .expect("Initialization failed..."); diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..9928a7b --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,20 @@ +use gtk::*; +use std::path::Path; +use gtk::TextBuffer; + +pub fn set_title(headerbar: &HeaderBar, path: &Path) { + if let Some(filename) = path.file_name() { + let filename: &str = &filename.to_string_lossy(); + headerbar.set_title(filename); + } +} + +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") + } +}