mirror of https://codeberg.org/topola/topola.git
refactor(egui): wrap `Invoker<...>` inside new `ActivityContext`
This commit is contained in:
parent
8b9d4074e4
commit
a9b72334f7
|
|
@ -15,18 +15,16 @@ use topola::{
|
||||||
stepper::{Abort, Step},
|
stepper::{Abort, Step},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pub struct ActivityContext<'a> {
|
||||||
|
pub invoker: &'a mut Invoker<SpecctraMesadata>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum ActivityStatus {
|
pub enum ActivityStatus {
|
||||||
Running,
|
Running,
|
||||||
Finished(String),
|
Finished(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Error, Debug, Clone)]
|
|
||||||
pub enum ActivityError {
|
|
||||||
#[error(transparent)]
|
|
||||||
Invoker(#[from] InvokerError),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<InvokerStatus> for ActivityStatus {
|
impl From<InvokerStatus> for ActivityStatus {
|
||||||
fn from(status: InvokerStatus) -> Self {
|
fn from(status: InvokerStatus) -> Self {
|
||||||
match status {
|
match status {
|
||||||
|
|
@ -46,26 +44,29 @@ impl TryInto<()> for ActivityStatus {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Error, Debug, Clone)]
|
||||||
|
pub enum ActivityError {
|
||||||
|
#[error(transparent)]
|
||||||
|
Invoker(#[from] InvokerError),
|
||||||
|
}
|
||||||
|
|
||||||
pub enum ActivityStepper {
|
pub enum ActivityStepper {
|
||||||
// There will be another variant for interactive activities here soon. (TODO)
|
// There will be another variant for interactive activities here soon. (TODO)
|
||||||
Execution(ExecutionStepper),
|
Execution(ExecutionStepper),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Step<Invoker<SpecctraMesadata>, ActivityStatus, ActivityError, ()> for ActivityStepper {
|
impl Step<ActivityContext<'_>, ActivityStatus, ActivityError, ()> for ActivityStepper {
|
||||||
fn step(
|
fn step(&mut self, context: &mut ActivityContext) -> Result<ActivityStatus, ActivityError> {
|
||||||
&mut self,
|
|
||||||
invoker: &mut Invoker<SpecctraMesadata>,
|
|
||||||
) -> Result<ActivityStatus, ActivityError> {
|
|
||||||
match self {
|
match self {
|
||||||
ActivityStepper::Execution(execution) => Ok(execution.step(invoker)?.into()),
|
ActivityStepper::Execution(execution) => Ok(execution.step(context.invoker)?.into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Abort<Invoker<SpecctraMesadata>> for ActivityStepper {
|
impl Abort<ActivityContext<'_>> for ActivityStepper {
|
||||||
fn abort(&mut self, invoker: &mut Invoker<SpecctraMesadata>) {
|
fn abort(&mut self, context: &mut ActivityContext) {
|
||||||
match self {
|
match self {
|
||||||
ActivityStepper::Execution(execution) => execution.finish(invoker), // TODO.
|
ActivityStepper::Execution(execution) => execution.finish(context.invoker), // TODO.
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -124,23 +125,18 @@ impl ActivityStepperWithStatus {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Step<Invoker<SpecctraMesadata>, ActivityStatus, ActivityError, ()>
|
impl Step<ActivityContext<'_>, ActivityStatus, ActivityError, ()> for ActivityStepperWithStatus {
|
||||||
for ActivityStepperWithStatus
|
fn step(&mut self, context: &mut ActivityContext) -> Result<ActivityStatus, ActivityError> {
|
||||||
{
|
let status = self.activity.step(context)?;
|
||||||
fn step(
|
|
||||||
&mut self,
|
|
||||||
invoker: &mut Invoker<SpecctraMesadata>,
|
|
||||||
) -> Result<ActivityStatus, ActivityError> {
|
|
||||||
let status = self.activity.step(invoker)?;
|
|
||||||
self.maybe_status = Some(status.clone());
|
self.maybe_status = Some(status.clone());
|
||||||
Ok(status.into())
|
Ok(status.into())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Abort<Invoker<SpecctraMesadata>> for ActivityStepperWithStatus {
|
impl Abort<ActivityContext<'_>> for ActivityStepperWithStatus {
|
||||||
fn abort(&mut self, invoker: &mut Invoker<SpecctraMesadata>) {
|
fn abort(&mut self, context: &mut ActivityContext) {
|
||||||
self.maybe_status = Some(ActivityStatus::Finished(String::from("aborted")));
|
self.maybe_status = Some(ActivityStatus::Finished(String::from("aborted")));
|
||||||
self.activity.abort(invoker);
|
self.activity.abort(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ use topola::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
activity::{ActivityStatus, ActivityStepperWithStatus},
|
activity::{ActivityContext, ActivityStatus, ActivityStepperWithStatus},
|
||||||
config::Config,
|
config::Config,
|
||||||
error_dialog::ErrorDialog,
|
error_dialog::ErrorDialog,
|
||||||
layers::Layers,
|
layers::Layers,
|
||||||
|
|
@ -170,7 +170,7 @@ impl App {
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref mut activity) = self.maybe_activity {
|
if let Some(ref mut activity) = self.maybe_activity {
|
||||||
return match activity.step(invoker) {
|
return match activity.step(&mut ActivityContext { invoker }) {
|
||||||
Ok(ActivityStatus::Running) => true,
|
Ok(ActivityStatus::Running) => true,
|
||||||
Ok(ActivityStatus::Finished(..)) => false,
|
Ok(ActivityStatus::Finished(..)) => false,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ use topola::{
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
action::{Action, Switch, Trigger},
|
action::{Action, Switch, Trigger},
|
||||||
activity::{ActivityStatus, ActivityStepperWithStatus},
|
activity::{ActivityContext, ActivityStatus, ActivityStepperWithStatus},
|
||||||
app::{execute, handle_file},
|
app::{execute, handle_file},
|
||||||
overlay::Overlay,
|
overlay::Overlay,
|
||||||
translator::Translator,
|
translator::Translator,
|
||||||
|
|
@ -331,7 +331,7 @@ impl MenuBar {
|
||||||
} else if abort.consume_key_triggered(ctx, ui) {
|
} else if abort.consume_key_triggered(ctx, ui) {
|
||||||
if let Some(activity) = maybe_activity {
|
if let Some(activity) = maybe_activity {
|
||||||
if let Some(invoker) = arc_mutex_maybe_invoker.lock().unwrap().as_mut() {
|
if let Some(invoker) = arc_mutex_maybe_invoker.lock().unwrap().as_mut() {
|
||||||
activity.abort(invoker);
|
activity.abort(&mut ActivityContext { invoker });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if remove_bands.consume_key_triggered(ctx, ui) {
|
} else if remove_bands.consume_key_triggered(ctx, ui) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue