use std::cell::RefCell;
use std::rc::Rc;
use std::vec;
use libui::controls::*;
use libui::prelude::*;
struct MyDataSource {
data: Vec<(i32, String, i32, i32, i32, String)>,
}
impl Default for MyDataSource {
fn default() -> Self {
let mut d: Vec<(i32, String, i32, i32, i32, String)> = vec![];
d.push((1, "Apples".into(), 0xCC0000, 1, 73, "Order".into()));
d.push((2, "Oranges".into(), 0xFFAA00, 1, 68, "Order".into()));
d.push((3, "Bananas".into(), 0xDDFF00, 0, 0, "Order".into()));
d.push((4, "Limes".into(), 0x32CD32, 1, 12, "Order".into()));
d.push((5, "Blueberries".into(), 0x483D8B, 0, 0, "Order".into()));
d.push((6, "Plums".into(), 0x663399, 1, 28, "Order".into()));
Self { data: d }
}
}
impl TableDataSource for MyDataSource {
fn num_columns(&mut self) -> i32 {
4
}
fn num_rows(&mut self) -> i32 {
self.data.len() as i32
}
fn column_type(&mut self, column: i32) -> TableValueType {
match column {
0 => TableValueType::String,
1 => TableValueType::String,
2 => TableValueType::Color,
3 => TableValueType::Int,
4 => TableValueType::Int,
5 => TableValueType::String,
_ => TableValueType::Int,
}
}
fn cell(&mut self, column: i32, row: i32) -> TableValue {
match column {
0 => TableValue::String(self.data[row as usize].0.to_string()),
1 => TableValue::String(self.data[row as usize].1.clone()),
2 => TableValue::Color {
r: ((self.data[row as usize].2 & 0xFF0000) >> 16) as f64 / 255.0,
g: ((self.data[row as usize].2 & 0x00FF00) >> 8) as f64 / 255.0,
b: ((self.data[row as usize].2 & 0x0000FF) >> 0) as f64 / 255.0,
a: 1.0,
},
3 => TableValue::Int(self.data[row as usize].3.clone()),
4 => TableValue::Int(self.data[row as usize].4.clone()),
5 => TableValue::String(self.data[row as usize].5.clone()),
_ => TableValue::Int(0),
}
}
fn set_cell(&mut self, _column: i32, _row: i32, _value: TableValue) {}
}
pub fn make_table_page(_ui: UI) -> Control {
let mut vbox = VerticalBox::new();
vbox.set_padded(true);
let name_params = TextColumnParameters {
text_color_column: 2,
};
let data = Rc::new(RefCell::new(MyDataSource::default()));
let model = Rc::new(RefCell::new(TableModel::new(data.clone())));
let params = TableParameters::new(model.clone());
let mut table = Table::new(params);
table.append_text_column("ID", 0, Table::COLUMN_READONLY);
table.append_text_column_with_params("Name", 1, Table::COLUMN_READONLY, name_params);
table.append_checkbox_column("Availability", 3, Table::COLUMN_READONLY);
table.append_progressbar_column("Stock", 4);
table.append_button_column("", 5, Table::COLUMN_EDITABLE);
vbox.append(table, LayoutStrategy::Stretchy);
return vbox.into();
}