Top / Eclipse / プラグイン開発のTIPS集 / GooglePlugin / 検索結果一覧を表示するビューの作成

いよいよ検索結果一覧を表示するビューを作成します。とりあえず

nu.mine.kino.plugin.google.ui.views.GoogleResultView

としました。

plugin.xml

plugin.xml(抜粋)は以下のようになりました。

<extension
   point="org.eclipse.ui.views">
  <category
    name="Googleプラグイン"
    id="nu.mine.kino.plugin.google"/>
  <view
    class="nu.mine.kino.plugin.google.ui.views.GoogleResultView"
    icon="icons/icon.gif"
    category="nu.mine.kino.plugin.google"
    name="Google検索結果"
    id="nu.mine.kino.plugin.google.ui.views.GoogleResultView"/>
</extension>

ウィジェットを配置していく

どんどんウィジェットを配置していきます。とりあえず、こんな感じになりました。

prototype.png

ColumnLayoutData?でカラムの設定をする

SWTだけではなくて、JFaceも使うときはカラムの制御をColumnLayoutDataでやるのがスマートみたいです*1。実際それに習って変更します。ColumnLayoutDataはフィールドの幅などの情報を表現するクラスです。

ポイントは

というところですね。わけがわからないと思うので、もっと具体的に、コーディングはこんな感じになります。

となるような感じです。

こうすることで、

などの効果が得られそうです。

ソースコード

最後にソースはこんな感じです。

//作成日: 2005/05/21
package nu.mine.kino.plugin.google.ui.views;

import nu.mine.kino.plugin.google.ui.views.fields.IField;
import nu.mine.kino.plugin.google.ui.views.fields.SummaryField;
import nu.mine.kino.plugin.google.ui.views.fields.TitleField;
import nu.mine.kino.plugin.google.ui.views.fields.URLField;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnLayoutData;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.ViewPart;

public class GoogleResultView extends ViewPart {

  // TableLayoutと一緒になって使う。各カラムの表示幅など情報を設定する。
  private final ColumnLayoutData[] DEFAULT_COLUMN_LAYOUTS = {
      new ColumnWeightData(200), new ColumnWeightData(200),
      new ColumnWeightData(200) };

  private final IField[] VISIBLE_FIELDS = { new TitleField(),
      new SummaryField(), new URLField() };

  private Table table;

  private Action doubleClickAction;

  private Action openBrowserAction;

  private IMemento memento;

  public void init(IViewSite site, IMemento memento) throws PartInitException {
    super.init(site, memento);
    this.memento = memento;
  }

  public void createPartControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NONE);
    container.setLayout(new FillLayout());

    final TableViewer viewer = new TableViewer(container,
        SWT.FULL_SELECTION | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);

    viewer.setContentProvider(new ArrayContentProvider());
    viewer.setInput(getViewSite());
    initTable(viewer);

    createActions();
    initializeToolBar();
    initializeMenu();
  }

  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, i);
      tc.setText(VISIBLE_FIELDS[i].getColumnHeaderText());
      tc.setImage(VISIBLE_FIELDS[i].getColumnHeaderImage());
      // tc.addSelectionListener(headerListener);
    }
  }

  private ColumnLayoutData[] getColumnLayouts() {
    if (memento == null) {
      return DEFAULT_COLUMN_LAYOUTS;
    }
    // ↓実際はmementoからColumnLayoutData[]を構築して返す
    return DEFAULT_COLUMN_LAYOUTS;
  }

  private void createActions() {

    openBrowserAction = new Action("サイトにアクセスする") {
      public void run() {
      }
    };

    doubleClickAction = new Action("") {
      public void run() {
      }
    };
  }

  private void initializeToolBar() {
    IToolBarManager tbm = getViewSite().getActionBars().getToolBarManager();
  }

  private void initializeMenu() {
    IMenuManager manager = getViewSite().getActionBars().getMenuManager();
  }

  public void setFocus() {
  }

}

スクリーンショット

実際にビューを表示してみると、こんな感じです。

view.png

次は 検索ロジックをビューに実装 します。


この記事は

選択肢 投票
おもしろかった 1  
そうでもない 0  

Top / Eclipse / プラグイン開発のTIPS集 / GooglePlugin / 検索結果一覧を表示するビューの作成

現在のアクセス:12546


*1 とりあえずEclipseのMarkerView?などの実装はそうなってた

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS