2005年04月03日

ブラウザプラグインの作成 - ImageRegistryを使う

今回はプラグインでImageRegistryを使った画像の利用を行います。
イメージリソースは使用後にdisposeメソッドを使って破棄しないといけません。しかし、ImageRegistryを使うとイメージリソースの破棄を自動で行ってくれるため便利です。

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

1.イメージレジストリに画像を設定する

Eclipseでは、イメージを管理してくれるImageRegistryクラスが提供されています。
BrowserPluginクラスで以下のメソッドをオーバーライドします。
protected void initializeImageRegistry(ImageRegistry registry)
ここで渡されるImageRegistryクラスにイメージのURLを設定していきます。
IPath path = new Path("icons/" + fileName);
URL url = find(path);
if (url != null) {
ImageDescriptor desc = ImageDescriptor.createFromURL(url);
registry.put(key, desc);
}


2.イメージを取得する
イメージを取得する方法もプラグインからイメージレジストリを取得して、そのイメージレジストリからイメージを取得します。
BrowserPlugin plugin = BrowserPlugin.getDefault();
ImageRegistry registry = plugin.getImageRegistry();
ImageDescriptor desc = registry.getDescriptor(key);

3.おまけ
ブックマークビューで右クリックのコンテキストメニューからブックマークの追加、削除などができるようにしました。

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

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) | 日記 | このブログの読者になる | 更新情報をチェックする

2005年02月28日

ブラウザプラグインの作成 - IProgressMonitorで状態表示

今回は進行モニタを使ってブラウザの状態表示を行います。

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

1.進行モニタの取得
ブラウザが読み込み中にウィンドウのステータスバーに「読み込み中:http://...」と表示されますよね。それをプラグインでも実現しようと思います。
Eclipseの機能として進行モニタというものがあります。これは作業の進捗状態を表示するもので、ウィンドウの下部に状態を表示します。
まずは、進行モニタを取得する方法です。
IWorkbench workbench = 
PlatformUI.getWorkbench();
WorkbenchWindow workbenchWindow =
(WorkbenchWindow)workbench.
getActiveWorkbenchWindow();
IActionBars bars =
workbenchWindow.getActionBars();
IStatusLineManager
lineManager = bars.getStatusLineManager();
IProgressMonitor monitor =
lineManager.getProgressMonitor();
ちょっと、ソースが長いので面倒ですがこれだけでOKです。

2.進行モニタの表示
次に、ブラウザのURLに変化が生じたときに進行モニタに対して状態を与えてモニタを表示しましょう。

browser.addLocationListener(
new LocationListener() {
/* 読み込み開始 */
public void changing(LocationEvent event) {
text.setText(event.location);
monitor.beginTask(
"読み込み中:"+event.location,100);
}

/* 読み込み終了 */
public void changed(LocationEvent event) {
text.setText(event.location);
monitor.done();
}
});
簡単ですね。

今回作成したプラグインはこちらからダウンロードできます。→browser_0.0.4.zip
次回は、ツリーを使ったIEのブックマークを表示したいと思います。
では、また。
posted by 月夜 at 22:53| Comment(0) | TrackBack(1) | プラグイン開発 | このブログの読者になる | 更新情報をチェックする

2005年02月26日

ブラウザプラグインの作成 - 設定画面の追加

今回は設定画面を追加します。設定画面でブラウザのホームページが設定できるようにしましょう。

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

1.拡張の追加
plugin.xmlのマニフェスト・エディターを開いて、拡張のタブをクリックします。
追加ボタンを押して拡張ポイントの選択ウィザードを表示します。
拡張ポイントでorg.eclipse.ui.preferencePagesを選択して、テンプレートの設定ページを選択して次へをクリックします。
サンプルページの設定を任意に変更して終了ボタンをクリックします。
すると、拡張のツリーにorg.eclipse.ui.preferencePagesが追加され、その子にはpageが追加されます。このpageが設定ページの情報となります。

2.設定ページの作成
拡張のツリーが生成されると同時にサンプルの設定ページのクラスが自動生成されます。
見れは分かると思いますが、簡単に説明します。
public void createFieldEditors()
設定ページを作成するときに呼ばれ、このメソッドで表示したいフィールドを追加します。

public void init(IWorkbench workbench)
初期処理するときに使いますが、今回は使用しません。

サンプルではファイル選択、チェックボックス、ラジオボタン、テキストのフィールドを使用していますが、今回はURLの設定のみなのでテキストだけを使用します。
/* 項目を生成します */
public void createFieldEditors() {
addField(
new StringFieldEditor(
P_STRING, "ホームページURL(&U)",
getFieldEditorParent()));
}
これだけでOKです。
これでPreferenceStoreというものに自動で保存され画面を開いたときには保存された情報が表示されます。

3.初期値の設定
サンプルではPrefertencePageの初期化で初期値を設定していますが、これでは設定ページが開かれるまで初期値が有効になりません。これを解決するためにはPluginのクラスで初期値を設定する必要があります。BrowserPluginクラスでAbstractUIPluginのinitializeDefaultPreferences(IPreferenceStore store)メソッドをオーバーライドします。そこで渡されるstoreに対して初期値を設定します。
/* 初期値の設定 */
protected void initializeDefaultPreferences(
IPreferenceStore store) {
store.setDefault(
PreferencePage.P_STRING,
"http://www.google.com/");
}


