public void LoadConfiguration() { var config = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(new System.Configuration.ConfigurationFileMap(SelectedMachineConfigPath)); AppSettingsListInternal.Clear(); ConnectionStringListInternal.Clear(); foreach (System.Configuration.KeyValueConfigurationElement setting in config.AppSettings.Settings) { AppSettingsListInternal.Add(new KeyValueViewModel { Key = setting.Key, Value = setting.Value }); } foreach (System.Configuration.ConnectionStringSettings connectionString in config.ConnectionStrings.ConnectionStrings) { ConnectionStringListInternal.Add(new ConnectionStringViewModel { Key = connectionString.Name, Value = connectionString.ConnectionString, Provider = connectionString.ProviderName }); } _isLoaded = true; ImportSettingsCommand.CanExecute(null); }
// コンストラクタ public MainViewModel() { // picフォルダが存在しない場合は作成する if (!Directory.Exists(@"pic\")) { Directory.CreateDirectory(@"pic\"); } // debugフォルダが存在しない場合は作成する if (!Directory.Exists(@"debug\")) { Directory.CreateDirectory(@"debug\"); } // 設定項目を初期化する if (!SettingsStore.Initialize()) { MessageBox.Show("設定を読み込めませんでした。\nデフォルトの設定で起動します。", Utility.SoftwareName, MessageBoxButton.OK, MessageBoxImage.Exclamation); } // 資材データベースを初期化する SupplyStore.Initialize(); // 設定内容を画面に反映する SetSettings(); // プロパティを設定 ForTwitterFlg.Subscribe(x => { SettingsStore.ForTwitterFlg = x; }); MainWindowPositionLeft.Subscribe(x => { SettingsStore.MainWindowRect[0] = x; SettingsStore.ChangeSettingFlg = true; }); MainWindowPositionTop.Subscribe(x => { SettingsStore.MainWindowRect[1] = x; SettingsStore.ChangeSettingFlg = true; }); MainWindowPositionWidth.Subscribe(x => { SettingsStore.MainWindowRect[2] = x; SettingsStore.ChangeSettingFlg = true; }); MainWindowPositionHeight.Subscribe(x => { SettingsStore.MainWindowRect[3] = x; SettingsStore.ChangeSettingFlg = true; }); MemoryWindowPositionFlg.Subscribe(x => { SettingsStore.MemoryWindowPositionFlg = x; }); AutoSearchPositionFlg.Subscribe(x => { SettingsStore.AutoSearchPositionFlg = x; }); AutoSupplyScreenShotFlg.Subscribe(x => { SettingsStore.AutoSupplyScreenShotFlg = x; }); PutCharacterRecognitionFlg.Subscribe(x => { SettingsStore.PutCharacterRecognitionFlg = x; }); DragAndDropPictureFlg.Subscribe(x => { SettingsStore.DragAndDropPictureFlg = x; }); // コマンドを設定 GetGameWindowPositionCommand.Subscribe(_ => GetGameWindowPosition()); SaveScreenshotCommand.Subscribe(_ => { try { string fileName = $"{Utility.GetTimeStrLong()}.png"; ScreenShotProvider.GetScreenshot(ForTwitterFlg.Value).Save($"pic\\{fileName}"); PutLog($"スクリーンショット : 成功"); PutLog($"ファイル名 : {fileName}"); } catch (Exception) { PutLog($"スクリーンショット : 失敗"); } }); CloseCommand.Subscribe(_ => { CloseWindow.Value = true; }); SoftwareInfoCommand.Subscribe(_ => { // ソフトの情報を返す // 参考→http://dobon.net/vb/dotnet/file/myversioninfo.html var assembly = Assembly.GetExecutingAssembly(); // AssemblyTitle string asmttl = ((AssemblyTitleAttribute) Attribute.GetCustomAttribute(assembly, typeof(AssemblyTitleAttribute))).Title; // AssemblyCopyright string asmcpy = ((AssemblyCopyrightAttribute) Attribute.GetCustomAttribute(assembly, typeof(AssemblyCopyrightAttribute))).Copyright; // AssemblyProduct string asmprd = ((AssemblyProductAttribute) Attribute.GetCustomAttribute(assembly, typeof(AssemblyProductAttribute))).Product; // AssemblyVersion var asmver = assembly.GetName().Version; MessageBox.Show( $"{asmttl} Ver.{asmver}\n{asmcpy}\n{asmprd}", Utility.SoftwareName, MessageBoxButton.OK, MessageBoxImage.Information); }); ImportSettingsCommand.Subscribe(_ => { // インスタンスを作成 var ofd = new OpenFileDialog { // ファイルの種類を設定 Filter = "設定ファイル(*.json)|*.json|全てのファイル (*.*)|*.*" }; // ダイアログを表示 if ((bool)ofd.ShowDialog()) { // 設定をインポート if (!SettingsStore.LoadSettings(ofd.FileName)) { PutLog("エラー:設定を読み込めませんでした"); } else { PutLog("設定を読み込みました"); } SetSettings(); } }); ExportSettingsCommand.Subscribe(_ => { // インスタンスを作成 var sfd = new SaveFileDialog { // ファイルの種類を設定 Filter = "設定ファイル(*.json)|*.json|全てのファイル (*.*)|*.*" }; // ダイアログを表示 if ((bool)sfd.ShowDialog()) { // 設定をエクスポート if (!SettingsStore.SaveSettings(sfd.FileName)) { PutLog("エラー:設定を保存できませんでした"); } else { PutLog("設定を保存しました"); } } }); OpenPicFolderCommand.Subscribe(_ => System.Diagnostics.Process.Start(@"pic\")); OpenSupplyViewCommand.Subscribe(_ => { if (SettingsStore.ShowSupplyWindowFlg) { return; } var vm = new SupplyViewModel(); var view = new Views.SupplyView { DataContext = vm }; view.Show(); SettingsStore.ShowSupplyWindowFlg = true; }).AddTo(Disposable); OpenTimerViewCommand.Subscribe(_ => { if (SettingsStore.ShowTimerWindowFlg) { return; } var vm = new TimerViewModel(); var view = new Views.TimerView { DataContext = vm }; view.Show(); SettingsStore.ShowTimerWindowFlg = true; }).AddTo(Disposable); ImportMainSupplyCommand.Subscribe(async _ => { // 資材のインポート機能(燃料・資金・ダイヤ) // インスタンスを作成 var ofd = new OpenFileDialog { // ファイルの種類を設定 Filter = "設定ファイル(*.csv)|*.csv|全てのファイル (*.*)|*.*", FileName = "MainSupply.csv" }; // ダイアログを表示 if ((bool)ofd.ShowDialog()) { // 資材をインポート PutLog("資材データを読み込み開始..."); if (await SupplyStore.ImportOldMainSupplyDataAsync(ofd.FileName)) { PutLog("資材データを読み込みました"); } else { PutLog("エラー:資材データを読み込めませんでした"); } } }); ImportSubSupply1Command.Subscribe(async _ => await ImportSubSupplyAsync(0)); ImportSubSupply2Command.Subscribe(async _ => await ImportSubSupplyAsync(1)); ImportSubSupply3Command.Subscribe(async _ => await ImportSubSupplyAsync(2)); ImportSubSupply4Command.Subscribe(async _ => await ImportSubSupplyAsync(3)); // タイマーを初期化し、定時タスクを登録して実行する // http://takachan.hatenablog.com/entry/2017/09/09/225342 var timer = new Timer(200); timer.Elapsed += (sender, e) => { try{ timer.Stop(); HelperTaskF(); } finally{ timer.Start(); } }; timer.Start(); var timer2 = new Timer(1000); timer2.Elapsed += (sender, e) => { try { timer2.Stop(); HelperTaskS(); } finally { timer2.Start(); } }; timer2.Start(); // ウィンドウ表示関係 if (SettingsStore.AutoSupplyWindowFlg) { OpenSupplyViewCommand.Execute(); } if (SettingsStore.AutoTimerWindowFlg) { OpenTimerViewCommand.Execute(); } // 最新版をチェックする CheckSoftwareVer(); }