2005年03月27日

ブラウザプラグインの作成 - タブブラウザの作成

お待たせしました(^_^)久しぶりの更新です。今回はブラウザプラグインをタブブラウザにしていきます。
タブブラウザにするためにカスタムウィジェットのカスタムタブを使用しますのでその説明をします。

今回作成したプラグインはこちらからダウンロードできます。→browser_0.0.7.zip
ソースも入っていますのでダウンロードして参考にしながら説明を読んでください。

1.カスタムタブ(CTabFolder)
コンストラクタ
CTabFolderはEclipseのエディタやビューで使用されているようなタブを実現します。
インスタンスを作成するときに以下のようにすると閉じるための「×」アイコンが表示されません。。
CTabFolder tabFolder = new CTabFolder(this, SWT.NONE);

そこでSWT.CLOSEを指定することにより閉じるアイコンを表示できます。
CTabFolder tabFolder = new CTabFolder(this, SWT.CLOSE);

タブの色づけ
タブに色をつけるにはsetSelectionBackground()を使用します。第1引数には、グラデーションで使用する2色の色を配列で渡します。第2引数は始めの色を何%表示してグラデーションするかを指定します。第3引数は縦方向のグラデーションの場合にtrueにします。
tabFolder.setSelectionBackground(new Color[] {
getDisplay().getSystemColor(SWT.COLOR_TITLE_BACKGROUND),
getDisplay().getSystemColor(SWT.COLOR_TITLE_BACKGROUND_GRADIENT)
}, new int[] { 80 }, true);

タブのテキストの色づけ
タブのテキストに色をつけるには、setSelectionForeground()を使用します。引数には使用したい色を指定します。
tabFolder.setSelectionForeground(
    getDisplay().getSystemColor(SWT.COLOR_WHITE));

新しいタブを追加
新しいタブを追加するためにはCTabFolderを親にしてCTabItemのオブジェクトを作成します。
CTabItem tabItem = new CTabItem(tabFolder, SWT.CLOSE);

タブを選択されたときのイベント
タブを選択されたときのイベントを処理するためにaddSelectionListener()でイベントリスナを登録します。登録するリスナはSelectionListenerをしようするか、以下の例のようにアダプタSelectionAdapterを使用します。
tabFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
Browser browser = getSelectionBrowser();
if (browser != null) {
textUrl.setText(browser.getUrl());
}
}
});

タブを閉じられたときのイベント
タブを閉じられたときのイベントを処理するためにaddDisposeListener()でイベントリスナDisposeListenerを登録します。以下の例では
使用しなくなったブラウザは破棄する必要があるためタブを閉じるときに処理をしています。
tabItem.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
// ブラウザを破棄する
browser.dispose();
}
});


2.ブラウザ(Browser)
タブブラウザにするときにブラウザのイベント処理を追加しました。使用したイベント処理の説明します。
タイトルが変更されたときのイベント
タイトルが変更されたときはaddTitleListener()でリスナを登録します。以下の例はタイトルが変更されたときにタブのテキストを変更しています。
browser.addTitleListener(new TitleListener() {
public void changed(TitleEvent event) {
tabItem.setText(event.title);
}
});

新しいウィンドウを開くイベント
HTMLのリンクをクリックしたときに新しいウィンドウを開く必要がある場合にはaddOpenWindowListener()でリスナを登録します。以下の例は新しいイベントが発生したときに新しいタブを開いています。
browser.addOpenWindowListener(new OpenWindowListener() {
public void open(WindowEvent event) {
Browser browser = null;
browser = new Browser(tabFolder, SWT.NONE);
event.browser = browser;
createBrowser(event.browser);
}
});

ウィンドウを閉じるイベント
開くイベント同様に閉じるイベントもあります。これはaddCloseWindowListener()でリスナを登録します。
browser.addCloseWindowListener(new CloseWindowListener() {
public void close(WindowEvent event) {
tabItem.dispose();
}
});


タブブラウザにしてそこそこ使えるプラグインになってきたのかなと思っています^^

