/*******************************************************************************
* Copyright (c) 2007, 2016 Intel 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:
* Intel Corporation - initial API and implementation
* IBM Corporation
*******************************************************************************/
package org.eclipse.cdt.ui.wizards;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
/**
* This class is basic implementation for ICWizardHandler interface.
* It is independent of managed build system, and, so, almost useless
* It creates "empty" project with no specific.
*
* Its descendants should overwrite some methods,
* including createProject() and handleSelection()
*
* This object is created per each Project type
* on the left pane of New Project Wizard page
*
* It is responsible for:
* - corresponding line in left pane of 1st wizard page
* - whole view of right pane
* - processing preferred items, if any.
* - providing data for ConfigPage
* - processing data received from config page
*
*/
public class CWizardHandler implements Cloneable {
protected static final Image IMG0 = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_EMPTY);
protected static final Image IMG1 = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_PREFERRED);
protected String head;
protected String name;
protected Composite parent;
protected Table table;
protected boolean supportedOnly = true;
public CWizardHandler(Composite _parent, String _head, String _name) {
parent = _parent;
head = _head;
name = _name;
}
/**
* Called when user selects corresponding item in wizard tree
*
* @parame pane - parent for handler-specific data
*/
public void handleSelection() {
List<String> preferred = CDTPrefUtil.getPreferredTCs();
if (table == null) {
table = new Table(parent, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER);
TableItem ti = new TableItem(table, SWT.NONE);
ti.setText("---"); //$NON-NLS-1$
ti.setImage(IMG0);
table.select(0);
}
updatePreferred(preferred);
table.setVisible(true);
parent.layout();
}
/**
* Called when user leaves corresponding item in wizard tree
*/
public void handleUnSelection() {
if (table != null) {
table.setVisible(false);
}
}
/**
* @return text for label above handler-specific pane
*/
public String getHeader() { return head; }
/**
* @return text for label in left tree
*/
public String getName() { return name; }
/**
* @return null if data is consistent
* else returns error message
*/
public String getErrorMessage() { return null; }
/**
* Defines whether only supported project types and toolchains are displayed
* @param supp
*/
public void setSupportedOnly(boolean supp) { supportedOnly = supp;}
/**
* @return true if only supported project types and toolchains are displayed
*/
public boolean supportedOnly() { return supportedOnly; }
/**
* @return true if handler is able to process preferred toolchains
*/
public boolean supportsPreferred() { return false; }
/**
* @return 1st handler-specific page
*/
public IWizardPage getSpecificPage() { return null; }
/**
* Asks handler to update its data according to preferred list.
* Usually, marks preferred toolchains somehow (icon, font etc)
* @param prefs - list of strings (preferred Toolchain IDs)
*/
public void updatePreferred(List<String> prefs) {}
/**
* Creates project
*
* @param proj - simple project to be used as base
* @param defaults - true if called from 1st Wizard page
* @throws CoreException
*/
public void createProject(IProject proj, boolean defaults)
throws CoreException {}
/**
* Creates project
*
* @param proj - simple project to be used as base
* @param defaults - true if called from 1st Wizard page
* @param onFinish - true when the project creation is performed on finish. false -otherwise
* false means that the project created is actually a temporary one that can be removed in case cancel is pressed
*
* @throws CoreException
*/
public void createProject(IProject proj, boolean defaults, boolean onFinish)
throws CoreException {
createProject(proj, defaults);
}
/**
* Creates project
*
* @param proj - simple project to be used as base
* @param defaults - true if called from 1st Wizard page
* @param monitor - progress monitor to track the creation process
* @throws CoreException
* @since 5.1
*/
public void createProject(IProject proj, boolean defaults, IProgressMonitor monitor)
throws CoreException {}
/**
* Creates project
*
* @param proj - simple project to be used as base
* @param defaults - true if called from 1st Wizard page
* @param onFinish - true when the project creation is performed on finish. false -otherwise
* false means that the project created is actually a temporary one that can be removed in case cancel is pressed
* @param monitor - progress monitor to track the creation process
*
* @throws CoreException
* @since 5.1
*/
public void createProject(IProject proj, boolean defaults, boolean onFinish, IProgressMonitor monitor)
throws CoreException {
createProject(proj, defaults, monitor);
}
/**
* Converts an already created project
*
* @param proj - the project to convert
*
* @throws CoreException
* @since 5.1
*/
public void convertProject(IProject proj, IProgressMonitor monitor) throws CoreException {}
/**
*
* @return true if settings were changed
* since last call to saveState()
*/
public boolean isChanged() { return true; }
/**
* Stores current internal settings
*/
public void saveState() {}
/**
* Called when Finish button pressed,
* even if project was created before.
*
* @param prj - affected project
* @param created - true if the project was created before
*/
public void postProcess(IProject prj, boolean created) {
doTemplatesPostProcess(prj);
doCustom(prj);
}
/**
* Checks whether this item can be added to Wizard tree
*
* @param data - Wizard Item data to be added
* as child to current Wizard item
* @return - true if item can be added.
*/
public boolean isApplicable(EntryDescriptor data) { return true; }
/**
* Initializes the handler to be used for the specified entry
*
* @param data - Wizard Item data to be handled
* @throws CoreException
*/
public void initialize(EntryDescriptor data) throws CoreException {}
public boolean canFinish() {return true;}
@Override
public Object clone() {
try {
CWizardHandler clone = (CWizardHandler)super.clone();
clone.parent = parent;
clone.head = head;
clone.name = name;
return clone;
} catch (CloneNotSupportedException e) { return null; }
}
/**
* @deprecated since CDT 6.1.
*/
@Deprecated
public static String removeSpaces(String s) {
char[] cs = s.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i=0; i<cs.length; i++) {
if (Character.isWhitespace(cs[i]))
continue;
sb.append(cs[i]);
}
return sb.toString();
}
/**
* Called after project creation in order to apply
* template-specific settings.
*
* Can be called 2 or more times:
* - each time when user presses <Advanced Settings> button
* - when user presses <Finish> button.
* If <Adv. settings> were not invoked, called once.
*
* Since the project is cleared before each method call,
* no need to check whether it has been called before.
*
* @param prj - affected project.
*/
protected void doTemplatesPostProcess(IProject prj) {}
/**
* Called after project creation in order to apply
* settings from custom pages.
*
* Can be called 2 or more times:
* - each time when user presses <Advanced Settings> button
* - when user presses <Finish> button.
* If <Adv. settings> were not invoked, called once.
*
* Since the project is cleared before each doCustom() call,
* no need to check whether it has been called before.
* @param prj - affected project.
*/
protected void doCustom(IProject prj) {}
}