プラグインの使い方・作り方

プラグインのインストール方法

BEITELでは、プラグインにより機能拡張をおこなうことができます。
配布されているプラグインをインストールする場合には、以下の操作を行ってください。
  1. (BEITELをインストールしたフォルダ)\extにプラグインのファイルをコピーする

  2. BEITELを起動する
    既に起動している場合は、一度終了し再起動してください。

正しくプラグインがインストールされている場合、メニューに機能が追加されます。
具体的にどのような機能が追加されるか、その使用方法はプラグインのドキュメントを参照してください。

オリジナルプラグインの作成方法

BEITELのプラグインは、以下の手順で作成することができます。
  1. (BEITELをインストールしたフォルダ)\extにプラグインのメインとなるJavaScriptファイルを作成する
    このファイルは、BEITELがウィンドウを開く際に実行されます。文字コードはUTF-8で作成してください。

    (サンプル)
    Hello Worldサンプル([編集]メニューに[Hello]メニューを追加します。クリックするとメッセージボックスで"Hello, World!"と出力します):
    var item = window.menu.createMenuItem("Hello",
                            function(ev){ alert("Hello, World!"); });
    window.menu.edit.appendChild(item);
    

  2. 必要に応じて、Javaコード・画像などの外部ファイルを作成し、jarファイルにまとめてext以下に配置する
    BEITELのJavaクラスを使用したい場合は、開発中はクラスパス内に(BEITELをインストールしたフォルダ)\lib\beitel.jarを含めるようにしてください。
  3. BEITELを起動する
    (すでにBEITELが起動している場合)
    jarファイルの変更がなく、JavaScriptファイルの変更のみの場合は、[ウィンドウを再オープン]で再読み込みされます。
    jarファイルの変更がある場合は、一度全ウィンドウを終了し再起動してください。

プラグインから呼び出し可能なAPI

グローバルオブジェクト

window

機能

現在スクリプトが実行されているウィンドウに対応するフレームを表現します。

プロパティ

menu ウィンドウのメニューバーを表現するオブジェクトです。読み込みのみ可能です。
Menuタイプのオブジェクトです。
popup ノードでの右クリック時メニューを表現するオブジェクトです。読み込みのみ可能です。
Menuタイプのオブジェクトです。
swingFrame フレームに対応するSwingオブジェクトです。読み込みのみ可能です。
javax.swing.JFrameのインスタンスです。
selectedNodes 選択されているノードのリストです。読み込みのみ可能です。
ノードが選択されていない場合はnull、それ以外はNodeListタイプのオブジェクトです。
toplevelSelectedNodes 選択されているノードのうち、トップレベル(これ以上選択されている親がない)ノードです。読み込みのみ可能です。
ノードが選択されていない場合はnull、それ以外はNodeListタイプのオブジェクトです。

document

機能

現在ウィンドウで開かれているドキュメントを表現します。

プロパティ

rootNode ドキュメントのルートとなるノードです。読み込みのみ可能です。
TreeNodeタイプのオブジェクトです。
nodeStyles ノードスタイル(文字色・背景色)を表現するノードです。
NodeStyleListタイプのオブジェクトです。
columnHeaders カラムヘッダの一覧を示す配列です。
読み込みのみ可能です。(カラムヘッダの追加などはできません。)
Arrayタイプのオブジェクトです。要素にはColumnHeaderタイプのオブジェクトが格納されます。
filename 現在開いているZTEファイルの名前を示す文字列です。読み込みのみ可能です。
ファイルを開いていない場合はnullが返されます。
filepath 現在開いているZTEファイルが格納されているディレクトリのパスを示す文字列です。読み込みのみ可能です。
ファイルを開いていない場合はnullが返されます。

関数プロパティ

createTreeNode(String)
機能 ツリーノードを新規作成します。
引数
  • ノード文字列
    ノードに設定する文字列を指定します。
戻り値 ツリーノードが返されます。
サンプル
var treeNode = document.createTreeNode("ノード名");
document.rootNode.appendChild(treeNode);

グローバル関数

alert(String)
機能 メッセージボックスを表示します。
引数
  • メッセージ
    出力するメッセージを指定します。
戻り値 なし
サンプル
alert("テストです!");
importFile(String)
機能 外部jsファイルをインポートします。
引数
  • パス
    インポートしたい.jsファイルのパス。
    extディレクトリを起点とした相対パスで指定してください。
