astah*で使えるスクリプトにリスナ登録してみよう

こんにちは、astah*開発チームのりりぃです。
今回はリスナ登録を行ってリアクティブに動くスクリプトの例をご紹介したいと思います。

まずは下記スクリプトをスクリプトエディタで実行してみてください。
タイトルと書かれたダイアログが表示されます。
ダイアログを閉じるまで、図要素を選択する度にその図要素の名前がスクリプトエディタの実行結果コンソールに表示されます。

// Javaのクラスを使うための宣言
var JDialog = Java.type('javax.swing.JDialog')
var IEntitySelectionListener = Java.type('com.change_vision.jude.api.inf.view.IEntitySelectionListener')
var WindowListener = Java.type('java.awt.event.WindowListener')

// astah*のメインフレームを親としてダイアログを作成
var dialogTitle = "title"
var viewManager = astah.getViewManager()
var astahFrame = viewManager.getMainFrame()
var dialog = new JDialog(astahFrame, dialogTitle)
dialog.setAlwaysOnTop(true)
dialog.pack()
dialog.setLocationRelativeTo(astahFrame);
dialog.setVisible(true)

// ダイアグラムビューマネージャーにセレクションリスナを登録
var diagramViewManager = viewManager.getDiagramViewManager()
var listener = new IEntitySelectionListener() {
    entitySelectionChanged : function(e) {
        Java.from(diagramViewManager.getSelectedPresentations()).forEach(
            function (selectedP) {
                print(selectedP.getLabel())
            }
        )
    }
}
diagramViewManager.addEntitySelectionListener(listener)

// ダイアログを閉じたときにセレクションリスナを外すためにウィンドウリスナを登録
var windowListener =  new WindowListener() {
    windowOpened : function(e) {},
    windowClosing : function(e) {
        diagramViewManager.removeEntitySelectionListener(listener)
    },
    windowOpened : function(e) {},
    windowClosed : function(e) {},
    windowIconified : function(e) {},
    windowDeiconified : function(e) {},
    windowActivated : function(e) {},
    windowDeactivated : function(e) {}
}
dialog.addWindowListener(windowListener)

この例ではIDiagramViewManagerIEntitySelectionListenerを設定して、図要素の選択イベントを処理しています。
他のイベントも同様に処理できます。

ダイアログ(JDialog)を使用しているのは、セレクションリスナを何かの拍子に外せるようにするためです。
このサンプルだと、ダイアログを閉じるタイミングでセレクションリスナを外しています。
拡張ビューは残念ながらスクリプトエディタから使用できません。

いろいろなスクリプトを書いて、より便利にastah*を使ってみてくださいね!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s