ScriptUIの最近のブログ記事

前回の
とりあえずから実用へ(InDesignプロンプト版セル幅調整スクリプト)の続き
せっかくなので高さも調整できるようにしてみる。

setsizewithcals.png

/**
 *  cells size setter (with cals) 
 * 
 */
if(app.documents.length == 0 || app.selection.length == 0){exit();}

var cellColumn, cellRow;
selObj = app.selection[0];
switch(selObj.constructor.name){
	case "Table":
		cellColumn = selObj.columnCount;
		cellRow = selObj.bodyRowCount + selObj.headerRowCount + selObj.footerRowCount;
		break;
	case "Cell":
		cellColumn = selObj.columnSpan;
		cellRow = selObj.rowSpan;
		break;
	default :// TableとCell以外は無視
		alert("choose table or cells");
		break;
}
//結合セルも個別セルとして幅と高さを取得
var eachCellW = selObj.columns.everyItem().width;
var eachCellH = selObj.rows.everyItem().height;

//edittextの大きさ,パネルのマージンなどを設定
var editbox = {'w': 60, 'h': 20}; //edittextの大きさ
var startPt; //edittext作成の開始点
var pnlMargin = [10,10,10,15]; //パネルのマージン
var gutter = 5; //edittextの間隔
var wArr = [];
var hArr = [];

var dlg = new Window('dialog',"cells size setter",undefined);
dlg.pnl = dlg.add('panel',undefined);//サイズは仮

//幅用のedittext
startPt = [pnlMargin[0], pnlMargin[1]];
startPt[0] += editbox['w'] + gutter;//開始点を右にずらす

for (var ic=0; ic < cellColumn; ic++) {
	var wValue = dlg.pnl.add('edittext',[startPt[0], startPt[1], startPt[0]+editbox['w'], startPt[1]+editbox['h']],eachCellW[ic]);
	startPt[0] = startPt[0] + editbox['w'] + gutter;
	wArr.push(wValue);
}
var pnlW = startPt[0]+pnlMargin[2];//dlg.pnl width

//高さ用のedittext
startPt = [pnlMargin[0], pnlMargin[1]];
startPt[1] += editbox['h'] + gutter;//開始点を下にずらす

for (var ir=0; ir < cellRow; ir++) {
	var hValue = dlg.pnl.add('edittext',[startPt[0], startPt[1], startPt[0]+editbox['w'], startPt[1]+editbox['h']],eachCellH[ir]);
	startPt[1] = startPt[1] + editbox['h'] + gutter;
	hArr.push(hValue);
}
var pnlH = startPt[1]+pnlMargin[3];//dlg.pnl height

dlg.pnl.bounds = [0, 0, pnlW, pnlH];//パネルのサイズを設定

dlg.grp = dlg.add('group')
dlg.okButton = dlg.grp.add('button',undefined,'ok',{name: 'ok'});
dlg.cancelButton = dlg.grp.add('button',undefined,'cancel',{name: 'cancel'});

dlg.okButton.onClick = function(){
	dlg.close();
	flg = true;
}
dlg.cancelButton.onClick = function(){
	dlg.close();
	flg = false;
}
dlg.center();
dlg.show();

if(flg == true){
	for (var iw=0; iw < wArr.length; iw++) {
		if (eval(wArr[iw].text)*1 > 1) {
			selObj.columns[iw].width = eval(wArr[iw].text) * 1;
		}
	}
	for (var ih=0; ih < hArr.length; ih++) {
		if (eval(hArr[ih].text)*1 > 1) {
			selObj.rows[ih].height = eval(hArr[ih].text) * 1;
		}
	}
}

のびのびと育ってほしいので、ScriptUIのダイアログをのびるようにしてみました。

ダイアログに表示する内容に合わせてサイズを可変させます。当然、項目が多すぎるとディスプレイからはみ出します。

stretch_dialog_input.png

おまけ、正規表現で設定した内容以外は頑として受け付けません。
sd_regex_alert.png
機能はあくまでサンプルなので実用的かどうかは別問題です。それ以前に、素直にResource Specificationsつかえばいいのに。って声が聞こえてきそう

