2 using System.Collections.Generic;
3 using System.Diagnostics;
12 public List<ユーザ> ユーザリスト { get; } = new List<ユーザ>();
13 public ユーザ 現在選択されているユーザ { get; protected set; } = null; // 外から設定するにはメソッドを使う。
18 this.ユーザリスト.Add( new ユーザ( Properties.Resources.AUTOPLAYER ) ); // 既定ユーザ
20 public void ユーザを選択する( ユーザ 選択対象ユーザ )
22 if( null != 選択対象ユーザ ) // null でもエラーじゃない
24 if( null == this.ユーザリスト.Find( user => user == 選択対象ユーザ ) )
26 var msg = "存在しないユーザを選択しようとしました。";
28 throw new SSTException( msg );
33 this.現在選択されているユーザ = 選択対象ユーザ;
35 public void ユーザを選択する( string ユーザ名 )
37 var 名前に該当するユーザ = this.ユーザリスト.Find( user => user.名前 == ユーザ名 );
38 if( null == 名前に該当するユーザ )
40 var msg = $"存在しない名前「{ユーザ名}」のユーザを選択しようとしました。";
42 throw new SSTException( msg );
46 this.ユーザを選択する( 名前に該当するユーザ );
48 public void ユーザを選択する( int index )
50 this.ユーザを選択する( this.ユーザリスト[ index ] );
53 public void UsersXmlを保存する()
55 this.UsersXmlを保存する( FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.ユーザXmlファイルパス ) );
57 public void UsersXmlを保存する( string ファイルパス )
61 var XML文書 = new XDocument( new XDeclaration( version: "1.0", encoding: "utf-8", standalone: "yes" ) );
64 var Root要素 = new XElement( nameof( XML.Root ) );
67 var Users要素 = new XElement( nameof( XML.Users ) );
70 foreach( var user in this.ユーザリスト )
72 user.ユーザをXML要素で出力する( 親要素: Users要素 );
75 Root要素.Add( Users要素 );
84 FDK.Log.ERROR( $"ユーザファイルの保存に失敗しました。{e.Message}[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( ファイルパス )}]" );
87 public void UsersXmlを読み込む()
89 this.UsersXmlを読み込む( FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.ユーザXmlファイルパス ) );
91 public void UsersXmlを読み込む( string ファイルパス )
95 if( false == File.Exists( ファイルパス ) )
97 FDK.Log.WARNING( $"ユーザファイルが存在しません。作成します。[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( ファイルパス )}]" );
98 this.AutoPlayerを追加する();
99 this.UsersXmlを保存する( ファイルパス );
105 var XML文書 = XDocument.Load( ファイルパス );
108 var Root要素 = XML文書.Element( nameof( XML.Root ) );
111 foreach( var Users要素 in Root要素.Elements( nameof( XML.Users ) ) )
114 foreach( var ユーザ要素 in Users要素.Elements() )
116 var 新ユーザ = new ユーザ();
117 新ユーザ.ユーザをXML要素から読み込む( 読込対象要素: ユーザ要素 ); // ユーザ要素の解析は向こうに任せる。
119 if( false == string.IsNullOrEmpty( 新ユーザ.名前 ) )
121 // すでに同じ名前が存在するなら削除する。
122 var 同名ユーザ = this.ユーザリスト.FindIndex( user => user.名前 == 新ユーザ.名前 );
124 this.ユーザリスト.RemoveAt( 同名ユーザ );
127 this.ユーザリスト.Add( 新ユーザ );
135 FDK.Log.ERROR( $"ユーザファイルの読み込みに失敗しました。{e.Message}[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( ファイルパス )}]" );
138 // AutoPlayer が存在しないなら、追加する。
139 if( -1 == this.ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER ) )
141 this.AutoPlayerを追加する(); // 追加して
142 this.UsersXmlを保存する(); // 保存。
146 protected readonly string ユーザXmlファイルパス = @"$(AppData)\Users.xml";
151 this.現在選択されているユーザ = null;
153 private void AutoPlayerを追加する()
155 var autoPlayer = new ユーザ( Properties.Resources.AUTOPLAYER );
156 autoPlayer.チップの自動演奏を一括設定する( true );
157 this.ユーザリスト.Add( autoPlayer );