ご使用のプラグインは、デコレーターを使用して、 ワークベンチ・ビューに表示されるリソースおよび他のオブジェクトのイメージに注釈を付けることができます。 デコレーターは、プラグインが既存のリソース・タイプのために機能性を追加するときに役立ちます。 標準のワークベンチ・ビューの多くは、デコレーションの表示に関係します。
例えば、PDE には、ユーザーがバイナリーおよびソース・プロジェクトを識別できるデコレーターが組み込まれます。
com.example.sourceProject プロジェクトは、ナビゲーターに表示される唯一のソース・プロジェクトです。 すべての他のバイナリー・プロジェクトが、バイナリー・デコレーターをプロジェクト・アイコンの左上に表示する方法に注意してください。 このデコレーターは、org.eclipse.ui.decorators 拡張ポイントを使用して、PDE によって組み込まれます。
<extension point="org.eclipse.ui.decorators"> <decorator lightweight="true" quadrant="TOP_LEFT" adaptable="true" label="%decorator.label" icon="icons/full/ovr16/binary_co.gif" state="false" id="org.eclipse.pde.ui.binaryProjectDecorator"> <description> %decorator.desc </description> <enablement> ... </enablement> </decorator> </extension>
デコレーター・インプリメンテーションを提供する方法はいくつかあります。 このマークアップは、最も簡単な方法 (宣言型ライト・ウェイト・デコレーターと呼ばれる) を 使用します。 宣言型ライト・ウェイト・デコレーターが定義されている場合、マークアップには、 デコレーターのアイコン、配置、および使用可能化の条件に関する完全な記述が含まれます。 宣言型デコレーターは、ラベルの装飾にアイコンのみが使用されるときに役立ちます。 プラグインは、デコレーターが通常のアイコンとオーバーレイ用のアイコンで オーバーレイされる 4 等分画面 (quadrant) のみを指定する必要があります。 図にあるように、PDE バイナリー・アイコンは、パッケージ・アイコンの左上の 4 等分画面に オーバーレイされます。
プラグインがアイコンの他にラベル・テキストを操作しなければならない場合、またはアイコンのタイプが動的に 決定される場合、非宣言型ライト・ウェイト・デコレーターを使用できます。 この場合、ILightweightLabelDecorator を インプリメントするインプリメンテーション・クラスを定義する必要があります。 指定されたクラスは、ラベルに適用される接頭部、接尾部、およびオーバーレイ・イメージを、 実行時に提供する必要があります。 接頭部と接尾部をラベル・テキストで連結し、オーバーレイを実行するメカニズムは、 バックグラウンド・スレッドでワークベンチ・コードによって扱われます。 このように、プラグインによってその ILightweightLabelDecorator インプリメンテーションで 行われる作業は、UI スレッド対応でなければなりません。 (詳細については、『非 UI スレッドからのコードの実行』を参照してください。)
次のマークアップは、CVS クライアントが上記の技法を使用してデコレーターを定義する方法を示します。
<extension point="org.eclipse.ui.decorators"> <decorator objectClass="org.eclipse.core.resources.IResource" adaptable="true" label="%DecoratorStandard.name" state="false" lightweight= "true" quadrant = "BOTTOM_RIGHT" class="org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator" id="org.eclipse.team.cvs.ui.decorator"> <description> %DecoratorStandard.desc </description> </decorator> </extension>
デコレーターは、ワークベンチの「ラベル装飾」設定ページを介して、最終的にユーザーによって制御されます。 デコレーターは、個々にオンおよびオフにできます。 そうであっても、デコレーターが既存のプラットフォーム SDK デコレーターとオーバーラップおよび競合しないように デコレーターを設計することをお勧めします。 複数のプラグインがライト・ウェイト・デコレーターを同じ 4 等分画面に組み込む場合でも、 非確定的に競合は解決されます。
プラグインは、イメージとラベルの管理もすべて自ら行う場合があります。 この場合、lightweight 属性は false に設定され、class 属性は ILabelDecorator を インプリメントするクラスに名前を付ける必要があります。 このクラスにより、オリジナルのラベルのイメージとテキストを独自の注釈で装飾できます。 また、接頭部、接尾部、および単純な 4 等分画面オーバーレイに制限されないため、 柔軟性が増します。
デコレーターの他の属性は、特定のインプリメンテーション・スタイルには関係しません。 label および description 属性は、設定ダイアログでデコレーターに 名前を付けてそのデコレーターを説明するためのテキストを指定します。 objectClass は、デコレーターの適用先となるオブジェクトのクラスに名前を付けます。 enablement 属性は、オブジェクトが装飾されるべき条件を記述できるようにします。 adaptable フラグは、IResource に 適用されるオブジェクトも装飾すべきかどうかを示します。 state フラグは、デコレーターをデフォルトで表示するかどうかを制御します。
計算に多くの時間とリソースを消費し、潜在的に誤解を招くような情報がデコレーターに含まれている場合は、 デコレーターがオンになったらユーザーがさらに微調整できる独自の設定を組み込まなければならない場合があります。 この技法は、CVS クライアントによって使用されます。