refactor(egui): report invoker error one outside of `Interactor`

This commit is contained in:
Mikolaj Wielgus 2024-10-11 03:20:36 +02:00
parent 489f55a8b0
commit 3766ade270
2 changed files with 13 additions and 7 deletions

View File

@ -13,7 +13,7 @@ use topola::{
};
use crate::{
activity::{ActivityContext, ActivityStatus, ActivityStepperWithStatus},
activity::{ActivityContext, ActivityError, ActivityStatus, ActivityStepperWithStatus},
interaction::InteractionContext,
};
@ -62,22 +62,21 @@ impl<M: AccessMesadata> Interactor<M> {
self.invoker.replay(history);
}
pub fn update(&mut self) -> ControlFlow<()> {
pub fn update(&mut self) -> ControlFlow<Result<(), ActivityError>> {
if let Some(ref mut activity) = self.activity {
return match activity.step(&mut ActivityContext {
interaction: InteractionContext {},
invoker: &mut self.invoker,
}) {
Ok(ActivityStatus::Running) => ControlFlow::Continue(()),
Ok(ActivityStatus::Finished(..)) => ControlFlow::Break(()),
Ok(ActivityStatus::Finished(..)) => ControlFlow::Break(Ok(())),
Err(err) => {
//error_dialog.push_error("tr-module-invoker", format!("{}", err));
self.activity = None;
ControlFlow::Break(())
ControlFlow::Break(Err(err))
}
};
}
ControlFlow::Break(())
ControlFlow::Break(Ok(()))
}
pub fn invoker(&self) -> &Invoker<M> {

View File

@ -87,7 +87,14 @@ impl Workspace {
}
}
self.interactor.update()
match self.interactor.update() {
ControlFlow::Continue(()) => ControlFlow::Continue(()),
ControlFlow::Break(Ok(())) => ControlFlow::Break(()),
ControlFlow::Break(Err(err)) => {
error_dialog.push_error("tr-module-invoker", format!("{}", err));
ControlFlow::Break(())
}
}
}
pub fn update_layers(&mut self, ctx: &egui::Context) {