2 using System.Collections.Generic;
\r
3 using System.Diagnostics;
\r
4 using System.Globalization;
\r
6 using System.Runtime.InteropServices;
\r
7 using System.Drawing;
\r
12 internal class CActSortSongs : CActivity
\r
18 /// ソートメニュー機能を使用中かどうか。外部からこれをtrueにすると、ソートメニューが出現する。falseにすると消える。
\r
20 public bool bIsActiveSortMenu
\r
27 public CActSortSongs()
\r
29 base.b活性化してない = true;
\r
30 this.bキー入力待ち = true;
\r
31 this.bIsActiveSortMenu = false;
\r
32 this.font = new CActDFPFont();
\r
33 base.list子Activities.Add( this.font );
\r
35 nSortType = (int) ESortItem.Default;
\r
36 nSortOrder = (int) ESortOrder.Descend;
\r
37 bIsJapanLocale = ( CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "ja" ); // #24758 2011.4.1 yyagi add; To check JP locale
\r
42 public void tActivateSortMenu( ref CActSelect曲リスト ca )
\r
45 nSortType = (int) ESortItem.Default; // #24757 2011.4.1 yyagi: Clear sorting status in each stating menu.
\r
46 nSortOrder = (int) ESortOrder.Descend; //
\r
47 this.bIsActiveSortMenu = true;
\r
49 public void tDeativateSortMenu()
\r
51 this.bIsActiveSortMenu = false;
\r
54 public void tEnter押下(E楽器パート eInst)
\r
58 CDTXMania.Skin.sound決定音.t再生する();
\r
60 if ( this.n現在の選択行 != (int) ESortItem.Return )
\r
62 nSortOrder = ( nSortType == n現在の選択行 )? -nSortOrder : (int)ESortOrder.Ascend;
\r
63 nSortType = n現在の選択行;
\r
66 switch( this.n現在の選択行 )
\r
68 case (int) ESortItem.Title:
\r
69 this.act曲リスト.t曲リストのソート(
\r
70 CDTXMania.Songs管理.t曲リストのソート2_タイトル順, eInst, nSortOrder
\r
73 case (int) ESortItem.Level:
\r
74 this.act曲リスト.t曲リストのソート(
\r
75 CDTXMania.Songs管理.t曲リストのソート4_LEVEL順, eInst, nSortOrder,
\r
76 this.act曲リスト.n現在のアンカ難易度レベル
\r
79 case (int) ESortItem.BestRank:
\r
80 this.act曲リスト.t曲リストのソート(
\r
81 CDTXMania.Songs管理.t曲リストのソート5_BestRank順, eInst, nSortOrder,
\r
82 this.act曲リスト.n現在のアンカ難易度レベル
\r
85 case (int) ESortItem.PlayCount:
\r
86 // this.act曲リスト.t曲リストのソート3_演奏回数の多い順( eInst, nSortOrder );
\r
87 this.act曲リスト.t曲リストのソート(
\r
88 CDTXMania.Songs管理.t曲リストのソート3_演奏回数の多い順, eInst, nSortOrder,
\r
89 this.act曲リスト.n現在のアンカ難易度レベル
\r
92 // case (int) ESortItem.Author:
\r
94 case (int) ESortItem.SkillPoint:
\r
95 this.act曲リスト.t曲リストのソート(
\r
96 CDTXMania.Songs管理.t曲リストのソート6_SkillPoint順, eInst, nSortOrder,
\r
97 this.act曲リスト.n現在のアンカ難易度レベル
\r
100 // case (int) ESortItem.BPM:
\r
102 case (int) ESortItem.Date:
\r
103 this.act曲リスト.t曲リストのソート(
\r
104 CDTXMania.Songs管理.t曲リストのソート7_更新日時順, eInst, nSortOrder,
\r
105 this.act曲リスト.n現在のアンカ難易度レベル
\r
108 case (int)ESortItem.Return:
\r
109 this.tDeativateSortMenu();
\r
115 this.bキー入力待ち = true;
\r
118 public void t次に移動()
\r
122 CDTXMania.Skin.soundカーソル移動音.t再生する();
\r
123 this.n現在の選択行 = ( this.n現在の選択行 + 1 ) % (int)ESortItem.END;
\r
126 public void t前に移動()
\r
130 CDTXMania.Skin.soundカーソル移動音.t再生する();
\r
131 this.n現在の選択行 = ( ( this.n現在の選択行 - 1 ) + (int)ESortItem.END ) % (int)ESortItem.END;
\r
138 public override void On活性化()
\r
141 this.bキー入力待ち = true;
\r
142 for ( int i = 0; i < 4; i++ )
\r
144 this.ctキー反復用[ i ] = new CCounter( 0, 0, 0, CDTXMania.Timer );
\r
148 public override void On非活性化()
\r
150 if( !base.b活性化してない )
\r
152 CDTXMania.tテクスチャの解放( ref this.txCursor );
\r
153 CDTXMania.tテクスチャの解放( ref this.txSortMenuBackground );
\r
154 for ( int i = 0; i < 4; i++ )
\r
156 this.ctキー反復用[ i ] = null;
\r
161 public override void OnManagedリソースの作成()
\r
163 if( !base.b活性化してない )
\r
165 this.txCursor = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenConfig menu cursor.png" ), false );
\r
166 this.txSortMenuBackground = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect sort menu background.png" ), false );
\r
167 this.txSortMenuChoices = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenSelect sort menu choices.png" ), false ); // #24758 2011.4.1 yyagi; for JP locale, Japanese 昇順/降順 (ascend/descend) png parts.
\r
168 base.OnManagedリソースの作成();
\r
171 public override void OnManagedリソースの解放()
\r
173 if ( !base.b活性化してない )
\r
175 CDTXMania.tテクスチャの解放( ref this.txSortMenuChoices );
\r
176 CDTXMania.tテクスチャの解放( ref this.txSortMenuBackground );
\r
177 CDTXMania.tテクスチャの解放( ref this.txCursor );
\r
179 base.OnManagedリソースの解放();
\r
182 public override int On進行描画()
\r
184 throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" );
\r
186 public int t進行描画( bool bIsActive )
\r
188 if( !base.b活性化してない && bIsActive )
\r
193 #region [ キー入力: キャンセル ]
\r
194 if ( CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape )
\r
195 || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.FT )
\r
196 || CDTXMania.Pad.b押されたGB( Eパッド.Cancel ) )
\r
198 CDTXMania.Skin.sound取消音.t再生する();
\r
199 //this.bキー入力待ち = false;
\r
200 this.bIsActiveSortMenu = false;
\r
203 #region [ キー入力: 決定 ]
\r
204 E楽器パート eInst = E楽器パート.UNKNOWN;
\r
205 ESortAction eAction = ESortAction.END;
\r
206 if ( CDTXMania.Pad.b押された( E楽器パート.GUITAR, Eパッド.Decide ) )
\r
208 eInst = E楽器パート.GUITAR;
\r
209 eAction = ESortAction.Decide;
\r
211 else if ( CDTXMania.Pad.b押された( E楽器パート.BASS, Eパッド.Decide ) )
\r
213 eInst = E楽器パート.BASS;
\r
214 eAction = ESortAction.Decide;
\r
217 CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.Decide ) // #24756 2011.4.1 yyagi: Add condition "Drum-Decide" to enable CY in Sort Menu.
\r
218 || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.RD )
\r
219 || CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LC )
\r
220 || ( CDTXMania.ConfigIni.bEnterがキー割り当てのどこにも使用されていない && CDTXMania.Input管理.Keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Return ) ) )
\r
222 eInst = E楽器パート.DRUMS;
\r
223 eAction = ESortAction.Decide;
\r
225 if (eAction == ESortAction.Decide) // 決定
\r
227 this.tEnter押下(eInst);
\r
230 #region [ キー入力: 前に移動 ]
\r
231 this.ctキー反復用.Up.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.UpArrow ), new CCounter.DGキー処理( this.t前に移動 ) );
\r
232 this.ctキー反復用.R.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.R ), new CCounter.DGキー処理( this.t前に移動 ) );
\r
233 if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.SD ) )
\r
238 #region [ キー入力: 次に移動 ]
\r
239 this.ctキー反復用.Down.tキー反復( CDTXMania.Input管理.Keyboard.bキーが押されている( (int) SlimDX.DirectInput.Key.DownArrow ), new CCounter.DGキー処理( this.t次に移動 ) );
\r
240 this.ctキー反復用.B.tキー反復( CDTXMania.Pad.b押されているGB( Eパッド.B ), new CCounter.DGキー処理( this.t次に移動 ) );
\r
241 if ( CDTXMania.Pad.b押された( E楽器パート.DRUMS, Eパッド.LT ) )
\r
247 #region [ ソートメニュー 背景描画 ]
\r
248 if ( this.txSortMenuBackground != null )
\r
250 this.txSortMenuBackground.t2D描画( CDTXMania.app.Device, 160, 40 );
\r
253 #region [ ソートメニュータイトル描画 ]
\r
254 int x = 240, y = 44;
\r
255 font.t文字列描画( x, y, "SORT MENU", false, 1.0f);
\r
258 if ( this.txCursor != null )
\r
262 int curY = 46 + ( height * ( this.n現在の選択行 + 1 ) );
\r
263 this.txCursor.t2D描画( CDTXMania.app.Device, curX, curY, new Rectangle( 0, 0, 16, 32 ) );
\r
265 Rectangle rectangle = new Rectangle( 8, 0, 0x10, 0x20 );
\r
266 for( int j = 0; j < 16; j++ )
\r
268 this.txCursor.t2D描画( CDTXMania.app.Device, curX, curY, rectangle );
\r
271 this.txCursor.t2D描画( CDTXMania.app.Device, curX, curY, new Rectangle( 0x10, 0, 16, 32 ) );
\r
274 #region [ ソート候補文字列描画 ]
\r
275 string[] strSortItem = {
\r
276 "Title", "Level", "Best Rank", "PlayCount",
\r
283 string[] strSortOrder = {
\r
284 "Descend", "", "Ascend"
\r
286 for ( int i = 0; i < strSortItem.Length; i++ )
\r
288 bool bBold = ( i == nSortType ) ? true : false;
\r
289 font.t文字列描画( 190, 80 + i * 32, strSortItem[ i ], bBold, 1.0f );
\r
292 // nSortOder+1 == 0(Ascend), (1,) 2(Descend)
\r
293 if ( bIsJapanLocale )
\r
294 { // #24758 2011.4.1 yyagi: for JP locale, 昇順/降順 is used instead of ascend/descend.
\r
295 Rectangle rect = new Rectangle( 0, this.txSortMenuChoices.sz画像サイズ.Height / 2 * (nSortOrder+1)/2, this.txSortMenuChoices.sz画像サイズ.Width, this.txSortMenuChoices.sz画像サイズ.Height / 2 );
\r
296 this.txSortMenuChoices.t2D描画( CDTXMania.app.Device, 350, 78 + i * 32, rect );
\r
300 font.t文字列描画( 350, 80 + i * 32, strSortOrder[ nSortOrder + 1 ], bBold, 1.0f );
\r
313 #region [ private ]
\r
314 //-----------------
\r
316 private bool bキー入力待ち;
\r
318 private int n現在の選択行;
\r
319 private CTexture txSortMenuBackground;
\r
320 private CTexture txSortMenuChoices;
\r
321 private CTexture txCursor;
\r
322 private CActDFPFont font;
\r
323 private CActSelect曲リスト act曲リスト;
\r
324 private bool bIsJapanLocale;
\r
326 [StructLayout( LayoutKind.Sequential )]
\r
327 private struct STキー反復用カウンタ
\r
329 public CCounter Up;
\r
330 public CCounter Down;
\r
333 public CCounter this[ int index ]
\r
351 throw new IndexOutOfRangeException();
\r
373 throw new IndexOutOfRangeException();
\r
377 private STキー反復用カウンタ ctキー反復用;
\r
379 private enum ESortAction : int
\r
381 Cancel, Decide, Previous, Next, END
\r
383 private enum ESortItem : int
\r
385 Title = 0, Level, BestRank, PlayCount,
\r
393 private enum ESortOrder : int
\r
395 Ascend = 1, Descend = -1
\r
397 private int nSortType, nSortOrder;
\r
399 //-----------------
\r