2016-07-31 17 views
3

我用裝飾器創建了一個插件,它將當前文件作爲輸入並顯示適當的裝飾器。如何更新文件保存的修飾器?

這是工作正常,裝飾器顯示正確,當日食加載第一次。

但是,當文件更改時,裝飾器不會更新。

如何在每次修改文件時更新修飾器?即我如何更新文件保存事件上的裝飾器?

這是示例代碼

public class Decorator implements ILightweightLabelDecorator { 

    private final ImageDescriptor OVERLAY1 = AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/1.png"); 
    private final ImageDescriptor OVERLAY2 = AbstractUIPlugin.imageDescriptorFromPlugin(Activator.PLUGIN_ID, "icons/2.png"); 

    /* 
    * (non-Javadoc) 
    * 
    * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) 
    */ 
    @Override 
    public void addListener(ILabelProviderListener listener) { 
     // TODO Auto-generated method stub 
     // IResourceChangeEvent.POST_CHANGE 

    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() 
    */ 
    @Override 
    public void dispose() { 
     // TODO Auto-generated method stub 

    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) 
    */ 
    @Override 
    public boolean isLabelProperty(Object element, String property) { 
     // TODO Auto-generated method stub 
     return false; 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) 
*/ 
    @Override 
    public void removeListener(ILabelProviderListener listener) { 
     // TODO Auto-generated method stub 

    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration) 
    */ 
    @Override 
    public void decorate(Object element, IDecoration decoration) { 
     if (some_condition) 
      decoration.addOverlay(OVERLAY1); 
     else 
      decoration.addOverlay(OVERLAY2); 
    } 
} 

回答

2

你可以要求IDecoratorManager使用更新與特定ID裝飾品:

IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager(); 

decoratorManager.update("decorator id"); 

要做到這一點的文件保存你將不得不使用一個IResourceChangeListener來監聽工作區資源的變化,並在您看到文件被更改時作出反應。

建立一個監聽器有:

ResourcesPlugin.getWorkspace().addResourceChangeListener(listener); 

IResourceChangeListener,你可以這樣做:

public void resourceChanged(IResourceChangeEvent event) { 
    IResourceDelta delta = event.getDelta(); 

    IResourceDelta fileDelta = delta.findMember(IPath of file you are interested in); 

    if (fileDelta != null) { 
     // TODO handle the delta 
    } 
} 
+0

會不會是適當加入'ResourcesPlugin.getWorkspace()來設置監聽addResourceChangeListener (偵聽器)''ILLightWeightDecorator'的'addListener(ILabelProviderListener)'方法?什麼可以是其他程序來建立監聽器? –

+0

您可以將它添加到裝飾器構造函數中(並在dispose方法中將其刪除)。 –

相關問題