Fully refactored project architecture, imports and etc.
This commit is contained in:
120
src/view/properties.rs
Normal file
120
src/view/properties.rs
Normal file
@@ -0,0 +1,120 @@
|
||||
pub mod properties_module{
|
||||
use gtk4 as gtk;
|
||||
|
||||
use gtk::{Align};
|
||||
use gtk::builders::*;
|
||||
|
||||
/**
|
||||
* Types
|
||||
*/
|
||||
|
||||
pub type Margin = (i32, i32, i32, i32);
|
||||
|
||||
/**
|
||||
* Enums
|
||||
*/
|
||||
|
||||
pub enum MarginData{
|
||||
EqualsMargin(i32),
|
||||
MultipleMargin(Margin),
|
||||
}
|
||||
|
||||
/**
|
||||
* Structs
|
||||
*/
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
||||
pub struct Size {
|
||||
pub width: i32,
|
||||
pub height: i32
|
||||
}
|
||||
|
||||
pub struct Alignment {
|
||||
pub horizontal: Align,
|
||||
pub vertical : Align
|
||||
}
|
||||
|
||||
/**
|
||||
* Traits
|
||||
*/
|
||||
|
||||
pub trait Setters{
|
||||
fn set_margin(self, margin: MarginData) -> Self;
|
||||
fn set_align(self, align: Alignment) -> Self;
|
||||
}
|
||||
|
||||
pub trait TextViewSetters{
|
||||
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),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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),
|
||||
}
|
||||
}
|
||||
fn set_align(self, align: Alignment) -> Self {
|
||||
self.halign(align.horizontal)
|
||||
.valign(align.vertical)
|
||||
}
|
||||
}
|
||||
)*
|
||||
}
|
||||
}
|
||||
|
||||
impl_setters!{ButtonBuilder, EntryBuilder, TextViewBuilder,
|
||||
BoxBuilder, SwitchBuilder, FrameBuilder, LabelBuilder}
|
||||
|
||||
#[allow(dead_code)]
|
||||
impl Size{
|
||||
pub fn new(w: i32, h: i32) -> Size{
|
||||
Size{
|
||||
width: w,
|
||||
height: h,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Alignment{
|
||||
pub fn new(horizontal: Align, vertical : Align) -> Alignment{
|
||||
Alignment{
|
||||
horizontal,
|
||||
vertical,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user