use super::{TableColumnFlags, TableColumnIndent, TableColumnWidth};
#[repr(transparent)]
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub struct TableColumnUserData(u32);
impl TableColumnUserData {
#[inline]
pub const fn new(value: u32) -> Self {
Self(value)
}
#[inline]
pub const fn get(self) -> u32 {
self.0
}
}
impl From<u32> for TableColumnUserData {
#[inline]
fn from(value: u32) -> Self {
Self::new(value)
}
}
impl From<TableColumnUserData> for u32 {
#[inline]
fn from(value: TableColumnUserData) -> Self {
value.get()
}
}
#[derive(Clone, Debug)]
pub struct TableColumnSetup<Name> {
pub name: Name,
pub flags: TableColumnFlags,
pub width: Option<TableColumnWidth>,
pub indent: Option<TableColumnIndent>,
pub user_data: TableColumnUserData,
}
impl<Name> TableColumnSetup<Name> {
pub fn new(name: Name) -> Self {
Self {
name,
flags: TableColumnFlags::NONE,
width: None,
indent: None,
user_data: TableColumnUserData::default(),
}
}
pub fn flags(mut self, flags: TableColumnFlags) -> Self {
self.flags = flags;
self
}
pub fn fixed_width(mut self, width: f32) -> Self {
self.width = Some(TableColumnWidth::Fixed(width));
self
}
pub fn stretch_weight(mut self, weight: f32) -> Self {
self.width = Some(TableColumnWidth::Stretch(weight));
self
}
pub fn indent(mut self, indent: TableColumnIndent) -> Self {
self.indent = Some(indent);
self
}
pub fn indent_enabled(mut self, enabled: bool) -> Self {
self.indent = Some(if enabled {
TableColumnIndent::Enable
} else {
TableColumnIndent::Disable
});
self
}
pub fn user_data(mut self, user_data: impl Into<TableColumnUserData>) -> Self {
self.user_data = user_data.into();
self
}
pub(crate) fn map_name<M>(self, map: impl FnOnce(Name) -> M) -> TableColumnSetup<M> {
TableColumnSetup {
name: map(self.name),
flags: self.flags,
width: self.width,
indent: self.indent,
user_data: self.user_data,
}
}
}