use super::grid;
use super::pack;
use super::widget;
use super::wish;
#[derive(Clone, Debug, PartialEq)]
pub struct TkSpinboxRange {
pub id: String,
}
pub fn make_spinbox_range(
parent: &impl widget::TkWidget,
from: f64,
to: f64,
increment: f64,
) -> TkSpinboxRange {
let id = wish::next_wid(parent.id());
let msg = format!(
"ttk::spinbox {} -from {} -to {} -increment {} ",
id, from, to, increment
);
wish::tell_wish(&msg);
TkSpinboxRange { id }
}
impl widget::TkWidget for TkSpinboxRange {
fn id(&self) -> &str {
&self.id
}
}
impl grid::TkGridLayout for TkSpinboxRange {}
impl pack::TkPackLayout for TkSpinboxRange {}
impl TkSpinboxRange {
pub fn state(&self, value: widget::State) {
widget::configure(&self.id, "state", &value.to_string());
}
pub fn value_get(&self) -> f64 {
let msg = format!("puts [{} get] ; flush stdout", self.id);
let result = wish::ask_wish(&msg);
if let Ok(value) = result.parse::<f64>() {
value
} else {
0.0
}
}
pub fn wrap(&self, value: bool) {
widget::configure(&self.id, "wrap", if value { "1" } else { "0" });
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct TkSpinboxValues {
pub id: String,
}
pub fn make_spinbox_values(parent: &impl widget::TkWidget, values: &[&str]) -> TkSpinboxValues {
let id = wish::next_wid(parent.id());
let mut values_str = String::new();
for value in values {
values_str.push('{');
values_str.push_str(value);
values_str.push('}');
values_str.push(' ');
}
let msg = format!("ttk::spinbox {} -values {{{}}} ", id, values_str);
wish::tell_wish(&msg);
TkSpinboxValues { id }
}
impl widget::TkWidget for TkSpinboxValues {
fn id(&self) -> &str {
&self.id
}
}
impl grid::TkGridLayout for TkSpinboxValues {}
impl pack::TkPackLayout for TkSpinboxValues {}
impl TkSpinboxValues {
pub fn state(&self, value: widget::State) {
widget::configure(&self.id, "state", &value.to_string());
}
pub fn value_get(&self) -> String {
let msg = format!("puts [{} get] ; flush stdout", self.id);
wish::ask_wish(&msg)
}
pub fn wrap(&self, value: bool) {
widget::configure(&self.id, "wrap", if value { "1" } else { "0" });
}
}