OSDN Git Service

#xxxxx songs.dbにBPMの情報を含めるよう修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 04.コンフィグ / CActConfigList.cs
index 0aa5ba9..c26fa60 100644 (file)
@@ -3,6 +3,7 @@ using System.Collections.Generic;
 using System.Diagnostics;\r
 using System.Text;\r
 using System.Drawing;\r
+using SlimDX;\r
 using FDK;\r
 \r
 namespace DTXMania\r
@@ -41,12 +42,6 @@ namespace DTXMania
                                {\r
                                        return false;\r
                                }\r
-//                             CItemBase base2 = this.list項目リスト[ this.n現在の選択項目 ];\r
-//                             if( ( ( base2 != this.iSystemReturnToMenu ) && ( base2 != this.iKeyAssignDrumsReturnToMenu ) ) && ( base2 != this.iKeyAssignGuitarReturnToMenu ) )\r
-//                             {\r
-//                                     return ( base2 == this.iKeyAssignBassReturnToMenu );\r
-//                             }\r
-//                             return true;\r
                        }\r
                }\r
                public CItemBase ib現在の選択項目\r
@@ -195,6 +190,29 @@ namespace DTXMania
                                "Turn ON to put debug log to\n DTXManiaLog.txt\nTo take it effective, you need to\n re-open DTXMania." );\r
                        this.list項目リスト.Add( this.iLogOutputLog );\r
 \r
+                       this.iSystemSkinSubfolder = new CItemList( "Skin (General)", CItemBase.Eパネル種別.通常, nSkinIndex,\r
+                               "スキン切替:\n" +\r
+                               "スキンを切り替えます。\n",\r
+                               //"CONFIGURATIONを抜けると、設定した\n" +\r
+                               //"スキンに変更されます。",\r
+                               "Skin:\n" +\r
+                               "Change skin.",\r
+                               skinNames );\r
+                       this.list項目リスト.Add( this.iSystemSkinSubfolder );\r
+                       this.iSystemUseBoxDefSkin = new CItemToggle( "Skin (Box)", CDTXMania.ConfigIni.bUseBoxDefSkin,\r
+                               "Music boxスキンの利用:\n" +\r
+                               "特別なスキンが設定されたMusic box\n" +\r
+                               "に出入りしたときに、自動でスキンを\n" +\r
+                               "切り替えるかどうかを設定します。\n",\r
+                               //"\n" +\r
+                               //"(Music Boxスキンは、box.defファイル\n" +\r
+                               //" で指定できます)\n",\r
+                               "Box skin:\n" +\r
+                               "Automatically change skin\n" +\r
+                               "specified in box.def file." );\r
+                       this.list項目リスト.Add( this.iSystemUseBoxDefSkin );\r
+\r
+       \r
                        this.iSystemGoToKeyAssign = new CItemBase( "System Keys", CItemBase.Eパネル種別.通常,\r
                        "システムのキー入力に関する項目を設\n定します。",\r
                        "Settings for the system key/pad inputs." );\r
@@ -776,7 +794,8 @@ namespace DTXMania
                        }\r
                        else if( this.b現在選択されている項目はReturnToMenuである )\r
                        {\r
-                               this.tConfigIniへ記録する();\r
+                               //this.tConfigIniへ記録する();\r
+                               //CONFIG中にスキン変化が発生すると面倒なので、一旦マスクした。\r
                        }\r
                        else if( this.list項目リスト[ this.n現在の選択項目 ] == this.iKeyAssignDrumsLC )\r
                        {\r
@@ -973,6 +992,41 @@ namespace DTXMania
                                                CDTXMania.ConfigIni.BackupOf1BD = null;\r
                                        }\r
                                }\r
+                               else if ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemUseBoxDefSkin )                        // #28195 2012.5.6 yyagi\r
+                               {\r
+                                       CSkin.bUseBoxDefSkin = this.iSystemUseBoxDefSkin.bON;\r
+                               }\r
+                               #region [ スキン項目でEnterを押下した場合に限り、スキンの縮小サンプルを生成する。]\r
+                               else if ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemSkinSubfolder )                        // #28195 2012.5.2 yyagi\r
+                               {\r
+                                       tGenerateSkinSample();\r
+                               }\r
+                               #endregion\r
+                       }\r
+               }\r
+\r
+               private void tGenerateSkinSample()\r
+               {\r
+                       nSkinIndex = ( ( CItemList ) this.list項目リスト[ this.n現在の選択項目 ] ).n現在選択されている項目番号;\r
+                       if ( nSkinSampleIndex != nSkinIndex )\r
+                       {\r
+                               string path = skinSubFolders[ nSkinIndex ];\r
+                               path = System.IO.Path.Combine( path, @"Graphics\ScreenTitle background.jpg" );\r
+                               Bitmap bmSrc = new Bitmap( path );\r
+                               Bitmap bmDest = new Bitmap( bmSrc.Width / 4, bmSrc.Height / 4 );\r
+                               Graphics g = Graphics.FromImage( bmDest );\r
+                               g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;\r
+                               g.DrawImage( bmSrc, new Rectangle( 0, 0, bmSrc.Width / 4, bmSrc.Height / 4 ),\r
+                                       0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel );\r
+                               if ( txSkinSample1 != null )\r
+                               {\r
+                                       CDTXMania.t安全にDisposeする( ref txSkinSample1 );\r
+                               }\r
+                               txSkinSample1 = CDTXMania.tテクスチャの生成( bmDest, false );\r
+                               g.Dispose();\r
+                               bmDest.Dispose();\r
+                               bmSrc.Dispose();\r
+                               nSkinSampleIndex = nSkinIndex;\r
                        }\r
                }\r
 \r
