views 拡張機能を使用すると、プラグインの名前の付いたビューを定義することができます。名前付きビューには、ドッキング可能なパネルやモーダル ダイアログ ボックスなどがあります。名前付きビューを定義したら、このビューの名前を使用してプラグイン内の他の場所からこのビューを参照し、menu 拡張機能から開くなどの操作を実行できるようになります。別のプラグインから名前の付いたビューを開くこともできます。たとえば、標準のエディタ カラー ピッカー ダイアログ ボックスが別の独自のプラグインで定義されている場合も、このプラグインからダイアログ ボックスを表示することができます。
.stingray_plugin ファイル内で、それぞれの views 拡張機能に次の設定を行うことができます。
views = [
{
name = "project-manager"
type = "dialog"
path = "project-manager"
title = "Project Manager"
width = 910
height = 600
}
]
name
ビューの一意の名前です。この名前は、すべての Stingray プラグイン内で登録されているすべてのビューで一意である必要があります。別の拡張機能から、またはプラグイン内の JavaScript コードからビューを開く場合は、この名前を使用してビューを参照します。必須。
type
ビューのタイプです。dialog (通常はモーダル)、panel (ツール ウィンドウ)、または window (最上位のウィンドウ)のいずれかを指定できます。必須。
ビューをパネルとして登録する場合は、任意のタブ バーの + ボタンを使用することもできます。
エディタによってビューにロードされる HTML ファイルのパスおよびファイル名です。このパスは、.stingray_plugin ファイルの位置を基準に設定する必要があります。必須。
title
エディタのパネル タブまたはダイアログ ボックスのタイトル バーに表示されるビューのタイトルです。オプション。
width
ビューの初期の幅の既定値です(ピクセル単位)。オプション。
height
ビューの初期の高さの既定値です(ピクセル単位)。オプション。
menus 拡張機能を使用すると、名前の付いたビューで開かれた Stingrayt エディタ内に新しいメニュー項目を作成することができます。詳細については、「新規メニュー項目を作成する」を参照してください。開くビューの名前を指定するには、view プロパティを使用します。
Stingray の Window メニューの General カテゴリ内にあるツールのほとんどは、プラグインで登録された名前の付いたビューから取得されています。

stingray-editor.stingray_plugin ファイルはグローバル アクション open-view を設定します。プラグインのこのアクションを使用して、アクションを実行できる任意の場所から名前の付いたビューを開くことができます。
たとえば、次のコンテキスト アクション拡張機能は、ユーザが任意のアセットを右クリックするたびに、コンテキスト メニューに「Show Dependencies」というメニュー項目を追加します。このメニュー項目をクリックすると、dependency という名前のビューがエディタ内に開きます。
contextual_actions = [
{
type = "asset"
label = "Show Dependencies"
when = {
extension = "*"
}
do = [
"open-view \"dependency\""
]
}
]
extensions/views モジュールを使用すると、プラグインの JavaScript コード内の任意の場所からパネルを開くことができます。
// From dependency-actions.js
define([
'app',
'lodash',
'extensions/views',
'services/event-service'
], function (app, _, views, eventService) {
'use strict';
return {
showDependencies: function (dependencyPath) {
// use the views module to open a view called "dependency" passing this view a custom resource query parameter
return views.open('dependency', {}, {
resource: encodeURIComponent(dependencyPath)
});
}
};
});
ドッキング可能なパネルと同様に、extensions/views モジュールを使用して、プラグインの JavaScript コード内の任意の場所から、ダイアログ ボックスを開き、ユーザがダイアログ ボックスを閉じたときに返り値を戻すことができます。
~{js} // From asset-browser-controller.js function createNewFolder(uniqueDirectoryEntry) { return hostService.openModalTextInputDialog("Enter new folder name", uniqueDirectoryEntry.Filename); }
~~
// From host-service.js
define([
'app',
'lodash',
'extensions/views'
], function (app, _, views, eventService) {
'use strict';
return {
openModalTextInputDialog = function (title, defaultValue, options) {
// Open the dialog called "text-input-dialog"
return views.openDialog('text-input-dialog', {
title,
defaultValue,
settings: options
}).then(function (result) {
// When the dialog is closed, if its result is valid (dialog hasn't been canceled) returns the
// dialog result to the caller
if (result.accepted)
return result.result.TextValue;
});
}
};
});
エディタでカスタム ダイアログ ボックスを開くと、いくつかの便利な変数および関数がグローバルな window オブジェクトに挿入されます。これらを使用すると、プラグイン コードからのダイアログ ボックスの操作を簡易化することができます。
window.options
views.openDialog 関数に渡される 3 番目の引数です(存在する場合)。これを使用すると、ダイアログ ボックスを開くモジュールからプレーンな JSON オブジェクトを渡して、ダイアログ ボックスのコントローラから同じオブジェクトを選択することができます。
window.accept(result)
ダイアログ ボックスを閉じ、ダイアログ ボックスを開いたモジュールに result を戻します。ダイアログ ボックスは有効とみなされます。
window.reject(result)
ダイアログ ボックスを閉じ、ダイアログ ボックスを開いたモジュールに result を戻します。ダイアログ ボックスは拒否またはキャンセルされたとみなされます。
// From text-input-dialog.js
// Fetch initial values from the `views.openDialog` options parameter:
$scope.dataContext = {
TextValue: window.options.defaultValue
};
$document.on('keydown', function (evt) {
if (evt.keyCode === keycodes.KEYCODE_ENTER) {
// 'Enter' to accept
$scope.close(lastValidationState);
// Stop propagation
return false;
} else if (evt.keyCode === keycodes.KEYCODE_ESCAPE) {
// Discard dialog (cancelling it) on escape
window.reject('discarded');
// Stop propagation
return false;
}
return true;
});
$scope.close = function (accepted) {
if (accepted && lastValidationState) {
// Accept the dialog result passing back the TextValue in the dataContext object
return window.accept($scope.dataContext);
}
window.close();
};