- 追加された行はこの色です。
- 削除された行はこの色です。
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
Eclipse プラグインでタスクトレイのアイコンを制御する方法です。
Windowsのタスクトレイや、Macのメニューバーにアイコンを表示するには、
private TrayItem initTaskItem(IWorkbenchWindow window, String toolTip) {
final Tray tray = window.getShell().getDisplay().getSystemTray();
TrayItem trayItem = new TrayItem(tray, SWT.NONE);
trayItem.setImage(appIconImage);
trayItem.setToolTipText(toolTip);
return trayItem;
}
という感じでTrayItemを生成し、
final Shell shell = window.getShell();
final MenuManager trayMenu = new MenuManager();
final Menu menu = trayMenu.createContextMenu(shell);
trayMenu.add(ActionFactory.PREFERENCES.create(window)); ← Eclipseの「設定」を追加してみた
とやってMenuManagerを生成、最後に
trayItem.addMenuDetectListener(new MenuDetectListener() {
public void menuDetected(MenuDetectEvent e) {
menu.setVisible(true);
}
});
動かしてみると、、、
#ref(taskTray.png)
表示されました。。
終了時のDisposeなど含め、全体のソースはこんな感じ。
package nu.mine.kino.plugin.tasktray;
import org.apache.log4j.Logger;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MenuDetectEvent;
import org.eclipse.swt.events.MenuDetectListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IActionBarConfigurer;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
/**
* Logger for this class
*/
private static final Logger logger = Logger
.getLogger(ApplicationWorkbenchWindowAdvisor.class);
private TrayItem trayItem;
private Image appIconImage;
private IWorkbenchWindow window;
public ApplicationWorkbenchWindowAdvisor(
IWorkbenchWindowConfigurer configurer) {
super(configurer);
// Task Tray のアイコンイメージ
appIconImage = AbstractUIPlugin.imageDescriptorFromPlugin(
TaskTrayPlugin.PLUGIN_ID, "/icons/application.png")
.createImage();
}
public ActionBarAdvisor createActionBarAdvisor(
IActionBarConfigurer configurer) {
return new ApplicationActionBarAdvisor(configurer);
}
public void preWindowOpen() {
// ここはアプリ(GUI)を画面に表示しないための処理で、タスクトレイとは関係ない
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setInitialSize(new Point(1, 1));
configurer.setShowCoolBar(false);
configurer.setShowStatusLine(false);
configurer.setShellStyle(SWT.NONE);
// configurer.setTitle("TaskTray RCP"); //$NON-NLS-1$
}
@Override
public void postWindowOpen() {
window = getWindowConfigurer().getWindow();
// ここはアプリ(GUI)を画面に表示しないための処理で、タスクトレイとは関係ない
Shell shell = window.getShell();
shell.setMinimized(true);
shell.setVisible(false);
super.postWindowOpen();
initTrayItem("Retrieving information ...");
}
private void initTrayItem(String toolTip) {
if (trayItem != null) {
trayItem.dispose();
}
trayItem = initTaskItem(window, toolTip);
final Shell shell = window.getShell();
final MenuManager trayMenu = new MenuManager();
final Menu menu = trayMenu.createContextMenu(shell);
trayMenu.add(ActionFactory.PREFERENCES.create(window));
final IWorkbenchAction quitAction = ActionFactory.QUIT.create(window);
trayMenu.add(new Action() {
{
setText("Quit");
}
@Override
public void run() {
// defaultのquitActionだと、場合によってアプリが終了しないケースがあったため
// 自前で終了処理。どうも画面にUIがないとダメなケースがあるぽい。
shell.setVisible(true);
shell.setMinimized(false);
quitAction.run();
}
});
trayItem.addMenuDetectListener(new MenuDetectListener() {
public void menuDetected(MenuDetectEvent e) {
menu.setVisible(true);
}
});
trayItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// トレイのアイコンをダブルクリックしたときの処理
}
});
}
private TrayItem initTaskItem(IWorkbenchWindow window, String toolTip) {
final Tray tray = window.getShell().getDisplay().getSystemTray();
TrayItem trayItem = new TrayItem(tray, SWT.NONE);
trayItem.setImage(appIconImage);
trayItem.setToolTipText(toolTip);
return trayItem;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.application.WorkbenchWindowAdvisor#dispose()
*/
@Override
public void dispose() {
logger.debug("dispose() - start");
appIconImage.dispose();
trayItem.dispose();
super.dispose();
logger.debug("dispose() - end");
}
}
----
この記事は
#vote(おもしろかった[1],そうでもない[10])
#vote(おもしろかった[2],そうでもない[10])
-やりかたはわかったんだけどーじかんが。。。 -- [[きの]] &new{2006-08-09 08:53:56 (水)};
- 気づいたら、七年ぶりの更新。。 -- [[きの]] &new{2014-01-23 (木) 01:14:14};
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}