{
public class ユーザ管理
{
- public List<ユーザ> ユーザリスト { get; } = new List<ユーザ>();
+ public IReadOnlyList<ユーザ> ユーザリスト => ( this.bs_ユーザリスト );
public ユーザ 現在選択されているユーザ { get; protected set; } = null; // 外から設定するにはメソッドを使う。
public ユーザ管理()
{
this.初期化する();
- this.ユーザリスト.Add( new ユーザ( Properties.Resources.AUTOPLAYER ) ); // 既定ユーザ
+ this.bs_ユーザリスト.Add( new ユーザ( Properties.Resources.AUTOPLAYER ) ); // 既定ユーザ
}
public void ユーザを選択する( ユーザ 選択対象ユーザ )
{
if( null != 選択対象ユーザ ) // null でもエラーじゃない
{
- if( null == this.ユーザリスト.Find( user => user == 選択対象ユーザ ) )
+ if( null == this.bs_ユーザリスト.Find( user => user == 選択対象ユーザ ) )
{
var msg = "存在しないユーザを選択しようとしました。";
FDK.Log.ERROR( msg );
}
public void ユーザを選択する( string ユーザ名 )
{
- var 名前に該当するユーザ = this.ユーザリスト.Find( user => user.名前 == ユーザ名 );
+ var 名前に該当するユーザ = this.bs_ユーザリスト.Find( user => user.名前 == ユーザ名 );
if( null == 名前に該当するユーザ )
{
var msg = $"存在しない名前「{ユーザ名}」のユーザを選択しようとしました。";
{
this.ユーザを選択する( this.ユーザリスト[ index ] );
}
-
- public void UsersXmlを保存する()
+ /// <remarks>
+ /// IReadOnlyList には FindIndex() がないので、このクラスでその機能を提供する。
+ /// </remarks>
+ /// <returns>存在しなかったら -1 を返す。</returns>
+ public int ユーザのインデックスを返す( string ユーザ名 )
{
- this.UsersXmlを保存する( FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.ユーザXmlファイルパス ) );
+ return this.bs_ユーザリスト.FindIndex( ( user ) => ( user.名前 == ユーザ名 ) );
}
- public void UsersXmlを保存する( string ファイルパス )
+
+ public void UsersXmlを保存する()
{
+ string ファイルパス = FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.UsersXmlファイルパス );
+
try
{
var XML文書 = new XDocument( new XDeclaration( version: "1.0", encoding: "utf-8", standalone: "yes" ) );
}
public void UsersXmlを読み込む()
{
- this.UsersXmlを読み込む( FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.ユーザXmlファイルパス ) );
- }
- public void UsersXmlを読み込む( string ファイルパス )
- {
+ string ファイルパス = FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( this.UsersXmlファイルパス );
+
this.初期化する();
if( false == File.Exists( ファイルパス ) )
{
FDK.Log.WARNING( $"ユーザファイルが存在しません。作成します。[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( ファイルパス )}]" );
this.AutoPlayerを追加する();
- this.UsersXmlを保存する( ファイルパス );
+ this.UsersXmlを保存する();
return;
}
if( false == string.IsNullOrEmpty( 新ユーザ.名前 ) )
{
// すでに同じ名前が存在するなら削除する。
- var 同名ユーザ = this.ユーザリスト.FindIndex( user => user.名前 == 新ユーザ.名前 );
+ var 同名ユーザ = this.bs_ユーザリスト.FindIndex( user => user.名前 == 新ユーザ.名前 );
if( 0 <= 同名ユーザ )
- this.ユーザリスト.RemoveAt( 同名ユーザ );
+ this.bs_ユーザリスト.RemoveAt( 同名ユーザ );
// リストに追加する。
- this.ユーザリスト.Add( 新ユーザ );
+ this.bs_ユーザリスト.Add( 新ユーザ );
}
}
}
}
// AutoPlayer が存在しないなら、追加する。
- if( -1 == this.ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER ) )
+ if( -1 == this.bs_ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER ) )
{
this.AutoPlayerを追加する(); // 追加して
this.UsersXmlを保存する(); // 保存。
}
}
-
- protected readonly string ユーザXmlファイルパス = @"$(AppData)\Users.xml";
+ protected readonly string UsersXmlファイルパス = @"$(AppData)\Users.xml";
private void 初期化する()
{
- this.ユーザリスト.Clear();
+ this.bs_ユーザリスト.Clear();
this.現在選択されているユーザ = null;
}
private void AutoPlayerを追加する()
{
var autoPlayer = new ユーザ( Properties.Resources.AUTOPLAYER );
autoPlayer.チップの自動演奏を一括設定する( true );
- this.ユーザリスト.Add( autoPlayer );
+ this.bs_ユーザリスト.Add( autoPlayer );
}
+
+ #region " バックストア。"
+ //----------------
+ private List<ユーザ> bs_ユーザリスト = new List<ユーザ>();
+ //----------------
+ #endregion
}
}