}\r
else\r
{\r
- // box.def 記載のスキン情報を利用\r
- c曲リストノード.strSkinPath = System.IO.Path.Combine( infoDir.FullName, boxdef.SkinPath );\r
+ // box.defに記載されているスキン情報をコピー。末尾に必ず\をつけておくこと。\r
+ string s = System.IO.Path.Combine( infoDir.FullName, boxdef.SkinPath );\r
+ if ( s[ s.Length - 1 ] != System.IO.Path.DirectorySeparatorChar ) // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する\r
+ {\r
+ s += System.IO.Path.DirectorySeparatorChar;\r
+ }\r
+ if ( CDTXMania.Skin.bIsValid( s ) )\r
+ {\r
+ c曲リストノード.strSkinPath = s;\r
+ }\r
+ else\r
+ {\r
+ c曲リストノード.strSkinPath = ( c曲リストノード.r親ノード == null ) ?\r
+ "" : c曲リストノード.r親ノード.strSkinPath;\r
+ }\r
}\r
}\r
if ( boxdef.PerfectRange >= 0 )\r
}\r
else\r
{\r
- // box.defに記載されているスキン情報をコピー\r
- c曲リストノード.strSkinPath = System.IO.Path.Combine( infoDir.FullName, boxdef.SkinPath );\r
+ // box.defに記載されているスキン情報をコピー。末尾に必ず\をつけておくこと。\r
+ string s = System.IO.Path.Combine( infoDir.FullName, boxdef.SkinPath );\r
+ if ( s[ s.Length - 1 ] != System.IO.Path.DirectorySeparatorChar ) // フォルダ名末尾に\を必ずつけて、CSkin側と表記を統一する\r
+ {\r
+ s += System.IO.Path.DirectorySeparatorChar;\r
+ }\r
+ if ( CDTXMania.Skin.bIsValid( s ) )\r
+ {\r
+ c曲リストノード.strSkinPath = s;\r
+ }\r
+ else\r
+ {\r
+ c曲リストノード.strSkinPath = ( c曲リストノード.r親ノード == null ) ?\r
+ "" : c曲リストノード.r親ノード.strSkinPath;\r
+ }\r
}\r
c曲リストノード.strBreadcrumbs = ( c曲リストノード.r親ノード == null ) ?\r
c曲リストノード.strタイトル : c曲リストノード.r親ノード.strBreadcrumbs + " > " + c曲リストノード.strタイトル;\r
//-----------------\r
public void t曲リストへ後処理を適用する()\r
{\r
+ listStrBoxDefSkinSubfolderFullName = new List<string>();\r
+ if ( CDTXMania.Skin.strBoxDefSkinSubfolders != null )\r
+ {\r
+ foreach ( string b in CDTXMania.Skin.strBoxDefSkinSubfolders )\r
+ {\r
+ listStrBoxDefSkinSubfolderFullName.Add( b );\r
+ }\r
+ }\r
+\r
this.t曲リストへ後処理を適用する( this.list曲ルート );\r
+\r
+ #region [ skin名で比較して、systemスキンとboxdefスキンに重複があれば、boxdefスキン側を削除する ]\r
+ string[] systemSkinNames = CSkin.GetSkinName( CDTXMania.Skin.strSystemSkinSubfolders );\r
+ List<string> l = new List<string>( listStrBoxDefSkinSubfolderFullName );\r
+ foreach ( string boxdefSkinSubfolderFullName in l )\r
+ {\r
+ if ( Array.BinarySearch( systemSkinNames,\r
+ CSkin.GetSkinName( boxdefSkinSubfolderFullName ),\r
+ StringComparer.InvariantCultureIgnoreCase ) >= 0 )\r
+ {\r
+ listStrBoxDefSkinSubfolderFullName.Remove( boxdefSkinSubfolderFullName );\r
+ }\r
+ }\r
+ #endregion\r
+ string[] ba = listStrBoxDefSkinSubfolderFullName.ToArray();\r
+ Array.Sort( ba );\r
+ CDTXMania.Skin.strBoxDefSkinSubfolders = ba;\r
}\r
private void t曲リストへ後処理を適用する( List<C曲リストノード> ノードリスト )\r
{\r
itemBack.strSkinPath = ( c曲リストノード.r親ノード == null ) ?\r
"" : c曲リストノード.r親ノード.strSkinPath;\r
\r
+ if ( itemBack.strSkinPath != "" && !listStrBoxDefSkinSubfolderFullName.Contains( itemBack.strSkinPath ) )\r
+ {\r
+ listStrBoxDefSkinSubfolderFullName.Add( itemBack.strSkinPath );\r
+ }\r
+\r
itemBack.strBreadcrumbs = ( itemBack.r親ノード == null ) ?\r
itemBack.strタイトル : itemBack.r親ノード.strBreadcrumbs + " > " + itemBack.strタイトル;\r
\r
#region [ private ]\r
//-----------------\r
private const string SONGSDB_VERSION = "SongsDB3";\r
+ private List<string> listStrBoxDefSkinSubfolderFullName;\r
\r
private int t比較0_共通( C曲リストノード n1, C曲リストノード n2 )\r
{\r