戻り値 なし
createNewWindow()
機能 新しいウィンドウを開きます。
引数 なし
戻り値 なし

オブジェクトの型

Menu

機能

メニューを表現します。

プロパティ

file ファイルメニューです。読み込みのみ可能です。
MenuContainerタイプのオブジェクトです。
edit 編集メニューです。読み込みのみ可能です。
MenuContainerタイプのオブジェクトです。
help ヘルプメニューです。読み込みのみ可能です。
MenuContainerタイプのオブジェクトです。
childNodes 子ノードのリストです。読み込みのみ可能です。
NodeListタイプのオブジェクトです。

関数プロパティ

createMenuItem(String,Function)
機能 新規にメニューアイテムを作成します。
引数
  • メニュー項目名
    メニュー項目として表示する名前を指定します。
  • ハンドラ
    メニュー選択時に実行する処理を指定します。
    このハンドラにはMenuEventタイプのオブジェクトが引数として渡されます。
戻り値 メニューアイテムが返されます。
MenuItemタイプのオブジェクトです。
サンプル
var comp = window.menu.createMenuItem("メニュー1",
                                           function(ev){alert("メニュー1");});
window.menu.file.appendChild(comp);
createMenuContainer(String)
機能 新規にメニューコンテナを作成します。
引数
  • メニュー項目名
    メニュー項目として表示する名前を指定します。
戻り値 メニューコンテナが返されます。
MenuContainerタイプのオブジェクトです。
サンプル
var container = window.menu.createMenuContainer("メニュー2");
window.menu.file.appendChild(container);
var comp = window.menu.createMenuItem("メニュー2アイテム",
                                 function(ev){alert("メニュー2");});
container.appendChild(comp);
createSeparator()
機能 新規に区切り線を作成します。
引数
戻り値 区切り線が返されます。
Componentタイプのオブジェクトです。
サンプル
var comp = window.menu.createSeparator();
window.menu.file.appendChild(comp);
appendChild(node)
機能 メニューバーにアイテムを追加します。
引数
  • 新規アイテム
    メニューバーに追加するアイテムを指定します。
    MenuContainerタイプのオブジェクトを指定することができます。
戻り値 追加されたアイテムが返されます。
insertBefore(newNode, refNode)
機能 メニューバーの指定位置にアイテムを追加します。
引数
  • 新規アイテム
    メニューバーに追加するアイテムを指定します。
    MenuContainerタイプのオブジェクトを指定することができます。
  • 追加先アイテム
    メニュー項目の追加先を指定します。
戻り値 追加されたアイテムが返されます。
removeChild(node)
機能 メニューバーから指定されたアイテムを削除します。
引数
  • 削除するアイテム
    メニューバーから削除するアイテムを指定します。
戻り値 削除されたアイテムが返されます。

MenuItem

機能

メニューアイテムを表現します。

プロパティ

icon アイコンとなるファイルを指定します。設定のみで取得はできません。
ファイルはjarファイル内に格納され、クラスパス(beitel.exeのあるディレクトリのlibもしくはext以下)内に存在する必要があります。
key ショートカットキーのキーコードを取得します。読み込みのみ。
java.awt.event.KeyEvent.VK_*で示されるキーコードが格納されます。ショートカットキーが指定されていない場合は0です。
modifier ショートカットキーのAlt,Ctrlなどの修飾子を取得します。読み込みのみ。
java.awt.event.InputEvent.SHIFT_DOWN_MASKなどの修飾子の論理和が格納されます。ショートカットキーが指定されていない場合は0です。
text メニューのテキストを設定・取得します。
tooltips メニューのツールチップを設定・取得します。

関数プロパティ

setKeyStroke(Number,Number)
機能 ショートカットキーを指定します。
引数
  • キーコード
    ショートカットのキーコードを指定します。
    keyプロパティに対応します。
  • 修飾子
    ショートカットの修飾子を指定します。
    modifierプロパティに対応します。
戻り値 なし
サンプル
var comp = window.menu.createMenuItem("メニュー3",
                                           function(ev){alert("メニュー3");});
comp.setKeyStroke(java.awt.event.KeyEvent.VK_H,
                java.awt.Event.SHIFT_MASK|java.awt.Event.CTRL_MASK);
window.menu.file.appendChild(comp);

MenuEvent

機能

メニュー選択時のイベントを表現します。

プロパティ

