use super::widget;
use super::wish;
#[derive(Clone, Debug)]
pub struct GridLayout {
id: String,
column: Option<u64>,
column_span: Option<u64>,
ipadx: Option<u64>,
ipady: Option<u64>,
padx: Option<u64>,
pady: Option<u64>,
row: Option<u64>,
row_span: Option<u64>,
sticky: widget::Sticky,
}
impl GridLayout {
pub(super) fn new(wid: &str) -> GridLayout {
GridLayout {
id: String::from(wid),
column: None,
column_span: None,
ipadx: None,
ipady: None,
padx: None,
pady: None,
row: None,
row_span: None,
sticky: widget::Sticky::None,
}
}
pub fn column(&mut self, column: u64) -> &mut Self {
self.column = Some(column);
self
}
pub fn column_span(&mut self, span: u64) -> &mut Self {
self.column_span = Some(span);
self
}
pub fn ipadx(&mut self, pad: u64) -> &mut Self {
self.ipadx = Some(pad);
self
}
pub fn ipady(&mut self, pad: u64) -> &mut Self {
self.ipady = Some(pad);
self
}
pub fn padx(&mut self, pad: u64) -> &mut Self {
self.padx = Some(pad);
self
}
pub fn pady(&mut self, pad: u64) -> &mut Self {
self.pady = Some(pad);
self
}
pub fn row(&mut self, row: u64) -> &mut Self {
self.row = Some(row);
self
}
pub fn row_span(&mut self, span: u64) -> &mut Self {
self.row_span = Some(span);
self
}
pub fn sticky(&mut self, sticky: widget::Sticky) -> &mut Self {
self.sticky = sticky;
self
}
pub fn layout(&self) {
let mut msg = format!("grid {} ", self.id);
if let Some(column) = self.column {
msg.push_str(&format!("-column {} ", column));
}
if let Some(span) = self.column_span {
msg.push_str(&format!("-columnspan {} ", span));
}
if let Some(pad) = self.ipadx {
msg.push_str(&format!("-ipadx {} ", pad));
}
if let Some(pad) = self.ipady {
msg.push_str(&format!("-ipady {} ", pad));
}
if let Some(pad) = self.padx {
msg.push_str(&format!("-padx {} ", pad));
}
if let Some(pad) = self.pady {
msg.push_str(&format!("-pady {} ", pad));
}
if let Some(row) = self.row {
msg.push_str(&format!("-row {} ", row));
}
if let Some(span) = self.row_span {
msg.push_str(&format!("-rowspan {} ", span));
}
if self.sticky != widget::Sticky::None {
msg.push_str(&format!("-sticky {} ", self.sticky));
}
wish::tell_wish(&msg);
}
}
pub trait TkGridLayout: widget::TkWidget {
fn grid(&self) -> GridLayout {
GridLayout::new(self.id())
}
fn grid_configure(&self, option: &str, value: &str) {
let msg = format!("grid configure {} -{} {{{}}}", self.id(), option, value);
wish::tell_wish(&msg);
}
fn grid_forget(&self) {
let msg = format!("grid forget {}", self.id());
wish::tell_wish(&msg);
}
}