/** * Creation : 10/04/2008 * Author : Laurent Muller * Copyright : © 2008 HaslerRail AG. All rights reserved. */ package com.haslerrail.rcp.utils.handlers; import java.util.ArrayList; import java.util.HashMap; import java.util.List; 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.ui.IWorkbenchWindow; import org.eclipse.ui.commands.ICommandService; import org.eclipse.ui.commands.IElementUpdater; import org.eclipse.ui.handlers.HandlerUtil; import org.eclipse.ui.internal.WorkbenchWindow; import org.eclipse.ui.internal.layout.ITrimManager; import org.eclipse.ui.internal.layout.IWindowTrim; import org.eclipse.ui.menus.UIElement; import org.eclipse.ui.services.IServiceScopes; import com.haslerrail.rcp.utils.internal.Messages; /** * Handler to show or hide the status bar. *

* Note: This handler works only with an * org.eclipse.ui.internal.WorkbenchWindow class. * * @author Laurent Muller * @version 1.0 */ @SuppressWarnings("restriction") public class ToggleStatusbarHandler extends AbstractHandler implements IElementUpdater { /* * the hidden trims */ private final List windowTrims = new ArrayList(); @Override public Object execute(final ExecutionEvent event) throws ExecutionException { try { // get workbench window final IWorkbenchWindow activeWindow = HandlerUtil .getActiveWorkbenchWindowChecked(event); if (activeWindow == null || !(activeWindow instanceof WorkbenchWindow)) { return null; } final WorkbenchWindow window = (WorkbenchWindow) activeWindow; // get trim manager final ITrimManager manager = window.getTrimManager(); if (manager == null) { return null; } if (windowTrims.size() == 0) { // hide bottom controls final Object[] objects = manager.getAreaTrim( ITrimManager.BOTTOM).toArray(); for (final Object current : objects) { final IWindowTrim currentTrim = (IWindowTrim) current; manager.setTrimVisible(currentTrim, false); windowTrims.add(currentTrim); } } else { // display bottom controls for (final IWindowTrim current : windowTrims) { manager.setTrimVisible(current, true); } windowTrims.clear(); } // update layout window.getShell().layout(); // refresh element final ICommandService commandService = (ICommandService) window .getService(ICommandService.class); final Map filter = new HashMap(); filter.put(IServiceScopes.WINDOW_SCOPE, window); commandService.refreshElements(event.getCommand().getId(), filter); } catch (final Exception e) { e.printStackTrace(); } return null; } @Override @SuppressWarnings("unchecked") public void updateElement(final UIElement element, final Map parameters) { if (windowTrims.size() == 0) { element.setText(Messages.ToggleStatusbarHandler_Hide_Text); } else { element.setText(Messages.ToggleStatusbarHandler_Show_Text); } } }