アクションパネル内のコードを上下移動・複製させるjsfl

flashのアクションパネルでeclipseのようにコードを

  • 上に複製
  • 下に複製
  • 上に移動
  • 下に移動

するようなことってできるかなぁとチャレンジしてみた。
一応動くけど怪しいとこもあります。まあチャレンジってことで。
actionsPanelオブジェクトに行番号とか現在位置を返すものがなくていじくるのが結構めんどくさい。
winXPで確認してます。CS3からしか動きません。

使い方は
行番号のあたりをクリックして行を選択したらコマンドを実行してください。
ショートカット登録しておくと良いでしょう。

まとめてダウンロードできます。eclipse_code.zip

以下中身

moveUp.jsfl

//選択1行を格納
var seltxt = fl.actionsPanel.getSelectedText();

//選択解除
fl.actionsPanel.setSelection(0,0);
//全体のコピー
var txt=fl.actionsPanel.getText();

//選択開始位置
var no=txt.indexOf(seltxt);

//最初から選択開始位置までの文字
var t1=txt.slice(0,no)

//1行前の改行位置を取る
var no2=t1.slice(0,no-1).lastIndexOf("\n");
//alert(" no2:"+no2+" no:"+no+";"+((no-1)-no2))

//前行を選択
fl.actionsPanel.setSelection(no2+1,(no-1)-no2);
//文字列取得
var beftxt = fl.actionsPanel.getSelectedText();

//上下の行をあわせて選択
fl.actionsPanel.setSelection(no2+1,(no-1)-no2+seltxt.length);
//上下入れ替える
if (fl.actionsPanel.hasSelection()) {
    fl.actionsPanel.replaceSelectedText(seltxt+beftxt);
}

//元の選択文字にフォーカス
fl.actionsPanel.setSelection(no2+1,seltxt.length);

moveDown.jsfl

//選択行を格納
var seltxt = fl.actionsPanel.getSelectedText();

//選択解除
fl.actionsPanel.setSelection(0,0);
//全体のコピー
var txt=fl.actionsPanel.getText();

//選択開始位置
var no=txt.indexOf(seltxt);
//var no=txt.lastIndexOf(seltxt);

//選択行末から最後までの文字
var t2=txt.slice(no+seltxt.length,txt.length)

//1行後ろの改行位置を取る
var no2=txt.slice(no+seltxt.length+1,txt.length).indexOf("\n");
//alert(" no2:"+no2+" no:"+no+";")

//後ろの行を選択
fl.actionsPanel.setSelection(no+seltxt.length,no2+2);
//文字列取得
var foltxt = fl.actionsPanel.getSelectedText();

//上下の行をあわせて選択
fl.actionsPanel.setSelection(no,seltxt.length+foltxt.length);
//上下入れ替える
if (fl.actionsPanel.hasSelection()) {
   fl.actionsPanel.replaceSelectedText(foltxt+seltxt);
}

//元の選択文字にフォーカス
fl.actionsPanel.setSelection(no+foltxt.length,seltxt.length);

duplicateUp.jsfl

//選択行を格納
var apText = fl.actionsPanel.getSelectedText();

//選択解除
fl.actionsPanel.setSelection(0,0);
//全体のコピー
var txt=fl.actionsPanel.getText();
//行ごとに配列に突っ込む
var arr=txt.split("\n");
//判定
var no=txt.indexOf(apText);
//最初から判定場所まで
var t1=txt.slice(0,no)
//判定場所から最後まで
var t2=txt.slice(no,txt.length)
//合体してペースト
fl.actionsPanel.setText(t1 + apText + t2)
//選択位置を設定
fl.actionsPanel.setSelection(txt.indexOf(apText),apText.length);

duplicateDown.jsfl

//選択行を格納
var apText = fl.actionsPanel.getSelectedText();
//選択解除
fl.actionsPanel.setSelection(0,0);
//全体のコピー
var txt=fl.actionsPanel.getText();
//行ごとに配列に突っ込む
var arr=txt.split("\n");
//判定
var no=txt.lastIndexOf(apText);
//最初から判定場所まで
var t1=txt.slice(0,no)
//判定場所から最後まで
var t2=txt.slice(no,txt.length)
//合体してペースト
fl.actionsPanel.setText(t1 + apText + t2)
//選択位置を設定
fl.actionsPanel.setSelection(no+apText.length,apText.length);

関連する記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

名前 *