use cxx::let_cxx_string;
use crate::ffi;
use crate::widget::AsWidget;
pub fn get_text(parent: Option<&dyn AsWidget>, title: &str, label: &str, default_text: &str) -> String {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_title = title);
let_cxx_string!(c_label = label);
let_cxx_string!(c_default = default_text);
unsafe { ffi::QInputDialog_getText(parent_ptr, &c_title, &c_label, &c_default) }
}
pub fn get_int(
parent: Option<&dyn AsWidget>,
title: &str,
label: &str,
value: i32,
min: i32,
max: i32,
step: i32,
) -> i32 {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_title = title);
let_cxx_string!(c_label = label);
unsafe { ffi::QInputDialog_getInt(parent_ptr, &c_title, &c_label, value, min, max, step) }
}
pub fn get_double(
parent: Option<&dyn AsWidget>,
title: &str,
label: &str,
value: f64,
min: f64,
max: f64,
decimals: i32,
) -> f64 {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_title = title);
let_cxx_string!(c_label = label);
unsafe { ffi::QInputDialog_getDouble(parent_ptr, &c_title, &c_label, value, min, max, decimals) }
}
pub fn get_item(
parent: Option<&dyn AsWidget>,
title: &str,
label: &str,
items: &[&str],
current: i32,
editable: bool,
) -> String {
let parent_ptr = parent.map(|p| p.widget_ptr()).unwrap_or(std::ptr::null_mut());
let_cxx_string!(c_title = title);
let_cxx_string!(c_label = label);
let items_vec: Vec<String> = items.iter().map(|s| s.to_string()).collect();
unsafe { ffi::QInputDialog_getItem(parent_ptr, &c_title, &c_label, items_vec, current, editable) }
}