如何使用 IResourceChangeListener 检测文件重命名并动态设置 EditorPart 名称?
How to use an IResourceChangeListener to detect a file rename and set the EditorPart name dynamically?
IResourceChangeListener
监听项目工作区的变化,例如编辑器零件文件名是否发生变化。
我想知道如何访问那个特定的 EditorPart
并相应地更改其标题名称(例如使用 .setPartName
),或者刷新编辑器以便它自动显示新名称。
理想情况是 IResourceChangeListener
具有 重命名 事件类型但似乎不是 case。
参考.
IResourceChangeListener
会使用 REMOVED
种类和 MOVED_TO
标志的组合为 rename/move 事件触发)。您可以在 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
监听项目工作区的变化,例如编辑器零件文件名是否发生变化。
我想知道如何访问那个特定的 EditorPart
并相应地更改其标题名称(例如使用 .setPartName
),或者刷新编辑器以便它自动显示新名称。
理想情况是 IResourceChangeListener
具有 重命名 事件类型但似乎不是 case。
参考
IResourceChangeListener
会使用 REMOVED
种类和 MOVED_TO
标志的组合为 rename/move 事件触发)。您可以在 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
}