/*******************************************************************************
* Copyright (c) 2003, 2010 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:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.ui.dialogs;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.utils.ui.controls.TabFolderLayout;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Composite;
/**
* @deprecated as of CDT 4.0. This class used in property pages
* for 3.X style projects.
*/
@Deprecated
public abstract class AbstractBinaryParserPage extends AbstractCOptionPage {
protected ICOptionPage fCurrentBinaryParserPage;
protected Map<String, BinaryParserPageConfiguration> fParserPageMap = null;
// Composite parent provided by the block.
protected Composite fCompositeParent;
private ICOptionPage fCurrentPage;
protected class BinaryParserPageConfiguration {
ICOptionPage page;
IConfigurationElement fElement;
public BinaryParserPageConfiguration(IConfigurationElement element) {
fElement = element;
}
public ICOptionPage getPage() throws CoreException {
if (page == null) {
page = (ICOptionPage) fElement.createExecutableExtension("class"); //$NON-NLS-1$
}
return page;
}
}
protected AbstractBinaryParserPage(String title) {
super(title);
initializeParserPageMap();
}
protected AbstractBinaryParserPage(String title, ImageDescriptor image) {
super(title, image);
initializeParserPageMap();
}
private void initializeParserPageMap() {
fParserPageMap = new HashMap<String, BinaryParserPageConfiguration>(5);
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(CUIPlugin.PLUGIN_ID, "BinaryParserPage"); //$NON-NLS-1$
IConfigurationElement[] infos = extensionPoint.getConfigurationElements();
for (int i = 0; i < infos.length; i++) {
if (infos[i].getName().equals("parserPage")) { //$NON-NLS-1$
String id = infos[i].getAttribute("parserID"); //$NON-NLS-1$
fParserPageMap.put(id, new BinaryParserPageConfiguration(infos[i]));
}
}
}
protected Composite getCompositeParent() {
return fCompositeParent;
}
protected void setCompositeParent(Composite parent) {
fCompositeParent = parent;
fCompositeParent.setLayout(new TabFolderLayout());
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
handleBinaryParserChanged();
}
/**
* Notification that the user changed the selection of the Binary Parser.
*/
protected void handleBinaryParserChanged() {
if (getCompositeParent() == null) {
return;
}
String[] enabled = getBinaryParserIDs();
ICOptionPage page;
for (int i = 0; i < enabled.length; i++) { // create all enabled pages
page = getBinaryParserPage(enabled[i]);
if (page != null) {
if (page.getControl() == null) {
Composite parent = getCompositeParent();
page.setContainer(getContainer());
page.createControl(parent);
parent.layout(true);
} else {
page.setVisible(false);
}
}
}
// Retrieve the dynamic UI for the current parser
String parserID = getCurrentBinaryParserID();
page = getBinaryParserPage(parserID);
if (page != null) {
page.setVisible(true);
}
setCurrentPage(page);
}
protected ICOptionPage getCurrentPage() {
return fCurrentPage;
}
protected void setCurrentPage(ICOptionPage page) {
fCurrentPage = page;
}
protected ICOptionPage getBinaryParserPage(String parserID) {
BinaryParserPageConfiguration configElement = fParserPageMap.get(parserID);
if (configElement != null) {
try {
return configElement.getPage();
} catch (CoreException e) {
}
}
return null;
}
abstract protected String getCurrentBinaryParserID();
abstract protected String[] getBinaryParserIDs();
@Override
abstract public void createControl(Composite parent);
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
abstract public void performApply(IProgressMonitor monitor) throws CoreException;
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performDefaults()
*/
@Override
abstract public void performDefaults();
}