// 一部の人向け　でっかいシングルクリック対応スクリプトパネル
// b：たたむ機能付加、パネルタイトルに分岐、JS以外にも対応したつもり
// c : カーソルキーに反応しないようこっぴどく修正、
//　　スクリプトの拡張子分岐の前にフツーにdoScriptがあってつごう二度実行してしまうアホミスを修正、
//　　ダブルクリック切り替えチェックのオンオフでも選択が死ぬよう追加
// d：孫スクリプトの選択が外れない重篤な不具合を修正
//　　パネルをアクティブにするだけで「たたむ」解除するよう改良
//　　アイテム間隔を変数 itemSpace 書き換えで調整可能に
// e : パネルをアクティブにするだけで「たたむ」解除する仕様をヤメ


#target indesign
#targetengine "singleclickscript"

var fontSizeObj=24; //アイテムのフォントサイズ
var doubleClickObj=false; //trueなら初期状態でダブルクリック対応
var itemSpace=6; //アイテム間の間隔


function cp(mes){
	//alert(mes);
	//$.writeln(mes);
	}

function stripkFunc(obj, ary){
	var indexAry=[];
	var stripkObj=ary;
	while(obj!=win.L){
		indexAry.unshift(obj.index);
		obj=obj.parent;
		}
	while(indexAry.length){
		stripkObj=stripkObj[indexAry.shift()];
		}
	if(stripkObj.name.match(/\.jsx?$/i)){ // .js、.jsx ならJavaScript
		app.doScript(stripkObj,1246973031);
		return;
		}
	if(stripkObj.name.match(/\.app$|\.scpt$/i)){ // .app、.srpt ならたぶんAppleScript。エイリアス不可
		app.doScript(stripkObj,1095978087);
		return;
		}
	if(stripkObj.name.match(/\.[vV][bB]$|\.exe$/i)){ // .vb ならなんとなくVBscript。検証不足
		app.doScript(stripkObj,1447185511);
		}
	}

function buildTree(tree, par, ary){
	var targetAry=par.getFiles();
	while(targetAry.length){
		var targetObj=targetAry.shift();
		if(targetObj.reflect.name != "Folder"){
		var scriptName=decodeURI(targetObj.name).match(/^.+(?=\.[jsxbinapcrt]+$)/i);
		if((scriptName) && (targetObj.name != app.activeScript.name)){
				tree.add("item", scriptName[0]);
				ary.push(targetObj);
				}
			continue;
			}
		else{
			var nodeObj= tree.add("node", decodeURI(targetObj.name));
			ary.push([]);
			var folObj= ary[ary.length-1];
			buildTree(nodeObj, targetObj, folObj);
			}
		}
	}

var dlg=
"palette{ text:'ストリプク', properties : {resizeable : true },\
G:Group{orientation:'row',alignment:'left', \
MM:Checkbox{text:'たたむ'},\
SW:Checkbox{text:'ダブルクリックで実行'},\
}, \
L : TreeView{}\
}";

var win=new Window(dlg);

var targetFolderObj=new Folder(app.activeScript.parent);
if(decodeURI(targetFolderObj.name)!="Scripts Panel"){
	win.text=decodeURI(targetFolderObj.name);
	}
var scriptsAry=[], lastWidth=200, lastHeight=200;
buildTree(win.L, targetFolderObj, scriptsAry);

function runFunc(){
	deactivateFunc=function(){
		if(app.documents.length){
			 app.activeDocument=app.activeDocument;
			}
		return;
		}
	var sel=win.L.selection;
	if(win.L.selection.parent !=win.L){
		var ex=win.L.selection.parent;
		ex.expanded=false;
		ex.expanded=true;
		}
	win.L.selection=null;
	//sel.selected=false;
	win.L.active=false;
	if(sel.type =="item"){
		stripkFunc(sel, scriptsAry);
		}
	deactivateFunc();
	return;
	}

win.onResize=function(){
	win.L.size=[win.frameSize[0]-30, win.frameSize[1]-80];
	}

win.L.onChange=function(){
	if(!win.L.selection){
		win.L.active=false;
		return;
		}
	if(! win.G.SW.value){
		runFunc();
		}
	}

win.L.onDoubleClick=function(){
	if(win.G.SW.value){
		runFunc();
		}
	}

win.G.SW.onClick=function(){
	if(win.L.selection.parent !=win.L){
		var ex=win.L.selection.parent;
		ex.expanded=false;
		ex.expanded=true;
		}
	}

win.G.MM.onClick=function(){
	if(win.G.MM.value){
		lastWidth=win.size[0];
		lastHeight=win.size[1];
		win.size=[100, 35];
		}
	else{
		win.size=[lastWidth, lastHeight];
		}
	}

/* これ、ハタ迷惑なのでヤメ orz
win.addEventListener("focus", function(){
	if(win.G.MM.value){
		win.G.MM.notify("onClick");
		}
	});
	*/

var fontObj=ScriptUI.newFont(win.graphics.font.family, win.graphics.font.style, fontSizeObj);
win.L.graphics.font=fontObj;
win.G.SW.value=doubleClickObj;
win.spacing=0;
win.L.itemSize=[win.L.itemSize[0], win.L.itemSize[1]+itemSpace];
win.show();

