use std::path::PathBuf;
use gtk::prelude::*;
use crate::input::Config;
pub struct FilePicker(gtk::FileChooserDialog);
impl FilePicker {
pub fn new() -> FilePicker {
let dialog = gtk::FileChooserDialog::new(
Some("Open"),
Some(>k::Window::new(gtk::WindowType::Popup)),
gtk::FileChooserAction::Open,
);
let filter = gtk::FileFilter::new();
filter.set_name(Some("Markdown files (*.md, *.markdown)"));
filter.add_pattern("*.md");
filter.add_pattern("*.markdown");
dialog.add_filter(&filter);
let filter = gtk::FileFilter::new();
filter.add_pattern("*");
filter.set_name(Some("All files"));
dialog.add_filter(&filter);
dialog.add_button("Cancel", gtk::ResponseType::Cancel);
dialog.add_button("Open", gtk::ResponseType::Ok);
FilePicker(dialog)
}
pub fn run(&self) -> Option<PathBuf> {
if self.0.run() == gtk::ResponseType::Ok {
self.0.filename()
} else {
None
}
}
}
impl Drop for FilePicker {
fn drop(&mut self) { self.0.close(); }
}
pub fn open_help_dialog(window: >k::Window) -> gtk::ResponseType {
use gtk::{DialogFlags, MessageType, ButtonsType};
let dialog = gtk::MessageDialog::new(
Some(window),
DialogFlags::MODAL | DialogFlags::DESTROY_WITH_PARENT,
MessageType::Info,
ButtonsType::Close,
""
);
let content = format!{
include_str!("../../res/help_popup.html"),
yaml_path = Config::yaml_path().display(),
css_path = Config::css_path().display(),
};
dialog.set_markup(&content);
dialog.connect_response(|d, _response| d.close());
dialog.run()
}