CEPパネルのイベント
あまり知られていませんがExtensionには既存のブラウザー向けのイベントは勿論Adobeのソフトで動く専用のイベントも用意されています。 具体的にはドキュメントを閉じたり開けたりした時のイベントがあります。 ややこしいのですがPhotoshopの場合これとは別にPhotoshop専用のイベントが沢山用意されています。 本題に入る前にこれらのイベントの種類について解説します。
イベントの種類
AdobeのアプリケーションのCEPイベントについては大きく分けて三つあります。
- ブラウザーのイベント
- CEPパネルのイベント
- Photoshop専用のアプリケーション側のイベント
まず最初のブラウザーのイベントはすぐに理解できると思います。 いわゆるaddEventListenerメソッドでターゲットとなる要素に対してアクションが 行われた時(clickやmouseup)発火するイベントです。二番目が今回本題の csInterfaceオブジェクトから登録するイベントです。対応しているイベントの種類は アプリケーションによって異なりますが登録から発火のコールバックまで大体共通です。 三番目のPhotoshopのイベントですがこれはアプリケーションのイベントで実際にPhotoshop上の レイヤーが選択された時やトリミングされた時に発火するイベントです。 基本はExtendScript側から登録するイベントですが専用のコールバックを利用することで CEP側からも登録できます。 CEPパネルのイベントがおよそ6種類ほどしかないのに比べてPhotoshopの場合これに加えて CEPのイベントが数種類多くさらにアプリケーションのイベントは何十種類とあります。Photoshopはイベントだけでも できる事が全く違います。ちなみにイベントに関してはUXPにも引き継がれています。
具体的にどうやって登録するのか
ここからが本題です。どうやって登録するのかですがとても簡単です。webと同じくaddEventlistenerを使用します。 ただしターゲットのオブジェクトはcsInterfaceになります。以下、サンプルコード。
csinterfaceのインスタンスにaddEventlisternerを登録。 documentAfterActivateはPhotoshop上で何かしらのドキュメントが開かれたりしたアクティブになった時に発火するイベントです。 コールバックでイベントの情報のオブジェクトを返してくれます。以下各種イベントについて取り上げますが各種アプリケーション、OS環境で 確認しているわけではないので公式ドキュメントも合わせて必ず事前に動作するかテスト、確認してください。
documentAfterActivate
ドキュメントが開かれたりしたアクティブになった時に発火するイベント。公式のドキュメントではPhotoshopでは使えない事になっているがPhotoshopCC2022では動きました。 心配だったら後述のdocumentAfterDeactivateを使った方が良い
documentAfterDeactivate
ドキュメントを閉じたりした時に発火するイベントだと思うがdocumentAfterActivateと大差が無いように感じる。 フォーカスされているドキュメントが変わった時に発火するイベント。
applicationBeforeQuit
アプリケーションが終了する前に発火するらしい。 GitHubのドキュメントを見る限りほとんどのアプリでサポートしてないように見える。 PhotoshopCC2022で未保存のドキュメントがある状態でアプリケーションを終了したら 発火しました。
applicationActivate
アプリケーションが開かれた時に発火。IllustratorCC2022で発火確認。 PhotoshopCC2022では発火しなかった。
documentEdited
アプリケーション上のドキュメントが編集されたら発火。PhotoshopCC2022では発火したが IllustratorCC2022では発火しなかった。
documentAfterSave
ドキュメントが保存された後に発火。
com.adobe.csxs.events.AppOffline
アプリケーションがオフラインになった時に発火 (メニューから環境設定 > プラグイン > エクステンションのインターネット接続を許可をチェック時に発火)
com.adobe.csxs.events.AppOnline
アプリケーションがオンラインになった時に発火 (メニューから環境設定 > プラグイン > エクステンションのインターネット接続を許可をチェック時に発火)
com.adobe.csxs.events.ThemeColorChanged
テーマカラーが変更された時に発火 (メニューから環境設定 > インターフェイス > カラーテーマを変更)
com.adobe.csxs.events.WindowVisibilityChanged
Extensionパネルが出たり消えたりした時に発火
com.adobe.csxs.events.ExtensionLoaded
Extensionパネルが読み込まれた時に発火?多分
com.adobe.csxs.events.ExtensionUnloaded
Extensionパネルが読み込まれなかった時のイベント?多分。もしかしたら閉じた時のイベントかもしれません。すいませんよくわかっていません。
イベントの概念に関してはUXP以降も重要な要素になるでしょう。実際PhotoshopUXPにそのままイベント機能が搭載されています。
参考サイト
- Adobe CEP公式ドキュメント
- HTML Panels Tips: #12 CEP Application Events