currentTarget イベントの発生元のノードを取得します。読み込みのみ。
TreeNodeタイプのオブジェクトです。

関数プロパティ

なし

MenuContainer

機能

メニューコンテナ(子メニューを持つことができるメニュー)を表現します。

プロパティ

icon アイコンとなるファイルを指定します。設定のみで取得はできません。
ファイルはjarファイル内に格納され、クラスパス(beitel.exeのあるディレクトリのlibもしくはext以下)内に存在する必要があります。
key ショートカットキーのキーコードを取得します。読み込みのみ。
java.awt.event.KeyEvent.VK_*で示されるキーコードが格納されます。ショートカットキーが指定されていない場合は0です。
modifier ショートカットキーのAlt,Ctrlなどの修飾子を取得します。読み込みのみ。
メニューコンテナの場合この値は常に0です。
text メニューのテキストを設定・取得します。
tooltips メニューのツールチップを設定・取得します。
childNodes 子ノードのリストです。読み込みのみ可能です。
NodeListタイプのオブジェクトです。

関数プロパティ

appendChild(node)
機能 メニューコンテナにアイテムを追加します。
引数
  • 新規アイテム
    メニューコンテナに追加するアイテムを指定します。
    MenuContainerタイプもしくはMenuItemタイプのオブジェクトを指定することができます。
戻り値 追加されたアイテムが返されます。
insertBefore(newNode, refNode)
機能 メニューコンテナの指定位置にアイテムを追加します。
引数
  • 新規アイテム
    メニューコンテナに追加するアイテムを指定します。
    MenuContainerタイプもしくはMenuItemタイプのオブジェクトを指定することができます。
  • 追加先アイテム
    メニュー項目の追加先を指定します。
戻り値 追加されたアイテムが返されます。
removeChild(node)
機能 メニューコンテナから指定されたアイテムを削除します。
引数
  • 削除するアイテム
    メニューコンテナから削除するアイテムを指定します。
戻り値 削除されたアイテムが返されます。
setKeyStroke(Number,Number)
機能 ショートカットキー(Alt+キーコード)を指定します。
引数
  • キーコード
    ショートカットのキーコードを指定します。
    keyプロパティに対応します。
  • 修飾子
    ショートカットの修飾子を指定します。
    MenuItemタイプとインタフェースを共通にするために用意してある引数です。この値には常に0を指定する必要があります。
戻り値 なし
サンプル
var container = window.menu.createMenuContainer("メニュー4(T)");
container.setKeyStroke(java.awt.event.KeyEvent.VK_T, 0);
window.menu.file.appendChild(container);
var comp = window.menu.createMenuItem("メニュー4アイテム",
                                 function(ev){alert("メニュー4");});
container.appendChild(comp);

TreeNode

機能

ドキュメントを構成するノードを表現します。

プロパティ

text ノードの文字列です。
number ノードの番号です。読み込みのみ可能です。
updateTime ノードの更新日時です。
1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数値です。
createTime ノードの作成日時です。
1970 年 1 月 1 日 00:00:00 GMT からのミリ秒数値です。
expand ノードが展開されているかどうかを示すBoolean値です。
ノードが展開されていればtrue、それ以外はfalseです。
selected ノードが選択されているかどうかを示すBoolean値です。
ノードが選択されていればtrue、それ以外はfalseです。
nodeType ノードがトピックであるかどうかを示すString値です。
ノードがトピックであれば"topic"、それ以外は"text"です。
foreground 文字色を示すjava.awt.Colorオブジェクトです。
このノードに文字色が指定されていれば文字色を示すjava.awt.Colorオブジェクト、指定されていない場合はnullです。
background 背景色を示すjava.awt.Colorオブジェクトです。
このノードに背景色が指定されていれば背景色を示すjava.awt.Colorオブジェクト、指定されていない場合はnullです。
imageData 画像データを取得するための入力ストリームを取得します。読み込みのみ可能です。
java.io.InputStreamのインスタンスです。このノードに画像が設定されていない場合はnullです。
imageFilename 画像データのファイル名を取得します。読み込みのみ可能です。
このノードに画像が設定されていればファイル名を示す文字列、設定されていない場合はnullです。
childNodes 子ノードのリストです。読み込みのみ可能です。
NodeListタイプのオブジェクトです。

関数プロパティ

