MutationEventというやつは…

Indesignですが、こいつはまともに動きません。おまけに検索しても情報がほとんど出てきません。しかしながら、皆様ご存知の通りOMVにはごっそり記述されています。
と言う事で調べてみたわけです。どうやらDocumentレベルへはインプリメントされているものの、その下層オブジェクトには実装されていないってところが現状のようです。
しかし、まったく使えないかと言うとそうでもなかったりします。

まずは下記の様なスクリプトで対象となるものの実体を把握してみます。

#targetengine session

var listener = app.activeDocument.addEventListener (
    MutationEvent.AFTER_ATTRIBUTE_CHANGED,
    function (obj){
                var result = “”;
        for (var a in obj){
            try{
                result += a + ” : ” + obj[a] + “\r”;
                for (var b in obj[a]){
                    result += a + “.” + b + ” : ” + obj[a][b] + “\r”;
                    }
                } catch (e) {
                    result += a + ” : Could not correct property.\r”;
                    }
            }
        var w = new Window (“dialog”, ‘properties’);
        var txbx = w.add (“edittext”, undefined, result, {multiline: true, scrolling: true});
        txbx.maximumSize.height = w.maximumSize.height – 200;
        txbx.minimumSize.width = 480;
        w.add (“button”, undefined, “close”, {name: “ok”});
        w.show ();
        });
listener.name = ‘testEvent’;

まあ、いつものプロパティ収集スクリプトをリスナにかませたものです。新規ドキュメントを追加してスクリプトを実行します。実行するとイベントリスナが設定されます。
まず、レイヤーパネルを見てみましょう。そしてレイヤーを追加してみます。はい、帰ってきました。

