/**
* 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);
}
}
}