こんにちは、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)
この例ではIDiagramViewManagerにIEntitySelectionListenerを設定して、図要素の選択イベントを処理しています。
他のイベントも同様に処理できます。
- リスナ登録先
- 登録するリスナ
ダイアログ(JDialog)を使用しているのは、セレクションリスナを何かの拍子に外せるようにするためです。
このサンプルだと、ダイアログを閉じるタイミングでセレクションリスナを外しています。
拡張ビューは残念ながらスクリプトエディタから使用できません。
いろいろなスクリプトを書いて、より便利にastah*を使ってみてくださいね!