4.アクションの追加
まずは前回のアクション追加を参考にして、ホームページを開くためのアクションを作成します。詳細は省略します。
アクションから呼ばれるBrowserCompositクラスにホームページに遷移するためのメソッドを追加します。
そのメソッドではPreferenceStoreに保存された情報を呼び出しそのページを表示するようにします。
/* ホームに遷移します */
public void home() {
IPreferenceStore store =
BrowserPlugin.getDefault().
getPreferenceStore();
String url =
store.getString(PreferencePage.P_STRING);
browser.setUrl(url);
}

これで、設定された値が取得でき、ホームページとして値を渡すことができます。

今回作成したプラグインはこちらからダウンロードできます。→browser_0.0.3.zip
次回は、進捗モニタを使った状態表示をします。
では、また。
posted by 月夜 at 23:21| Comment(0) | TrackBack(1) | プラグイン開発 | このブログの読者になる | 更新情報をチェックする

2005年02月25日

ブラウザプラグインの作成 - ActionBarの処理の追加

前回作成したブラウザのプラグインにアクション(戻る、進む)を追加していきます。
アクションはテンプレートでもサンプルが付いているので追加は簡単です。

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

1.ブラウザの処理の追加
まず最初に前回作成したブラウザの画面(BrowserCompositクラス)にメソッドを追加します。
追加するメソッドの処理はブラウザの戻ると進むです。
/* 戻る*/
public void back() {
browser.back();
}
/* 進む*/
public void forward() {
browser.forward();
}
処理は簡単ですね。

2.アクションの追加
次に、BrowserViewクラスにアクションの処理を記述します。ビューの生成時に呼ばれるcreatePartControl(Composite parent)で呼ばれているmakeActions()メソッド内でアクションの処理を定義します。アクションのインスタンスを作成して、表示するテキストと画像を設定します。
actionBack = new Action() {
public void run() {
viewer.back();
}
};
actionBack.setText("戻る");
actionBack.setToolTipText("戻る");
actionBack.setImageDescriptor(
PlatformUI.getWorkbench().getSharedImages().
getImageDescriptor(
ISharedImages.IMG_TOOL_BACK));

3.アクションバーの設定
定義したアクションをアクションバーに設定します。親クラスのViewPartクラスで定義されているgetViewSite()よりIViewSiteを取得し、そこからIActionBarsを取得します。そしてIActionBarsから取得されるIToolBarManagerにアクションを設定します。
private void contributeToActionBars() {
IActionBars bars =
getViewSite().getActionBars();
IToolBarManager manager =
bars.getToolBarManager();
manager.add(actionBack);
manager.add(actionForward);
}
これでプラグインを実行すると戻る、進むが実行することができます。

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

2005年02月23日

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

本日からしばらくインターネットブラウザのプラグインを作成していきます。
まず、今日はブラウザをビューとして表示できるようにしたいと思います。

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

前回の「プラグイン開発の第一歩」を参考にして新しいビューのプロジェクトを作成します。

1.ビュークラスの説明
ビューが使うクラスは[作成したプロジェクト名.views]のパッケージにソースが生成されています。たぶん***View.javaという名前になっているでしょう。

ビューはソースを見れば分かりますがViewPartを継承して作ります。
生成されたソースには2つのpublicメソッドがありますので簡単に説明します。

public void createPartControl(Composite parent)
ビューが生成されたときに呼ばれるメソッドで、オーバーライドしています。このメソッドでは、ビューの生成・アクションの生成などを行っていきます。

public void setFocus()
説明するまでもないと思うが、ビューにフォーカスが移動してきたときにどの部分にフォーカスを移動するかを記述しておきます。

上記の説明で分かるように、ビューは生成時にすべて定義をするだけで動作することになります。

2.画面の作成
ビューで表示される画面を作成していきます。
Eclipseで表示される画面はSWTで作成していくことになりますが、詳細は省略します。こちらが参考になると思います。→Project AmaterasさんのSWTサンプル集
SWTで画面を作るときに重宝するのがGUIプラグインです。私が使っているプラグインはVisual Editorです。使い方はまた別の機会に紹介できればと思っています。Visual EditorはEclipseの更新サイトからダウンロードできるので簡単にインストールができます。注意点はGEFとEMFもインストールしないといけません。
今回の画面は単純なので普通にJavaソースを編集してもいいかもしれません。。。

前置きが長くなりましたが、そろそろ画面を作成します。
Visual Editorをインストールするとファイル新規作成に「Java>Visual Class」という項目が追加されますのでそれを元に作ります。今回はCompositeクラスを継承して作成します。CompositeクラスはAWTのPanelと同じようなものと思えばいいでしょう。
AWTと違う点はコンストラクタで親のオブジェクトを必要とすることです。

public BrowserComposit(Composite parent,
int style) {
super(parent, style);
initialize();
}
あとは、作成されたCompositeにTextとBrowserのオブジェクトを貼り付けていき、レイアウトを変更していけば画面の作成は終わりです。

次にTextでエンターキーを押したときにブラウザにURLを設定するために、リスナーを追加します。

text.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent e) {}
public void keyReleased(KeyEvent e) {
if (e.character == SWT.CR) {
browser.setUrl(text.getText());
}
}
});
これで画面の作成は終わりです。

3.ビューに画面の追加
後はビューに対して画面を設定するだけです。
テンプレートではTableViewerを画面に使っていますので、そこで先ほど作成した画面に入れ替えます。すると使用できないメソッドがエラーとして表示されます。修正するところもありますが、コメントアウトすればほぼOKです。

4.プラグインの実行
今回作成したビューは「Lunaツール>インターネット・ブラウザ」です。ビューを開いたら、テキストボックスにお好きなURLを入力してエンターキーを押すとページが表示されます。

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

広告


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

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

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


×

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