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