我成功地通过将以下块添加到org.eclipse.ui.menus扩展点来为我的RCP应用程序添加特定于视图的工具栏:
<menuContribution
allPopups="false"
locationURI="toolbar:my.package.path.views.ClassOfMyView">
<dynamic
class="my.package.path.toolbars.ViewToolBar"
id="MyViewToolbar">
</dynamic>
</menuContribution>
然而,尝试对我的编辑部分做同样的事情似乎不起作用:
<menuContribution
allPopups="false"
locationURI="toolbar:my.package.path.views.ClassOfMyEditorPart">
<dynamic
class="my.package.path.toolbars.EditorPartToolBar"
id="MyEditorpartToolbar">
</dynamic>
</menuContribution>
是否有一些我遗漏的明显事实,或者这在RCP中根本不受支持?
答案 0 :(得分:3)
这些是编辑和观点之间的一些重要视觉差异:
使用RCP平台的各种功能可以解决其中一些差异(标有*以上):
ISaveblePart
可以为视图提供与编辑器相同的生命周期。menues
扩展点可以将项目添加到主菜单和工具栏。views
扩展点可用于允许多个相同类型的视图。使用Eclipse 4,您还可以在同一堆栈或文件夹中组合编辑器和视图。
但添加菜单或工具栏与视图一样需要更多工作!但它可以使用Presentation API完成,其中大部分视觉差异都可以解决。
另外一条评论:不是 toolbar:my.package.path.views.ClassOfMyView
,而是toolbar:id-of-the-view
。
答案 1 :(得分:3)
关于Tonny Madsen给出的关于Presentation API的提示,我已经找到了解决问题的方法。我的解决方案基于以下文章:
为了使我的解决方案有效,我最终改变了两个文件和一个新类:
在plugin.xml文件中,我添加了以下扩展名:
<extension point="org.eclipse.ui.presentationFactories">
<factory
name="Extended Presentation Factory"
class="org.eclipse.minicrm.ui.swt.custom.ExtendedPresentationFactory"
id="org.eclipse.minicrm.ui.swt.custom.ExtendedPresentationFactory"
/>
</extension>
这似乎被Eclipse 4.x忽略了,所以为了满足这些情况,我将以下行添加到plugin_customisation.ini文件中:
org.eclipse.ui/presentationFactoryId = org.eclipse.minicrm.ui.swt.custom.ExtendedPresentationFactory
然后我创建了相应的类:
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.internal.presentations.util.TabbedStackPresentation;
import org.eclipse.ui.presentations.IStackPresentationSite;
import org.eclipse.ui.presentations.StackPresentation;
import org.eclipse.ui.presentations.WorkbenchPresentationFactory;
@SuppressWarnings("restriction")
public class ExtendedPresentationFactory extends WorkbenchPresentationFactory {
private ToolBarManager m_toolBarManager = null;
private ToolBar m_toolbar = null;
@Override
public StackPresentation createEditorPresentation(final Composite parent, final IStackPresentationSite site) {
final TabbedStackPresentation presentation = (TabbedStackPresentation) super.createViewPresentation(parent, site);
m_toolbar = new ToolBar(presentation.getTabFolder().getToolbarParent(), 0);
m_toolBarManager = new ToolBarManager(m_toolbar);
m_toolBarManager.add(new MyAction1());
m_toolBarManager.add(new MyAction2());
m_toolBarManager.add(new MyAction3());
m_toolBarManager.update(true);
presentation.getTabFolder().setToolbar(m_toolbar);
return presentation;
}
}
这会在我的编辑区域添加一个带有三个按钮的工具栏。
我仍然需要摆弄一些更精细的点(位置等),但是一开始它满足了我对编辑区域中工具栏的需求。