diff --git a/src/Tools/tim_tool/src/gui/main_tab.rs b/src/Tools/tim_tool/src/gui/main_tab.rs index 61d5609e..3647dfe3 100644 --- a/src/Tools/tim_tool/src/gui/main_tab.rs +++ b/src/Tools/tim_tool/src/gui/main_tab.rs @@ -2,10 +2,11 @@ use crate::{gui::{VRAM_HEIGHT, VRAM_WIDTH}, MainWindow, VRAMImage}; use super::{GUIElementsRef, MainWindowRef}; use slint::Model; -use std::rc::Rc; +use std::{rc::Rc, sync::{Arc, Mutex}}; pub struct MainTab { main_window: MainWindowRef, + mtx: Arc>, vram_file_list: Rc>, vram_image_list: Rc>, } @@ -19,22 +20,30 @@ impl MainTab { main_window.borrow().set_main_tab_vram_file_list(vram_file_list.clone().into()); main_window.borrow().set_main_tab_vram_images(vram_image_list.clone().into()); - MainTab{main_window, vram_file_list, vram_image_list} + MainTab{main_window, mtx: Arc::new(Mutex::new(0)), vram_file_list, vram_image_list} } - pub fn add_new_vram_file(&mut self, file_name: &String, image: slint::Image) { - let vram_image = VRAMImage{ - img: image, - x: 0, - y: 0, - is_palette: false, + pub fn add_new_vram_file(&mut self, file_name: &String, image: slint::Image, image_palette: Option) { + let add_new_image = |file_name: &String, image: slint::Image| { + let vram_image = VRAMImage{ + img: image, + x: 0, + y: 0, + palette_count: 0, + is_palette: false, + }; + + self.vram_file_list.push(slint::StandardListViewItem::from(file_name.as_str())); + self.vram_image_list.push(vram_image); }; - self.vram_file_list.push(slint::StandardListViewItem::from(file_name.as_str())); - self.vram_image_list.push(vram_image); + let _lock = self.mtx.lock().unwrap(); + add_new_image(file_name, image); } pub fn remove_vram_file(&mut self, idx: usize) -> bool { + let _lock = self.mtx.lock().unwrap(); + if let Some(element) = self.vram_image_list.iter().skip(idx).next() { if element.is_palette { return false; diff --git a/src/Tools/tim_tool/src/logic/mod.rs b/src/Tools/tim_tool/src/logic/mod.rs index aba1c083..c938513f 100644 --- a/src/Tools/tim_tool/src/logic/mod.rs +++ b/src/Tools/tim_tool/src/logic/mod.rs @@ -14,7 +14,7 @@ impl Logic { Logic{unadded_tim: None} } - pub fn set_unadded_tim(&mut self, path: &PathBuf) -> Result { + pub fn set_unadded_tim(&mut self, path: &PathBuf) -> Result<(Image, Option), Error> { let tim_info = TIMInfo::from_image(path)?; let image = tim_info.get_slint_images(); @@ -22,7 +22,7 @@ impl Logic { Ok(image) } - pub fn add_unadded_tim_as(&mut self, _name: &String) -> Result { + pub fn add_unadded_tim_as(&mut self, _name: &String) -> Result<(Image, Option), Error> { if let Some(unadded_tim) = &self.unadded_tim { let image = unadded_tim.get_slint_images(); diff --git a/src/Tools/tim_tool/src/logic/tim.rs b/src/Tools/tim_tool/src/logic/tim.rs index 64ea2f1e..025eed4e 100644 --- a/src/Tools/tim_tool/src/logic/tim.rs +++ b/src/Tools/tim_tool/src/logic/tim.rs @@ -70,7 +70,7 @@ impl TIMInfo { } } - pub fn get_slint_images(&self) -> slint::Image { - slint::Image::from_rgba8_premultiplied(self.image_data.clone()) + pub fn get_slint_images(&self) -> (slint::Image, Option) { + (slint::Image::from_rgba8_premultiplied(self.image_data.clone()), None) } } \ No newline at end of file diff --git a/src/Tools/tim_tool/src/main.rs b/src/Tools/tim_tool/src/main.rs index f89dafd9..3506d5a5 100644 --- a/src/Tools/tim_tool/src/main.rs +++ b/src/Tools/tim_tool/src/main.rs @@ -58,7 +58,7 @@ fn setup_file_tab(gui_elements_ref: Rc>, logic_ref: Rc VRAM_WIDTH as u32 || img_size.height > VRAM_HEIGHT as u32 { @@ -75,9 +75,10 @@ fn setup_file_tab(gui_elements_ref: Rc>, logic_ref: Rc