Никита
6 years ago
9 changed files with 252 additions and 67 deletions
@ -0,0 +1,145 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.ComponentModel; |
|||
using System.Diagnostics; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows; |
|||
using System.Windows.Controls; |
|||
using System.Windows.Input; |
|||
|
|||
namespace Signal_Generator |
|||
{ |
|||
public class ProcedureModel : ICommand |
|||
{ |
|||
public DrawTask currentTask; |
|||
Canvas targetCanvas; |
|||
|
|||
public ProcedureModel() |
|||
{ |
|||
} |
|||
|
|||
public event EventHandler CanExecuteChanged; |
|||
|
|||
public void RaiseCanExecuteChanged() |
|||
{ |
|||
CanExecuteChanged?.Invoke(this, new EventArgs()); |
|||
} |
|||
|
|||
private void RaiseCanExecuteChanged(object o, PropertyChangedEventArgs e) |
|||
{ |
|||
Action a = () => |
|||
{ |
|||
RaiseCanExecuteChanged(); |
|||
}; |
|||
targetCanvas.Dispatcher.Invoke(a); |
|||
} |
|||
|
|||
public bool CanExecute(object parameter) |
|||
{ |
|||
if (parameter == null) return false; |
|||
var parameters = parameter as object[]; |
|||
var btn = parameters[0] as Button; |
|||
var ms = MultiSignal.getInstance(); |
|||
|
|||
if ((ms == null) && (ms.count() == 0)) |
|||
return false; |
|||
switch (btn.Name) |
|||
{ |
|||
case "start_Button": |
|||
btn.Content = updateStartButtonContent(); |
|||
return true; |
|||
default: |
|||
btn.Content = updatePauseButtonContent().Item2; |
|||
if (!updatePauseButtonContent().Item1) |
|||
return false; |
|||
return true; |
|||
} |
|||
} |
|||
|
|||
private string updateStartButtonContent() |
|||
{ |
|||
if (currentTask == null) return "Запустить"; |
|||
switch (currentTask.state) |
|||
{ |
|||
case DrawTask.State.Created: |
|||
return "Запустить"; |
|||
case DrawTask.State.Running: |
|||
return "Завершить"; |
|||
case DrawTask.State.Paused: |
|||
goto case DrawTask.State.Running; |
|||
default: |
|||
goto case DrawTask.State.Created; |
|||
} |
|||
} |
|||
|
|||
private Tuple<bool, string> updatePauseButtonContent() |
|||
{ |
|||
if (currentTask == null) return new Tuple<bool, string>(false, "Пауза"); |
|||
switch (currentTask.state) |
|||
{ |
|||
case DrawTask.State.Created: |
|||
return new Tuple<bool, string>(false, "Пауза"); |
|||
case DrawTask.State.Running: |
|||
return new Tuple<bool, string>(true, "Пауза"); |
|||
case DrawTask.State.Paused: |
|||
return new Tuple<bool, string>(true, "Возобновить"); |
|||
default: |
|||
goto case DrawTask.State.Created; |
|||
} |
|||
} |
|||
|
|||
public void Execute(object parameter) |
|||
{ |
|||
var parameters = parameter as object[]; |
|||
var btn = parameters[0] as Button; |
|||
targetCanvas = parameters[1] as Canvas; |
|||
|
|||
switch (btn.Name) |
|||
{ |
|||
case "start_Button": |
|||
startOrCancelTask(); |
|||
break; |
|||
case "pause_Button": |
|||
pauseOrResumeTask(); |
|||
break; |
|||
} |
|||
|
|||
} |
|||
|
|||
private void startOrCancelTask () |
|||
{ |
|||
targetCanvas.Children.Clear(); |
|||
if (currentTask != null) |
|||
switch (currentTask.state) |
|||
{ |
|||
case DrawTask.State.Paused: |
|||
goto case DrawTask.State.Running; |
|||
case DrawTask.State.Running: |
|||
currentTask.state = DrawTask.State.Canceled; |
|||
return; |
|||
} |
|||
Action newAction = () => |
|||
{ |
|||
currentTask.PropertyChanged += RaiseCanExecuteChanged; |
|||
currentTask.buildTask(targetCanvas); |
|||
}; |
|||
currentTask = new DrawTask(newAction); |
|||
currentTask.Start(); |
|||
} |
|||
|
|||
private void pauseOrResumeTask() |
|||
{ |
|||
switch (currentTask.state) |
|||
{ |
|||
case DrawTask.State.Paused: |
|||
currentTask.state = DrawTask.State.Running; |
|||
break; |
|||
case DrawTask.State.Running: |
|||
currentTask.state = DrawTask.State.Paused; |
|||
break; |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Globalization; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using System.Windows.Controls; |
|||
using System.Windows.Data; |
|||
|
|||
namespace Signal_Generator |
|||
{ |
|||
class ArrayConverter : IMultiValueConverter |
|||
{ |
|||
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) |
|||
{ |
|||
return values.Clone(); |
|||
} |
|||
|
|||
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
} |
|||
} |
Loading…
Reference in new issue