use cxx::let_cxx_string;
use crate::ffi;
use crate::widget::AsWidget;
pub struct FileDialog;
impl FileDialog {
pub fn open_file(
parent: Option<&dyn AsWidget>,
caption: &str,
dir: &str,
filter: &str,
) -> Option<String> {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_caption = caption);
let_cxx_string!(c_dir = dir);
let_cxx_string!(c_filter = filter);
let result = unsafe {
ffi::QFileDialog_getOpenFileName(
parent_ptr,
&c_caption,
&c_dir,
&c_filter,
)
};
if result.is_empty() { None } else { Some(result) }
}
pub fn open_files(
parent: Option<&dyn AsWidget>,
caption: &str,
dir: &str,
filter: &str,
) -> Vec<String> {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_caption = caption);
let_cxx_string!(c_dir = dir);
let_cxx_string!(c_filter = filter);
unsafe {
ffi::QFileDialog_getOpenFileNames(
parent_ptr,
&c_caption,
&c_dir,
&c_filter,
)
}
}
pub fn save_file(
parent: Option<&dyn AsWidget>,
caption: &str,
dir: &str,
filter: &str,
) -> Option<String> {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_caption = caption);
let_cxx_string!(c_dir = dir);
let_cxx_string!(c_filter = filter);
let result = unsafe {
ffi::QFileDialog_getSaveFileName(
parent_ptr,
&c_caption,
&c_dir,
&c_filter,
)
};
if result.is_empty() { None } else { Some(result) }
}
pub fn select_directory(
parent: Option<&dyn AsWidget>,
caption: &str,
dir: &str,
) -> Option<String> {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_caption = caption);
let_cxx_string!(c_dir = dir);
let result = unsafe {
ffi::QFileDialog_getExistingDirectory(
parent_ptr,
&c_caption,
&c_dir,
)
};
if result.is_empty() { None } else { Some(result) }
}
}