diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/system_information/Cargo.toml | 10 | ||||
-rw-r--r-- | examples/system_information/src/main.rs | 165 |
2 files changed, 175 insertions, 0 deletions
diff --git a/examples/system_information/Cargo.toml b/examples/system_information/Cargo.toml new file mode 100644 index 00000000..7d1e4b94 --- /dev/null +++ b/examples/system_information/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "system_information" +version = "0.1.0" +authors = ["Richard <richardsoncusto@gmail.com>"] +edition = "2021" +publish = false + +[dependencies] +iced = { path = "../..", features = ["system"] } +bytesize = { version = "1.1.0" } diff --git a/examples/system_information/src/main.rs b/examples/system_information/src/main.rs new file mode 100644 index 00000000..560220b8 --- /dev/null +++ b/examples/system_information/src/main.rs @@ -0,0 +1,165 @@ +use iced::{ + button, executor, system, Application, Button, Column, Command, Container, + Element, Length, Settings, Text, +}; + +use bytesize::ByteSize; + +pub fn main() -> iced::Result { + Example::run(Settings::default()) +} + +enum Example { + Loading, + Loaded { + information: system::Information, + refresh_button: button::State, + }, +} + +#[derive(Clone, Debug)] +enum Message { + InformationReceived(system::Information), + Refresh, +} + +impl Application for Example { + type Message = Message; + type Executor = executor::Default; + type Flags = (); + + fn new(_flags: ()) -> (Self, Command<Message>) { + ( + Self::Loading, + system::fetch_information(Message::InformationReceived), + ) + } + + fn title(&self) -> String { + String::from("System Information - Iced") + } + + fn update(&mut self, message: Message) -> Command<Message> { + match message { + Message::Refresh => { + *self = Self::Loading; + + return system::fetch_information(Message::InformationReceived); + } + Message::InformationReceived(information) => { + let refresh_button = button::State::new(); + *self = Self::Loaded { + information, + refresh_button, + }; + } + } + + Command::none() + } + + fn view(&mut self) -> Element<Message> { + let content: Element<Message> = match self { + Example::Loading => Text::new("Loading...").size(40).into(), + Example::Loaded { + information, + refresh_button, + } => { + let system_name = Text::new(format!( + "System name: {}", + information + .system_name + .as_ref() + .unwrap_or(&"unknown".to_string()) + )); + + let system_kernel = Text::new(format!( + "System kernel: {}", + information + .system_kernel + .as_ref() + .unwrap_or(&"unknown".to_string()) + )); + + let system_version = Text::new(format!( + "System version: {}", + information + .system_version + .as_ref() + .unwrap_or(&"unknown".to_string()) + )); + + let cpu_brand = Text::new(format!( + "Processor brand: {}", + information.cpu_brand + )); + + let cpu_cores = Text::new(format!( + "Processor cores: {}", + information + .cpu_cores + .map_or("unknown".to_string(), |cores| cores + .to_string()) + )); + + let memory_readable = + ByteSize::kb(information.memory_total).to_string(); + + let memory_total = Text::new(format!( + "Memory (total): {}", + format!( + "{} kb ({})", + information.memory_total, memory_readable + ) + )); + + let memory_text = if let Some(memory_used) = + information.memory_used + { + let memory_readable = ByteSize::kb(memory_used).to_string(); + + format!("{} kb ({})", memory_used, memory_readable) + } else { + String::from("None") + }; + + let memory_used = + Text::new(format!("Memory (used): {}", memory_text)); + + let graphics_adapter = Text::new(format!( + "Graphics adapter: {}", + information.graphics_adapter + )); + + let graphics_backend = Text::new(format!( + "Graphics backend: {}", + information.graphics_backend + )); + + Column::with_children(vec![ + system_name.size(30).into(), + system_kernel.size(30).into(), + system_version.size(30).into(), + cpu_brand.size(30).into(), + cpu_cores.size(30).into(), + memory_total.size(30).into(), + memory_used.size(30).into(), + graphics_adapter.size(30).into(), + graphics_backend.size(30).into(), + Button::new(refresh_button, Text::new("Refresh")) + .on_press(Message::Refresh) + .into(), + ]) + .spacing(10) + .into() + } + }; + + Container::new(content) + .center_x() + .center_y() + .width(Length::Fill) + .height(Length::Fill) + .into() + } +} |