2024-03-10 11:54:32 +03:00
|
|
|
use gtk4 as gtk;
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
use gtk::builders::*;
|
2024-04-14 19:13:15 +03:00
|
|
|
use gtk::Align;
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
/**
|
|
|
|
* Types
|
|
|
|
*/
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
pub type Margin = (i32, i32, i32, i32);
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
/**
|
|
|
|
* Enums
|
|
|
|
*/
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
pub enum MarginData {
|
2024-03-10 11:54:32 +03:00
|
|
|
EqualsMargin(i32),
|
|
|
|
MultipleMargin(Margin),
|
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
/**
|
|
|
|
* Structs
|
|
|
|
*/
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
#[allow(dead_code)]
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
pub struct Size {
|
|
|
|
pub width: i32,
|
2024-04-14 19:13:15 +03:00
|
|
|
pub height: i32,
|
2024-03-10 11:54:32 +03:00
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
#[derive(Copy, Clone)]
|
2024-03-10 11:54:32 +03:00
|
|
|
pub struct Alignment {
|
|
|
|
pub horizontal: Align,
|
2024-04-14 19:13:15 +03:00
|
|
|
pub vertical: Align,
|
2024-03-10 11:54:32 +03:00
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
/**
|
|
|
|
* Traits
|
|
|
|
*/
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
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;
|
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
pub trait TextViewSetters {
|
2024-03-10 11:54:32 +03:00
|
|
|
fn set_text_view_margin(self, margin: MarginData) -> Self;
|
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
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:35:02 +03:00
|
|
|
}
|
|
|
|
}
|
2024-03-10 11:54:32 +03:00
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
/**
|
|
|
|
* Macros
|
|
|
|
*/
|
|
|
|
|
|
|
|
macro_rules! impl_setters {
|
|
|
|
($($t:ty),+) => {
|
|
|
|
$(
|
|
|
|
impl Setters for $t {
|
2024-07-27 20:38:39 +03:00
|
|
|
fn set_margin(self, margin: MarginData) -> Self {
|
2024-03-10 11:54:32 +03:00
|
|
|
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:35:02 +03:00
|
|
|
}
|
|
|
|
}
|
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:35:02 +03:00
|
|
|
}
|
2024-03-10 11:54:32 +03:00
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
impl_setters! {ButtonBuilder, EntryBuilder, TextViewBuilder,
|
2024-03-10 11:54:32 +03:00
|
|
|
BoxBuilder, SwitchBuilder, FrameBuilder, LabelBuilder}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-03-10 11:54:32 +03:00
|
|
|
#[allow(dead_code)]
|
2024-04-14 19:13:15 +03:00
|
|
|
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:35:02 +03:00
|
|
|
}
|
|
|
|
}
|
2024-03-10 11:54:32 +03:00
|
|
|
}
|
2024-03-10 11:35:02 +03:00
|
|
|
|
2024-04-14 19:13:15 +03:00
|
|
|
impl Alignment {
|
|
|
|
pub fn new(horizontal: Align, vertical: Align) -> Alignment {
|
|
|
|
Alignment {
|
2024-03-10 11:54:32 +03:00
|
|
|
horizontal,
|
|
|
|
vertical,
|
2024-03-10 11:35:02 +03:00
|
|
|
}
|
|
|
|
}
|
2024-04-14 19:13:15 +03:00
|
|
|
}
|