TreeViewの一括追加したい

[3879]TreeViewの一括追加したい | 投稿者:紅陽 | 投稿日:2009/11/25(Wed) 11:56:21
ScriptUIで質問です。

対象のフォルダ(以下Root)を指定して、
それ以下のファイルとフォルダをツリー構造でGUIに表示したいのですが、
Rootの第1階層を一括でツリーにした後、
第2階層以降を1つずつしか追加する方法しか解りません。
for文でループして追加しても良いのですが
Root以下のファイル数が多いので処理時間が結構かかってしまいます。
複数アイテムを一括で追加する方法や、
複数階層を一括で追加する方法ってないでしょうか?

-----以下環境と例文です-----
環境:MacOSX 10.4.11
App:IndesignCS3 (5.0.4)
言語:javascript
例文:
var dlg = new Window('dialog', 'TREEVIEWテスト',[0,0,500,500]);
with(dlg){
   //1階層目作成
   var TreeObj=add('treeview',[10,10,200,300],["A","B","C"]);
   //2階層目追加
   TreeObj.items[0].add('node',"AAA1");
   TreeObj.items[0].add('node',"AAA2");
   TreeObj.items[0].add('node',"AAA3");
   //3階層目追加
   TreeObj.items[0].items[1].add('node',"AAAA1");
}
//階層を展開
TreeObj.items[0].expanded=true;
TreeObj.items[0].items[1].expanded=true;
dlg.center();
dlg.show();
» 1
[3880]Re: TreeViewの一括追加したい | 投稿者:せうぞー | 投稿日:2009/11/25(Wed) 15:23:16
ディレクトリ階層などのツリーを表現したい場合、
ファンクションなどに再帰処理させるのが定石だと思います。
「フォルダ 再帰」などと検索するといくつものやり方がヒットします。

>Root以下のファイル数が多いので処理時間が結構かかってしまいます。

これについては、ある程度仕方ないように思います。
またほんとうにルートから検索開始しようものなら、とんでもない再帰が発生します。ファイルが1000個以上見つかったらそこで処理を終了するなどの対策が必要かもしれません。
Mac OSならばFindコマンドなどと合わせて目的のファイルにフィルタを掛けることで時間の短縮もできるかもしれません。
» 2
[3881]Re: TreeViewの一括追加したい | 投稿者:kamiseto | 投稿日:2009/11/25(Wed) 17:14:14
Adobe Bridge CS3 SDKに入っているサンプルスクリプトの
SnpCreateTreeView.jsxが参考になるかもしれません。
» 3
[3882]Re: TreeViewの一括追加したい | 投稿者:紅陽 | 投稿日:2009/11/25(Wed) 21:40:05
せうぞー様、kamiseto様 ご返信ありがとうございます

>ディレクトリ階層などのツリーを表現したい場合、
>ファンクションなどに再帰処理させるのが定石だと思います。

そうですね、再起処理で出来るだけ無駄な処理は省いてみます。

>Mac OSならばFindコマンドなどと合わせて目的のファイルにフィルタを掛けることで時間の短縮もできるかもしれません。

TreeView.find("text:string")とかの事でしょうか?
そうであるなら試してみます。ツリー構造でどの様な動作するかも気になりますし。

>Adobe Bridge CS3 SDKに入っているサンプルスクリプトの
>SnpCreateTreeView.jsxが参考になるかもしれません。

おおっ!そんなサンプルがBridgeにあるんですね。
……確認してみました。
どうやら、サンプルファイルの中でも追加時には一つずつfor文で回してるようです。でもTreeView内でアイコンとか使えるんですね。参考になりました^^

アドバイスありがとうございました。
一括の追加は出来なさそうなので、
処理の方で早くなるように頑張ってみます。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア