如何以编程方式获取 Eclipse 插件中常用的图像
How to programmatically get images commonly used in Eclipse Plug-ins
如果一个插件希望重新使用由其他插件定义的图像,应该寻找哪些地方。
例如,如果插件需要 'Terminate' 图标,在调试插件的某处定义,则在哪里查找。
我时不时地搜索图像,尽管将常用图像的位置列在一个地方会很有用。
一些平台插件通过 ImageDescriptor
s 使它们的(部分)图像可用。不幸的是,所有方式都略有不同。
平台UI - org.eclipse.ui
此插件定义图像供 public 在 ISharedImages
中使用。要获取图像描述符,请像这样查询 workbench 的图像注册表:
PlatformUI.getWorkbench().getSharedImages().getImage( ISharedImages.IMG_OBJ_FILE );
IDE - org.eclipse.ui.ide
IDE 插件将更多图像添加到 workbench 图像注册表,并在 IDE.ISharedImages
中列出已注册的名称。
要获取图像描述符,还可以像这样查询 workbench 的图像注册表:
PlatformUI.getWorkbench().getSharedImages().getImage( IDE.ISharedImages.IMG_OBJ_PROJECT );
调试 - org.eclipse.ui.调试
调试插件在IDebugUIConstants
中定义共享图片,图片名称常量以IMG_
开头。可以通过 DebugUITools
实用程序 class.
访问它们
例如:
DebugUITools.getImageDescriptor( IDebugUIConstants.IMG_ACT_RUN );
比较 - org.eclipse.compare
比较插件直接在 CompareUI
.
中为 Next 和 Previous 图像定义 ImageDescritpors
例如:
ImageDescriptor next = CompareUI.DESC_DTOOL_NEXT;
团队 - org.eclipse.team.ui
团队插件也使用ISharedImage
接口来声明叠加图像来装饰修改过的、冲突的等资源。
图像描述符可以通过TeamImages
class获得:
ImageDescriptor imageDescriptor = TeamImages.getImageDescriptor( ISharedImages.IMG_DIRTY_OVR );
JDT - org.eclipse.jdt.ui
JDT 在提供图像时与 workbench 对齐。它的 ISharedImages
接口定义了注册的名称,JavaUI.getSharedImages()
允许获取相应的图像描述符。
直接访问图像
AbstractUIPlugin
有一个静态辅助方法来获取任意插件中图像的描述符。
ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin( "the.bundle.id", "/icons/sample-image.png" );
警告:以这种方式加载图像是有风险的,一般应避免ided。图像位置不是插件的一部分 API,插件作者可能会选择删除或移动图像,这会破坏您的代码。如果您需要证明这确实发生了,请查看 this post.
如果您需要来自无法通过其 API 提供的插件的图像,您应该更愿意将该图像的副本放入您的插件中。
如果一个插件希望重新使用由其他插件定义的图像,应该寻找哪些地方。
例如,如果插件需要 'Terminate' 图标,在调试插件的某处定义,则在哪里查找。
我时不时地搜索图像,尽管将常用图像的位置列在一个地方会很有用。
一些平台插件通过 ImageDescriptor
s 使它们的(部分)图像可用。不幸的是,所有方式都略有不同。
平台UI - org.eclipse.ui
此插件定义图像供 public 在 ISharedImages
中使用。要获取图像描述符,请像这样查询 workbench 的图像注册表:
PlatformUI.getWorkbench().getSharedImages().getImage( ISharedImages.IMG_OBJ_FILE );
IDE - org.eclipse.ui.ide
IDE 插件将更多图像添加到 workbench 图像注册表,并在 IDE.ISharedImages
中列出已注册的名称。
要获取图像描述符,还可以像这样查询 workbench 的图像注册表:
PlatformUI.getWorkbench().getSharedImages().getImage( IDE.ISharedImages.IMG_OBJ_PROJECT );
调试 - org.eclipse.ui.调试
调试插件在IDebugUIConstants
中定义共享图片,图片名称常量以IMG_
开头。可以通过 DebugUITools
实用程序 class.
例如:
DebugUITools.getImageDescriptor( IDebugUIConstants.IMG_ACT_RUN );
比较 - org.eclipse.compare
比较插件直接在 CompareUI
.
例如:
ImageDescriptor next = CompareUI.DESC_DTOOL_NEXT;
团队 - org.eclipse.team.ui
团队插件也使用ISharedImage
接口来声明叠加图像来装饰修改过的、冲突的等资源。
图像描述符可以通过TeamImages
class获得:
ImageDescriptor imageDescriptor = TeamImages.getImageDescriptor( ISharedImages.IMG_DIRTY_OVR );
JDT - org.eclipse.jdt.ui
JDT 在提供图像时与 workbench 对齐。它的 ISharedImages
接口定义了注册的名称,JavaUI.getSharedImages()
允许获取相应的图像描述符。
直接访问图像
AbstractUIPlugin
有一个静态辅助方法来获取任意插件中图像的描述符。
ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin( "the.bundle.id", "/icons/sample-image.png" );
警告:以这种方式加载图像是有风险的,一般应避免ided。图像位置不是插件的一部分 API,插件作者可能会选择删除或移动图像,这会破坏您的代码。如果您需要证明这确实发生了,请查看 this post.
如果您需要来自无法通过其 API 提供的插件的图像,您应该更愿意将该图像的副本放入您的插件中。