今回はツリーを使ってInternetExplorerのお気に入りを表示していきます。
Windows限定になると思います。それ以外のOSの方は申し訳ないです。。。
今回作成したプラグインはこちらからダウンロードできます。→
browser_0.0.5.zipソースも入っていますのでダウンロードして参考にしながら説明を読んでください。
1.ビューの追加plugin.xmlのマニフェスト・エディターを開いて、拡張のタブをクリックします。
追加ボタンを押して拡張ポイントの選択ウィザードを表示します。
拡張ポイントでorg.eclipse.ui.viewsを選択して、テンプレートのサンプル・ページを選択して次へをクリックします。
サンプルページの設定でツリー・ビューアーにチェックを入れて、ほかの項目を任意に変更して終了ボタンをクリックします。
すると、拡張のツリーのorg.eclipse.ui.viewsにviewが追加されます。
2.ContentProviderの作成ITreeContentProviderを実装して、TreeViewerのsetInputで入力されたオブジェクトのツリーの構造として解析するためのクラスを作成します。
ITreeContentProviderで実装する必要のあるメソッドを説明します。
public void inputChanged(Viewer v, Object oldInput, Object newInput)入力が変更された場合の処理を行います
public void dispose()回収処理を行います
public Object[] getElements(Object parent)要素を取得します
public Object getParent(Object child)親のオブジェクトを取得します
public Object[] getChildren(Object parent)子のオブジェクトを取得します
public boolean hasChildren(Object parent)子のオブジェクトを持つか判別します
getElementsとgetChildrenの区別が良く分かりません。。。わかる方がいましたらコメントをよろしくお願いします。
今回は入力がFileのオブジェクトで各メソッドの引数のFileのオブジェクトになりますが念のためにinstanceofでクラスをチェックしています。
3.LabelProviderの作成LabelProviderを実装して、ContentProviderで解析された要素を表示するためのクラスを作成します。
LabelProviderで実装する必要のあるメソッドを説明します。
public String getText(Object obj)表示文字列を取得します
public Image getImage(Object obj)表示画像を取得します
各メソッドの引数のオブジェクトはFileオブジェクトとなるのでフォルダかファイルかを判断して表示を切り分けています。
4.ViewerSorterの作成ViewerSorterを継承して、名前を並び替えるクラスを作成します。
いくつかのメソッドをオーバーライドすることで並び替えをすることができます。
public int compare(Viewer viewer, Object e1, Object e2)二つのオブジェクトを比較します
public int category(Object element)オブジェクトをカテゴリーわけします。
返却値が若いほど上位に表示されます。
今回はcategory()メソッドを使ってフォルダの場合は0を返し、ファイルの場合は1を返すようにしてカテゴリを分けて表示するようにしました。
5.ダブルクリックの対象オブジェクトの取得ダブルクリックをしたときのアクションでの処理を説明します。
まずダブルクリックで選択されているオブジェクトを取得する手順は、TreeViewerからSelectionを取得して、そのSelectionから要素(オブジェクト)を取得します。
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).
getFirstElement();
5.ツリーの展開と折りたたみダブルクリックの対象がフォルダの場合は展開または折りたたみをします。
ツリーを展開する場合は、
viewer.expandToLevel(obj, 1)
とします。
また、ツリーを折りたたむ場合は、
viewer.collapseToLevel(obj, 1)
となります。
6.ビューの連携ダブルクリックの対象がファイル場合はファイルからURLを読み込みブラウザビューに対してURLを渡します。
ちょっと手間ですが、以下のようにしてビューアーのIDからViewを取得することができます。
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
IWorkbenchPage page = window.getActivePage();
BrowserView view = (BrowserView)page.
showView("luna.tools.browser.views.BrowserView");
view.setUrl(url);
今回はいろいろな要素が盛りだくさんでしたね^^
今回作成したプラグインはこちらからダウンロードできます。→
browser_0.0.5.zip次回は、パースペクティブを追加したいと思います。
では、また。