20100726(Mon)1730頃:cancelButtonの記述がおかしかったのを修正
/**
 * のびのびダイアログ
 * コンテンツに応じてダイアログのサイズを可変させるサンプル
 * 機能:
 * InDesign のスウォッチとレイヤーの名前をリネームする
 */

var docObj = app.documents[0];
var swatchObj = unReservedSwatch(docObj);
var layObj = docObj.layers;

//create dialog
//dialogはpanelのサイズに合わせて自動調整
var dlg = new Window('dialog',"stretch dialog", undefined);
//swatch panel
dlg.panel = dlg.add('panel',[5,5,340,320],"Swaaaaaaaaaatch");
var sw_panelbon = dlg.panel.bounds;

var y1 = 0, swArr = [];
for (var isw=0; isw < swatchObj.length; isw++) {
	swatchObjName = dlg.panel.add('statictext', [20,20+y1,180,40+y1], ''+swatchObj[isw].name);
	swRenameName = dlg.panel.add('edittext', [180,20+y1,320,40+y1], '',{multiline: false});
	y1 += 25;
	swArr.push([swatchObjName, swRenameName]);
}
var py = y1 +35;
//panelのサイズを拡張のびーる
dlg.panel.bounds = [sw_panelbon[0], sw_panelbon[1], sw_panelbon[2], py];

var ly_panelbon = [5, py, 340, py +100];//swatchのパネルの下端から作成、高さはとりあえず100
//layer panel
dlg.panel2 = dlg.add('panel', ly_panelbon, "Layeeeeeeeeeeeer");

var y2 = 0, lyArr = [];
for (var ily=0; ily < layObj.length; ily++) {
	layObjName = dlg.panel2.add('statictext', [20,20+y2,180,40+y2], ''+layObj[ily].name);
	lyRenameName = dlg.panel2.add('edittext', [180,20+y2,320,40+y2], '',{multiline: false});
	y2 += 25;
	lyArr.push([layObjName, lyRenameName]);
	}
var py2 = y2 + 30;
//panel2のサイズを拡張のびーる
dlg.panel2.bounds = [ly_panelbon[0], ly_panelbon[1], ly_panelbon[2], ly_panelbon[1]+py2];

dlg.okButton = dlg.add('button',undefined,"ok",{name: 'ok'});
dlg.cancelButton = dlg.add('button',undefined,"cancel",{name: 'cancel'});

dlg.center();
var flg;
dlg.okButton.onClick = function(){
	flg = true
	dlg.close();	
}
dlg.cancelButton.onClick = function(){
	flg = false
	dlg.close();	
}

dlg.show();

if(flg == true){
	renameswatchObj(docObj, swArr);
	renamelayerObj(docObj, lyArr);
	}


/**
 * raname object (swatch)
 * @param {Object} doc Document
 * @param {Array} array ==> [object, string] 
 */
function renameswatchObj (doc, array) {
	for (var i=0; i < array.length; i++) {
		var stylename = array[i][0].text;
		var renamename = array[i][1].text;
		if(renamename.length > 0){
			var styleObj = doc.swatches.item(stylename);
			retryRename (styleObj, renamename); //Fnへ
			}
		}
}
/**
 * raname object (layer)
 * @param {Object} doc Document
 * @param {Array} array ==> [object, string] 
 */
function renamelayerObj (doc, array) {
	for (var i=0; i < array.length; i++) {
		var stylename = array[i][0].text;
		var renamename = array[i][1].text;
		if(renamename.length > 0){
			var styleObj = doc.layers.item(stylename);
			retryRename (styleObj, renamename); //Fnへ
			}
		}
}
/**
 * regex check and retry rename
 * @param {Object} obj such as Swatch, Layers, ParagraphStyles(exist name property object)
 * @param {String} string rename string
 */
function retryRename (obj, string) {
	//リネームの正規表現チェック
	var regexCheck = string.match(/^[A-Za-z][0-9A-Za-z_-]*/g);
	if(regexCheck != string){
		reg_retry = prompt("ルールにマッチしません",string);
		if(reg_retry){
			string = reg_retry;
			retryRename (obj, string);
			}
		else{exit();}
		}
	//リネームの重複チェック
	try{
		obj.name = string;
		}
	catch(e){
		var retry = prompt("変更前「"+obj.name+"」:\r名前は既にあります。変更して下さい。",string);	
		if(retry){
			retryRename(obj, retry);
			}
		else{exit();}
		}
	
}
/**
 * unreserved swatch
 * @param {Object} doc Document
 * @returns {Array} otherSw the return value 
 */
