52 lines
1.6 KiB
Rust
52 lines
1.6 KiB
Rust
use crate::err;
|
|
use glib::object::Downcast;
|
|
use glib::translate::{FromGlibPtrNone, Stash, ToGlib, ToGlibPtr};
|
|
use gtk::{FileChooserAction, prelude::*};
|
|
use gtk_sys::*;
|
|
use libc::{c_char, c_void};
|
|
use std::ptr;
|
|
|
|
pub fn file_chooser(title: &str, action: FileChooserAction, parent: >k::Window) -> gtk::FileChooserDialog
|
|
{
|
|
unsafe
|
|
{
|
|
let title = Some(title);
|
|
let title = title.to_glib_none();
|
|
let parent = parent.to_glib_none();
|
|
let first = Some("_Cancel");
|
|
let first = first.to_glib_none();
|
|
let second = Some(match action {
|
|
FileChooserAction::Open => "_Open",
|
|
FileChooserAction::Save => "_Save",
|
|
FileChooserAction::SelectFolder => "_Select",
|
|
FileChooserAction::CreateFolder => "_Create",
|
|
FileChooserAction::__Unknown(_) => "_Choose",
|
|
});
|
|
let second: Stash<*const c_char, Option<&str>> = second.to_glib_none();
|
|
gtk::Widget::from_glib_none(gtk_file_chooser_dialog_new(
|
|
title.0, parent.0,
|
|
action.to_glib(),
|
|
first.0, GTK_RESPONSE_CANCEL,
|
|
second.0, GTK_RESPONSE_ACCEPT,
|
|
ptr::null() as *const c_void)).downcast_unchecked()
|
|
}
|
|
}
|
|
|
|
pub fn err_dlg(w: >k::Window, r: Result<(), err::StrErr>)
|
|
{
|
|
match r {
|
|
Ok(()) => (),
|
|
Err(e) => {
|
|
let dlg = gtk::MessageDialog::new(Some(w),
|
|
gtk::DialogFlags::MODAL,
|
|
gtk::MessageType::Error,
|
|
gtk::ButtonsType::Ok,
|
|
&e.0);
|
|
dlg.run();
|
|
dlg.destroy();
|
|
}
|
|
}
|
|
}
|
|
|
|
// EOF
|