initial commit
This commit is contained in:
parent
24babbe695
commit
d8ce20bd7e
2
.gitignore
vendored
2
.gitignore
vendored
@ -8,3 +8,5 @@ Cargo.lock
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
.idea/
|
||||
|
6
Cargo.toml
Normal file
6
Cargo.toml
Normal 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
12
native-ui-rs.iml
Normal 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>
|
55
src/abstracts/application.rs
Normal file
55
src/abstracts/application.rs
Normal 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
18
src/abstracts/mod.rs
Normal 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
80
src/abstracts/window.rs
Normal 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
17
src/lib.rs
Normal 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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user