appendChild(node)
機能 ノードに子ノードを追加します。
引数
  • 新規ノード
    このノードに追加するノードを指定します。
    TreeNodeタイプのオブジェクトを指定することができます。
戻り値 追加されたノードが返されます。
insertBefore(newNode, refNode)
機能 ノードの指定位置に子ノードを追加します。
引数
  • 新規ノード
    このノードに追加するノードを指定します。
    TreeNodeタイプのオブジェクトを指定することができます。
  • 追加先ノード
    ノードの追加先を示すノード指定します。
戻り値 追加されたノードが返されます。
removeChild(node)
機能 このノードから指定されたノードを削除します。
引数
  • 削除するノード
    ノードから削除するノードを指定します。
戻り値 削除されたノードが返されます。
setImage(String,InputStream)
機能 このノードに画像を設定します。
2つの引数にnullを指定することで、このノードに対する画像指定を解除することができます。
引数
  • ファイル名
    画像ファイル名を指定します。
    画像を解除する場合はnullを指定してください。
  • 画像データ
    画像データを供給する入力ストリームを指定してください。
    java.io.InputStreamのインスタンスを指定してください。
    画像を解除する場合はnullを指定してください。
戻り値 なし
getColumn(int)
機能 このノードに付随するカラムを取得します。
引数
  • カラムのインデックス
    カラムのインデックスを指定します。
    インデックスは0,1,2,...の順番に左から右に付与されます。
戻り値 カラムを表現するColumnオブジェクトが返されます。

ColumnHeader

機能

カラムのヘッダ部分を表現します。

プロパティ

text カラムヘッダに表示する文字列です。
visible カラムヘッダが表示状態であるかどうかを示すBoolean値です。
表示状態であればtrue、非表示状態であればfalseとなります。
width カラムヘッダの幅です。

Column

機能

ノードに付随するカラムを表現します。

プロパティ

text カラムの文字列です。

NodeList

機能

ドキュメントを構成するノード、メニューなどの構成要素のリストを表現します。

プロパティ

length リストの長さです。読み込みのみ可能です。

関数プロパティ

item(Number)
機能 ノードから要素を取得します。
Arrayと同様、[Number]によりアイテムを取得することも可能です。
引数
  • インデックス
    取得したい要素のインデックスを指定します。
戻り値 指定されたインデックスに対応する要素が返されます。

NodeStyleList

機能

ノードスタイルのリストを表現するオブジェクトです。

プロパティ

length ノードスタイルの数を示すNumber値です。読み込みのみ。

関数プロパティ

add(name, foreground, background)
機能 ノードスタイル定義を追加します。
引数
  • ノードスタイル名
    ノードスタイルの名前を指定します。
    String値を指定することができます。
  • 文字色
    文字色を指定します。
    java.awt.Colorオブジェクトを指定することができます。指定しない場合はnullです。
  • 背景色
    背景色を指定します。
    java.awt.Colorオブジェクトを指定することができます。指定しない場合はnullです。
戻り値 特にありません。
findByName(name)
機能 ノードスタイル定義を検索します。
引数
  • ノードスタイル名
    検索したいノードスタイルの名前を指定します。
    String値を指定することができます。
戻り値 検索結果のノードスタイル。見つからない場合はnullが返されます。
get(index)
機能 ノードスタイル定義を取得します。
引数
  • ノードインデックス
    取得したいノードスタイルのインデックスを指定します。
    Number値を指定することができます。
戻り値 インデックスに対応するノードスタイル。インデックスの値が定義されている個数以上の場合はエラーがスローされます。
remove(index)
機能 ノードスタイル定義を削除します。
引数
  • ノードインデックス
    取得したいノードスタイルのインデックスを指定します。
    Number値を指定することができます。
戻り値 特にありません。
set(index, name, foreground, background)
機能 ノードスタイル定義を更新します。
引数
  • ノードインデックス
    更新したいノードスタイルのインデックスを指定します。
    Number値を指定することができます。
  • ノードスタイル名
    ノードスタイルの名前を指定します。
    String値を指定することができます。
  • 文字色
    文字色を指定します。
    java.awt.Colorオブジェクトを指定することができます。指定しない場合はnull。
  • 背景色
    背景色を指定します。
    java.awt.Colorオブジェクトを指定することができます。指定しない場合はnull。
戻り値 特にありません。

NodeStyle

機能

ノードスタイルを表現するオブジェクトです。

プロパティ

