ストレスフリーでライブラリのシンボルを編集モードにしたい

可能な限りライブラリパネルを触らず、頻繁に編集するシンボルにアクセスする方法を模索している。思いついたアイデアは以下の 2 点。

  • 同一の .fla ファイルを複数ウィンドウで開いておく
  • シンボルのブックマークを作る

同一の .fla ファイルを複数ウィンドウで開いておく

JSFL コマンドの

fl.getDocumentDOM().enterEditMode('newWindow');

を実行すると、ステージ上で選択中のシンボルを別ウィンドウで編集することができる。自分が知る限り、この JSFL コマンド以外で、シンボルを別ウィンドウで編集する手段はない。各ウィンドウに、頻繁に編集するシンボルを開いておくことで、タブの移動だけで作業を切り替えることができる。ただし、ライブラリパネルから任意のシンボルを開こうとすると、アクティブなウィンドウではなく、一番最初に開かれたオリジナルのウィンドウに展開されてしまうので注意が必要。

シンボルのブックマークを作る

頻繁に編集するシンボルをブックマークして、ワンクリックでアクセスする MXP を作った。ブックマークボタンを押すとリストコンポーネントに現在編集中のシンボルの libraryItem.name を追加し、リストから選択されたらオープンする仕組みだ。ソースは以下の通り。MMExecute の綺麗な書き方は無いのだろうか。

function addBookmark():Void {
MMExecute("fl.getDocumentDOM().exitEditMode();");
var itemName = MMExecute("(function hoge(){return fl.getDocumentDOM().selection[0].libraryItem.name})();");
MMExecute("fl.getDocumentDOM().enterEditMode('inPlace');");
this.itemList.addItem(itemName);
}
//button component
var buttonListener:Object = new Object();
buttonListener.click = function():Void {
addBookmark();
};
this.bookmarkButton.addEventListener("click", this.buttonListener);
//list component
var itemListListener:Object = new Object();
itemListListener.change = function (eventObj) {
MMExecute("fl.getDocumentDOM().library.editItem(\"" + eventObj.target.selectedItem.label + "\");");
}
this.itemList.addEventListener("change", itemListListener);

とりあえず動くが、シンボル名を取得するために荒技を行っているので、ステージ上に配置されたシンボルしかブックマークできない。ActionScript で配置するシンボルは、一度ステージに配置してからブックマークして、削除するしかない。「編集中のシンボル」というプロパティが JSFL に存在すればいいのだが。