blob: 1f5229102ea60f2b72edede4d0cccd09335156fc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2017 QNX Software Systems and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.cdt.internal.ui.build;
import org.eclipse.cdt.internal.ui.CUIMessages;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.build.ToolChainWizard;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ResourceLocator;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class NewToolChainWizardSelectionPage extends WizardPage {
private Table table;
public NewToolChainWizardSelectionPage() {
super(NewToolChainWizardSelectionPage.class.getName());
setTitle(CUIMessages.NewToolChainWizardSelectionPage_Title);
setDescription(CUIMessages.NewToolChainWizardSelectionPage_Description);
setPageComplete(false);
}
@Override
public void createControl(Composite parent) {
Composite comp = new Composite(parent, SWT.NONE);
comp.setLayout(new GridLayout());
table = new Table(comp, SWT.BORDER | SWT.SINGLE);
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
IExtensionPoint point = Platform.getExtensionRegistry()
.getExtensionPoint(CUIPlugin.PLUGIN_ID + ".newToolChainWizards"); //$NON-NLS-1$
for (IExtension extension : point.getExtensions()) {
for (IConfigurationElement element : extension.getConfigurationElements()) {
String name = element.getAttribute("name"); //$NON-NLS-1$
TableItem item = new TableItem(table, SWT.NONE);
item.setText(name);
String iconFile = element.getAttribute("icon"); //$NON-NLS-1$
if (iconFile != null) {
ImageDescriptor desc = ResourceLocator
.imageDescriptorFromBundle(element.getNamespaceIdentifier(), iconFile).get();
if (desc != null) {
item.setImage(desc.createImage());
}
}
item.setData(element);
}
}
table.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
getContainer().updateButtons();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
widgetSelected(e);
if (canFlipToNextPage()) {
getContainer().showPage(getNextPage());
}
}
});
setControl(comp);
}
@Override
public void dispose() {
for (TableItem item : table.getItems()) {
Object obj = item.getData();
if (obj instanceof Wizard) {
((Wizard) obj).dispose();
}
}
super.dispose();
}
public ImageDescriptor getDescriptionImage(IConfigurationElement element) {
String descImage = element.getAttribute("icon"); //$NON-NLS-1$
if (descImage == null) {
return null;
}
return ResourceLocator.imageDescriptorFromBundle(element.getNamespaceIdentifier(), descImage).get();
}
@Override
public boolean canFlipToNextPage() {
return table.getSelectionIndex() >= 0;
}
@Override
public IWizardPage getNextPage() {
int i = table.getSelectionIndex();
if (i >= 0) {
TableItem item = table.getItem(i);
Object obj = item.getData();
ToolChainWizard nextWizard;
if (obj instanceof IConfigurationElement) {
IConfigurationElement element = (IConfigurationElement) obj;
try {
nextWizard = (ToolChainWizard) element.createExecutableExtension("class"); //$NON-NLS-1$
nextWizard.addPages();
item.setData(nextWizard);
} catch (CoreException e) {
CUIPlugin.log(e);
return null;
}
} else {
nextWizard = (ToolChainWizard) obj;
}
return nextWizard.getStartingPage();
}
return super.getNextPage();
}
}