Export all redraw fixed

This commit is contained in:
Piyush मिश्रः 2022-03-29 23:05:52 +05:30
parent c1633c7197
commit ae1e61141f
2 changed files with 32 additions and 12 deletions

View File

@ -43,6 +43,7 @@ pub(crate) struct ExportAllWindow {
pub(crate) close_btn: Button, pub(crate) close_btn: Button,
pub(crate) images_list: Arc<RwLock<Vec<ImageInfo>>>, pub(crate) images_list: Arc<RwLock<Vec<ImageInfo>>>,
pub(crate) channel: Arc<RwLock<Option<Channel<ThreadMessage, ThreadMessage>>>>, pub(crate) channel: Arc<RwLock<Option<Channel<ThreadMessage, ThreadMessage>>>>,
pub(crate) finished: Arc<RwLock<bool>>,
} }
impl ExportAllWindow { impl ExportAllWindow {
@ -106,7 +107,7 @@ impl ExportAllWindow {
main_flex.end(); main_flex.end();
win.end(); win.end();
win.make_resizable(true); win.make_modal(true);
let mut config_picker = Self { let mut config_picker = Self {
win, win,
@ -115,6 +116,7 @@ impl ExportAllWindow {
close_btn, close_btn,
images_list, images_list,
channel: Arc::new(RwLock::new(None)), channel: Arc::new(RwLock::new(None)),
finished: Arc::new(RwLock::new(false)),
}; };
config_picker.event(); config_picker.event();
@ -124,8 +126,10 @@ impl ExportAllWindow {
pub(crate) fn export(&mut self) { pub(crate) fn export(&mut self) {
self.image_name.set_label(""); self.image_name.set_label("");
self.progress.set_label("Exporting..."); self.progress.set_label("Exporting...");
self.close_btn.set_label("Cancel");
self.progress.set_maximum(1.0); self.progress.set_maximum(1.0);
self.progress.set_value(0.0); self.progress.set_value(0.0);
*rw_write!(self.finished) = false;
self.win.show(); self.win.show();
let (left, right) = bichannel::channel(); let (left, right) = bichannel::channel();
*rw_write!(self.channel) = Some(left); *rw_write!(self.channel) = Some(left);
@ -143,25 +147,31 @@ impl ExportAllWindow {
} }
app::wait(); app::wait();
} }
self.win.redraw();
} }
// Set callbacks of elements // Set callbacks of elements
fn event(&mut self) { fn event(&mut self) {
let channel = Arc::clone(&self.channel);
// Close Button // Close Button
let channel = Arc::clone(&self.channel);
let finished = Arc::clone(&self.finished);
let mut win = self.win.clone();
self.close_btn.set_callback(move |_| { self.close_btn.set_callback(move |_| {
if dialog::choice_default("Are you sure?", "Yes", "No") == 0 { if *rw_read!(finished) == true {
win.hide();
} else if dialog::choice_default("Are you sure?", "Yes", "No") == 0 {
if let Some(c) = &*rw_read!(channel) { if let Some(c) = &*rw_read!(channel) {
c.send(ThreadMessage::Stop).error_log("Failed to stop task"); c.send(ThreadMessage::Stop).error_log("Failed to stop task");
} }
} }
}); });
let channel = Arc::clone(&self.channel);
// Window Close // Window Close
self.win.set_callback(move |_| { let channel = Arc::clone(&self.channel);
if dialog::choice_default("Are you sure?", "Yes", "No") == 0 { let finished = Arc::clone(&self.finished);
self.win.set_callback(move |f| {
if *rw_read!(finished) == true {
f.hide();
} else if dialog::choice_default("Are you sure?", "Yes", "No") == 0 {
if let Some(c) = &*rw_read!(channel) { if let Some(c) = &*rw_read!(channel) {
c.send(ThreadMessage::Stop).error_log("Failed to stop task"); c.send(ThreadMessage::Stop).error_log("Failed to stop task");
} }
@ -182,6 +192,8 @@ fn spawn_export_thread(
let mut win = export_all.win.clone(); let mut win = export_all.win.clone();
let mut progress = export_all.progress.clone(); let mut progress = export_all.progress.clone();
let mut image_name = export_all.image_name.clone(); let mut image_name = export_all.image_name.clone();
let mut close_btn = export_all.close_btn.clone();
let finished = Arc::clone(&export_all.finished);
let images_list = Arc::clone(&export_all.images_list); let images_list = Arc::clone(&export_all.images_list);
thread::spawn(move || { thread::spawn(move || {
@ -224,14 +236,20 @@ fn spawn_export_thread(
if let Ok(msg) = channel.try_recv() { if let Ok(msg) = channel.try_recv() {
match msg { match msg {
ThreadMessage::Stop => break, ThreadMessage::Stop => {
channel
.send(ThreadMessage::HideWindow)
.error_log("Failed to close window");
return;
}
_ => (), _ => (),
} }
} }
} }
image_name.set_label("Done"); image_name.set_label("Finished");
channel close_btn.set_label("Close");
.send(ThreadMessage::HideWindow) *rw_write!(finished) = true;
.error_log("Failed to close window"); win.redraw();
app::awake();
}); });
} }

View File

@ -490,6 +490,7 @@ impl MainWindow {
}, },
); );
let mut win = self.win.clone();
let mut export_all = ExportAllWindow::new(Arc::clone(&self.images_list)); let mut export_all = ExportAllWindow::new(Arc::clone(&self.images_list));
self.menubar.add( self.menubar.add(
"&Actions/Export All with Quotes...\t", "&Actions/Export All with Quotes...\t",
@ -497,6 +498,7 @@ impl MainWindow {
menu::MenuFlag::Normal, menu::MenuFlag::Normal,
move |_| { move |_| {
export_all.export(); export_all.export();
win.redraw();
fltk::app::awake(); fltk::app::awake();
}, },
); );