Skip to content

Commit

Permalink
Clean up BaseProcessViewModel
Browse files Browse the repository at this point in the history
  • Loading branch information
PABERTHIER committed Jan 20, 2025
1 parent 37764a1 commit acf3a70
Showing 1 changed file with 27 additions and 65 deletions.
92 changes: 27 additions & 65 deletions PhotoManager/PhotoManager.UI/ViewModels/BaseProcessViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,22 @@

namespace PhotoManager.UI.ViewModels;

public abstract class BaseProcessViewModel<C, R> : BaseViewModel
public abstract class BaseProcessViewModel<TC, TR>(IApplication application) : BaseViewModel(application)
{
private ProcessStep step = ProcessStep.ViewDescription;
private ObservableCollection<string> processStatusMessages;
private ObservableCollection<R> _results;
private ProcessStep _step = ProcessStep.ViewDescription;
private ObservableCollection<TR> _results = [];

protected BaseProcessViewModel(IApplication application) : base(application)
{
processStatusMessages = [];
_results = [];
}
public abstract string Description { get; }

public ObservableCollection<string> ProcessStatusMessages
{
get { return processStatusMessages; }
}
public abstract TC GetProcessConfiguration();

public abstract void SetProcessConfiguration(TC configuration);

public abstract Task RunProcessAsync(ProcessStatusChangedCallback callback);

public ObservableCollection<R> Results
public ObservableCollection<string> ProcessStatusMessages { get; } = [];

public ObservableCollection<TR> Results
{
get => _results;
set
Expand All @@ -35,19 +33,13 @@ public ObservableCollection<R> Results
}
}

public abstract C GetProcessConfiguration();

public abstract void SetProcessConfiguration(C configuration);

public abstract string Description { get; }

public ProcessStep Step
{
get { return step; }
get => _step;

private set
{
step = value;
_step = value;
NotifyPropertyChanged(
nameof(Step),
nameof(DescriptionVisible),
Expand All @@ -58,63 +50,33 @@ private set
}
}

public Visibility DescriptionVisible
{
get { return Step == ProcessStep.ViewDescription ? Visibility.Visible : Visibility.Hidden; }
}
public Visibility DescriptionVisible => Step == ProcessStep.ViewDescription ? Visibility.Visible : Visibility.Hidden;

public Visibility ConfigurationVisible
{
get { return Step == ProcessStep.Configure ? Visibility.Visible : Visibility.Hidden; }
}
public Visibility ConfigurationVisible => Step == ProcessStep.Configure ? Visibility.Visible : Visibility.Hidden;

public Visibility RunVisible
{
get { return Step == ProcessStep.Run ? Visibility.Visible : Visibility.Hidden; }
}
public Visibility RunVisible => Step == ProcessStep.Run ? Visibility.Visible : Visibility.Hidden;

public Visibility ResultsVisible
{
get { return Step == ProcessStep.ViewResults ? Visibility.Visible : Visibility.Hidden; }
}
public Visibility ResultsVisible => Step == ProcessStep.ViewResults ? Visibility.Visible : Visibility.Hidden;

public bool CanViewDescription
{
get { return Step == ProcessStep.ViewDescription; }
}
public bool CanViewDescription => Step == ProcessStep.ViewDescription;

public bool CanConfigure
{
get { return Step == ProcessStep.Configure; }
}
public bool CanConfigure => Step == ProcessStep.Configure;

public bool CanViewResults
{
get { return Step == ProcessStep.ViewResults && Results.Count > 0; }
}
public bool CanViewResults => Step == ProcessStep.ViewResults && Results.Count > 0;

public void AdvanceStep()
{
switch (Step)
Step = Step switch
{
case ProcessStep.ViewDescription:
Step = ProcessStep.Configure;
break;

case ProcessStep.Configure:
Step = ProcessStep.Run;
break;

case ProcessStep.Run:
Step = ProcessStep.ViewResults;
break;
}
ProcessStep.ViewDescription => ProcessStep.Configure,
ProcessStep.Configure => ProcessStep.Run,
ProcessStep.Run => ProcessStep.ViewResults,
_ => Step
};
}

public void NotifyProcessStatusChanged(ProcessStatusChangedCallbackEventArgs e)
{
ProcessStatusMessages.Add(e.NewStatus);
}

public abstract Task RunProcessAsync(ProcessStatusChangedCallback callback);
}

0 comments on commit acf3a70

Please sign in to comment.