OSDN Git Service

#xxxxx songs.dbにBPMの情報を含めるよう修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / スコア、曲 / CSong管理.cs
index d278dd5..576f838 100644 (file)
@@ -418,8 +418,21 @@ namespace DTXMania
                                                        }\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
@@ -504,8 +517,21 @@ namespace DTXMania
                                        }\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
@@ -868,7 +894,33 @@ namespace DTXMania
                //-----------------\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
@@ -938,6 +990,11 @@ namespace DTXMania
                                        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
@@ -1620,6 +1677,7 @@ Debug.WriteLine( dBPM + ":" + c曲リストノード.strタイトル );
                #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