イベント

フレーム、タブの開閉、ユーザーがマップに対して行った操作などのイベントについて、通知を受け取ることができます。

イベントの種類

  1. FrameEvent
  2. ReloadPluginEvent
  3. TabEvent
  4. UIExtensionEvent
  5. MapEvent (編集イベント)
  6. MapObjectSelectionEvent

FrameEvent

FrameEventは、jp.carabiner.inkpod.pi.PInkpod#addFrameListener() メソッドで登録された、FrameListenerオブジェクトを通して、通知されるイベントです。

FrameEventによって、Inkpodのウインドウが開いたこと、閉じたことを知ることができます。

importClass(Pacakges.jp.carabiner.inkpod.pi.event.FrameListener);

inkpod.addFrameListener(new FrameListener() {
    frameClosed : function (event) {
        // フレームが閉じた
        // event.frame 閉じたフレーム
    },
    frameOpend : function (event  {
        // 新しいフレームが開いた
        // event.frame 開いたフレーム
    }
});

関連するクラス/インタフェース

ReloadPluginEvent

ReloadPluginEventは、jp.carabiner.inkpod.pi.PInkpod#addReloadPluginListener() メソッドで登録された、ReloadPluginListenerオブジェクトを通して、通知されるイベントです。

ReloadPluginEventで、これからアプリが再読込されることを知ることができます。

アプリによっては、再読込をしてほしくない場合があります。その場合、ReloadPluginEvent#cancel() メソッドを呼び出すことで、再読込をキャンセルできます。

キャンセルするとき、理由等をメッセージダイアログ等で表示することもできます。

inkpod.addReloadPluginListener(function (event) {
   // アプリの再読込の通知
   event.cancel(); //再読込のキャンセル
});

関連するインタフェース・クラス

TabEvent

TabEventは、jp.carabiner.inkpod.pi.PInkpodFrame#addTabListener() メソッド登録された、TabListenerオブジェクトを通して、通知されるイベントです。

TabEventによって、タブが作られたこと、閉じたこと、また、タブ内部でマップがロードされたこと、アンロードされたことを知ることができます。

TabEventを受け取るには、フレームを取得して、そのaddTabListenerでTabListenerオブジェクトを登録する必要があります。

フレームは、ユーザーによって開かれたり閉じられたりするため、全てのフレームについてTabEventを受け取るには、FrameEventでフレームの開閉のイベントを受け取って、常にフレームにTabListenerが登録された状態を維持する必要があります。

具体的には、以下のようになります。

importClass(Packages.jp.carabiner.inkpod.pi.event.TabListener);
importClass(Packages.jp.carabiner.inkpod.pi.event.TabEvent);
importClass(Packages.jp.carabiner.inkpod.pi.event.FrameListener);
importClass(Packages.jp.carabiner.inkpod.pi.event.FrameEvent);

function init () {
   // 登録したいTabListener
    var tabListener = new TabListener() {
        tabCreated : function ( event ) {

        },
        tabClosed : function ( event ) {

        },
        modelLoaded : function ( event ) {

        },
        modelUnloaded : function ( event ) {

        },
    }
    
    // init関数の実行時に存在する全てのフレームに、TabListenerオブジェクトを登録
    var frames = inkpod.frames
    for(var i=0; i < frames.length; ++i) {
        frames[i].addTabListener(tabListener);
    }
    
    // init関数の終了後に開いたフレームにTabListenerオブジェクトを登録し、
    // 閉じたフレームからは登録を解除する
    inkpod.addFrameListener(new FrameListener() {
        frameOpened : function ( event ) {
            event.frame.addTabListener(tabListener);
        },
        frameClosed : function ( event ) {
            event.frame.removeTabListener(tabListener);
        }
    });
}

plugin = { 
    init : init,
    dispose : function() {}
};

関連するクラス/インタフェース

UIExtensionEvent

UIExtensionEventは、jp.carabiner.inkpod.pi.PInkpodUI#addUIExtensionListener() メソッドで登録された、UIExtensionListenerオブジェクトを通して、通知されるイベントです。

Inkpodがメニューを構築する際、アプリがメニューを拡張する機会であることを、アプリに通知するためのイベントです。

Inkpodは、起動時にメニューを構築する他、アプリの再読込などのタイミングでメニューを再構築することがあります。そのとき、アプリにアプリ独自のメニュー項目の追加を要求するために、このイベントが通知されます。

具体的な使い方は、メニュー項目の追加を参照してください。

inkpod.ui.addUIExtensionLsitener(function (event) {
    // ここでメニューを拡張する
});

MapEvent (編集イベント)

MapEventは、jp.carabiner.inkpod.pi.model.PMapModel#addMapListener() メソッドで登録された、MapListenerオブジェクトを通して、通知されるイベントです。

MapEventによって、マップ上での編集が行われたことを知ることができます。

編集イベントを受け取るには、マップのモデルを取得して、addMapListenerで、MapListenerオブジェクトを登録する必要があります。

TabEventと同様に、すべてのタブの編集内容について、編集イベントを受け取るには、フレームとタブの開閉のイベントを受け取って、常に全てタブのモデルに、MapListenerが登録された状態を維持する必要があります。

具体的には、以下のようにします。

importClass(Packages.jp.carabiner.inkpod.pi.event.TabListener);
importClass(Packages.jp.carabiner.inkpod.pi.event.FrameListener);
importClass(Packages.jp.carabiner.inkpod.pi.model.event.MapListener);

function init() {
    // 登録したい、MapListenerオブジェクト
    var mapListener = new MapListener() {
        objectAppended : function ( event ) {
            // オブジェクトが追加された
        },
        objectDepthChanged : function ( event ) {
            // オブジェクトの奥行きが変わった
        },
        objectDuplicated : function ( event ) {
            // オブジェクトが複製された
        },
        objectPasted : function ( event ) {
            // オブジェクトが貼り付けられた
        },
        preObjectRemoved : function ( event ) {
            // オブジェクトがこの後削除される
        },
        objectRemoved : function ( event ) {
            // オブジェクトが削除された
        },
        objectGrouped : function ( event ) {
            // オブジェクトがグループ化された
        },
        objectUngrouped : function ( event ) {
            // オブジェクトがグループ化解除された
        },
        objectPropertyChagned : function ( event ) {
            // オブジェクトのプロパティが変化した
        },
        shapePropertyChagned : function ( event ) {
            // シェイプのプロパティが変化した
        },
        undo : function ( event ) {
            // UNDOされた
        },
        redo : function ( event ) {
            // REDOされた
        },
    };
    
    // MapListenerオブジェクトを登録/解除するための、TabListenerオブジェクト
    var tabListener = new TabListener() {
        tabCreated : function (event) {
            event.model.addMapListener(mapListener);
        },
        tabClosed : function (event) {
            event.model.removeMapListener(mapListener);
        }
    };
    
    // init関数実行時に存在する全てのフレームに、TabListenerオブジェクトを登録し、
    // また、全てのモデルに、MapListenerを登録する
    var frames = inkpod.frames
    for(var i=0; i<frames.length; ++i) {
        frames[i].addTabListener(tabListener);
        var models = frames[i].models;
        for(var j=0; j<models.length; ++j) {
            models[j].addMapListener(mapListener);
        }
    }
    
    // init関数の終了後に開いたフレームにTabListenerオブジェクトを登録し、
    // 閉じたフレームからは登録を解除する
    inkpod.addFrameListener(new FrameListener() {
        frameOpened : function ( event ) {
            event.frame.addTabListener(tabListener);
        },
        frameClosed : function ( event ) {
            event.frame.removeTabListener(tabListener);
        }
    });
}

plugin = {
    init : init,
    dispose : function() {}
}

MapEventの種類

編集操作の種類によって、MapListenerインタフェースのそれぞれ違うメソッドが呼ばれます。

どのメソッドが呼ばれた場合でも、MapEventオブジェクトが引数として渡されます。ただし、編集操作の種類によって、MapEventオブジェクトのプロパティの意味が異なります。

全ての編集操作で共通のプロパティ

model (PMapModel)編集されたマップのモデル
type (int)編集の種類を表す整数値MapEvent.OBJECT_APPENDED, MapEvent.OBJECT_REMOVED 等です。詳細は以下のjavadocを参照してくださいjp.carabiner.inkpod.carabiner.inkpod.pi.model.event.MapEvent

objectAppended

オブジェクトが追加されたときに呼び出されます。

MapEventオブジェクトのプロパティ

object追加されたオブジェクト
triggetEventオブジェクトを追加する操作のきっかけとなったイベント java.awt.InputEventオブジェクトです

objectDepthChanged

オブジェクトの奥行きが変化したときに呼び出されます。

MapEventオブジェクトのプロパティ

objects奥行きが変化したオブジェクトの配列

objectDuplicated

オブジェクトが複製された時、呼び出されます。

MapEventオブジェクトのプロパティ

objects複製され、新しく追加されたオブジェクトの配列

objectPasted

オブジェクトが貼りつけられた時に呼び出されます。

MapEventオブジェクトのプロパティ

objects貼り付けられたオブジェクトの配列

preObjectRemoved

これからオブジェクトが削除される時に呼び出されます。

MapEventオブジェクトのプロパティ

objectsこれから削除されるオブジェクトの配列

objectRemoved

オブジェクトが削除されたときに呼び出されます。

MapEventオブジェクトのプロパティ

objects削除されたオブジェクトの配列

objectGrouped

オブジェクトがグループ化されたときに呼び出されます。

MapEventオブジェクトのプロパティ

objectグループ化されたグループ化オブジェクト

objectUngrouped

グループ化オブジェクトがグループ化解除したときに呼び出されます。

objectPropertyChanged

PMapObjectオブジェクトのプロパティの変化を知ることができます。

MapEventオブジェクトのプロパティ

objectプロパティが変更されたオブジェクト
propertyChagneEventプロパティの変更を知らせるPropertyChangeEventオブジェクト

shapePropertyChanged

シェイプのプロパティが変更されたときに呼び出されます。

PMapObject#getShape() で得られるPObjectShapeオブジェクトのプロパティが変化を知ることができます。

MapEventオブジェクトのプロパティ

objectシェイプのプロパティが変更されたオブジェクト
propertyChagneEventプロパティの変更を知らせるPropertyChangeEventオブジェクト

undo

「元に戻す」操作が行われたときに呼び出されます。

redo

「やり直し」操作が行われたときに呼び出されます。

関連するクラス/インタフェース

MapObjectSelectionEvent

MapObjectSelectionEventは、jp.carabiner.inkpod.pi.model.PMapModel.addMapObjectSelectionListener() メソッドで登録された、MapObjectSelectionListenerオブジェクトを通して、通知されるイベントです。

ユーザーが選択しているオブジェクトが変化したことを、知ることができます。

MapEventと同様に、すべてのタブで選択状態の変化を知りたい場合、タブのモデルにMapObjectSelectionListenerを登録されている状態を維持する必要があります。方法は、MapEventの場合と同じ方法ですので、そちらを参照してください。

var model = ...    // PMapModelオブジェクトがすでに得られていると仮定して…

model.addMapObjectSelectionListener(function ( event ) {
    // event.model  でマップのモデルが得られる
});

関連するクラス/インタフェース