Initial
This commit is contained in:
		
						commit
						1f9eee77ce
					
				
					 9 changed files with 3352 additions and 0 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Executable file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| /target | ||||
| *.tar.gz | ||||
| *.minisig | ||||
							
								
								
									
										3126
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										3126
									
								
								Cargo.lock
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										15
									
								
								Cargo.toml
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								Cargo.toml
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| [package] | ||||
| name = "iced_demo" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
| 
 | ||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||
| 
 | ||||
| [profile.release] | ||||
| lto = true | ||||
| opt-level = 3 | ||||
| strip = true | ||||
| panic = "abort" | ||||
| 
 | ||||
| [dependencies] | ||||
| iced = "0.12.1" | ||||
							
								
								
									
										
											BIN
										
									
								
								iced_demo
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								iced_demo
									
										
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										9
									
								
								makefile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								makefile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| PROJECT = $(shell basename $(CURDIR)) | ||||
| GITHASH = $(shell git rev-parse --short HEAD) | ||||
| 
 | ||||
| release: | ||||
| 	cargo build --release | ||||
| 	cp target/release/$(PROJECT) $(PROJECT) | ||||
| 	strip $(PROJECT) | ||||
| 	tar -czf $(PROJECT)_$(GITHASH).tar.gz $(PROJECT) | ||||
| 	minisign -Sm $(PROJECT).tar.gz | ||||
							
								
								
									
										84
									
								
								src/main.rs
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										84
									
								
								src/main.rs
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,84 @@ | |||
| use iced::theme::{self, Theme}; | ||||
| use iced::widget::{button, column, row, text}; | ||||
| use iced::widget::{text_input, TextInput}; | ||||
| use iced::{Alignment, Color, Element, Length, Sandbox, Settings}; | ||||
| 
 | ||||
| mod my_theme; | ||||
| use my_theme::{get_theme, FromHexColor, OneDark}; | ||||
| 
 | ||||
| mod search_bar; | ||||
| use search_bar::*; | ||||
| 
 | ||||
| mod message; | ||||
| use message::*; | ||||
| 
 | ||||
| pub fn main() -> iced::Result { | ||||
|     Counter::run(Settings::default()) | ||||
| } | ||||
| 
 | ||||
| struct AppSettings { | ||||
|     entries_per_page: u32, | ||||
| } | ||||
| 
 | ||||
| struct Counter { | ||||
|     theme: Theme, | ||||
|     value: i32, | ||||
|     input_val: String, | ||||
|     current_tab: Tab, | ||||
|     app_settings: AppSettings, | ||||
| } | ||||
| 
 | ||||
