Eclipse/プラグイン開発のTIPS集/プロパティシートを使う
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#topicpath
----
#contents
**プロパティシートって [#f5d07bcd]
プロパティシートとは、ビューで選択されているオブジェクト...
#ref(pic.png)
プロパティシートの例。パッケージ・エクスプローラで選択さ...
**実装方法 [#i8f0fd99]
まずはビューでの実装方法をまとめていきます。
***モデルとなるオブジェクト [#cd2098e7]
モデルオブジェクトを
public interface Model {
String getId();
String getName();
String getMail();
}
としました。実装クラスは
public class ModelImpl implements Model {
private String id;
private String name;
private String mail;
public ModelImpl(String id, String name, String mail) {
this.id = id;
this.name = name;
this.mail = mail;
}
public String getId() {return id;}
public String getMail() {return mail;}
public String getName() {return name;}
}
こんな感じです。これをビュー上のビューワに複数インスタン...
#ref(pic02.png)
モデルの内容がプロパティシートに表示されている。
~
*** getSite().setSelectionProvider(viewer)させる [#y11478...
さて、実装の手順ですが、先のとおりSelectionProviderとして...
getSite().setSelectionProvider(viewer);
されていることがまず必要です((これでプロパティシートとvie...
*** getAdapterを実装する [#md0f93f4]
次に、そのビュー(クラス名はModelViewとしました)がプロパテ...
ModelVieweに以下を実装:
public Object getAdapter(Class adapter) {
logger.debug("getAdapter(Class) - start");
if (adapter.equals(IPropertySheetPage.class)) {
logger.debug("getAdapter(Class) - end");
return new PropertySheetPage();
↑これはEclipseで提供されているモノ。自前では...
}
logger.debug("getAdapter(Class) - end");
return super.getAdapter(adapter);
}
これで、EclipseプラットフォームがModelViewに「IPropertySh...
***モデルを修正する [#a34f3a8b]
実はプロパティシートに表示するには、以下の条件のどれかが...
-モデルのオブジェクトがIPropertySourceを実装していること
-モデルのオブジェクトがIAdaptableを実装していて、IPropert...
これって実は厳しい条件ですよね。というのはモデルとなるオ...
実はソースを見てたら上記2以外の条件もあったのですが、とり...
ModelインタフェースでIAdaptableを拡張します。
public interface Model extends IAdaptable {
String getId();
String getName();
String getMail();
}
実装クラスでは以下のようにします。
public class ModelImpl implements Model {
private String id;
private String name;
private String mail;
public ModelImpl(String id, String name, String mail) {
this.id = id;
this.name = name;
this.mail = mail;
}
public String getId() {return id;}
public String getMail() {return mail;}
public String getName() {return name;}
// IPropertySourceを返すように実装
public Object getAdapter(Class adapter) {
if (adapter.equals(IPropertySource.class)) {
return source;
}
return null;
}
private IPropertySource source = new IPropertySource() {
....長いので、後述。
};
}
以上で、モデル側は準備ができました。ちなみにModelViewは以...
public class ModelView extends ViewPart {
private List models;
public void createPartControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new FillLayout());
initializeModel();
final TableViewer tableViewer = new TableViewer(cont...
tableViewer.setContentProvider(new ArrayContentProvi...
tableViewer.setInput(models);
getSite().setSelectionProvider(tableViewer);
....省略
}
private void initializeModel() {
models = new ArrayList();
models.add(new ModelImpl("000", "Root", "root@localh...
models.add(new ModelImpl("001", "masatomi", "masatom...
}
public Object getAdapter(Class adapter) {
if (adapter.equals(IPropertySheetPage.class)) {
return new PropertySheetPage();
}
return super.getAdapter(adapter);
}
....省略
}
さて表示させてみると、
#ref(pic02.png)
確かに表示されました。
*** IPropertySource の実装 [#q2743568]
さっき長いので省略とした、IPropertySource の実装について...
private IPropertySource source = new IPropertySource() {
public IPropertyDescriptor[] getPropertyDescriptors() {
IPropertyDescriptor[] descriptor = new IPropertyDesc...
new TextPropertyDescriptor("id", "コード"),
new TextPropertyDescriptor("name", "名前"),
new TextPropertyDescriptor("mail", "メール") };
return descriptor;
}
public Object getPropertyValue(Object id) {
if (id.equals("id")) {
return getId();
}
if (id.equals("name")) {
return getName();
}
if (id.equals("mail")) {
return getMail();
}
return null;
}
public boolean isPropertySet(Object id) {return false;}
public void resetPropertyValue(Object id) {}
public void setPropertyValue(Object id, Object value) {}
public Object getEditableValue() {return null;}
};
重要なのは
-IPropertyDescriptor[] getPropertyDescriptors()で、表示し...
-Object getPropertyValue(Object id)でキー値が渡されるので...
です。その他いろいろメソッドがありますが、とりあえずこん...
**まとめ [#ub322395]
まとめると、だいたい以下の感じです。
-viewerをSelectionProviderとして外部に公開しておく
getSite().setSelectionProvider(viewer)を使って、公開して...
-ViewPartでgetAdapterを実装する
IPropertySheetPageに対してPropertySheetPageを返すよう実装...
-モデルオブジェクトをIAdaptableかIPropertySource を実装する
なんらかの方法でIPropertySource を返すようモデルを修正す...
**モデルをEclipseなクラスから分離したい [#e35aa463]
ちょっと書きましたが、モデルオブジェクトはいじりたくない...
[[IAdaptableなどをimplementsしていないモデルオブジェクト...
**関連リンク [#n27ad0df]
-[[プロパティ・シートの使用:http://www13.plala.or.jp/obse...
----
この記事は
#vote(おもしろかった[6],そうでもない[2])
-すでに存在するモデルや、他のヒトが作ったモデルを表示して...
-やっぱDelegateするラッパを作るのかなぁ -- [[きの]] &new{...
-やり方がわかりました。IPropertySourceを作って返すように...
- そもそもプロパティ・シートのビューはどうやって追加でき...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
#topicpath
----
#contents
**プロパティシートって [#f5d07bcd]
プロパティシートとは、ビューで選択されているオブジェクト...
#ref(pic.png)
プロパティシートの例。パッケージ・エクスプローラで選択さ...
**実装方法 [#i8f0fd99]
まずはビューでの実装方法をまとめていきます。
***モデルとなるオブジェクト [#cd2098e7]
モデルオブジェクトを
public interface Model {
String getId();
String getName();
String getMail();
}
としました。実装クラスは
public class ModelImpl implements Model {
private String id;
private String name;
private String mail;
public ModelImpl(String id, String name, String mail) {
this.id = id;
this.name = name;
this.mail = mail;
}
public String getId() {return id;}
public String getMail() {return mail;}
public String getName() {return name;}
}
こんな感じです。これをビュー上のビューワに複数インスタン...
#ref(pic02.png)
モデルの内容がプロパティシートに表示されている。
~
*** getSite().setSelectionProvider(viewer)させる [#y11478...
さて、実装の手順ですが、先のとおりSelectionProviderとして...
getSite().setSelectionProvider(viewer);
されていることがまず必要です((これでプロパティシートとvie...
*** getAdapterを実装する [#md0f93f4]
次に、そのビュー(クラス名はModelViewとしました)がプロパテ...
ModelVieweに以下を実装:
public Object getAdapter(Class adapter) {
logger.debug("getAdapter(Class) - start");
if (adapter.equals(IPropertySheetPage.class)) {
logger.debug("getAdapter(Class) - end");
return new PropertySheetPage();
↑これはEclipseで提供されているモノ。自前では...
}
logger.debug("getAdapter(Class) - end");
return super.getAdapter(adapter);
}
これで、EclipseプラットフォームがModelViewに「IPropertySh...
***モデルを修正する [#a34f3a8b]
実はプロパティシートに表示するには、以下の条件のどれかが...
-モデルのオブジェクトがIPropertySourceを実装していること
-モデルのオブジェクトがIAdaptableを実装していて、IPropert...
これって実は厳しい条件ですよね。というのはモデルとなるオ...
実はソースを見てたら上記2以外の条件もあったのですが、とり...
ModelインタフェースでIAdaptableを拡張します。
public interface Model extends IAdaptable {
String getId();
String getName();
String getMail();
}
実装クラスでは以下のようにします。
public class ModelImpl implements Model {
private String id;
private String name;
private String mail;
public ModelImpl(String id, String name, String mail) {
this.id = id;
this.name = name;
this.mail = mail;
}
public String getId() {return id;}
public String getMail() {return mail;}
public String getName() {return name;}
// IPropertySourceを返すように実装
public Object getAdapter(Class adapter) {
if (adapter.equals(IPropertySource.class)) {
return source;
}
return null;
}
private IPropertySource source = new IPropertySource() {
....長いので、後述。
};
}
以上で、モデル側は準備ができました。ちなみにModelViewは以...
public class ModelView extends ViewPart {
private List models;
public void createPartControl(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new FillLayout());
initializeModel();
final TableViewer tableViewer = new TableViewer(cont...
tableViewer.setContentProvider(new ArrayContentProvi...
tableViewer.setInput(models);
getSite().setSelectionProvider(tableViewer);
....省略
}
private void initializeModel() {
models = new ArrayList();
models.add(new ModelImpl("000", "Root", "root@localh...
models.add(new ModelImpl("001", "masatomi", "masatom...
}
public Object getAdapter(Class adapter) {
if (adapter.equals(IPropertySheetPage.class)) {
return new PropertySheetPage();
}
return super.getAdapter(adapter);
}
....省略
}
さて表示させてみると、
#ref(pic02.png)
確かに表示されました。
*** IPropertySource の実装 [#q2743568]
さっき長いので省略とした、IPropertySource の実装について...
private IPropertySource source = new IPropertySource() {
public IPropertyDescriptor[] getPropertyDescriptors() {
IPropertyDescriptor[] descriptor = new IPropertyDesc...
new TextPropertyDescriptor("id", "コード"),
new TextPropertyDescriptor("name", "名前"),
new TextPropertyDescriptor("mail", "メール") };
return descriptor;
}
public Object getPropertyValue(Object id) {
if (id.equals("id")) {
return getId();
}
if (id.equals("name")) {
return getName();
}
if (id.equals("mail")) {
return getMail();
}
return null;
}
public boolean isPropertySet(Object id) {return false;}
public void resetPropertyValue(Object id) {}
public void setPropertyValue(Object id, Object value) {}
public Object getEditableValue() {return null;}
};
重要なのは
-IPropertyDescriptor[] getPropertyDescriptors()で、表示し...
-Object getPropertyValue(Object id)でキー値が渡されるので...
です。その他いろいろメソッドがありますが、とりあえずこん...
**まとめ [#ub322395]
まとめると、だいたい以下の感じです。
-viewerをSelectionProviderとして外部に公開しておく
getSite().setSelectionProvider(viewer)を使って、公開して...
-ViewPartでgetAdapterを実装する
IPropertySheetPageに対してPropertySheetPageを返すよう実装...
-モデルオブジェクトをIAdaptableかIPropertySource を実装する
なんらかの方法でIPropertySource を返すようモデルを修正す...
**モデルをEclipseなクラスから分離したい [#e35aa463]
ちょっと書きましたが、モデルオブジェクトはいじりたくない...
[[IAdaptableなどをimplementsしていないモデルオブジェクト...
**関連リンク [#n27ad0df]
-[[プロパティ・シートの使用:http://www13.plala.or.jp/obse...
----
この記事は
#vote(おもしろかった[6],そうでもない[2])
-すでに存在するモデルや、他のヒトが作ったモデルを表示して...
-やっぱDelegateするラッパを作るのかなぁ -- [[きの]] &new{...
-やり方がわかりました。IPropertySourceを作って返すように...
- そもそもプロパティ・シートのビューはどうやって追加でき...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: