Skip to content

Instantly share code, notes, and snippets.

@sowbug
Created October 19, 2022 19:25
Show Gist options
  • Save sowbug/94cf00d7f31fa54b4fec57d8e1809713 to your computer and use it in GitHub Desktop.
Save sowbug/94cf00d7f31fa54b4fec57d8e1809713 to your computer and use it in GitHub Desktop.
use iced::Sandbox;
use iced::{button, Alignment, Button, Column, Container, Element, Settings, Text};
use std::cell::RefCell;
use std::rc::Rc;
pub fn main() -> iced::Result {
Counter::run(Settings::default())
}
#[derive(Debug, Default)]
struct Thing {
name: String,
}
impl Thing {
pub fn view(&mut self) -> Element<Message> {
Container::new(Text::new(self.name.clone())).into()
}
}
#[derive(Debug, Default)]
struct OtherStruct {
pub things: Vec<Rc<RefCell<Thing>>>,
}
impl OtherStruct {
fn new() -> Self {
Self {
things: vec![Rc::new(RefCell::new(Thing {
name: "hello".to_string(),
}))],
}
}
}
#[derive(Default)]
struct Counter {
value: i32,
increment_button: button::State,
decrement_button: button::State,
o: OtherStruct,
}
#[derive(Debug, Clone, Copy)]
enum Message {
IncrementPressed,
DecrementPressed,
}
impl Sandbox for Counter {
type Message = Message;
fn new() -> Self {
Self {
o: OtherStruct::new(),
..Default::default()
}
}
fn title(&self) -> String {
String::from("Counter - Iced")
}
fn update(&mut self, message: Message) {
match message {
Message::IncrementPressed => {
self.value += 1;
}
Message::DecrementPressed => {
self.value -= 1;
}
}
}
fn view(&mut self) -> Element<Message> {
let other_view = self
.o
.things
.iter_mut()
.enumerate()
.fold(Column::new(), |column, (_, item)| {
column.push(item.borrow_mut().view())
});
Column::new()
.padding(20)
.align_items(Alignment::Center)
.push(
Button::new(&mut self.increment_button, Text::new("Increment"))
.on_press(Message::IncrementPressed),
)
.push(Text::new(self.value.to_string()).size(50))
.push(
Button::new(&mut self.decrement_button, Text::new("Decrement"))
.on_press(Message::DecrementPressed),
)
.push(other_view)
.into()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment