initial commit

This commit is contained in:
Surferlul 2022-07-29 06:13:44 +02:00
parent 24babbe695
commit d8ce20bd7e
7 changed files with 190 additions and 0 deletions

2
.gitignore vendored
View File

@ -8,3 +8,5 @@ Cargo.lock
# These are backup files generated by rustfmt # These are backup files generated by rustfmt
**/*.rs.bk **/*.rs.bk
.idea/

6
Cargo.toml Normal file
View File

@ -0,0 +1,6 @@
[package]
name = "native-ui-rs"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

12
native-ui-rs.iml Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="RUST_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -0,0 +1,55 @@
use crate::abstracts::Window;
#[derive(Clone)]
pub struct Application {
pub title: String,
pub main_windows: Vec<Window>,
}
impl Application {
pub fn builder() -> ApplicationBuilder {
ApplicationBuilder::default()
}
}
pub struct ApplicationBuilder {
title: String,
main_windows: Vec<Window>,
}
impl ApplicationBuilder {
pub fn new() -> ApplicationBuilder {
ApplicationBuilder {
title: String::from("My App"),
main_windows: Vec::new(),
}
}
pub fn title(mut self, title: &str) -> ApplicationBuilder {
self.title = String::from(title);
self
}
pub fn add_window(mut self, window: Window) -> ApplicationBuilder {
self.main_windows.push(window);
self
}
pub fn build(mut self) -> Application {
for window in &mut self.main_windows {
if window.title_default {
window.title = self.title.clone();
}
}
Application {
title: self.title,
main_windows: self.main_windows
}
}
}
impl Default for ApplicationBuilder {
fn default() -> Self {
Self::new()
}
}

18
src/abstracts/mod.rs Normal file
View File

@ -0,0 +1,18 @@
mod application;
mod window;
pub use crate::abstracts::{
application::{
Application,
ApplicationBuilder
},
window::{
Window,
WindowBuilder
},
};
#[derive(Clone,Debug)]
pub enum Widget {
Window(Box<Window>)
}

80
src/abstracts/window.rs Normal file
View File

@ -0,0 +1,80 @@
use crate::abstracts::Widget;
#[derive(Clone, Debug)]
pub struct Window {
pub title: String,
pub width: usize,
pub height: usize,
pub content: Option<Widget>,
pub title_default: bool
}
impl Window {
pub fn builder() -> WindowBuilder {
WindowBuilder::default()
}
}
pub struct WindowBuilder {
title: String,
width: usize,
height: usize,
content: Option<Widget>,
title_default: bool,
}
impl WindowBuilder {
pub fn new() -> WindowBuilder {
WindowBuilder {
title: String::from("My Window"),
width: 250,
height: 250,
content: None,
title_default: true,
}
}
pub fn title(mut self, title: &str) -> WindowBuilder {
self.title = String::from(title);
self.title_default = false;
self
}
pub fn width(mut self, width: usize) -> WindowBuilder {
self.width = width;
self
}
pub fn height(mut self, height: usize) -> WindowBuilder {
self.height = height;
self
}
pub fn dimensions(mut self, width: usize, height: usize) -> WindowBuilder {
self.width = width;
self.height = height;
self
}
pub fn content(mut self, widget: Widget) -> WindowBuilder {
self.content = Some(widget);
self
}
pub fn build(self) -> Window {
Window {
title: self.title,
width: self.width,
height: self.height,
content: self.content,
title_default: self.title_default,
}
}
}
impl Default for WindowBuilder {
fn default() -> Self {
Self::new()
}
}

17
src/lib.rs Normal file
View File

@ -0,0 +1,17 @@
pub mod abstracts;
pub fn add(left: usize, right: usize) -> usize {
left + right
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let result = add(2, 2);
assert_eq!(result, 4);
}
}