2016-07-31 1 views
3

필자는 현재 파일을 입력으로 사용하여 적절한 데코레이터를 표시하는 데코레이터로 플러그인을 만들었습니다.파일 저장시 데코레이터를 업데이트하는 방법은 무엇입니까?

이것은 잘 동작하고 데코레이터가 처음으로로드 될 때 올바르게 표시됩니다.

그러나 파일이 변경되면 데코레이터가 업데이트되지 않습니다.

파일이 수정 될 때마다 데코레이터를 업데이트하려면 어떻게해야합니까? ie 파일 저장 이벤트에서 데코레이터를 업데이트하려면 어떻게해야합니까? 당신이 사용해야 할 것입니다 저장

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

decoratorManager.update("decorator id"); 

파일에이 작업을 수행하려면 :

당신은 사용하여 특정 ID로 장식을 업데이트 IDecoratorManager을 요청할 수 있습니다 샘플 코드

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

입니다 IResourceChangeListener은 작업 공간 리소스 변경 내용을 듣고 파일이 변경된 것을 볼 때 반응합니다.

과 함께 리스너를 설정 :에서

ResourcesPlugin.getWorkspace().addResourceChangeListener(listener); 

IResourceChangeListener 당신은 같은 것을 수행 할 수 있습니다. 'ResourcesPlugin.getWorkspace()를 추가하여 리스너를 설정하는 것이 적절한 것인가

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

을 addResourceChangeListener (리스너)''addListener (ILabelProviderListener)'메소드에'ILightWeightDecorator' 메소드를 추가 했습니까? 청취자를 설치하는 다른 절차는 무엇이 될 수 있습니까? –

+0

데코레이터 생성자에 추가 할 수 있습니다 (그리고 dispose 메서드에서 제거 할 수 있음). –

관련 문제