function unReservedSwatch(doc){
	var swObj = doc.swatches;
	var otherSw = new Array();
	if(swObj.length-4 > 0){
		for(var i=0; i < swObj.length; i++){
			switch(swObj[i].name){
				case "None":
				case "Paper":
				case "Black":
				case "Registration": break;
				default : 
					otherSw.push(swObj[i]);
					break;
				}
			}
		}
	return otherSw;
}

ScriptUIのダイアログでEditTextをfor ( ){ }式で回してコンテンツに応じて生成しようとしたとき、入力時にタブで飛ばないことがあったのでメモ。

普通EditTextはタブでフィールドを移動できます。
違うnameのEditText'であっても、生成順にタブ移動できるし、StaticTextとEditEextを織り交ぜても大丈夫。 でもCheckBox, DropDownList, RadioButtonが含まれるとダメみたい。
そんな時は、GroupやPanelで隔離すれば大丈夫になるので、別なfor ( ) { }式で生成すればよいみたい。

win12.png

//タブで次のフィールドに飛ぶ
//edittext
var win = new Window('dialog',"edittext text",undefined);
var x=0;
for (var i=0; i < 5; i++) {
	win.add('edittext',[5,5+x,300,25+x],"1",{name:"first"});
	win.add('edittext',[35,25+x,300,45+x],"2",{name:"second"});
	x += 35;
	};
win.add('button',undefined,"ok",{name:'ok'});
win.show();

//edittext + statictext
var win2 = new Window('dialog',"edittext + statictext test",undefined);
x=0;
for (var i=0; i < 5; i++) {
	win2.add('edittext',[5,5+x,300,25+x], i);
	win2.add('statictext',[5,25+x,300,45+x],"text-"+i);
	x += 35;
	};
win2.add('button',undefined,"ok",{name:'ok'});
win2.show();
win345.png

//タブが効かない。
//edittext + statictext + checkbox
var win3 = new Window('dialog',"edittext + statictext + checkbox test",undefined);
x=0;
for (var i=0; i < 3; i++) {
	win3.add('edittext',[5,5+x,300,25+x],i);
	win3.add('checkbox',[5,25+x,300,45+x],"checbox-"+i);
	win3.add('statictext',[5,45+x,300,60+x],"text-"+i);
	x += 45;
	};
win3.add('button',undefined,"ok",{name:'ok'});
win3.show();

//edittext + statictext + dropdownlist
var win4 = new Window('dialog',"edittext + statictext + dropdown test",undefined);
x=0;
for (var i=0; i < 3; i++) {
	win4.add('edittext',[5,5+x,300,25+x],i);
	win4.add('dropdownlist',[5,25+x,300,45+x],['a','b','c']);
	win4.add('statictext',[5,45+x,300,60+x],"text-"+i);
	x += 45;
	};
win4.add('button',undefined,"ok",{name:'ok'});
win4.show();

//edittext + statictext + radiobutton
var win5 = new Window('dialog',"edittext + statictext + radiobutton",undefined);
x=0;
for (var i=0; i < 3; i++) {
	win5.add('edittext',[5,5+x,300,25+x],i);
	win5.add('radiobutton',[5,25+x,300,45+x]);
	win5.add('statictext',[5,45+x,300,60+x],"text-"+i);
	x += 45;
	};
win5.add('button',undefined,"ok",{name:'ok'});
win5.show();
win6.png
//GroupやPanelで隔離すれば大丈夫になる。
//edittext + statictext + radiobutton
var win6 = new Window('dialog',"edittext + statictext + radiobutton",undefined);
x=0;
for (var i=0; i < 3; i++) {
	win6.add('edittext',[5,5+x,300,25+x],i);
	win6.add('statictext',[5,45+x,300,60+x],"text-"+i);
	x += 35;
	};
var x2 = x + 10;
win6.group = win6.add('group',[5,x2,300,x2+130]);
var x3 = 0
for (var j=0; j < 3; j++) {
	win6.group.add('radiobutton',[5,25+x3,300,45+x3],"radiobutton-" + j);
	x3 += 30;
};

