use fltk::{prelude::*, *};
fn main() {
let app = app::App::default().with_scheme(app::Scheme::Gtk);
let mut wind = window::Window::default().with_size(800, 600);
let mut table = table::Table::default()
.with_size(800 - 10, 600 - 10)
.center_of(&wind);
table.set_rows(30);
table.set_row_header(true);
table.set_row_resize(true);
table.set_cols(26);
table.set_col_header(true);
table.set_col_width_all(80);
table.set_col_resize(true);
table.end();
wind.make_resizable(true);
wind.end();
wind.show();
table.draw_cell(move |t, ctx, row, col, x, y, w, h| match ctx {
table::TableContext::StartPage => draw::set_font(enums::Font::Helvetica, 14),
table::TableContext::ColHeader => {
draw_header(&format!("{}", (col + 65) as u8 as char), x, y, w, h)
} table::TableContext::RowHeader => draw_header(&format!("{}", row + 1), x, y, w, h), table::TableContext::Cell => draw_data(
&format!("{}", row + col),
x,
y,
w,
h,
t.is_selected(row, col),
), _ => (),
});
app.run().unwrap();
}
fn draw_header(txt: &str, x: i32, y: i32, w: i32, h: i32) {
draw::push_clip(x, y, w, h);
draw::draw_box(
enums::FrameType::ThinUpBox,
x,
y,
w,
h,
enums::Color::FrameDefault,
);
draw::set_draw_color(enums::Color::Black);
draw::set_font(enums::Font::Helvetica, 14);
draw::draw_text2(txt, x, y, w, h, enums::Align::Center);
draw::pop_clip();
}
fn draw_data(txt: &str, x: i32, y: i32, w: i32, h: i32, selected: bool) {
draw::push_clip(x, y, w, h);
if selected {
draw::set_draw_color(enums::Color::from_u32(0x00D3_D3D3));
} else {
draw::set_draw_color(enums::Color::White);
}
draw::draw_rectf(x, y, w, h);
draw::set_draw_color(enums::Color::Gray0);
draw::set_font(enums::Font::Helvetica, 14);
draw::draw_text2(txt, x, y, w, h, enums::Align::Center);
draw::draw_rect(x, y, w, h);
draw::pop_clip();
}