| impl Sandbox for Counter { | ||||
|     type Message = Message; | ||||
| 
 | ||||
|     fn new() -> Self { | ||||
|         Self { | ||||
|             value: 0, | ||||
|             input_val: String::from("0"), | ||||
|             theme: get_theme(), | ||||
|             current_tab: Tab::Content, | ||||
|             app_settings: AppSettings { | ||||
|                 entries_per_page: 10, | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn title(&self) -> String { | ||||
|         String::from("Counter - Iced") | ||||
|     } | ||||
| 
 | ||||
|     fn update(&mut self, message: Message) { | ||||
|         match message { | ||||
|             Message::InputChanged(value) => { | ||||
|                 self.input_val = value.clone(); | ||||
|                 if let Ok(value) = value.parse::<i32>() { | ||||
|                     self.value = value; | ||||
|                 } | ||||
|             } | ||||
|             Message::SwitchTab(tab) => { | ||||
|                 self.current_tab = tab; | ||||
|             } | ||||
|             _ => {} | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn view(&self) -> Element<Message> { | ||||
|         column![ | ||||
|             row![text::Text::new("TFTool").size(50)], | ||||
|             row![tabs(&self)], | ||||
|             match self.current_tab { | ||||
|                 Tab::Content => search_bar(&self), | ||||
|                 Tab::Settings => text::Text::new("Settings").into(), | ||||
|             } | ||||
|         ] | ||||
|         .width(Length::Fill) | ||||
|         .padding([55, 0]) | ||||
|         .align_items(Alignment::Center) | ||||
|         .into() | ||||
|         // row![TextInput::new("Search", &self.input_val).on_input(Message::InputChanged)].into()
 | ||||
|     } | ||||
| 
 | ||||
|     fn theme(&self) -> Theme { | ||||
|         self.theme.clone() | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								src/message.rs
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								src/message.rs
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| // #[derive(Debug, Clone)]
 | ||||
| // pub enum SearchMessage {
 | ||||
| //     InputSubmitted,
 | ||||
| // }
 | ||||
| 
 | ||||
| #[derive(Debug, Clone)] | ||||
| pub enum Tab { | ||||
|     Content, | ||||
|     Settings, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Clone)] | ||||
| pub enum Message { | ||||
|     InputChanged(String), | ||||
|     SwitchTab(Tab), | ||||
| } | ||||
							
								
								
									
										63
									
								
								src/my_theme.rs
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								src/my_theme.rs
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| use iced::{theme, Color, Theme}; | ||||
| 
 | ||||
| pub trait FromHexColor { | ||||
|     fn from_hex_str(hex: &str) -> Option<Box<Self>>; | ||||
|     fn from_hex(hex: u32) -> Self; | ||||
| } | ||||
| 
 | ||||
| impl FromHexColor for Color { | ||||
|     fn from_hex_str(hex: &str) -> Option<Box<Self>> { | ||||
|         match u32::from_str_radix(hex.trim_start_matches('#'), 16) { | ||||
|             Ok(hex) => Some(Box::new(Self::from_hex(hex))), | ||||
|             Err(_) => None, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn from_hex(hex: u32) -> Self { | ||||
|         let r = ((hex >> 16) & 0xFF) as f32 / 255f32; | ||||
|         let g = ((hex >> 8) & 0xFF) as f32 / 255f32; | ||||
|         let b = (hex & 0xFF) as f32 / 255f32; | ||||
|         let a = ((hex >> 24) & 0xFF) as f32 / 255f32; | ||||
|         Color::from_rgba(r, g, b, a) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[repr(u32)] | ||||
| pub enum OneDark { | ||||
|     Black = 0x282c34, | ||||
|     Red = 0xe06c75, | ||||
|     Green = 0x98c379, | ||||
|     Yellow = 0xe5c07b, | ||||
|     Blue = 0x61afef, | ||||
|     Purple = 0xc678dd, | ||||
|     Cyan = 0x56b6c2, | ||||
|     // White = 0xdcdfe4,
 | ||||
|     White = 0xabb2bf, | ||||
| } | ||||
| 
 | ||||
| /// One Dark:
 | ||||
| // Black 	40; 44; 52 	#282c34
 | ||||
| // White 	171; 178; 191 	#abb2bf
 | ||||
| // Light Red 	224; 108; 117 	#e06c75
 | ||||
| // Dark Red 	190; 80; 70 	#be5046
 | ||||
| // Green 	152; 195; 121 	#98c379
 | ||||
| // Light Yellow 	229; 192; 123 	#e5c07b
 | ||||
| // Dark Yellow 	209; 154; 102 	#d19a66
 | ||||
| // Blue 	97; 175; 239 	#61afef
 | ||||
| // Magenta 	198; 120; 221 	#c678dd
 | ||||
| // Cyan 	86; 182; 194 	#56b6c2
 | ||||
| // Gutter Grey 	76; 82; 99 	#4b5263
 | ||||
| // Comment Grey 	92; 99; 112 	#5c6370
 | ||||
| 
 | ||||
| pub fn get_theme() -> Theme { | ||||
|     Theme::custom( | ||||
|         "Wellwell".to_string(), | ||||
|         theme::Palette { | ||||
|             background: Color::from_hex(OneDark::Black as u32), | ||||
|             primary: Color::from_hex(OneDark::Blue as u32), | ||||
|             text: Color::from_hex(0xabb2bf), | ||||
|             success: Color::from_hex(0x98c379), | ||||
|             danger: Color::from_hex(0xe06c75), | ||||
|         }, | ||||
|     ) | ||||
| } | ||||
							
								
								
									
										36
									
								
								src/search_bar.rs
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								src/search_bar.rs
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| use iced::{ | ||||
|     application::StyleSheet, | ||||
|     theme, | ||||
|     widget::{button, row, text_input, TextInput}, | ||||
|     Element, Length, Padding, | ||||
| }; | ||||
| 
 | ||||
| use crate::*; | ||||
| use crate::{message::Message::*, Counter}; | ||||
| 
 | ||||
| pub fn search_bar(state: &Counter) -> Element<Message> { | ||||
|     row![TextInput::new("Search", &state.input_val) | ||||
|         .on_input(Message::InputChanged) | ||||
|         .width(300)] | ||||
|     .into() | ||||
| } | ||||
| 
 | ||||
| fn menu_tab_button<'a>(label: &'a str, tab: Tab) -> Element<'a, Message> { | ||||
|     button(label) | ||||
|         .on_press(SwitchTab(tab)) | ||||
|         .padding(Padding::from([10, 20])) | ||||
|         .width(Length::FillPortion(1)) | ||||
|         .into() | ||||
| } | ||||
| 
 | ||||
| pub fn tabs(state: &Counter) -> Element<Message> { | ||||
|     row![ | ||||
|         menu_tab_button("Content", Tab::Content), | ||||
|         menu_tab_button("Settings", Tab::Settings), | ||||
|     ] | ||||
|     .padding(10) | ||||
|     .spacing(20) | ||||
|     .width(300) | ||||
|     .height(Length::Shrink) | ||||
|     .into() | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus