Eclipse/プラグイン開発のTIPS集/GooglePlugin/検索結果一覧を表示するビューの作成
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**概要 [#z69fd4c1]
さて前回はGoogleの検索機能を呼び出したり、スペルミスを変...
**plugin.xml、MANIFEST.MFを記述する [#wc09e01d]
「META-INF/MANIFEST.MF」をマニフェストエディタで開き、[...
#ref(view.gif)
次に、この「org.eclipse.ui.views」を右クリックして[新規...
|LEFT:id|LEFT:nu.mine.kino.plugin.google.ui.views.GoogleR...
|LEFT:name|LEFT:Google検索結果|
|LEFT:class|LEFT:nu.mine.kino.plugin.google.ui.views.Goog...
|LEFT:category|LEFT:nu.mine.kino.plugin.google|
|LEFT:icon|LEFT:icons/icon.png|
カテゴリーなども追加して結局plugin.xmlには以下のコードが...
<extension
point="org.eclipse.ui.views">
<view
category="nu.mine.kino.plugin.google"
class="nu.mine.kino.plugin.google.ui.views.Go...
icon="icons/icon.png"
id="nu.mine.kino.plugin.google.ui.views.Googl...
name="Google検索結果"/>
<category
id="nu.mine.kino.plugin.google"
name="Googleプラグイン"/>
</extension>
**ビューのクラスを追加する [#w2233d70]
先のマニフェストエディタでidやクラス名を指定しましたが、c...
#ref(label.gif)
これをクリックするとビューのクラスを作成するウィザードが...
では、そのソースコードに色々追加していこうと思います。
**ビューの本体にテーブルビューワを配置する [#jd8459ae]
まずはビューの本体を構築していきます。ビューの構築は
public void createPartControl(Composite parent);
をOverrideすることで行います。引数のCompositeに色々ウィジ...
さて今回は下記のとおりビュー全体にTableViewerを配置するこ...
public void createPartControl(Composite parent) {
// ビューワを追加。
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new FillLayout());
viewer = new TableViewer(container, SWT.FULL_SELECTI...
viewer.setContentProvider(new ArrayContentProvider());
viewer.setInput(getViewSite());
initTable(viewer);
createActions();
initializeToolBar();
initializeMenu();
}
TableViewerにカラムを追加する処理は initTable(viewer); で...
private void initTable(final TableViewer viewer) {
table = viewer.getTable();
TableLayout layout = new TableLayout();
table.setLayout(layout);
table.setHeaderVisible(true); //ヘッダを表示する
table.setLinesVisible(true); //ラインを表示する
ColumnLayoutData[] columnLayouts = getColumnLayouts();
for (int i = 0; i < columnLayouts.length; i++) {
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE...
tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText...
tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderIma...
}
}
ColumnLayoutDataはフィールドの幅などレイアウト情報を管理...
このColumnLayoutDataクラスは
table = viewer.getTable();
TableLayout layout = new TableLayout();
table.setLayout(layout);
というようにTableViewerとTableLayoutが関連づけられており...
layout.addColumnData(columnLayouts[i]);
とすることでTableViewerに関連づいています。
さて
ColumnLayoutData[] columnLayouts = getColumnLayouts();
で、各カラムのレイアウト情報を配列で取得していますが、現...
private ColumnLayoutData[] getColumnLayouts() {
return DEFAULT_COLUMN_LAYOUTS;
}
とフィールドに定義されている配列をそのまま返すようになっ...
**実際にカラムを追加する [#j593a6c7]
実際にカラムを追加する処理は
for (int i = 0; i < columnLayouts.length; i++) {
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE, i);
tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText());
tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderImage());
}
の箇所です。先のレイアウト情報をセットするのと、ヘッダの...
private final IField[] VISIBLE_FIELDS =
{ new TitleField(),new SummaryField(), new URLField()...
とフィールドに定義されているインスタンスです。
***IFieldの役割 [#k634961f]
IFieldとは
public interface IField {
String getColumnHeaderText();
Image getColumnHeaderImage();
String getValue(Object obj);
Image getImage(Object obj);
int compare(Object obj1, Object obj2);
}
というように、ヘッダ名やヘッダに表示するアイコンの情報、...
public class TitleField implements IField {
public String getColumnHeaderText() {return "Title";}
-- 以下省略 --
}
public class SummaryField implements IField {
public String getColumnHeaderText() {return "Summary";}
-- 以下省略 --
}
public class URLField implements IField {
public String getColumnHeaderText() {return "URL";}
-- 以下省略 --
}
というようにヘッダ部分の文言が定義されています。
さて上記のIFieldとその実装クラスですが、先のソースで
for (int i = 0; i < columnLayouts.length; i++) {
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE, i);
tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText());
tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderImage());
}
とTableColumnのsetTextを呼び出して、各カラムにヘッダ名を...
**検索メソッドを定義する [#qdf36c45]
続いてこのメソッドに検索メソッドを定義します。メソッド名は
public void search(String text);
というメソッドにしました。ただ、中身については後に実装し...
public void search(String text) {
logger.debug("search(String) - start");
try {
String key = GooglePlugin.getDefault().getPrefer...
.getString(PreferenceConstants.GOOGLE_KE...
GoogleSearchResult result = GoogleCorePlugin.get...
ResultElement[] resultElements = result.getResul...
logger.debug("search(String)の検索結果件数は "
+ resultElements.length + " 件でし...
viewer.setInput(resultElements);
} catch (CoreException e) {
logger.error("search(String)", e);
}
logger.debug("search(String) - end");
}
ここまででビューにはTableViewerが配置されていて、そのTabl...
**スクリーンショット [#e6fb2426]
実際にビューを表示してみると、こんな感じです。
#ref(result.gif)
まだTitleのカラムにオブジェクトのハッシュコードが表示され...
さて実際にビューを生成して検索メソッドを呼び出す方法です...
**JUnitを使ってビューを生成する [#p7b01ebc]
テスト用のプロジェクトは前回の「nu.mine.kino.plugin.googl...
- nu.mine.kino.plugin.google.ui.views
を追加しました。
#ref(export.gif)
前回と同様、nu.mine.kino.plugin.google.ui.views.GoogleRes...
public void testGoogleResultView() {
try {
GooglePlugin.getDefault().getPreferenceStore().setVa...
PreferenceConstants.GOOGLE_KEY, "xxxxxxxxxx");
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
GoogleResultView view = (GoogleResultView) page
.showView(GoogleResultView.ID);
view.search("eclipse");
} catch (PartInitException e) {
e.printStackTrace();
}
}
パッケージ・エクスプローラで[GoogleResultViewTest]を選...
さて引き続き、[[前回の状態を復元する処理>Eclipse/プラグイ...
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**概要 [#z69fd4c1]
さて前回はGoogleの検索機能を呼び出したり、スペルミスを変...
**plugin.xml、MANIFEST.MFを記述する [#wc09e01d]
「META-INF/MANIFEST.MF」をマニフェストエディタで開き、[...
#ref(view.gif)
次に、この「org.eclipse.ui.views」を右クリックして[新規...
|LEFT:id|LEFT:nu.mine.kino.plugin.google.ui.views.GoogleR...
|LEFT:name|LEFT:Google検索結果|
|LEFT:class|LEFT:nu.mine.kino.plugin.google.ui.views.Goog...
|LEFT:category|LEFT:nu.mine.kino.plugin.google|
|LEFT:icon|LEFT:icons/icon.png|
カテゴリーなども追加して結局plugin.xmlには以下のコードが...
<extension
point="org.eclipse.ui.views">
<view
category="nu.mine.kino.plugin.google"
class="nu.mine.kino.plugin.google.ui.views.Go...
icon="icons/icon.png"
id="nu.mine.kino.plugin.google.ui.views.Googl...
name="Google検索結果"/>
<category
id="nu.mine.kino.plugin.google"
name="Googleプラグイン"/>
</extension>
**ビューのクラスを追加する [#w2233d70]
先のマニフェストエディタでidやクラス名を指定しましたが、c...
#ref(label.gif)
これをクリックするとビューのクラスを作成するウィザードが...
では、そのソースコードに色々追加していこうと思います。
**ビューの本体にテーブルビューワを配置する [#jd8459ae]
まずはビューの本体を構築していきます。ビューの構築は
public void createPartControl(Composite parent);
をOverrideすることで行います。引数のCompositeに色々ウィジ...
さて今回は下記のとおりビュー全体にTableViewerを配置するこ...
public void createPartControl(Composite parent) {
// ビューワを追加。
Composite container = new Composite(parent, SWT.NONE);
container.setLayout(new FillLayout());
viewer = new TableViewer(container, SWT.FULL_SELECTI...
viewer.setContentProvider(new ArrayContentProvider());
viewer.setInput(getViewSite());
initTable(viewer);
createActions();
initializeToolBar();
initializeMenu();
}
TableViewerにカラムを追加する処理は initTable(viewer); で...
private void initTable(final TableViewer viewer) {
table = viewer.getTable();
TableLayout layout = new TableLayout();
table.setLayout(layout);
table.setHeaderVisible(true); //ヘッダを表示する
table.setLinesVisible(true); //ラインを表示する
ColumnLayoutData[] columnLayouts = getColumnLayouts();
for (int i = 0; i < columnLayouts.length; i++) {
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE...
tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText...
tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderIma...
}
}
ColumnLayoutDataはフィールドの幅などレイアウト情報を管理...
このColumnLayoutDataクラスは
table = viewer.getTable();
TableLayout layout = new TableLayout();
table.setLayout(layout);
というようにTableViewerとTableLayoutが関連づけられており...
layout.addColumnData(columnLayouts[i]);
とすることでTableViewerに関連づいています。
さて
ColumnLayoutData[] columnLayouts = getColumnLayouts();
で、各カラムのレイアウト情報を配列で取得していますが、現...
private ColumnLayoutData[] getColumnLayouts() {
return DEFAULT_COLUMN_LAYOUTS;
}
とフィールドに定義されている配列をそのまま返すようになっ...
**実際にカラムを追加する [#j593a6c7]
実際にカラムを追加する処理は
for (int i = 0; i < columnLayouts.length; i++) {
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE, i);
tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText());
tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderImage());
}
の箇所です。先のレイアウト情報をセットするのと、ヘッダの...
private final IField[] VISIBLE_FIELDS =
{ new TitleField(),new SummaryField(), new URLField()...
とフィールドに定義されているインスタンスです。
***IFieldの役割 [#k634961f]
IFieldとは
public interface IField {
String getColumnHeaderText();
Image getColumnHeaderImage();
String getValue(Object obj);
Image getImage(Object obj);
int compare(Object obj1, Object obj2);
}
というように、ヘッダ名やヘッダに表示するアイコンの情報、...
public class TitleField implements IField {
public String getColumnHeaderText() {return "Title";}
-- 以下省略 --
}
public class SummaryField implements IField {
public String getColumnHeaderText() {return "Summary";}
-- 以下省略 --
}
public class URLField implements IField {
public String getColumnHeaderText() {return "URL";}
-- 以下省略 --
}
というようにヘッダ部分の文言が定義されています。
さて上記のIFieldとその実装クラスですが、先のソースで
for (int i = 0; i < columnLayouts.length; i++) {
layout.addColumnData(columnLayouts[i]);
TableColumn tc = new TableColumn(table, SWT.NONE, i);
tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText());
tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderImage());
}
とTableColumnのsetTextを呼び出して、各カラムにヘッダ名を...
**検索メソッドを定義する [#qdf36c45]
続いてこのメソッドに検索メソッドを定義します。メソッド名は
public void search(String text);
というメソッドにしました。ただ、中身については後に実装し...
public void search(String text) {
logger.debug("search(String) - start");
try {
String key = GooglePlugin.getDefault().getPrefer...
.getString(PreferenceConstants.GOOGLE_KE...
GoogleSearchResult result = GoogleCorePlugin.get...
ResultElement[] resultElements = result.getResul...
logger.debug("search(String)の検索結果件数は "
+ resultElements.length + " 件でし...
viewer.setInput(resultElements);
} catch (CoreException e) {
logger.error("search(String)", e);
}
logger.debug("search(String) - end");
}
ここまででビューにはTableViewerが配置されていて、そのTabl...
**スクリーンショット [#e6fb2426]
実際にビューを表示してみると、こんな感じです。
#ref(result.gif)
まだTitleのカラムにオブジェクトのハッシュコードが表示され...
さて実際にビューを生成して検索メソッドを呼び出す方法です...
**JUnitを使ってビューを生成する [#p7b01ebc]
テスト用のプロジェクトは前回の「nu.mine.kino.plugin.googl...
- nu.mine.kino.plugin.google.ui.views
を追加しました。
#ref(export.gif)
前回と同様、nu.mine.kino.plugin.google.ui.views.GoogleRes...
public void testGoogleResultView() {
try {
GooglePlugin.getDefault().getPreferenceStore().setVa...
PreferenceConstants.GOOGLE_KEY, "xxxxxxxxxx");
IWorkbenchPage page = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
GoogleResultView view = (GoogleResultView) page
.showView(GoogleResultView.ID);
view.search("eclipse");
} catch (PartInitException e) {
e.printStackTrace();
}
}
パッケージ・エクスプローラで[GoogleResultViewTest]を選...
さて引き続き、[[前回の状態を復元する処理>Eclipse/プラグイ...
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: