2012-07-02 22 views
4

我试图添加一个条目到包浏览器弹出上下文菜单,该条目在选择条目时在编辑器中打开文件的修改版本。如何添加一个条目到eclipse Package Explorer上下文菜单来启动TextEditor?

我在Fedora 15笔记本电脑上使用Eclipse Indigo。

下面是一个非常具体的问题,可能会充分重点关注,并可能提供我需要的帮助来解决我所遇到的一般问题。

Eclipse提供了一个名为org.eclipse.ui.examples.readmetool的示例插件,可以从帮助 - >欢迎页面进行设置。

这个插件定义了一个名为ReadmeEditor.java的编辑器。它还在plugin.xml中定义了一个扩展点“org.eclipse.ui.popupMenus”。当您在后缀为“.readme”的文件的eclipse Project Explorer视图中使用此操作时,您只会看到一个弹出式窗口。

如何更改readmetool插件,以便在foo.readme文件中选择上述定义的Project Explorer菜单项时,您将在eclipse中获得一个新的ReadmeEditor,并在其中包含foo.readme?

更具体的项目需要我挣扎如下:

  • 从包资源管理器,浏览到一个文件中。

  • 右键单击该文件,以获得一个弹出式上下文菜单

  • 看到一个新条目“版视图”

  • 在选择该条目,找到该文件,通过外部运行程序创建临时文件,并在新的TextEditor窗口中显示该临时文件的内容。 (而且,不要留下一个孤儿它不再需要后周围的临时文件。)

我有一些上述作品代替;我扩充了MultiPageEditor示例,以便它可以执行运行外部程序,创建临时文件以及在文本编辑器中打开临时文件的工作。

但是,我目前可以访问该功能的唯一方法是在项目浏览器中的文件的弹出上下文窗口中选择“打开方式”选项,然后转到该窗口中的“其他”并选择我的新编辑器选项。

所以,我现在坚持的是如何将正确的魔法添加到plugin.xml中,以便在项目管理器弹出上下文窗口中获得新选项,并将其与新的TextEditor窗口连接起来。

这看起来非常像香草“打开”选项会做什么,看起来这应该是在eclipse中做的一件非常基本的事情。任何示例和/或指导将不胜感激。

格雷格

回答

2

readmetool示例已经提供了一种用于上下文菜单操作。自述文件:

<extension 
    point="org.eclipse.ui.popupMenus"> 
    <objectContribution 
     objectClass="org.eclipse.core.resources.IFile" 
     nameFilter="*.readme" 
     id="org.eclipse.ui.examples.readmetool"> 
    <action 
      label="%PopupMenus.action" 
      icon="$nl$/icons/ctool16/openbrwsr.gif" 
      helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context" 
      class="org.eclipse.ui.examples.readmetool.PopupMenuActionDelegate" 
      menubarPath="additions" 
      enablesFor="1" 
      id="org.eclipse.ui.examples.readmetool.action1"> 
    </action> 
    </objectContribution> 
    ... 
</extension> 

它被命名为Show Readme Action,但你可以通过编辑包含相应的标签名称plugin.properties其重命名为Version view

PopupMenus.action = &Version view 

那么你只需要编辑PopupMenuActionDelegate并更改其实现你想做的事:

public class PopupMenuActionDelegate implements IObjectActionDelegate { 

    public void run(IAction action) { 
     // invoke the external tool and open the result in a new editor 
    } 
    ... 
} 
+0

非常感谢您的有益的建议。现在我正在努力的是在上面的“运行”操作内部得到一个TextEditor。目前我很乐意创建一个虚拟文件“/ tmp/samplefile”,并在eclipse中弹出一个包含该文件内容的编辑器。 – user691307

+0

你可以在这里找到答案:http://wiki.eclipse。org/FAQ_How_do_I_open_an_editor_on_a_file_outside_the_workspace%3F – rgerganov

+0

谢谢!该页面引用了一个我不知道如何查找或初始化的对象“窗口”:“IWorkbenchPage page = window.getActivePage();”我是否必须以某种方式创建一个新的编辑器窗口? – user691307

1

这是一个小的,独立的例子,让一个编辑器窗口打开以响应选择弹出窗口选项。作为测试,它会打开一个带有硬连线名称的文件。

public void run(IAction action) { 
    try { 
     IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
     File f = new File("/tmp/testum"); 
     IPath ipath = new Path(f.getAbsolutePath()); 
     IWorkbenchPage page = window.getActivePage(); 
     IDE.openEditorOnFileStore(page, EFS.getLocalFileSystem().getStore(ipath)); 
    } catch (Exception blah) { 
     System.err.println("Exception!"); 
    } 
} 
6

下面是一个简洁但完整的设置和使用项目的例子。 (网络冲浪有很多关于日食的建议,但它往往是相当分裂和零散的,当我努力解决我的问题时,有一个完整的,独立的HOWTO是有帮助的。所以,这是这..)

这个配方假定您使用的是Eclipse靛蓝或与朱诺:

  • Eclipse IDE的Java开发人员
  • Eclipse插件开发环境。