@@ -1178,7 +1232,34 @@ namespace DTXMania
 \r
                        this.list項目リスト = new List<CItemBase>();\r
                        this.eメニュー種別 = Eメニュー種別.Unknown;\r
-                       this.t項目リストの設定・System();\r
+\r
+                       #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]\r
+                       int ns = ( CDTXMania.Skin.strSystemSkinSubfolders == null ) ? 0 : CDTXMania.Skin.strSystemSkinSubfolders.Length;\r
+                       int nb = ( CDTXMania.Skin.strBoxDefSkinSubfolders == null ) ? 0 : CDTXMania.Skin.strBoxDefSkinSubfolders.Length;\r
+                       skinSubFolders = new string[ ns + nb ];\r
+                       for ( int i = 0; i < ns; i++ )\r
+                       {\r
+                               skinSubFolders[ i ] = CDTXMania.Skin.strSystemSkinSubfolders[ i ];\r
+                       }\r
+                       for ( int i = 0; i < nb; i++ )\r
+                       {\r
+                               skinSubFolders[ ns + i ] = CDTXMania.Skin.strBoxDefSkinSubfolders[ i ];\r
+                       }\r
+                       skinSubFolder_org = CDTXMania.Skin.GetCurrentSkinSubfolderFullName( true );\r
+                       Array.Sort( skinSubFolders );\r
+                       skinNames = CSkin.GetSkinName( skinSubFolders );\r
+                       nSkinIndex = Array.BinarySearch( skinSubFolders, skinSubFolder_org );\r
+                       if ( nSkinIndex < 0 )   // 念のため\r
+                       {\r
+                               nSkinIndex = 0;\r
+                       }\r
+                       nSkinSampleIndex = -1;\r
+                       #endregion\r
+\r
+                       this.t項目リストの設定・Bass();                // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、\r
+                       this.t項目リストの設定・Guitar();      // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。\r
+                       this.t項目リストの設定・Drums();       // \r
+                       this.t項目リストの設定・System();      // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。\r
                        this.b要素値にフォーカス中 = false;\r
                        this.n目標のスクロールカウンタ = 0;\r
                        this.n現在のスクロールカウンタ = 0;\r
@@ -1197,6 +1278,13 @@ namespace DTXMania
                        this.ct三角矢印アニメ = null;\r
                        \r
                        base.On非活性化();\r
+\r
+                       if ( CDTXMania.Skin.GetCurrentSkinSubfolderFullName( true ) != this.skinSubFolder_org )\r
+                       {\r
+                               CDTXMania.Skin.PrepareReloadSkin();             // #28195 2012.5.2 yyagi CONFIG脱出時にSkin更新\r
+                               CDTXMania.Skin.ReloadSkin();                    //\r
+                       }\r
+\r
                }\r
                public override void OnManagedリソースの作成()\r
                {\r
@@ -1206,7 +1294,7 @@ namespace DTXMania
                        this.tx通常項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig itembox.png" ), false );\r
                        this.txその他項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig itembox other.png" ), false );\r
                        this.tx三角矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig triangle arrow.png" ), false );\r
-\r
+                       this.txSkinSample1 = null;              // スキン選択時に動的に設定するため、ここでは初期化しない\r
                        base.OnManagedリソースの作成();\r
                }\r
                public override void OnManagedリソースの解放()\r
@@ -1214,6 +1302,7 @@ namespace DTXMania
                        if( this.b活性化してない )\r
                                return;\r
 \r
+                       CDTXMania.tテクスチャの解放( ref this.txSkinSample1 );\r
                        CDTXMania.tテクスチャの解放( ref this.tx通常項目行パネル );\r
                        CDTXMania.tテクスチャの解放( ref this.txその他項目行パネル );\r
                        CDTXMania.tテクスチャの解放( ref this.tx三角矢印 );\r
@@ -1439,12 +1528,23 @@ namespace DTXMania
                                                //-----------------\r
                                                #endregion\r
 \r