attributeName : activeLayer
attributeValue : [object Layer]
attributeValue.name : レイヤー 2
attributeValue.visible : true
attributeValue.locked : false
attributeValue.layerColor : 1767007588
attributeValue.ignoreWrap : false
attributeValue.showGuides : true
attributeValue.lockGuides : false
attributeValue.printable : true
attributeValue.allPageItems :
attributeValue.allGraphics :
attributeValue.id : 228
attributeValue.label :
attributeValue.isValid : true
attributeValue.parent : [object Document]
attributeValue.index : 1
attributeValue.properties : [object Object]
attributeValue.ovals : [object Ovals]
attributeValue.splineItems : [object SplineItems]
attributeValue.pageItems : [object PageItems]
attributeValue.rectangles : [object Rectangles]
attributeValue.graphicLines : [object GraphicLines]
attributeValue.textFrames : [object TextFrames]
attributeValue.polygons : [object Polygons]
attributeValue.events : [object Events]
attributeValue.eventListeners : [object EventListeners]
attributeValue.guides : [object Guides]
attributeValue.groups : [object Groups]
attributeValue.epstexts : [object EPSTexts]
attributeValue.formFields : [object FormFields]
attributeValue.buttons : [object Buttons]
attributeValue.multiStateObjects : [object MultiStateObjects]
attributeValue.isValid : true
eventType : afterAttributeChanged
target : [object LayoutWindow]
target.viewDisplaySetting : 1349810544
target.transformReferencePoint : 1095660652
target.activeLayer : [object Layer]
target.zoomPercentage : 109
target.activeSpread : [object Spread]
target.activePage : [object Page]
target.screenMode : 1936552047
target.overprintPreview : false
target.proofingProfile : ドキュメントの CMYK 領域を使用
target.proofingType : 1347710822
target.simulateInkBlack : false
target.simulatePaperWhite : false
target.preserveColorNumbers : false
target.selection :
target.name : *名称未設定-1 @ 109%
target.bounds : 69,33,1076,1460
target.isValid : true
target.parent : [object Document]
target.index : 0
target.properties : [object Object]
target.events : [object Events]
target.eventListeners : [object EventListeners]
target.isValid : true
currentTarget : [object Document]
currentTarget.xmlPreferences : [object XMLPreference]
currentTarget.xmlImportPreferences : [object XMLImportPreference]
currentTarget.xmlExportPreferences : [object XMLExportPreference]
currentTarget.associatedXMLElement : [object XMLElement]
currentTarget.exportForWebPreferences : [object ExportForWebPreference]
currentTarget.versionState : 1986221653
currentTarget.editingState : 1986217301
currentTarget.transparencyPreferences : [object TransparencyPreference]
currentTarget.textFramePreferences : [object TextFramePreference]
currentTarget.textPreferences : [object TextPreference]
currentTarget.textDefaults : [object TextDefault]
currentTarget.dictionaryPreferences : [object DictionaryPreference]
currentTarget.storyPreferences : [object StoryPreference]
currentTarget.anchoredObjectDefaults : [object AnchoredObjectDefault]
currentTarget.anchoredObjectSettings : [object AnchoredObjectSetting]
currentTarget.baselineFrameGridOptions : [object BaselineFrameGridOption]
currentTarget.footnoteOptions : [object FootnoteOption]
currentTarget.allParagraphStyles : [object ParagraphStyle],[object ParagraphStyle]
currentTarget.allCharacterStyles : [object CharacterStyle]
currentTarget.textWrapPreferences : [object TextWrapPreference]
currentTarget.allTableStyles : [object TableStyle],[object TableStyle]
currentTarget.allCellStyles : [object CellStyle]
currentTarget.documentPreferences : [object DocumentPreference]
currentTarget.gridPreferences : [object GridPreference]
currentTarget.guidePreferences : [object GuidePreference]
currentTarget.marginPreferences : [object MarginPreference]
currentTarget.pasteboardPreferences : [object PasteboardPreference]
currentTarget.viewPreferences : [object ViewPreference]
currentTarget.printPreferences : [object PrintPreference]
currentTarget.printBookletOptions : [object PrintBookletOption]
currentTarget.printBookletPrintPreferences : [object PrintBookletPrintPreference]
currentTarget.placeGuns : [object PlaceGun]
currentTarget.metadataPreferences : [object MetadataPreference]
currentTarget.indexGenerationOptions : [object IndexOptions]
currentTarget.allPageItems :
currentTarget.allGraphics :
currentTarget.allObjectStyles : [object ObjectStyle],[object ObjectStyle],[object ObjectStyle],[object ObjectStyle]
currentTarget.pageItemDefaults : [object PageItemDefault]
currentTarget.frameFittingOptions : [object FrameFittingOption]
currentTarget.buttonPreferences : [object ButtonPreference]
currentTarget : Could not correct property.
eventPhase : 1701724789
bubbles : true
cancelable : false
timeStamp : Tue Oct 11 2011 10:42:04 GMT+0900
propagationStopped : false
defaultPrevented : false
id : 18
isValid : true
parent : [object LayoutWindow]
parent.viewDisplaySetting : 1349810544
parent.transformReferencePoint : 1095660652
parent.activeLayer : [object Layer]
parent.zoomPercentage : 109
parent.activeSpread : [object Spread]
parent.activePage : [object Page]
parent.screenMode : 1936552047
parent.overprintPreview : false
parent.proofingProfile : ドキュメントの CMYK 領域を使用
parent.proofingType : 1347710822
parent.simulateInkBlack : false
parent.simulatePaperWhite : false
parent.preserveColorNumbers : false
parent.selection :
parent.name : *名称未設定-1 @ 109%
parent.bounds : 69,33,1076,1460
parent.isValid : true
parent.parent : [object Document]
parent.index : 0
parent.properties : [object Object]
parent.events : [object Events]
parent.eventListeners : [object EventListeners]
parent.isValid : true
index : 0
properties : [object Object]
properties.attributeName : activeLayer
properties.attributeValue : [object Layer]
properties.eventType : afterAttributeChanged
properties.target : [object LayoutWindow]
properties.currentTarget : [object Document]
properties.eventPhase : 1701724789
properties.bubbles : true
properties.cancelable : false
properties.timeStamp : Tue Oct 11 2011 10:42:04 GMT+0900
properties.propagationStopped : false
properties.defaultPrevented : false
properties.id : 18
properties.parent : [object LayoutWindow]
properties.index : 0
isValid : true

更新された属性はレイヤーです。さらに、レイヤーの選択を変更してみてもリスナがトリガされます。
適当ですが、その他ページの遷移、スプレッドの遷移でもこのMutationEvent.AFTER_ATTRIBUTE_CHANGEDは反応します。
という事で、応用編です。

#targetengine session

if (app.activeDocument.eventListeners.itemByName(‘autoLockLayers’)==null){
    var listener = app.activeDocument.addEventListener (
        MutationEvent.AFTER_ATTRIBUTE_CHANGED, layersControl);
    listener.name = ‘autoLockLayers’;
    }

function layersControl(ev){
    if (ev.attributeValue!=”[object Layer]”) return;
    for (var i=0;i<app.activeDocument.layers.length;i++){
        app.activeDocument.layers[i].locked=true;
        }
    ev.attributeValue.locked = false;
    }<app.activedocument.layers.length;i++){ app.activedocument.layers[i].locked="true;" }="" ev.attributevalue.locked="false;" }

とてもシンプルな例ですが、選択したレイヤー以外を自動的にロックしてしまうスクリプトです。
停止は

lockLayer.png

app.activeDocument.eventListeners.itemByName(‘autoLockLayers’).remove();

の一行を実行して下さい。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

コメントを残す