Пример #1
0
 public DigitalPatchManager(DigitalSynth synthNumber)
 {
     _logger         = LoggerFactory.FullSet(typeof(DigitalPatchManager));
     _synthNumber    = synthNumber;
     _timer.Elapsed += OnTimerElapsed;
 }
        /// <inheritdoc />
        /// <summary>
        ///     Creates new instance of DigitalSynthTabViewModel
        /// </summary>
        public DigitalSynthTabViewModel(IEventAggregator eventAggregator, IDialogCoordinator dialogCoordinator, DigitalSynth synth)
            : base(eventAggregator, dialogCoordinator, new DigitalPatchManager(synth))
        {
            //TODO: Take use of enum description
            DisplayName = synth == DigitalSynth.First ? "Digital Synth 1" : "Digital Synth 2";
            InitLogger(typeof(DigitalSynthTabViewModel));

            Patch  = new Patch();
            Editor = new DigitalPartialsEditorViewModel(Patch);

            Patch.PropertyChanged += (sender, args) =>
            {
                if (AutoSync && SelectedOutputDeviceId != -1)
                {
                    var digitalPatchManager = (IDigitalPatchManager)PatchManager;

                    switch (args.PropertyName)
                    {
                    case nameof(Patch.Common):
                        digitalPatchManager.DumpCommon(Patch.Common, SelectedOutputDeviceId);
                        break;

                    case nameof(Patch.Modifiers):
                        digitalPatchManager.DumpModifiers(Patch.Modifiers, SelectedOutputDeviceId);
                        break;

                    case nameof(Patch.PartialOne):
                        digitalPatchManager.DumpPartial(Patch.PartialOne, DigitalPartial.First,
                                                        SelectedOutputDeviceId);
                        break;

                    case nameof(Patch.PartialTwo):
                        digitalPatchManager.DumpPartial(Patch.PartialTwo, DigitalPartial.Second,
                                                        SelectedOutputDeviceId);
                        break;

                    case nameof(Patch.PartialThree):
                        digitalPatchManager.DumpPartial(Patch.PartialThree, DigitalPartial.Third,
                                                        SelectedOutputDeviceId);
                        break;
                    }

                    Logger.AutoSync($"{args.PropertyName} changed");
                }

                if (args.PropertyName == nameof(Modifiers))
                {
                    NotifyOfPropertyChange(nameof(IsEnvelopeLoopSyncNoteEnabled));
                }
            };

            PatchManager.DataDumpReceived += (sender, args) =>
            {
                if (args is DigitalPatchDumpReceivedEventArgs eventArgs)
                {
                    AutoSync = false;

                    Patch.CopyFrom(eventArgs.Patch);
                    Logger.DataDump("Received data dump");

                    AutoSync = true;
                }
            };

            PatchManager.OperationTimedOut += (sender, args) =>
            {
                Logger.Error("Device is not responding");
                ShowErrorMessage("Device is not responding, try again in a moment");
            };
        }