开发者

Change Eclipse toolbar icon dynamically

I've got a toolbar item with its own icon, defined in 开发者_如何转开发the plugin.xml file like:

<action
class="MyActionClass"
id="MyActionID"
label="MyActionLabel"
menubarPath="MyActionMenuBarPath"
toolbarPath="MyActionToolBarPath"
icon="icon/myicon.png" <---- this one
     ...
</action>

How do I change this dynamically when needed? I mean changing it from code


Use org.eclipse.ui.menus extension point instead and add menuContribution with dynamic. The class of dynamic should subclass ControlContribution and implement createControl method to create a button.


You should implements IElementUpdater in your Handler class.
Please refer to : https://stackoverflow.com/a/23742598/2893073

  1. Handler class

    import java.util.Map;    
    import org.eclipse.core.commands.AbstractHandler;
    import org.eclipse.core.commands.ExecutionEvent;
    import org.eclipse.core.commands.ExecutionException;
    import org.eclipse.jface.resource.ImageDescriptor;
    import org.eclipse.ui.commands.IElementUpdater;
    import org.eclipse.ui.menus.UIElement;    
    import com.packpub.e4.menu.Activator;     
    public class SampleHandler2 extends 
                 AbstractHandler implements IElementUpdater{       
        private static ImageDescriptor image_enable = 
            Activator.getImageDescriptor("icons/btn_adapt_enable.png");
        private static ImageDescriptor image_disable = 
            Activator.getImageDescriptor("icons/btn_adapt_disable.png");        
        /**
         * The constructor.
         */
        public SampleHandler2() {
    
        }    
        /**
         * the command has been executed, so extract extract the needed information
         * from the application context.
         */
        public Object execute(ExecutionEvent event) throws ExecutionException {
            //...
            return null;
        }    
        @Override
        public void updateElement(UIElement element, @SuppressWarnings("rawtypes") Map map) {
            boolean condition = false;            
            //...            
            if( condition ) { 
                element.setIcon(image_disable);
            }else{
                element.setIcon(image_enable);
            }        
        }
    }
    
  2. invoke this Handler using ICommandService:

        IWorkbenchWindow window = part.getSite().getWorkbenchWindow();
        ICommandService commandService = (ICommandService) window.getService(ICommandService.class);
        if (commandService != null) {
            commandService.refreshElements("com.packpub.e4.menu.commands.sampleCommand", null);
        }
    

Thanks.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