-                                       case CItemBase.E種別.リスト:\r
+                                       case CItemBase.E種別.リスト:       // #28195 2012.5.2 yyagi: add Skin supports\r
                                                #region [ *** ]\r
                                                //-----------------\r
                                                {\r
                                                        CItemList list = (CItemList) this.list項目リスト[ nItem ];\r
                                                        CDTXMania.stageコンフィグ.actFont.t文字列描画( x + 210, y + 12, list.list項目値[ list.n現在選択されている項目番号 ] );\r
+\r
+                                                       #region [ 必要な場合に、Skinのサンプルを生成・描画する。#28195 2012.5.2 yyagi ]\r
+                                                       if ( this.list項目リスト[ this.n現在の選択項目 ] == this.iSystemSkinSubfolder )\r
+                                                       {\r
+                                                               tGenerateSkinSample();          // 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。\r
+                                                               if ( txSkinSample1 != null )\r
+                                                               {\r
+                                                                       txSkinSample1.t2D描画( CDTXMania.app.Device, 56, 300 );\r
+                                                               }\r
+                                                       }\r
+                                                       #endregion\r
                                                        break;\r
                                                }\r
                                                //-----------------\r
@@ -1491,7 +1591,6 @@ namespace DTXMania
                        }\r
                        //-----------------\r
                        #endregion\r
-\r
                        return 0;\r
                }\r
        \r
@@ -1601,6 +1700,13 @@ namespace DTXMania
                private CTexture tx三角矢印;\r
                private CTexture tx通常項目行パネル;\r
 \r
+               private CTexture txSkinSample1;                         // #28195 2012.5.2 yyagi\r
+               private string[] skinSubFolders;                        //\r
+               private string[] skinNames;                                     //\r
+               private string skinSubFolder_org;                       //\r
+               private int nSkinSampleIndex;                           //\r
+               private int nSkinIndex;                                         //\r
+\r
                private CItemBase iDrumsGoToKeyAssign;\r
                private CItemBase iGuitarGoToKeyAssign;\r
                private CItemBase iBassGoToKeyAssign;\r
@@ -1652,6 +1758,8 @@ namespace DTXMania
                private CItemInteger iDrumsInputAdjustTimeMs;           // #23580 2011.1.3 yyagi\r
                private CItemInteger iGuitarInputAdjustTimeMs;          //\r
                private CItemInteger iBassInputAdjustTimeMs;            //\r
+               private CItemList iSystemSkinSubfolder;                         // #28195 2012.5.2 yyagi\r
+               private CItemToggle iSystemUseBoxDefSkin;                       // #28195 2012.5.6 yyagi\r
 \r
                private int t前の項目( int nItem )\r
                {\r
@@ -1744,10 +1852,20 @@ namespace DTXMania
                        CDTXMania.ConfigIni.n自動再生音量 = this.iSystemAutoChipVolume.n現在の値;\r
                        CDTXMania.ConfigIni.bストイックモード = this.iSystemStoicMode.bON;\r
 \r
-                       CDTXMania.ConfigIni.nShowLagType = this.iSystemShowLag.n現在選択されている項目番号;                // #25370 2011.6.3 yyagi\r
-                       CDTXMania.ConfigIni.bIsAutoResultCapture = this.iSystemAutoResultCapture.bON;           // #25399 2011.6.9 yyagi\r
+                       CDTXMania.ConfigIni.nShowLagType = this.iSystemShowLag.n現在選択されている項目番号;                                // #25370 2011.6.3 yyagi\r
+                       CDTXMania.ConfigIni.bIsAutoResultCapture = this.iSystemAutoResultCapture.bON;                                   // #25399 2011.6.9 yyagi\r
 \r
-                       CDTXMania.ConfigIni.nRisky = this.iSystemRisky.n現在の値;                                           // #23559 2911.7.27 yyagi\r
+                       CDTXMania.ConfigIni.nRisky = this.iSystemRisky.n現在の値;                                                                           // #23559 2911.7.27 yyagi\r
+\r
+                       CDTXMania.ConfigIni.strSystemSkinSubfolderFullName = skinSubFolders[ nSkinIndex ];                              // #28195 2012.5.2 yyagi\r
+                       CDTXMania.Skin.SetCurrentSkinSubfolderFullName( CDTXMania.ConfigIni.strSystemSkinSubfolderFullName, true );\r
+                       CDTXMania.ConfigIni.bUseBoxDefSkin = this.iSystemUseBoxDefSkin.bON;                                                             // #28195 2012.5.6 yyagi\r
+\r
+//Trace.TraceInformation( "saved" );\r
+//Trace.TraceInformation( "Skin現在Current : " + CDTXMania.Skin.GetCurrentSkinSubfolderFullName(true) );\r
+//Trace.TraceInformation( "Skin現在System  : " + CSkin.strSystemSkinSubfolderFullName );\r
+//Trace.TraceInformation( "Skin現在BoxDef  : " + CSkin.strBoxDefSkinSubfolderFullName );\r
+               \r
                }\r
                private void tConfigIniへ記録する・Bass()\r
                {\r