2 using System.Collections.Generic;
3 using System.Diagnostics;
11 /// 曲ツリーへの参照を受け取り、その曲ツリーに対する様々な操作を提供する。
13 public class 曲ツリー管理 : FDK.Activity
15 public RootNode 現在の管理対象ツリー
19 return this.bs_現在の管理対象ツリー;
23 this.bs_現在の管理対象ツリー = value;
25 // 選択ノードを子リストの先頭にリセット。
26 this.現在選択されているノード = ( 0 < value.子ノードリスト.Count ) ? value.子ノードリスト[ 0 ] : null;
29 public Node 現在選択されているノード { get; protected set; } = null;
31 public void 前のノードを選択する()
33 this.現在選択されているノード = this.現在選択されているノード?.前のノード;
35 public void 次のノードを選択する()
37 this.現在選択されているノード = this.現在選択されているノード?.次のノード;
40 public static void フォルダから曲を検索して子ノードリストに追加する( Node 追加対象ノード, string フォルダパス )
43 if( false == Directory.Exists( フォルダパス ) )
45 FDK.Log.WARNING( $"指定されたフォルダが存在しません。無視します。[{FDK.フォルダ.絶対パスをフォルダ変数付き絶対パスに変換して返す( フォルダパス )}]" );
48 var dirInfo = new DirectoryInfo( フォルダパス );
50 // (1) このフォルダにあるすべてのsstfファイルから、曲ノードを作成する。
51 foreach( var fileInfo in dirInfo.GetFiles( "*.sstf", SearchOption.TopDirectoryOnly ) )
53 var score = new SSTFormat.スコア();
54 score.t曲データファイルを読み込む_ヘッダだけ( fileInfo.FullName );
55 追加対象ノード.子ノードリスト.Add( new MusicNode( fileInfo.FullName ) {
56 タイトル = score.Header.曲名,
61 // (2) このフォルダのすべてのサブフォルダについて……
62 foreach( var subDirInfo in dirInfo.GetDirectories() )
64 // box.def を含むフォルダの場合 → BOX ノードを作成する。
65 var boxファイルパス = Path.Combine( subDirInfo.FullName, @"box.def" );
66 if( File.Exists( boxファイルパス ) )
68 var box = new BoxDef( boxファイルパス );
69 追加対象ノード.子ノードリスト.Add( new BoxNode() {
75 // サブフォルダへ再帰。(通常フォルダでもBOXフォルダでも。)
76 曲ツリー管理.フォルダから曲を検索して子ノードリストに追加する( 追加対象ノード, subDirInfo.FullName );
80 protected override void On活性化( デバイスリソース dr )
82 if( null != this.bs_現在の管理対象ツリー )
84 // 子リストに含まれる全ノードを子Activityリストに追加する。
85 foreach( var node in this.bs_現在の管理対象ツリー.子ノードリスト )
86 this.子リスト.Add( node );
89 protected override void On非活性化( デバイスリソース dr )
91 if( null != this.bs_現在の管理対象ツリー )
93 // 子リストに含まれる全ノードを子Activityリストから削除する。
94 foreach( var node in this.bs_現在の管理対象ツリー.子ノードリスト )
95 this.子リスト.Remove( node );
100 //-------------------------
101 private RootNode bs_現在の管理対象ツリー = null;
102 //-------------------------