From: くまかみ工房 Date: Wed, 19 Oct 2016 02:23:21 +0000 (+0900) Subject: ユーザ管理クラスをリファクタ。 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=1613101b58edfe63c72395c2d9b8fc2791df42e9;p=strokestylet%2FCsWin10Desktop3.git ユーザ管理クラスをリファクタ。 ユーザリストを List から IReadOnlyList に変更。 --- diff --git a/StrokeStyleT/ステージ/ログイン/ログインステージ.cs b/StrokeStyleT/ステージ/ログイン/ログインステージ.cs index e7b5ef3..bcf7675 100644 --- a/StrokeStyleT/ステージ/ログイン/ログインステージ.cs +++ b/StrokeStyleT/ステージ/ログイン/ログインステージ.cs @@ -114,7 +114,8 @@ namespace SST.ステージ.ログイン } #else #warning ユーザ選択画面が完成するまでは、AutoPlayer で自動的にログインするようにする。 - this.ユーザインデックス = StrokeStyleT.ユーザ管理.ユーザリスト.FindIndex( ( user ) => user.名前 == Properties.Resources.AUTOPLAYER ); + this.ユーザインデックス = StrokeStyleT.ユーザ管理.ユーザのインデックスを返す( Properties.Resources.AUTOPLAYER ); + Trace.Assert( 0 <= this.ユーザインデックス, "[バグあり] AutoPlayer ユーザが存在しません。" ); this.現在のフェーズ = フェーズ.確定; return; #endif diff --git a/StrokeStyleT/ユーザ/ユーザ管理.cs b/StrokeStyleT/ユーザ/ユーザ管理.cs index e203e5d..482df14 100644 --- a/StrokeStyleT/ユーザ/ユーザ管理.cs +++ b/StrokeStyleT/ユーザ/ユーザ管理.cs @@ -9,19 +9,19 @@ namespace SST.ユーザ { 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 ); @@ -34,7 +34,7 @@ namespace SST.ユーザ } public void ユーザを選択する( string ユーザ名 ) { - var 名前に該当するユーザ = this.ユーザリスト.Find( user => user.名前 == ユーザ名 ); + var 名前に該当するユーザ = this.bs_ユーザリスト.Find( user => user.名前 == ユーザ名 ); if( null == 名前に該当するユーザ ) { var msg = $"存在しない名前「{ユーザ名}」のユーザを選択しようとしました。"; @@ -49,13 +49,19 @@ namespace SST.ユーザ { this.ユーザを選択する( this.ユーザリスト[ index ] ); } - - public void UsersXmlを保存する() + /// + /// IReadOnlyList には FindIndex() がないので、このクラスでその機能を提供する。 + /// + /// 存在しなかったら -1 を返す。 + 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" ) ); @@ -86,17 +92,15 @@ namespace SST.ユーザ } 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; } @@ -119,12 +123,12 @@ namespace SST.ユーザ 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( 新ユーザ ); } } } @@ -136,25 +140,30 @@ namespace SST.ユーザ } // 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 } }