AIT/src/view/properties.rs

121 lines
2.6 KiB
Rust
Raw Normal View History

2024-03-10 11:54:32 +03:00
use gtk4 as gtk;
2024-03-10 11:54:32 +03:00
use gtk::builders::*;
use gtk::Align;
2024-03-10 11:54:32 +03:00
/**
* Types
*/
2024-03-10 11:54:32 +03:00
pub type Margin = (i32, i32, i32, i32);
2024-03-10 11:54:32 +03:00
/**
* Enums
*/
pub enum MarginData {
2024-03-10 11:54:32 +03:00
EqualsMargin(i32),
MultipleMargin(Margin),
}
2024-03-10 11:54:32 +03:00
/**
* Structs
*/
2024-03-10 11:54:32 +03:00
#[allow(dead_code)]
2024-03-10 11:54:32 +03:00
pub struct Size {
pub width: i32,
pub height: i32,
2024-03-10 11:54:32 +03:00
}
#[derive(Copy, Clone)]
2024-03-10 11:54:32 +03:00
pub struct Alignment {
pub horizontal: Align,
pub vertical: Align,
2024-03-10 11:54:32 +03:00
}
2024-03-10 11:54:32 +03:00
/**
* Traits
*/
pub trait Setters {
2024-03-10 11:54:32 +03:00
fn set_margin(self, margin: MarginData) -> Self;
fn set_align(self, align: Alignment) -> Self;
}
pub trait TextViewSetters {
2024-03-10 11:54:32 +03:00
fn set_text_view_margin(self, margin: MarginData) -> Self;
}
impl TextViewSetters for TextViewBuilder {
fn set_text_view_margin(self, margin: MarginData) -> Self {
match margin {
MarginData::EqualsMargin(margin) => self
.top_margin(margin)
.left_margin(margin)
.bottom_margin(margin)
.right_margin(margin),
MarginData::MultipleMargin(margins) => self
.top_margin(margins.0)
.left_margin(margins.1)
.bottom_margin(margins.2)
.right_margin(margins.3),
}
}
2024-03-10 11:54:32 +03:00
}
2024-03-10 11:54:32 +03:00
/**
* Macros
*/
macro_rules! impl_setters {
($($t:ty),+) => {
$(
impl Setters for $t {
fn set_margin(self, margin: MarginData) -> Self{
match margin{
MarginData::EqualsMargin(margin) =>
self.margin_top(margin)
.margin_start(margin)
.margin_bottom(margin)
.margin_end(margin),
MarginData::MultipleMargin(margins) =>
self.margin_top(margins.0)
.margin_start(margins.1)
.margin_bottom(margins.2)
.margin_end(margins.3),
}
}
2024-03-10 11:54:32 +03:00
fn set_align(self, align: Alignment) -> Self {
self.halign(align.horizontal)
.valign(align.vertical)
}
}
)*
}
2024-03-10 11:54:32 +03:00
}
impl_setters! {ButtonBuilder, EntryBuilder, TextViewBuilder,
2024-03-10 11:54:32 +03:00
BoxBuilder, SwitchBuilder, FrameBuilder, LabelBuilder}
2024-03-10 11:54:32 +03:00
#[allow(dead_code)]
impl Size {
pub fn new(w: i32, h: i32) -> Size {
Size {
2024-03-10 11:54:32 +03:00
width: w,
height: h,
}
}
2024-03-10 11:54:32 +03:00
}
impl Alignment {
pub fn new(horizontal: Align, vertical: Align) -> Alignment {
Alignment {
2024-03-10 11:54:32 +03:00
horizontal,
vertical,
}
}
}