Export all redraw fixed
This commit is contained in:
parent
c1633c7197
commit
ae1e61141f
|
|
@ -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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue