blob: ef0bd8b5290ec7034ddc69861cd42c48d5f31b6d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.ui.internal.menus;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
import org.eclipse.ui.internal.util.Util;
import org.eclipse.ui.menus.IWorkbenchContribution;
import org.eclipse.ui.menus.WorkbenchWindowControlContribution;
/**
* This is a proxy object for instantiating the real as provided by a plug-in
* WorkbenchWindowControlContribution subclass.
*/
public class CompatibilityWorkbenchWindowControlContribution {
public static final String CONTROL_CONTRIBUTION_URI = "bundleclass://org.eclipse.ui.workbench/org.eclipse.ui.internal.menus.CompatibilityWorkbenchWindowControlContribution"; //$NON-NLS-1$
private WorkbenchWindowControlContribution contribution;
/**
* Constructs the control contribution that this proxy represents.
*
* @param window
* the window that this control contribution is under
* @param toolControl
* the tool control representing this contribution
* @param composite
* the composite to create or parent the control under
*/
@PostConstruct
void construct(MWindow window, MToolControl toolControl, Composite composite) {
IConfigurationElement configurationElement = ControlContributionRegistry.get(toolControl
.getElementId());
if (configurationElement != null) {
contribution = (WorkbenchWindowControlContribution) Util.safeLoadExecutableExtension(
configurationElement, IWorkbenchRegistryConstants.ATT_CLASS,
WorkbenchWindowControlContribution.class);
if (contribution != null) {
IWorkbenchWindow workbenchWindow = window.getContext().get(IWorkbenchWindow.class);
contribution.setWorkbenchWindow(workbenchWindow);
if (contribution instanceof IWorkbenchContribution) {
((IWorkbenchContribution) contribution).initialize(workbenchWindow);
}
MUIElement parent = toolControl.getParent();
while (!(parent instanceof MTrimBar)) {
parent = parent.getParent();
}
switch (((MTrimBar) parent).getSide()) {
case BOTTOM:
contribution.setCurSide(SWT.BOTTOM);
break;
case LEFT:
contribution.setCurSide(SWT.LEFT);
break;
case RIGHT:
contribution.setCurSide(SWT.RIGHT);
break;
case TOP:
contribution.setCurSide(SWT.TOP);
break;
}
contribution.delegateCreateControl(composite);
}
}
}
@PreDestroy
void dispose() {
if (contribution != null) {
contribution.dispose();
contribution = null;
}
}
}