From 726e9023c4629d70410174ddbd1e6d43f7583fe5 Mon Sep 17 00:00:00 2001 From: pml68 Date: Mon, 28 Oct 2024 01:00:07 +0100 Subject: feat: implement very basic playground fix: `is_dirty` was never checked for in the main update fn, allowing unsaved work to easily be overwritten --- iced_builder/src/main.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'iced_builder/src/main.rs') diff --git a/iced_builder/src/main.rs b/iced_builder/src/main.rs index ed3f264..d022f29 100644 --- a/iced_builder/src/main.rs +++ b/iced_builder/src/main.rs @@ -11,7 +11,7 @@ use iced::{ Alignment, Element, Length, Settings, Task, Theme, }; use iced_builder::{ - types::{element_name::ElementName, project::Project, rendered_element::Action, DesignerPage}, + types::{Action, DesignerPage, ElementName, Project}, views::{code_view, designer_view, element_list}, Message, }; @@ -101,7 +101,7 @@ impl App { fn update(&mut self, message: Message) -> Task { match message { - Message::ToggleTheme => self.dark_theme = !self.dark_theme, + Message::ToggleDarkMode => self.dark_theme = !self.dark_theme, Message::CopyCode => return clipboard::write(self.editor_content.text()), Message::SwitchPage(page) => self.designer_page = page, Message::EditorAction(action) => { @@ -134,6 +134,8 @@ impl App { if let Ok(Some(ref element)) = result { self.project.element_tree = Some(element.clone()); } + + self.is_dirty = true; } return Task::done(Message::RefreshEditorContent); @@ -156,6 +158,8 @@ impl App { Some(element.get_id()), ); let _ = element.handle_action(self.project.element_tree.as_mut(), action); + + self.is_dirty = true; } return Task::done(Message::RefreshEditorContent); @@ -178,7 +182,7 @@ impl App { } } Message::OpenFile => { - if !self.is_loading { + if !self.is_loading && !self.is_dirty { self.is_loading = true; return Task::perform(Project::from_file(), Message::FileOpened); @@ -247,8 +251,8 @@ impl App { } fn view(&self) -> Element { - let header = row![button("Toggle Theme") - .on_press(Message::ToggleTheme) + let header = row![button("Toggle Dark Mode") + .on_press(Message::ToggleDarkMode) .padding(5)] .width(200); let pane_grid = PaneGrid::new(&self.pane_state, |id, pane, _is_maximized| { -- cgit v1.2.3