如何使用IResourceChangeListener检测文件重命名并动态设置EditorPart名称?

时间:2023-01-12 13:53:44

IResourceChangeListener listens to changes in project workspace for example if the editor part file name has changed.

例如,如果编辑器部件文件名已更改,则IResourceChangeListener将侦听项目工作空间中的更改。

I want to know how to access that particular EditorPart and change its title name accordingly (e.g. with .setPartName), or maybe the refresh the editor so that it shows the new name automatically.

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

Ideal would be if the IResourceChangeListener has a Rename event type but does not seem to be the case.

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

Reference question.

1 个解决方案

#1


The IResourceChangeListener does fire for rename/move events using a combination of the REMOVED kind and a MOVED_TO flag). You can test for that in the IResourceDelta with

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
      }
   }
}

The code to handle the new path might be something like:

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

IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(newPath);
if (file != null)
 {
   setInput(new FileEditorInput(file));

   setPartName(newPath.lastSegment());

   ... anything else required 
 }

#1


The IResourceChangeListener does fire for rename/move events using a combination of the REMOVED kind and a MOVED_TO flag). You can test for that in the IResourceDelta with

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
      }
   }
}

The code to handle the new path might be something like:

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

IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(newPath);
if (file != null)
 {
   setInput(new FileEditorInput(file));

   setPartName(newPath.lastSegment());

   ... anything else required 
 }