Java 在开普勒4.3中,向Eclipse工作台窗口添加自定义修剪不起作用
我正在为一个Eclipse插件维护一些预先存在的代码,该插件构成了一个更大项目的一部分。这段代码应该通过使用名为Java 在开普勒4.3中,向Eclipse工作台窗口添加自定义修剪不起作用,java,eclipse,Java,Eclipse,我正在为一个Eclipse插件维护一些预先存在的代码,该插件构成了一个更大项目的一部分。这段代码应该通过使用名为NotificationTrim的自定义trim,在Eclipse的工作台窗口右下角显示通知图标。代码在Indigo中工作得很好,但在开普勒它不再工作,图标也不再出现。代码如下所示,通知处理程序调用createTrim(): private NotificationTrim createTrim() { IWorkbenchWindow[] windows =
NotificationTrim
的自定义trim,在Eclipse的工作台窗口右下角显示通知图标。代码在Indigo中工作得很好,但在开普勒它不再工作,图标也不再出现。代码如下所示,通知处理程序调用createTrim()
:
private NotificationTrim createTrim() {
IWorkbenchWindow[] windows =
PlatformUI.getWorkbench().getWorkbenchWindows();
if (windows == null || windows.length < 1) {
return null;
}
IWorkbenchWindow main = windows[0];
if (!(main instanceof WorkbenchWindow)) {
return null;
}
WorkbenchWindow window = (WorkbenchWindow)main;
ITrimManager manager = window.getTrimManager();
if (manager.getTrim(getClass().getName()) == null) {
int height = getBottomTrimHeight(manager);
trim = new NotificationTrim(main.getShell(), height);
manager.addTrim(ITrimManager.BOTTOM, trim);
manager.forceLayout();
return trim;
}
return null;
}
private int getBottomTrimHeight (ITrimManager manager) {
List<IWindowTrim> items = manager.getAreaTrim(SWT.BOTTOM);
int height = -1;
if (items != null) {
for (IWindowTrim item : items) {
int itemHeight = item.getControl().getSize().y;
if (itemHeight > height) {
height = itemHeight;
}
}
}
return height;
}
private NotificationTrim createTrim(){
IWorkbenchWindow[]窗口=
PlatformUI.getWorkbench().getWorkbenchWindows();
if(windows==null | | windows.length<1){
返回null;
}
IWorkbenchWindow main=windows[0];
if(!(工作台窗口的主实例)){
返回null;
}
工作台窗口=(工作台窗口)主窗口;
ITrimManager=window.getTrimManager();
if(manager.getTrim(getClass().getName())==null){
int height=getBottomTrimHeight(管理器);
trim=新通知trim(main.getShell(),高度);
manager.addTrim(itrimanager.BOTTOM,trim);
manager.forceLayout();
回位微调;
}
返回null;
}
专用int getBottomTrimHeight(ITrimManager){
列表项=manager.getAreaTrim(SWT.BOTTOM);
整数高度=-1;
如果(项!=null){
用于(IWindowTrim项目:项目){
int itemHeight=item.getControl().getSize().y;
如果(项目高度>高度){
高度=项目高度;
}
}
}
返回高度;
}
据我所知,调用
window.getTrimManager()
会返回一个基本的ITrimManager
,它对ITrimManager的任何方法的实现都不做任何事情(特别是getAreaTrim()
和addTrim()
),因此不会向工作台窗口的trim添加任何内容。我很清楚,这段代码依赖于一个自Indigo以来发生变化的未记录的内部API,所以我的问题是是否有更好的方法向Eclipse的工作台窗口底部添加自定义修剪?如果做不到这一点,是否有另一种方法将通知图像和标签添加到窗口中,使其在所有透视图中保持持久性,基本上与旧代码相同?因为您发现这些内部类不再起任何作用
要添加到窗口中,您可能需要编辑Eclipse4应用程序模型。对于现有的Eclipse,这是org.Eclipse.platform
插件中的LegacyIDE.e4xmi
文件
有关编辑应用程序模型的更多详细信息,请参阅