【问题标题】:Eclipse RCP: Does CNF without IDE plug-in require custom ContentProvider?Eclipse RCP:没有IDE插件的CNF是否需要自定义ContentProvider?
【发布时间】:2011-04-13 19:20:19
【问题描述】:

在 RCP 应用程序中,我想创建一个 Common Navigator Framework 视图,从本地文件系统上的资源开始。

我在一个包含 org.eclipse.ui.ide 插件的项目中做到了这一点。但是,这会创建一个过于复杂且不适合此应用程序的 UI。 (例如,它添加了大约 20 个首选项面板,其中一些与构建和版本控制相关。)

所以现在我尝试在不使用 ~.ide 插件的情况下执行此操作 -- 并且不使用依赖于它的 org.eclipse.ui.navigator.resources 插件。

在 RCP 应用程序中,我已经成功地使用下面的代码创建了一个新的工作区项目(我认为),在一个带有 ~navigator.viewer 扩展名的插件中,如下所示。但是 CNF 视图中什么也没有出现。

问题:

  • 由于我排除了org.eclipse.ui.navigator.resources插件,我是否需要定义自己的内容提供者?
  • org.eclipse.ui.navigator.resources插件中的类ResourceExtensionContentProvider用来实现内容绑定org.eclipse.ui.navigator.resourceContent ?

plugin.xml 摘录

 <extension
     point="org.eclipse.ui.navigator.viewer">
   <viewerActionBinding
        viewerId="com.mycompany.app.gen.workspace">
     <includes>
         <actionExtension pattern="org.eclipse.ui.navigator.resources.*" />
     </includes>
   </viewerActionBinding>
   <viewerContentBinding 
        viewerId="com.dnastar.app.gen.workspace">
      <includes>
         <contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />                      
     <contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper"/>
         <contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets"/>
      </includes>
   </viewerContentBinding>
 </extension>

用于创建新项目的代码(为了完整性而包含在内):

        Path path = new Path( sPath );
        File filePath = new File( sPath );
        String fileBaseName = filePath.getName();
        String projectName = fileBaseName; // For now

        IWorkspace workspace = ResourcesPlugin.getWorkspace();
        IProjectDescription projDescr = workspace.newProjectDescription( projectName );
        projDescr.setLocation( path );

        IWorkspaceRoot root = workspace.getRoot();
        IProject project = root.getProject( projectName );

        try {
            project.create( projDescr, null );

            if ( ! project.isOpen() ) {
                project.open( null );
            }
        } catch (CoreException e) {
             MessageDialog.openError( Display.getCurrent().getActiveShell(),
                     "New Project Error", "Could not create new project." + "\n[" + e + "]");
        }

【问题讨论】:

    标签: java swt eclipse-rcp rcp cnf


    【解决方案1】:

    您需要扩展它,然后重写 getInitialInput() 方法,而不是使用 CommonNavigator 类。那里返回 IWorkspaceRoot

    【讨论】:

    • 导航器窗口中仍然没有显示任何内容。子类化 CommonNavigator,并在 getInitialInput() 中返回 ResourcesPlugin.getWorkspace().getRoot()。在 plugin.xml 中,将 CommonNavigator 视图的类替换为子类。感谢您的帮助。我错过了什么吗?
    • 没有。那应该行得通。您在工作区中有任何项目吗?如果是这样,我建议您在 Eclipse Bugzilla 中提出一个错误。
    • 我需要在某处提供自定义标签提供程序吗?
    • 在一个带有插件~ide和~navigator.resources的项目中,内容是通过~navigator.resources类ResourceExtensionContentProvider获取的。
    猜你喜欢
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多