protected virtual void Dispose(bool disposing) { if (_disposed) { return; } try { if (_skillCountUseCase != null) { _skillCountUseCase.Dispose(); _skillCountUseCase = null; } } finally { _disposed = true; } }
public MainWindowViewModel() { _skillCountUseCase = new SkillCountUseCase(); IsLoaded = new ReactivePropertySlim <bool>(false); MapName = _skillCountUseCase.MapName .Select(x => string.IsNullOrEmpty(x) ? "" : x) .ToReadOnlyReactivePropertySlim(); WorkName = _skillCountUseCase.WorkName .Select(x => string.IsNullOrEmpty(x) ? "" : x) .ToReadOnlyReactivePropertySlim(); WarStatus = _skillCountUseCase.WarStatus.ToReadOnlyReactivePropertySlim(); AverageFps = _skillCountUseCase.AverageFps.ToReadOnlyReactivePropertySlim(); AttackKeepDamage = _skillCountUseCase.AttackKeepDamage.ToReadOnlyReactivePropertySlim(); DefenceKeepDamage = _skillCountUseCase.DefenceKeepDamage.ToReadOnlyReactivePropertySlim(); IsBookUsing = _skillCountUseCase.IsBookUsing.ToReadOnlyReactivePropertySlim(); Pow = _skillCountUseCase.Pow.ToReadOnlyReactivePropertySlim(); Hp = _skillCountUseCase.Hp.ToReadOnlyReactivePropertySlim(); PowDebuffs = _skillCountUseCase.PowDebuffs .Select(x => string.IsNullOrEmpty(x) ? "" : x) .ToReadOnlyReactivePropertySlim(); IsSkillCountFileSave = _skillCountUseCase.IsSkillCountFileSave.ToReactiveProperty(); IsSkillCountFileSave.Subscribe(x => { _skillCountUseCase.IsSkillCountFileSave.Value = x; }); IsNotifyBookUses = _skillCountUseCase.IsNotifyBookUses.ToReactiveProperty(); IsNotifyBookUses.Subscribe(x => { _skillCountUseCase.IsNotifyBookUses.Value = x; }); IsNotifyEnchantUses = _skillCountUseCase.IsNotifyEnchantUses.ToReactiveProperty(); IsNotifyEnchantUses.Subscribe(x => { _skillCountUseCase.IsNotifyEnchantUses.Value = x; }); IsNotifySpellUses = _skillCountUseCase.IsNotifySpellUses.ToReactiveProperty(); IsNotifySpellUses.Subscribe(x => { _skillCountUseCase.IsNotifySpellUses.Value = x; }); EnchantSpellNotifySecond = _skillCountUseCase.EnchantSpellNotifyTimeSpan .Select(x => (int)(x ?? TimeSpan.Zero).TotalSeconds) .ToReactiveProperty(); EnchantSpellNotifySecond.Subscribe(x => { _skillCountUseCase.EnchantSpellNotifyTimeSpan.Value = TimeSpan.FromSeconds(x); }); IsAllwaysOnTop = _skillCountUseCase.IsAllwaysOnTop.ToReactiveProperty(); IsAllwaysOnTop.Subscribe(x => { _skillCountUseCase.IsAllwaysOnTop.Value = x; }); IsDebugModeEnabled = _skillCountUseCase.IsDebugModeEnabled.ToReactiveProperty(); IsDebugModeEnabled.Subscribe(x => { _skillCountUseCase.IsDebugModeEnabled.Value = x; }); IsWarriorFilter = new ReactiveProperty <bool>(true); IsSorcererFilter = new ReactiveProperty <bool>(true); IsScoutFilter = new ReactiveProperty <bool>(true); IsCestusFilter = new ReactiveProperty <bool>(true); IsFencerFilter = new ReactiveProperty <bool>(true); void doFilter(bool _) { var filterWorks = new List <string>(); if (IsWarriorFilter.Value) { filterWorks.Add("ウォーリアー"); } if (IsSorcererFilter.Value) { filterWorks.Add("ソーサラー"); } if (IsScoutFilter.Value) { filterWorks.Add("スカウト"); } if (IsCestusFilter.Value) { filterWorks.Add("セスタス"); } if (IsFencerFilter.Value) { filterWorks.Add("フェンサー"); } SkillCountHistories?.Refresh(entity => filterWorks.Contains(entity.WorkName)); } IsWarriorFilter.Subscribe(doFilter); IsSorcererFilter.Subscribe(doFilter); IsScoutFilter.Subscribe(doFilter); IsCestusFilter.Subscribe(doFilter); IsFencerFilter.Subscribe(doFilter); CurrentSkillCollection = _skillCountUseCase.CurrentSkillCollection.ToReadOnlyReactiveCollection(); SkillCountHistories = _skillCountUseCase.SkillCountHistories.ToFilteredReadOnlyObservableCollection(x => { var filterWorks = new List <string>(); if (IsWarriorFilter.Value) { filterWorks.Add("ウォーリアー"); } if (IsSorcererFilter.Value) { filterWorks.Add("ソーサラー"); } if (IsScoutFilter.Value) { filterWorks.Add("スカウト"); } if (IsCestusFilter.Value) { filterWorks.Add("セスタス"); } if (IsFencerFilter.Value) { filterWorks.Add("フェンサー"); } return(filterWorks.Contains(x.WorkName)); }); SelectedSkillCountHistory = new ReactiveProperty <SkillCountEntity>(); SelectedSkillCountDatails = SelectedSkillCountHistory .Select(x => x != null ? x.Details : new List <SkillCountDetailEntity>()) .ToReadOnlyReactivePropertySlim(); LoadedCommand = new ReactiveCommand(); LoadedCommand.Subscribe(async() => { await _skillCountUseCase.SetUpAsync(); _skillCountUseCase.StartSkillCounter(); IsLoaded.Value = true; }); ResetCommand = new ReactiveCommand(); ResetCommand.Subscribe(async() => { await _skillCountUseCase.ResetSkillCountAsync(); }); CopySkillCountsCommand = SelectedSkillCountHistory .Select(x => x != null) .ToReactiveCommand(); CopySkillCountsCommand.Subscribe(o => { var entities = ((System.Collections.IList)o).Cast <SkillCountEntity>(); _skillCountUseCase.CopySkillCountToClipboard(entities); MessageQueue.Enqueue("クリップボードにコピーしました"); }); }