use crate::component::Component;
use crate::error::Result;
use crate::widgets::{Form,Radiobutton};
pub struct RadiobuttonSet {
radiobuttons: Vec<Radiobutton>
}
impl RadiobuttonSet {
pub fn new() -> RadiobuttonSet {
RadiobuttonSet { radiobuttons: Vec::new() }
}
pub fn add_radiobutton(&mut self, left: i32, top: i32, text: &str) -> usize
{
if self.radiobuttons.is_empty() {
let radiobutton = Radiobutton::new(
left,
top,
text,
true,
None
);
self.radiobuttons.push(radiobutton);
self.radiobuttons.len()
} else {
let len = self.radiobuttons.len();
let last = &self.radiobuttons[len-1];
let radiobutton = Radiobutton::new(
left,
top,
text,
false,
Some(last)
);
self.radiobuttons.push(radiobutton);
self.radiobuttons.len()
}
}
pub fn is_empty(&self) -> bool {
self.radiobuttons.is_empty()
}
pub fn len(&self) -> usize {
self.radiobuttons.len()
}
pub fn add_to_form<'a>(&'a self, form: &mut Form<'a>) -> Result<()> {
for radiobutton in &self.radiobuttons {
form.add_component(radiobutton)?;
}
Ok(())
}
pub fn get_current(&self) -> usize {
let co = self.radiobuttons[0].get_current().co();
for (i, rb) in self.radiobuttons.iter().enumerate() {
if rb.co() == co { return i; }
}
panic!("No `Radiobutton` selected.");
}
pub fn set_current(&self, index: usize) {
self.radiobuttons[index].set_current();
}
}
impl Default for RadiobuttonSet {
fn default() -> Self {
Self::new()
}
}