win6.add('button',undefined,"ok",{name:'ok'});
win6.show();
Adobe Forums: [JS][CSX] ScriptUI Tip
にてScriptUIダイアログで同じテキストをずらす処理で太字(風)にするという手法、あわせて正統派ボールド処理についても紹介されていたのでメモ。
ちょっとしたワンポイントでつかってみたい。
zura.png
ずらっは、1pxがぎりぎり限界かも。

var myMainPanel=new Window ('dialog', 'ずら', [0,0,300,150]);
myMainPanel.center();

//普通のstatictext
myMainPanel.add('statictext',[10,10,280,25],
	'This is normal static text: ノーマル');

//Harbさんによるbold処理
var font = myMainPanel.graphics.font.family;
var fontSize = myMainPanel.graphics.font.size;
var boldFont = ScriptUI.newFont (font,'BOLD',fontSize);
var myText = myMainPanel.add('statictext',[10,10+20,280,25+20],
	'This is ScriptUI bold text: 正統派ボールド処理');
myText.graphics.font = boldFont;


//Roy Marshallさんによるずらし処理
myMainPanel.add('statictext',[10,10+60,280,25+60],
	'This is shifted text 0.5px: ずらしてみる処理');
myMainPanel.add('statictext',[10,10+60.5,280,25+60.5],
	'This is shifted text 0.5px: ずらしてみる処理');

myMainPanel.add('statictext',[10,10+80,280,25+80],
	'This is shifted text 1px: ずらしてみる処理');
myMainPanel.add('statictext',[10,10+81,280,25+81],
	'This is shifted text 1px: ずらしてみる処理');

myMainPanel.add('statictext',[10,10+100,280,25+100],
	'This is shifted text 1.5px: ずらしてみる処理');
myMainPanel.add('statictext',[10,10+101.5,280,25+101.5],
	'This is shifted text 1.5px: ずらしてみる処理');

myMainPanel.show();