name ノードスタイル名を示すString値です。読み込みのみ。
foreground 文字色を示すjava.awt.Colorオブジェクトです。読み込みのみ。
未指定の場合はnullです。
background 背景色を示すjava.awt.Colorオブジェクトです。読み込みのみ。
未指定の場合はnullです。

Javaクラス

jp.carabiner.treeeditor.js.JSRunnerクラス

機能

プラグインの実行に必要な各種機能を提供します。

取得方法

JSRunnerオブジェクトはwindowグローバルオブジェクトから取得できます。
import jp.carabiner.treeeditor.js.JSRunner;

...

// JSRunnerオブジェクトはwindowグローバルオブジェクトから取得できます。
JSRunner runner = window.getCore().getJSRunner();

メソッド

void invokeAndWait(jp.carabiner.treeeditor.js.JSRunnable)
機能 JavaScript実行コンテキストを新規作成し、処理を実行します。
モデルに変更を加える場合は、jp.carabiner.treeeditor.js.JSRunnableインタフェースを実装し、このメソッドを通じて非同期的に実行しなければなりません。
引数
  • 実行タスク
    実行したいタスクを指定します。
    タスクは、jp.carabiner.treeeditor.js.JSRunnableインタフェースを実装する必要があります。
    タスク内では、JavaScriptコンテキストを取得することができ、jp.carabiner.treeeditor.js.JSUtilsユーティリティクラスを通じてwindowグローバルオブジェクト、documentグローバルオブジェクトを取得することが可能です。
戻り値 なし
サンプル JSRunnableの実装例
import jp.carabiner.treeeditor.js.JSRunnable;
import jp.carabiner.treeeditor.js.JSUtils;
import jp.carabiner.treeeditor.js.JSWindow;
import jp.carabiner.treeeditor.js.JSDocument;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

...

public class JSSampleTask implements JSRunnable {
    public void run(Context context, Scriptable scope) {
        JSDocument document = JSUtils.getJSDocument(scope);
        JSWindow window = JSUtils.getJSWindow(scope);
        
        // 処理
        ...
    }
}
JSRunnerの取得、実行例
import jp.carabiner.treeeditor.js.JSRunner;

...

// windowグローバルオブジェクトはあらかじめ保持しておく
JSRunner runner = window.getCore().getJSRunner();
runner.invokeAndWait(new JSSampleTask());

jp.carabiner.treeeditor.js.JSRunnableインタフェース

機能

JavaScriptのタスクを表現するインタフェースです。
非同期に実行したい処理がある場合はこのインタフェースを実装し、jp.carabiner.treeeditor.js.JSRunnerを通じて実行する必要があります。

メソッド

void run(org.mozilla.javascript.Context, org.mozilla.javascript.Scriptable)
機能 タスクを実行します。
引数
  • コンテキスト
    Rhino(JavaScriptエンジン)のコンテキストです。
  • スコープ
    Rhino(JavaScriptエンジン)のスコープです。
    このオブジェクトを通じて、グローバルオブジェクトを取得することができます。
戻り値 なし
サンプル
import jp.carabiner.treeeditor.js.JSRunnable;
import jp.carabiner.treeeditor.js.JSUtils;
import jp.carabiner.treeeditor.js.JSWindow;
import jp.carabiner.treeeditor.js.JSDocument;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

...

public class JSSampleTask implements JSRunnable {
    public void run(Context context, Scriptable scope) {
        JSDocument document = JSUtils.getJSDocument(scope);
        JSWindow window = JSUtils.getJSWindow(scope);
        
        // 処理
        ...
    }
}

jp.carabiner.treeeditor.js.JSUtilsクラス

機能

JavaScriptの処理に関するユーティリティクラスです。

メソッド

static jp.carabiner.treeeditor.js.JSWindow getJSWindow(org.mozilla.javascript.Scriptable)
機能 スコープにひもづけられたwindowグローバルオブジェクトを取得します。
引数
  • スコープ
    Rhino(JavaScriptエンジン)のスコープです。
戻り値 windowグローバルオブジェクト。
static jp.carabiner.treeeditor.js.JSDocument getJSDocument(org.mozilla.javascript.Scriptable)
機能 スコープにひもづけられたdocumentグローバルオブジェクトを取得します。
引数
  • スコープ
    Rhino(JavaScriptエンジン)のスコープです。
戻り値 documentグローバルオブジェクト。