ポップアップメニューをカスタマイズする
GMFを用いて自動生成するグラフィカルエディタでは、以下のように、必要に応じてポップアップメニューを表示する機能が追加されます。
上記スクリーンショットは、id:kojihashi:20070921で紹介したもので、以下のメタモデルのように、ルートクラス(PurchaseOrder)に同じ型の属性が複数ある場合(billToとshipTo)に、どの属性にオブジェクト(Address)を追加するかユーザに問い合わせるポップアップメニューです。
しかし、デフォルトでは上記スクリーンショットのように、billToとshipToのどちらの属性に追加するか、非常にわかりにくいポップアップメニューとなってしまっています。
このようなポップアップメニューをカスタマイズするには、GMFが自動生成したdiagramプロジェクト内のplugin.xmlにおいて拡張ポイント「org.eclipse.gmf.runtime.emf.type.core.elementTypes」に登録しているElementTypeのname属性を変更します。
<extension point="org.eclipse.gmf.runtime.emf.type.core.elementTypes"> <?gmfgen generated="true"?> <metamodel nsURI="http://www.example.org/po/"> <metamodelType id="example.po.diagram.Address_1002" name="%metatype.name.Address_1002" kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType" eclass="Address" edithelper="po.diagram.edit.helpers.AddressEditHelper"> <param name="semanticHint" value="1002"/> </metamodelType> </metamodel> <metamodel nsURI="http://www.example.org/po/"> <specializationType id="example.po.diagram.Address_1003" name="%metatype.name.Address_1003" kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType"> <specializes id="example.po.diagram.Address_1002"/> <param name="semanticHint" value="1003"/> </specializationType> </metamodel> </extension>
ただし、GMF2.0では、上記のようにElementTypeのname属性(文字列)はplugin.propertiesに外部化されています。従って、実際にはplugin.properties内の文字列を変更することにより、カスタマイズすることができます。
例えば、上記メタモデルの例では、plugin.propertiesはデフォルトで以下のように生成されます。
# Providers
metatype.name.Address_1002=Address
metatype.name.Address_1003=Address
これを以下のように修正します。
# Providers
metatype.name.Address_1002=billToAddress
metatype.name.Address_1003=shipToAddress
これにより、以下のようにポップアップメニューが改善されます。
なお、GMFでは、diagramプロジェクトの再生成時には、plugin.propertiesファイルは再生成の対象になりませんので、上記変更は残ります。