要确认从Eclipse中的不同,请参阅

Help -> About Eclipse -> Installation Details -> Installed Software 
  1. 启动的Ecipse靛蓝,用新的,空的工作区:

    you, before starting eclipse: 
          move or delete ~/eclipse.d/popup_workspace.d 
          mkdir -p ~/eclipse.d/popup_workspace.d 
    start eclipse: eclipse 
    eclipse: "Select a workspace" 
    you:  "Browse", navigate to above-created popup_workspace.d; "OK" "OK" 
    eclipse: "Welcome to Eclipse IDE for Java Developers" 
    you:  select "Workbench" 
    
  2. 创建一个新的项目,使用Plug-in Project作为一个方便的出发点:

    you:  File -> New -> Project 
    eclipse: "Select a wizard: 
    you:  Plug-in Development -> Plug-in Project; Next> 
    eclipse: "Plug-in Project" 
    you:  Project name: org.mypopup.popup_editor Next> 
    eclipse: "Content" 
    you:  Next> 
    eclipse: "Templates" 
    you:  Plug-in with a popup menu    Finish 
    eclipse: "This kind of project is associated with the 
          Plug-in Development perspective..." 
    you:  Yes 
    
  3. 在“包资源管理器,浏览到NewActions.java并双击打开:

    org.mypopup.popup_editor 
        -> src 
         -> org.mypopup.popup_editor.popup.actions 
          -> NewAction.java 
    
    delete entire contents and replace with: 
    
    package org.mypopup.popup_editor.popup.actions; 
    
    import org.eclipse.jface.viewers.TreeSelection; 
    import org.eclipse.jface.viewers.TreePath; 
    import org.eclipse.core.resources.IFile; 
    import org.eclipse.core.filesystem.EFS; 
    import org.eclipse.core.runtime.IPath; 
    import org.eclipse.jface.action.IAction; 
    import org.eclipse.jface.viewers.ISelection; 
    import org.eclipse.ui.IObjectActionDelegate; 
    import org.eclipse.ui.IWorkbenchPage; 
    import org.eclipse.ui.IWorkbenchPart; 
    import org.eclipse.ui.IWorkbenchWindow; 
    import org.eclipse.ui.PlatformUI; 
    import org.eclipse.ui.ide.IDE; 
    
    public class NewAction implements IObjectActionDelegate { 
        public NewAction() { 
         super(); 
        } 
    
        public void run(IAction action) { 
         try { 
          IWorkbenchWindow window = 
            PlatformUI.getWorkbench().getActiveWorkbenchWindow(); 
    
          ISelection selection = window.getSelectionService() 
            .getSelection("org.eclipse.ui.navigator.ProjectExplorer"); 
    
          TreePath[] paths = ((TreeSelection) selection).getPaths(); 
          TreePath p = paths[0]; 
          Object last = p.getLastSegment(); 
    
          if (last instanceof IFile) { 
           IPath ipath = ((IFile) last).getLocation(); 
    
           IWorkbenchPage page = window.getActivePage(); 
    
           IDE.openEditorOnFileStore(page, 
             EFS.getLocalFileSystem().getStore(ipath)); 
          } 
         } catch (Exception blah) { 
         } 
        } 
    
        public void setActivePart(IAction action, IWorkbenchPart targetPart) { } 
    
        public void selectionChanged(IAction action, ISelection selection) { } 
    } 
    
  4. 添加依赖于项目能够解决进口:

    in Package Explorer, navigate to and open META-INF -> MANIFEST.MF 
    
    Select "Dependencies" tab along the bottom of the resulting 
    "org.mypopup.plugin_editor" window 
    
    "Add..."; "Select a Plug-in:" enter org.eclipse.core.filesystem; "OK" 
    "Add..."; "Select a Plug-in:" enter org.eclipse.ui.ide; "OK" 
    
    File -> Save my.popup.popup_editor 
    
  5. 运行一个新的空白目标目录的新项目:

    outside of eclipse, browse to the directory containing popup_workspace.d, 
    in this case ~/eclipse.d, and if a folder "runtime-EclipseApplication" 
    exists, move it or delete it. 
    
    right-click META-INF -> MANIFEST.MF, select Run As -> Eclipse Application 
    
    in new eclipse window: 
    eclipse: "Welcome to Eclipse" 
    you:  select "Workbench" 
    you:  File -> New -> Project 
    eclipse: "Select a wizard" 
    you:  General -> Project    Next> 
    eclipse: "Project" 
    you:  project name popup_test   Finish 
    you:  in Project Explorer, right-click popup_test, select New -> File 
    eclipse: "File" 
    you:  File name: test_file1   Finish 
    you:  enter a little text in test_file1, File -> Save; File -> Close 
    
  6. 重要的时刻:打开一个新的弹出菜单项中的文件:

    in Project Explorer, right-click popup_test -> test_file1 
    select New Submenu -> New Action 
    
+0

有一个util函数用于检索选择: TreeSelection selection =((TreeSelection)HandlerUtil.getActiveMenuSelectionChecked(event)); –

相关问题