今回作成したプラグインはこちらからダウンロードできます。→browser_0.0.7.zip
では、また。
posted by 月夜 at 13:17| Comment(0) | TrackBack(0) | プラグイン開発 | このブログの読者になる | 更新情報をチェックする

2005年03月14日

ブラウザプラグインの作成 - パースペクティブの追加

今回はブラウザプラグイン専用のパースペクティブを作成します。

今回作成したプラグインはこちらからダウンロードできます。→browser_0.0.6.zip
ソースも入っていますのでダウンロードして参考にしながら説明を読んでください。

1.パースペクティブの追加
plugin.xmlのマニフェスト・エディターを開いて、拡張のタブをクリックします。
追加ボタンを押して拡張ポイントの選択ウィザードを表示します。
拡張ポイントでorg.eclipse.ui.perspectivesを選択して次へをクリックします。
するとorg.eclipse.ui.perspectivesの拡張が追加されますので右クリックして、「新規」>「perspective」をクリックします。
id,name,classを任意に変更してclass*:となっているところをクリックするとクラスが新規に作成されます。

これでパースペクティブの大枠が完成します。

2.パースペクティブの拡張
次に、パースペクティブの拡張をしていきます。
上記の拡張ポイントの追加の手順と同様にしてorg.eclipse.ui.perspectiveExtensionsを追加します。
そして、org.eclipse.ui.perspectiveExtensionsの拡張を右クリックして「新規」>「perspectiveExtension」をクリックします。
このperspectiveExtensionのtargetIDには先ほど作成したパースぺクティブのIDを指定します。
さらにperspectiveExtensionを右クリックして「新規」>「view」をクリックします。
ここで入力する情報を詳しく説明します。

id:パースペクティブに表示したいviewのidを指定します。

relative:上記で指定したviewを表示する位置の基準となるviewやeditorのidを指定します。

relationship:relativeからの位置関係を設定します。

ratio:表示する割合を指定します。1.0で100%で表示します。

visible:表示するかを指定します。falseにすると初期表示では表示されません。

closeble:viewを閉じるための×マークを表示するかの設定です。falseにした場合はviewを閉じることができなくないます。

moveable:viewを移動できるかを設定します。falseを指定した場合にはviewの表示位置を変更することができなくなります。

standalone:viewの選択タブを表示しないようにします。

showTitle:standaloneをtrueにしてこの項目をfalseにするとviewのタイトルが表示されないようになります。

ここのポイントはrelativeに何を指定するかですが、エディタ領域からの位置を指定したいときのrelativeにはorg.eclipse.ui.editorssを指定します。

3.パースペクティブの処理
基本的にパースペクティブには特に処理を記述する必要はありません。
今回はエディタ領域を非表示にしたほうが見た目がすっきりしますので以下の処理を追加しました。
public void createInitialLayout(IPageLayout layout) {
// エディタ領域を非表示にする
layout.setEditorAreaVisible(false);
}

今回作成したプラグインはこちらからダウンロードできます。→browser_0.0.6.zip
次回から少しずつ機能アップでもしようかな。
では、また。
posted by 月夜 at 22:25| Comment(0) | TrackBack(0) | プラグイン開発 | このブログの読者になる | 更新情報をチェックする

2005年03月07日

デザイン変更しました

記事の欄が読みにくかったのでデザインを変更しました。これで少し読みやすくなったのではないでしょうか。
posted by 月夜 at 21:47| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2005年03月05日

ブラウザプラグインの作成 - ツリービューの追加

今回はツリーを使って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
次回は、パースペクティブを追加したいと思います。
では、また。

posted by 月夜 at 01:24| Comment(1) | TrackBack(1) | プラグイン開発 | このブログの読者になる | 更新情報をチェックする

2005年03月02日

ブックマーク作成中です

昨日、今日と時間があまりとれなかったので記事が増えてません(^_^;)
ブックマークはInternetExplorerのお気に入りを表示するようにしています。
もうしばらくお待ちください。
posted by 月夜 at 23:21| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。