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

August 30, 2007category: Flash JSFL 

可能な限りライブラリパネルを触らず、頻繁に編集するシンボルにアクセスする方法を模索している。思いついたアイデアは以下の 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 に存在すればいいのだが。

comments (4)このエントリーを含むはてなブックマークはてなブックマーク - ストレスフリーでライブラリのシンボルを編集モードにしたい

comments

僕はステージ上にテキストフィールド置いて、そこにjsコマンドを書いてます。

/* ステージ上のTextField[ textField ]内に記述 */
/*
function hoge(){
fl.getDocumentDOM().exitEditMode();
var iName = fl.getDocumentDOM().selection[0].libraryItem.name;
fl.getDocumentDOM().enterEditMode('inPlace');
return iName;
}
hoge();
*/

/* ActionPanel */
MMExecute( textField.text );

あと、ライブラリのシンボル名は
直接ライブラリ内のシンボルを選択して
/*
var iName = fl.getDocumentDOM().library.getSelectedItems()[0].name;
*/

とかだとダメですかね。

ちなみにコマンドパネルを作るときは
ショートカットを設定したテスト用のコマンド(jsfl)を用意しておいて、作成中はそのjsflファイルを直接編集しながらテストしていって、出来上がったらflaファイル内のテキストフィールドに貼り付けるのがデバッグしやすいかなあと思ってます。
\をエスケープしないとだめなのは若干手間ですが。

Posted by: michi : August 30, 2007 12:28 PM

こんにちは。コメント有り難うございます。

■TextFieldにJSFL
これは使えますね!
swf書き出し→WindowSWFフォルダに配置→Flash再起動
のステップを踏んでました。

■シンボル名
あぁ、編集中のシンボルではなく、ライブラリから選択して、
それをブックマークすればいいのですね。

コマンドパネルを初めて作りましたが、
骨が折れるなあというのが正直なところです。
JSFLは書いて実行するだけですからね。。。

http://www.gskinner.com/products/panelpack1/gSearch.php

これが魅力的なのですが、$20の価値があるかどうか。。。

Posted by: Tanabe : August 31, 2007 01:07 AM

gSearch、
他の人が作ったFlashを修正しなきゃいけないときとかに
良さそうですね。
必要に迫られた時に、もう1回検討するくらいでいいような気もしますが。
あと、コマンドパネルは一度閉じて、開きなおすと更新されてた気がします。

Posted by: michi : August 31, 2007 12:16 PM

なんと、開き直すだけで良いんですね!
ユーザフォルダのWindowSWFを更新しても、NetConnection Debuggerが開いてしまったり、fxxkなバグに悩まされていました。
これは、Program Filesの方を更新して対処しました。

Posted by: Tanabe : August 31, 2007 01:46 PM