【问题标题】:How to use an IResourceChangeListener to detect a file rename and set the EditorPart name dynamically?如何使用 IResourceChangeListener 检测文件重命名并动态设置 EditorPart 名称?
【发布时间】:2015-07-22 02:58:37
【问题描述】:

IResourceChangeListener 监听项目工作区中的更改,例如,如果编辑器部件文件名已更改。

我想知道如何访问特定的EditorPart 并相应地更改其标题名称(例如使用.setPartName),或者刷新编辑器以使其自动显示新名称。

如果IResourceChangeListener 具有重命名 事件类型但似乎不是case,则理想情况。

参考question

【问题讨论】:

    标签: eclipse user-interface eclipse-plugin eclipse-rcp


    【解决方案1】:

    IResourceChangeListener 使用 REMOVED 类型和 MOVED_TO 标志的组合触发重命名/移动事件。您可以在IResourceDelta 中使用

    进行测试
    @Override
    public void resourceChanged(final IResourceChangeEvent event)
    {
      IResourceDelta delta = event.getDelta();
    
      // Look for change to our file
    
      delta = delta.findMember(IPath of file being edited);
      if (delta == null)
        return;
    
      if delta.getKind() == IResourceDelta.REMOVED
       {
         if ((delta.getFlags() & IResourceDelta.MOVED_TO) != 0)
          {
            IPath newPath = delta.getMovedToPath();
    
            ... handle new path
          }
       }
    }
    

    处理新路径的代码可能类似于:

    IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(newPath);
    if (file != null)
     {
       setInput(new FileEditorInput(file));
    
       setPartName(newPath.lastSegment());
    
       ... anything else required 
     }
    

    【讨论】:

    • 如何从实现IResourceChangeListener 的其他侦听器类访问编辑器部分的setInputsetPartName 命令?
    • 您必须在 EditorPart 中创建侦听器并将其传递给部件的引用。然后,您可以调用您编写的方法来处理新路径。
    • 我所展示的基本上是 Eclipse 编辑器所做的。对于文本编辑器,还有更多工作要做,因为必须更新文档提供程序等内容。
    • @Lii setInput 只是调用 setInputWithNotify 所以做同样的事情。
    • @Lii 对于普通的EditorPart setInputWithNotify 确实设置了输入并进行了通知 - 它实际上并没有调用setInput 方法。令文本编辑器感到困惑的是AbstractTextEditor 会覆盖此行为并让setInput 调用setInputWithNotify
    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多