「InDesign_ ドキュメントの単位と増減値をととのえる」
「InDesign_ドキュメントの単位と増減値をととのえる(再」
で書いた、単位と増減値の環境設定スクリプトをまた書き換え。
ドキュメントを何も開いていない場合は、アプリケーションデフォルトも変更できるように変更、あわせてちょこっと修正。

[変更したところ]
  • ドキュメントをなにも開いていない場合、アプリケーションデフォルトを設定するように変更(不要なラ時をチェックボックスも表示しないでメッセージもかえた)。
  • プルダウンメニューの「/」の両脇にアキをあけた。
  • okボタンをちょっと調整。
  • ダイアログ表示位置をモニタの中心に来るように変更。
app, doc, doc(s)での分岐の仕方が強引だろうか?
setUnitApp.png
/**
ドキュメントとアプリケーションの単位と増減値をととのえる
"set unit and increment of documents and application"

使い方:
ドキュメントまたはアプリ全体の「単位と増減値」の設定をドロップダウンリストから変更します。

単位は4種類
	座標がmm、組版が級歯
	座標も組版もポイント
	座標がmm、組版が級歯
	座標がパイカ、組版がポイント

これらに合わせて増減値もそれぞれ、mm、ptでキリが良い数値に変更します。

ドキュメントが開いている場合
"apply to most front doc"チェックボックスにチェックされていると
最前面のドキュメントのみに適用します。外すと開いている全てのドキュメントに
適用します。

ドキュメントが開いていない場合
"apply to most front doc"チェックボックスのかわりに、
メッセージが"apply to application global"となりアプリケーション全体の設定を変更します。

動作確認:OS10.6.3 InDesign CS3

milligramme
www.milligramme.cc
*/

if(app.documents.length==0){
	var targetObj=[];
	targetObj.push(app);
	}
else{
	var targetObj=app.documents;
	}

//単位いろいろ
var uMM=MeasurementUnits.MILLIMETERS;
var uPt=MeasurementUnits.POINTS;
var uPC=MeasurementUnits.PICAS;//(1パイカ=12ポイント)
var uH=MeasurementUnits.HA;//歯
var uQ=MeasurementUnits.Q;


//ダイアログ
var dlg=new Window('dialog','unitswitch',[0,0,200,100]);
	dlg.center();
	dlg.dropdownList=dlg.add('dropdownlist',[10,10,190,30],
		['space: mm / text: QH', 
		'space: pt / text: pt',
		'space: mm / text: pt',
		'space: pc / text: pt']
		);
	dlg.dropdownList.selection=0;
	if(app.documents.length!=0){
		dlg.applyDocBtn=dlg.add('checkbox',[20,40,200,60],'apply to most front doc.');	
		dlg.applyDocBtn.value=true;
		}
	else{
		dlg.add('statictext',[20,40,200,60],'apply to application global.');	
		}
	dlg.okBtn=dlg.add('button',[60,65,140,88],'ok',{name:'ok'});
	
	dlg.show();

var unitSet=dlg.dropdownList.selection.text;
try{
	var applyDoc=dlg.applyDocBtn.value;
	}catch(e){var applyDoc=true}

var docLength;
if(applyDoc==true){
	docLength=1;
	}
else{
	docLength=targetObj.length;
	}

for(var i=0; i < docLength; i++){
//座標がmm、組版が級歯
if(unitSet=="space: mm/text: QH"){
	with(targetObj[i].viewPreferences){
		//単位と増減値
		//定規の単位(水平方向・垂直方向)
		horizontalMeasurementUnits=uMM;
		verticalMeasurementUnits=uMM;
		//他の単位(組版・テキストサイズ・線幅)
		typographicMeasurementUnits=uH;
		textSizeMeasurementUnits=uQ;
		lineMeasurementUnits=uMM;
		//ポイント/パイカの大きさ(ポイント/インチ)
		pointsPerInch=72;
		//キーボード増減値(カーソルキー)
		cursorKeyIncrement="0.1mm";
		}
	with(targetObj[i].textPreferences){
		//キーボード増減値(サイズ/行送り・ベースラインシフト・カーニング)
		leadingKeyIncrement="0.5H";
		baselineShiftKeyIncrement="0.5H";
		kerningKeyIncrement=20;	
		}
	}//mm qh

//座標も組版もポイント
else if(unitSet=="space: pt/text: pt"){
	with(targetObj[i].viewPreferences){
		horizontalMeasurementUnits=uPt;
		verticalMeasurementUnits=uPt;
		typographicMeasurementUnits=uPt;
		textSizeMeasurementUnits=uPt;
		lineMeasurementUnits=uPt;
		pointsPerInch=72;
		cursorKeyIncrement="0.5pt";
		}
	with(targetObj[i].textPreferences){
		leadingKeyIncrement="0.5pt";
		baselineShiftKeyIncrement="0.5pt";
		kerningKeyIncrement=20;	
		}
	}//pt pt

//座標がmm、組版がポイント
else if(unitSet=="space: mm/text: pt"){
	with(targetObj[i].viewPreferences){
		horizontalMeasurementUnits=uMM;
		verticalMeasurementUnits=uMM;
		typographicMeasurementUnits=uPt;
		textSizeMeasurementUnits=uPt;
		lineMeasurementUnits=uPt;
		pointsPerInch=72;
		cursorKeyIncrement="0.1mm";
		}
	with(targetObj[i].textPreferences){
		leadingKeyIncrement="0.5pt";
		baselineShiftKeyIncrement="0.5pt";
		kerningKeyIncrement=20;	
		}
	}//mm pt

//座標がパイカ、組版がポイント
else if(unitSet=="space: pc/text: pt"){
	with(targetObj[i].viewPreferences){
		horizontalMeasurementUnits=uPC;
		verticalMeasurementUnits=uPC;
		typographicMeasurementUnits=uPt;
		textSizeMeasurementUnits=uPt;
		lineMeasurementUnits=uPt;
		pointsPerInch=72;
		cursorKeyIncrement="0.5pt";
		}
	with(targetObj[i].textPreferences){
		leadingKeyIncrement="0.5pt";
		baselineShiftKeyIncrement="0.5pt";
		kerningKeyIncrement=20;	
		}
	}//pc pt
	}//for i


InDesignでは、なぜかガイドの色を環境設定で変えることができません
ガイドを要素別にクラス分けみたいなことをしたくて、選択したガイドだけの色を変える豆スクリプトを書いてみました。おまけで俺色になったガイドをリセットするスクリプトも。

アップする前にもう一度、デフォルトで出来ないか調べてみたら
中綴さんのところで、InDesign&ガイド屋 Tips「ガイドの色設定」と似たようなエントリーを発見。まぁ生スクリプトじゃないし、いいや。そういえば、InDesignのガイドはページアイテムと一緒には選択することができないので、ロックしていなくてもそうそう動くことがないのがわりとすき。

20100309(Tue)2200ころ追記
Mac,DTP et etc....の [InDesign CS4]ガイドを色分けする にてデフォルトでレイアウトメニューから変更とわかる。まーいいや。


changeGuideColor.jpg

/**
選択ガイドの色を変える
"change color of guides"

使い方:
ガイドを選択して実行。ガイドの色を変えます。

動作確認:OS10.4.11 InDesign CS3

milligramme
www.milligramme.cc
*/
if(app.documents.length==0 || app.selection.length==0){
	alert("select any guide");
	exit();
	}

var selObj=app.selection;
if(selObj[0].constructor.name=="Guide"){
	main(selObj);
	}
else{alert("select any guide");}

function main(selObj){
	var UICList=["LIGHT_BLUE", "RED", "GREEN", "BLUE", "YELLOW", 
		"MAGENTA", "CYAN", "GRAY", "BLACK", "ORANGE", "DARK_GREEN", 
		"TEAL", "TAN", "BROWN", "VIOLET", "GOLD", "DARK_BLUE", "PINK", 
		"LAVENDER", "BRICK_RED", "OLIVE_GREEN", "PEACH", "BURGUNDY", 
		"GRASS_GREEN", "OCHRE", "PURPLE", "LIGHT_GRAY", "CHARCOAL", 
		"GRID_BLUE", "GRID_ORANGE", "FIESTA", "LIGHT_OLIVE", "LIPSTICK", 
		"CUTE_TEAL", "SULPHUR", "GRID_GREEN", "WHITE"];
	var dlg=new Window('dialog', 'change!' , [0, 0, 160, 96]);
	dlg.center();
	dlg.ddList=dlg.add('dropdownlist' , [12, 28, 148, 44] , UICList);
	dlg.ddList.selection=6;// CYAN
	dlg.add('statictext' , [12, 10, 148, 27] , 'choose color');
	dlg.cancelButton=dlg.add('button' , [84, 62, 148, 77] , 'cancel' , {name: 'cancel'});
	dlg.okButton=dlg.add('button' , [12, 62, 76, 77] , 'ok' , {name: 'ok'});

	var flag;
	dlg.okButton.onClick=function(){
		flag=true
		dlg.close();
		}	
	dlg.cancelButton.onClick=function(){
		dlg.close();
		}
	dlg.show();

	if(flag==true){
		var col=dlg.ddList.selection.text
		for(var i=0; i < selObj.length; i++){
			selObj[i].guideColor=UIColors[col];
			}
		}
	}
おまけ
ガイドの色のリセットは、適用範囲によって変わります。
//ガイドの色のリセット
//ドキュメント上のガイド全部リセット
app.documents[0].guides.everyItem().guideColor=UIColors.CYAN;
//ドキュメントページだけリセット
app.documents[0].pages.everyItem().guides.everyItem().guideColor=UIColors.CYAN;
//マスターページだけリセット(再描画させないと反映されない?)
app.documents[0].masterSpreads.everyItem().guides.everyItem().guideColor=UIColors.CYAN;
InDesignにて
オブジェクトの整列、パスファインダー、三項演算子、自前のScriptUI dialog makerの使い勝手テストを兼ねて、がっしゃんがっしゃんばりばりばりん。

casDialog.jpg
crashAndSweep.jpg

どちらかというと自家用です。

InDesignのドキュメント上でScriptUIのダイアログをレイアウトしてみるスクリプト。
元のアイデアは、 Open Space 古旗さんの「組版時間を半減する! InDesign自動処理実例集(amazon)」の自動GUI生成ツール(P190)と、netでたまたま見かけたGUIをつくるswfファイル (http://www.jkozniewski.com/tools/csib_loader.swf)のインターフェイス。
これらを参考に味付けしてます。

ドキュメントの単位系をポイントに設定し、スウォッチ名にはScriptUIのパーツたちの名前をあてたドキュメントを用意。(サンプル:dlg_maker_cs3.indd.zip

swatchAsObject.jpg

そこに「UIオブジェクト色」のテキストフレームをレイアウトしていきます。オブジェクトの種類によって、内容テキストの扱いが変わります。(スライダーはパラメーター、ドロップダウンリストはリスト配列、あとはラベルのように)
ペーストボード上のオブジェクトは無視します。
現時点で、すべてのオブジェクトはダイアログウィンドウ内にベタ並べ状態なので、パネルとグループの内側のオブジェクトも階層的に内包されてません(親子関係にない)。

実行するとESTKのJava Scriptコンソールに、ダイアログのソースを吐き出し、ダイアログ表示を実行します。okかcancelボタンのクリックで(またはenterかescキーで)ダイアログを閉じます。

inddAndDialog.jpg

前回のスライススクリプトのGUI版、ちょいちょいバグ修正。

InDesignにて
テキストフレームの文字をグラフィック化して、パスファインダ(交差)を利用して分割して、お好みで変形マトリクスを利用して散らしたりしてみます。


上のパネル[slice]で分割数を設定。
縦横それぞれ1以上の整数値を入れてください。細分割しすぎるとエラーになります。
「分割サイズが小さい方で処理」チェックすると分割サイズが小さい正方形で分割します。
「元のテキストを削除」チェックすると処理後に元のテキストフレームを削除します。

下のパネル[set random transform range]で分割後の変形・移動値を設定。
設定した数値のプラスマイナス値の範囲内(Scale以外)でランダムに処理します。
デフォルトの「0, 0, 100, 0」で変形・移動は「無し」になりますのでお好みで。
slice_gui.jpg
以前、
kamisetoさんに教えてもらったイベントのカリー化をスライダー回りの処理に使用してみます。(とりあえず教えてもらったまま、動きがわかってきたので次回別件にいかせるようにがんばる。)
メモです。あまり役に立ちません。
スライダーと同様に、ScriptUIのプログレスバーもboundsで width < height にするとやはり垂直になります。気のせいか、水平プログレスバーよりも「頑張っている感」が出る気がします。

veritcalProgressBar.png

//垂直プログレスバー
var win = new Window("dialog", "progress bar", [150, 150, 320, 420]); 
win.pnl = win.add("panel", [10, 10, 160,260], "vertical bar");

win.pnl.progBarLabel1 = win.pnl.add("statictext", [20, 20, 60, 40], "No1");
win.pnl.progBar1 = win.pnl.add("progressbar", [20, 35, 60, 130], 0, 200);
win.pnl.progBarLabel2 = win.pnl.add("statictext", [60, 20, 100, 40], "No2");
win.pnl.progBar2 = win.pnl.add("progressbar", [60, 35, 100, 130], 0, 200);
win.pnl.progBarLabel3 = win.pnl.add("statictext", [100, 20, 140, 40], "No3");
win.pnl.progBar3 = win.pnl.add("progressbar", [100, 35, 140, 130], 0, 200);

win.goButton = win.add("button", [20, 160, 150, 180], "Start");
win.resetButton = win.add("button", [20, 160+30, 150, 180+30], "Reset");
win.doneButton = win.add("button", [20, 160+60, 150, 180+60], "Done");

win.doneButton.onClick = function (){
	win.close();
	};

win.goButton.onClick = function (){
	while(win.pnl.progBar1.value < win.pnl.progBar1.maxvalue){
		win.pnl.progBar1.value++; 
		$.sleep(10);
		}
	while(win.pnl.progBar2.value < win.pnl.progBar2.maxvalue){
		win.pnl.progBar2.value++; 
		$.sleep(10);
		}	
	while(win.pnl.progBar3.value < win.pnl.progBar3.maxvalue){
		win.pnl.progBar3.value++; 
		$.sleep(10);
		}	
	};

win.resetButton.onClick = function(){ 
	win.pnl.progBar1.value = 0; 
	win.pnl.progBar2.value = 0; 
	win.pnl.progBar3.value = 0; 
	};

win.show();

TranslateThis

このアーカイブについて

このページには、過去に書かれたブログ記事のうちScriptUIカテゴリに属しているものが含まれています。

前のカテゴリはPhotoshopです。

次のカテゴリはTextMateです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

アーカイブ

Blog Parts