use crate::prelude::*;
use crate::utils::FlString;
use fltk_sys::table::*;
use std::ffi::{CStr, CString};
#[derive(Debug)]
pub struct Table {
inner: *mut Fl_Table,
tracker: *mut fltk_sys::fl::Fl_Widget_Tracker,
is_derived: bool,
}
crate::macros::widget::impl_widget_ext!(Table, Fl_Table);
crate::macros::widget::impl_widget_base!(Table, Fl_Table);
crate::macros::widget::impl_widget_default!(Table);
crate::macros::group::impl_group_ext!(Table, Fl_Table);
crate::macros::table::impl_table_ext!(Table, Fl_Table);
#[repr(i32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum TableContext {
None = 0,
StartPage = 0x01,
EndPage = 0x02,
RowHeader = 0x04,
ColHeader = 0x08,
Cell = 0x10,
Table = 0x20,
RcResize = 0x40,
}
#[repr(i32)]
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum TableResizeFlag {
None = 0,
ColLeft = 1,
ColRight = 2,
RowAbove = 3,
RowBelow = 4,
}
#[derive(Debug)]
pub struct TableRow {
inner: *mut Fl_Table_Row,
tracker: *mut fltk_sys::fl::Fl_Widget_Tracker,
is_derived: bool,
}
crate::macros::widget::impl_widget_ext!(TableRow, Fl_Table_Row);
crate::macros::widget::impl_widget_base!(TableRow, Fl_Table_Row);
crate::macros::widget::impl_widget_default!(TableRow);
crate::macros::group::impl_group_ext!(TableRow, Fl_Table_Row);
crate::macros::table::impl_table_ext!(TableRow, Fl_Table_Row);
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TableRowSelectMode {
None,
Single,
Multi,
}
crate::macros::widget::impl_widget_type!(TableRowSelectMode);
#[repr(i32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TableRowSelectFlag {
Deselect,
Select,
Toggle,
}
impl TableRow {
pub fn row_selected(&mut self, row: i32) -> bool {
unsafe {
assert!(!self.was_deleted());
Fl_Table_Row_row_selected(self.inner, row) != 0
}
}
pub fn select_row(
&mut self,
row: i32,
selection_flag: TableRowSelectFlag,
) -> Result<(), FltkError> {
unsafe {
assert!(!self.was_deleted());
match Fl_Table_Row_select_row(self.inner, row, selection_flag as i32) {
1 => Ok(()),
0 | -1 => Err(FltkError::Internal(FltkErrorKind::TableError)),
_ => unreachable!(),
}
}
}
pub fn select_all_rows(&mut self, selection_flag: TableRowSelectFlag) {
assert!(!self.was_deleted());
unsafe { Fl_Table_Row_select_all_rows(self.inner, selection_flag as i32) }
}
}