1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Patch for Sean Evoy:

- This is a patch to allow users to add include path
and defined symbol information to a standard make
project.
- This information is required by clients like the indexer
so that a proper index can be created.
- The interface to extract that information will follow.
This commit is contained in:
Doug Schaefer 2003-06-26 17:43:36 +00:00
parent 33a3fdfac3
commit a4b262eced
10 changed files with 804 additions and 5 deletions

View file

@ -1,3 +1,14 @@
2003-06-26 Sean Evoy
Added methods to add and extract include paths and preprocessor
symbols from standard make C and C++ projects.
Getter and setter methods in:
* src/org/eclipse/cdt/core/BuildInfoFactory.java
* src/org/eclipse/cdt/core/CProjectNature.java
Added new constant for comma-separated lists
* src/org/eclipse/cdt/core/resources/IBuildInfo.java
2003-06-24 Alain Magloire 2003-06-24 Alain Magloire
Patch form ando@park.ruru.ne.jp, to deal Patch form ando@park.ruru.ne.jp, to deal

View file

@ -25,6 +25,8 @@ public class BuildInfoFactory {
public static final String STOP_ON_ERROR = "stopOnError"; public static final String STOP_ON_ERROR = "stopOnError";
// public static final String CLEAR_CONSOLE = "clearConsole"; // public static final String CLEAR_CONSOLE = "clearConsole";
public static final String DEFAULT_BUILD_CMD = "useDefaultBuildCmd"; public static final String DEFAULT_BUILD_CMD = "useDefaultBuildCmd";
public static final String INCLUDE_PATHS = "includePaths";
public static final String DEFINED_SYMBOLS = "definedSymbols";
public static abstract class Store implements IBuildInfo { public static abstract class Store implements IBuildInfo {
public String getBuildLocation() { public String getBuildLocation() {
@ -49,10 +51,18 @@ public class BuildInfoFactory {
return getString(LOCATION); return getString(LOCATION);
} }
public String getDefinedSymbols() {
return getString(DEFINED_SYMBOLS);
}
public String getFullBuildArguments() { public String getFullBuildArguments() {
return getString(FULL_ARGUMENTS); return getString(FULL_ARGUMENTS);
} }
public String getIncludePaths() {
return getString(INCLUDE_PATHS);
}
public String getIncrementalBuildArguments() { public String getIncrementalBuildArguments() {
return getString(INCREMENTAL_ARGUMENTS); return getString(INCREMENTAL_ARGUMENTS);
} }
@ -65,10 +75,18 @@ public class BuildInfoFactory {
putValue(LOCATION, location); putValue(LOCATION, location);
} }
public void setDefinedSymbols(String argument) {
putValue(DEFINED_SYMBOLS, argument);
}
public void setFullBuildArguments(String arguments) { public void setFullBuildArguments(String arguments) {
putValue(FULL_ARGUMENTS, arguments); putValue(FULL_ARGUMENTS, arguments);
} }
public void setIncludePaths(String arguments) {
putValue(INCLUDE_PATHS, arguments);
}
public void setIncrementalBuildArguments(String arguments) { public void setIncrementalBuildArguments(String arguments) {
putValue(INCREMENTAL_ARGUMENTS, arguments); putValue(INCREMENTAL_ARGUMENTS, arguments);
} }

View file

@ -106,6 +106,30 @@ public class CProjectNature implements IProjectNature {
return new Path(buildLocation); return new Path(buildLocation);
} }
/**
* Answers a comma-separated list of defined preprocessor symbols
* for the project, or an empty string if there are none.
*
* @return
* @throws CoreException
*/
public String getDefinedSymbols() throws CoreException {
String symbols = fBuildInfo.getDefinedSymbols();
return symbols == null ? new String() : symbols;
}
/**
* Sets the defined symbols for the project.
*
* @param symbols
*/
public void setDefinedSymbols(String symbols, IProgressMonitor monitor) throws CoreException {
String oldSymbols = fBuildInfo.getDefinedSymbols();
if (symbols != null && !symbols.equals(oldSymbols)) {
fBuildInfo.setDefinedSymbols(symbols);
}
}
/** /**
* Sets the arguments for the full build. * Sets the arguments for the full build.
*/ */
@ -127,6 +151,32 @@ public class CProjectNature implements IProjectNature {
return buildArguments; return buildArguments;
} }
/**
* Answers a comma-separated list of include paths defined for
* the project, or an empty string if there are none.
*
* @return
* @throws CoreException
*/
public String getIncludePaths() throws CoreException {
String paths = fBuildInfo.getIncludePaths();
return paths == null ? new String() : paths;
}
/**
* Sets the include path information for the project.
*
* @param paths
* @param monitor
* @throws CoreException
*/
public void setIncludePaths(String paths, IProgressMonitor monitor) throws CoreException {
String oldPaths = fBuildInfo.getIncludePaths();
if (paths != null && !paths.equals(oldPaths)) {
fBuildInfo.setIncludePaths(paths);
}
}
/** /**
* Sets the arguments for the incremental build. * Sets the arguments for the incremental build.
*/ */

View file

@ -6,14 +6,19 @@ package org.eclipse.cdt.core.resources;
*/ */
public interface IBuildInfo { public interface IBuildInfo {
public static final String SEPARATOR = ",";
String getBuildLocation(); String getBuildLocation();
String getDefinedSymbols();
String getFullBuildArguments(); String getFullBuildArguments();
String getIncludePaths();
String getIncrementalBuildArguments(); String getIncrementalBuildArguments();
boolean isStopOnError(); boolean isStopOnError();
void setBuildLocation(String location); void setBuildLocation(String location);
void setDefinedSymbols(String symbols);
void setFullBuildArguments(String arguments); void setFullBuildArguments(String arguments);
void setIncludePaths(String paths);
void setIncrementalBuildArguments(String arguments); void setIncrementalBuildArguments(String arguments);
void setStopOnError(boolean on); void setStopOnError(boolean on);

View file

@ -1,3 +1,12 @@
2003-06-26 Sean Evoy
Added a tab to the new standard make project wizard and CNature project
property page. User interacts with two list controls to add include paths
and proprocessor symbols to a standard make project.
* src/org/eclipse/cdt/ui/wizards/BuildPathInfoBlock.java
* src/org/eclipse/cdt/ui/wizards/StdMakeProjectWizard.java
* src/org/eclipse/cdt/internal/ui/preferences/CProjectPropertyPage.java
* src/org/eclipse/cdt/internal/ui/CPluginResources.properties
2003-06-25 John Camelon 2003-06-25 John Camelon
Create new interface and support for calculating lineNumber/offset mapping. Create new interface and support for calculating lineNumber/offset mapping.
Updated IASTClassSpecifier for qualified name query. Updated IASTClassSpecifier for qualified name query.

View file

@ -46,10 +46,11 @@ public class BuildOptionListFieldEditor extends ListEditor {
protected String getNewInputObject() { protected String getNewInputObject() {
// Create a dialog to prompt for a new symbol or path // Create a dialog to prompt for a new symbol or path
InputDialog dialog = new InputDialog(getShell(), CUIPlugin.getResourceString(TITLE), fieldName, new String(), null); InputDialog dialog = new InputDialog(getShell(), CUIPlugin.getResourceString(TITLE), fieldName, new String(), null);
String input = null;
if (dialog.open() == InputDialog.OK) { if (dialog.open() == InputDialog.OK) {
return dialog.getValue(); input = dialog.getValue();
} }
return new String(); return input.length() == 0 ? null : input;
} }
/* (non-Javadoc) /* (non-Javadoc)

View file

@ -79,6 +79,15 @@ ConfigurationBlock.build.label=Build Settings
ConfigurationBlock.build.continue=Continue On Error ConfigurationBlock.build.continue=Continue On Error
ConfigurationBlock.build.stop=Stop On Error ConfigurationBlock.build.stop=Stop On Error
# String constants for the build include path and preprocessor symbols
BuildPathInfoBlock.label=Paths and Symbols
BuildPathInfoBlock.paths=Include paths:
BuildPathInfoBlock.symbols=Defined symbols:
BuildPathInfoBlock.browse.path=New Include Path
BuildPathInfoBlock.browse.path.label=Path:
BuildPathInfoBlock.browse.symbol=New Defined Symbol
BuildPathInfoBlock.browse.symbol.label=Symbol:
StdMakeProjectWizard.op_error=Standard Make Error StdMakeProjectWizard.op_error=Standard Make Error
StdMakeProjectWizard.title=Standard Make Project StdMakeProjectWizard.title=Standard Make Project
StdMakeProjectWizard.description=Create a new Standard Make project. StdMakeProjectWizard.description=Create a new Standard Make project.

View file

@ -12,6 +12,7 @@ import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
import org.eclipse.cdt.internal.ui.dialogs.StatusTool; import org.eclipse.cdt.internal.ui.dialogs.StatusTool;
import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.wizards.BinaryParserBlock; import org.eclipse.cdt.ui.wizards.BinaryParserBlock;
import org.eclipse.cdt.ui.wizards.BuildPathInfoBlock;
import org.eclipse.cdt.ui.wizards.IndexerBlock; import org.eclipse.cdt.ui.wizards.IndexerBlock;
import org.eclipse.cdt.ui.wizards.SettingsBlock; import org.eclipse.cdt.ui.wizards.SettingsBlock;
import org.eclipse.cdt.utils.ui.controls.TabFolderLayout; import org.eclipse.cdt.utils.ui.controls.TabFolderLayout;
@ -43,6 +44,7 @@ public class CProjectPropertyPage extends PropertyPage implements IStatusChangeL
SettingsBlock settingsBlock; SettingsBlock settingsBlock;
IndexerBlock indexerBlock; IndexerBlock indexerBlock;
BinaryParserBlock binaryParserBlock; BinaryParserBlock binaryParserBlock;
private BuildPathInfoBlock pathInfoBlock;
protected Control createContents(Composite parent) { protected Control createContents(Composite parent) {
Composite composite= new Composite(parent, SWT.NONE); Composite composite= new Composite(parent, SWT.NONE);
@ -89,6 +91,16 @@ public class CProjectPropertyPage extends PropertyPage implements IStatusChangeL
item4.setData(binaryParserBlock); item4.setData(binaryParserBlock);
item4.setControl(binaryParserBlock.getControl(folder)); item4.setControl(binaryParserBlock.getControl(folder));
pathInfoBlock = new BuildPathInfoBlock(this, getProject());
TabItem pathItem = new TabItem(folder, SWT.NONE);
pathItem.setText(pathInfoBlock.getLabel());
Image pathImg = pathInfoBlock.getImage();
if (pathImg != null) {
pathItem.setImage(pathImg);
}
pathItem.setData(pathInfoBlock);
pathItem.setControl(pathInfoBlock.getControl(folder));
WorkbenchHelp.setHelp(parent, ICHelpContextIds.PROJECT_PROPERTY_PAGE); WorkbenchHelp.setHelp(parent, ICHelpContextIds.PROJECT_PROPERTY_PAGE);
} }
@ -112,6 +124,9 @@ public class CProjectPropertyPage extends PropertyPage implements IStatusChangeL
if (ok && binaryParserBlock != null) { if (ok && binaryParserBlock != null) {
ok = binaryParserBlock.isValid(); ok = binaryParserBlock.isValid();
} }
if (ok && pathInfoBlock != null) {
ok = pathInfoBlock.isValid();
}
setValid(ok); setValid(ok);
} }
@ -134,6 +149,10 @@ public class CProjectPropertyPage extends PropertyPage implements IStatusChangeL
if (binaryParserBlock != null) { if (binaryParserBlock != null) {
binaryParserBlock.doRun(getProject(), monitor); binaryParserBlock.doRun(getProject(), monitor);
} }
monitor.worked(15);
if (pathInfoBlock != null) {
pathInfoBlock.doRun(getProject(), monitor);
}
monitor.worked(19); monitor.worked(19);
monitor.done(); monitor.done();
} }
@ -167,6 +186,7 @@ public class CProjectPropertyPage extends PropertyPage implements IStatusChangeL
settingsBlock.setVisible(visible); settingsBlock.setVisible(visible);
indexerBlock.setVisible(visible); indexerBlock.setVisible(visible);
binaryParserBlock.setVisible(visible); binaryParserBlock.setVisible(visible);
pathInfoBlock.setVisible(visible);
folder.setFocus(); folder.setFocus();
} }
} }

View file

@ -0,0 +1,660 @@
package org.eclipse.cdt.ui.wizards;
import java.util.StringTokenizer;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.resources.IBuildInfo;
import org.eclipse.cdt.internal.ui.util.SWTUtil;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.cdt.utils.ui.swt.IValidation;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
public class BuildPathInfoBlock implements IWizardTab {
private static final String PREFIX = "BuildPathInfoBlock"; //$NON-NLS-1$
private static final String LABEL = PREFIX + ".label"; //$NON-NLS-1$
private static final String PATHS = PREFIX + ".paths"; //$NON-NLS-1$
private static final String SYMBOLS = PREFIX + ".symbols"; //$NON-NLS-1$
private static final String BROWSE = PREFIX + ".browse"; //$NON-NLS-1$
private static final String PATH_TITLE = BROWSE + ".path"; //$NON-NLS-1$
private static final String PATH_LABEL = BROWSE + ".path.label"; //$NON-NLS-1$
private static final String SYMBOL_TITLE = BROWSE + ".symbol"; //$NON-NLS-1$
private static final String SYMBOL_LABEL = BROWSE + ".symbol.label"; //$NON-NLS-1$
private static final String NEW = "BuildPropertyCommon.label.new"; //$NON-NLS-1$
private static final String REMOVE = "BuildPropertyCommon.label.remove"; //$NON-NLS-1$
private static final String UP = "BuildPropertyCommon.label.up"; //$NON-NLS-1$
private static final String DOWN = "BuildPropertyCommon.label.down"; //$NON-NLS-1$
private IProject project;
private IValidation page;
private List pathList;
private List symbolList;
private Composite pathButtonComp;
private Button addPath;
private Button removePath;
private Button pathUp;
private Button pathDown;
private Composite symbolButtonComp;
private Button addSymbol;
private Button removeSymbol;
private Button symbolUp;
private Button symbolDown;
private Shell shell;
/**
* @param valid
*/
public BuildPathInfoBlock(IValidation valid) {
this(valid, null);
}
/**
* @param page
* @param project
*/
public BuildPathInfoBlock(IValidation valid, IProject project) {
this.page = valid;
this.project = project;
}
/**
* @param composite
*/
private void createPathListButtons(Composite parent) {
// Create a composite for the buttons
pathButtonComp = ControlFactory.createComposite(parent, 1);
GridData gd = new GridData(GridData.FILL_BOTH);
pathButtonComp.setFont(parent.getFont());
// Add the buttons
addPath = ControlFactory.createPushButton(pathButtonComp, CUIPlugin.getResourceString(NEW));
addPath.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleAddPath();
}
});
addPath.setEnabled(true);
addPath.setFont(parent.getFont());
addPath.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(addPath);
removePath = ControlFactory.createPushButton(pathButtonComp, CUIPlugin.getResourceString(REMOVE));
removePath.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleRemovePath();
}
});
removePath.setFont(parent.getFont());
removePath.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(removePath);
pathUp = ControlFactory.createPushButton(pathButtonComp, CUIPlugin.getResourceString(UP));
pathUp.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handlePathUp();
}
});
pathUp.setFont(parent.getFont());
pathUp.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(pathUp);
pathDown = ControlFactory.createPushButton(pathButtonComp, CUIPlugin.getResourceString(DOWN));
pathDown.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handlePathDown();
}
});
pathDown.setFont(parent.getFont());
pathDown.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(pathDown);
}
/**
* @param composite
*/
private void createPathListControl(Composite parent, int numColumns) {
// Create the list
pathList = new List(parent, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
pathList.addSelectionListener(new SelectionAdapter () {
public void widgetSelected(SelectionEvent e) {
enablePathButtons();
}
});
pathList.addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent e) {
editPathListItem();
}
public void mouseDown(MouseEvent e) {
// Handled by the selection listener
}
public void mouseUp(MouseEvent e) {
// Handled by the selection listener
}
});
// Make it occupy the first 2 columns
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = numColumns - 1;
pathList.setLayoutData(gd);
pathList.setFont(parent.getFont());
}
/**
* @param composite
*/
private void createSymbolListButtons(Composite parent) {
// Create a composite for the buttons
symbolButtonComp = ControlFactory.createComposite(parent, 1);
GridData gd = new GridData(GridData.FILL_BOTH);
symbolButtonComp.setFont(parent.getFont());
// Add the buttons
addSymbol = ControlFactory.createPushButton(symbolButtonComp, CUIPlugin.getResourceString(NEW));
addSymbol.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleAddSymbol();
}
});
addSymbol.setEnabled(true);
addSymbol.setFont(parent.getFont());
addSymbol.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(addSymbol);
removeSymbol = ControlFactory.createPushButton(symbolButtonComp, CUIPlugin.getResourceString(REMOVE));
removeSymbol.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleRemoveSymbol();
}
});
removeSymbol.setFont(parent.getFont());
removeSymbol.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(removeSymbol);
symbolUp = ControlFactory.createPushButton(symbolButtonComp, CUIPlugin.getResourceString(UP));
symbolUp.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleSymbolUp();
}
});
symbolUp.setFont(parent.getFont());
symbolUp.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(symbolUp);
symbolDown = ControlFactory.createPushButton(symbolButtonComp, CUIPlugin.getResourceString(DOWN));
symbolDown.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleSymbolDown();
}
});
symbolDown.setFont(parent.getFont());
symbolDown.setLayoutData(new GridData());
SWTUtil.setButtonDimensionHint(symbolDown);
}
/**
* @param composite
*/
private void createSymbolListControl(Composite parent, int numColumns) {
// Create the list
symbolList = new List(parent, SWT.BORDER | SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL);
symbolList.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
enableSymbolButtons();
}
});
symbolList.addMouseListener(new MouseListener() {
public void mouseDoubleClick(MouseEvent e) {
editSymbolListItem();
}
public void mouseDown(MouseEvent e) {
// Handled by the selection event
}
public void mouseUp(MouseEvent e) {
// Handled by the selection event
}
});
// Make it occupy the first n-1 columns
GridData gd = new GridData(GridData.FILL_BOTH);
gd.horizontalSpan = numColumns - 1;
symbolList.setLayoutData(gd);
symbolList.setFont(parent.getFont());
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.IWizardTab#doRun(org.eclipse.core.resources.IProject, org.eclipse.core.runtime.IProgressMonitor)
*/
public void doRun(IProject project, IProgressMonitor monitor) {
try {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
// Store the paths and symbols as comma-separated lists in the project's nature
CProjectNature nature = (CProjectNature) project.getNature(CProjectNature.C_NATURE_ID);
monitor.beginTask("Setting Include Paths", 1);
String paths = getPathListContents();
nature.setIncludePaths(paths, monitor);
monitor.beginTask("Setting Defined Symbols", 1);
String symbols = getSymbolListContents();
nature.setDefinedSymbols(symbols, monitor);
}
catch (CoreException e) {
}
}
/*
* Double-click handler to allow edit of path information
*/
protected void editPathListItem() {
// Edit the selection index
int index = pathList.getSelectionIndex();
if (index != -1) {
String selItem = pathList.getItem(index);
if (selItem != null) {
InputDialog dialog = new InputDialog(shell, CUIPlugin.getResourceString(PATH_TITLE), CUIPlugin.getResourceString(PATH_LABEL), selItem, null);
String newItem = null;
if (dialog.open() == InputDialog.OK) {
newItem = dialog.getValue();
if (newItem != null && !newItem.equals(selItem)) {
pathList.setItem(index, newItem);
}
}
}
}
}
/*
* Double-click handler to allow edit of symbol information
*/
protected void editSymbolListItem() {
// Edit the selection index
int index = symbolList.getSelectionIndex();
if (index != -1) {
String selItem = symbolList.getItem(index);
if (selItem != null) {
InputDialog dialog = new InputDialog(shell, CUIPlugin.getResourceString(SYMBOL_TITLE), CUIPlugin.getResourceString(SYMBOL_LABEL), selItem, null);
String newItem = null;
if (dialog.open() == InputDialog.OK) {
newItem = dialog.getValue();
if (newItem != null && !newItem.equals(selItem)) {
symbolList.setItem(index, newItem);
}
}
}
}
}
/*
* Enables the buttons on the path control if the right conditions are met
*/
private void enablePathButtons() {
// Enable the remove button if there is at least 1 item in the list
int items = pathList.getItemCount();
if (items > 0){
removePath.setEnabled(true);
// Enable the up/down buttons depending on what item is selected
int index = pathList.getSelectionIndex();
pathUp.setEnabled(items > 1 && index > 0);
pathDown.setEnabled(items > 1 && index < (items - 1));
} else {
removePath.setEnabled(false);
pathUp.setEnabled(false);
pathDown.setEnabled(false);
}
}
private void enableSymbolButtons() {
// Enable the remove button if there is at least 1 item in the list
int items = symbolList.getItemCount();
if (items > 0){
removeSymbol.setEnabled(true);
// Enable the up/down buttons depending on what item is selected
int index = symbolList.getSelectionIndex();
symbolUp.setEnabled(items > 1 && index > 0);
symbolDown.setEnabled(items > 1 && index < (items - 1));
} else {
removeSymbol.setEnabled(false);
symbolUp.setEnabled(false);
symbolDown.setEnabled(false);
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.IWizardTab#getControl(org.eclipse.swt.widgets.Composite)
*/
public Composite getControl(Composite parent) {
this.shell = parent.getShell();
// Create the composite control for the tab
int tabColumns = 3;
Font font = parent.getFont();
Composite composite = ControlFactory.createComposite(parent, tabColumns);
composite.setFont(font);
GridData gd;
// Create a label for the include paths control
Label paths = ControlFactory.createLabel(composite, CUIPlugin.getResourceString(PATHS));
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = tabColumns;
paths.setLayoutData(gd);
paths.setFont(font);
//Create the list and button controls
createPathListControl(composite, tabColumns);
createPathListButtons(composite);
enablePathButtons();
// Create a label for the symbols control
Label symbols = ControlFactory.createLabel(composite, CUIPlugin.getResourceString(SYMBOLS));
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = tabColumns;
symbols.setLayoutData(gd);
symbols.setFont(font);
// Create list and button controls for symbols
createSymbolListControl(composite, tabColumns);
createSymbolListButtons(composite);
enableSymbolButtons();
return composite;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.IWizardTab#getImage()
*/
public Image getImage() {
// We don't decorate the tabs for the wizard or property page
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.IWizardTab#getLabel()
*/
public String getLabel() {
// Return the label defined in the CPluginProperties.resource file
return CUIPlugin.getResourceString(LABEL);
}
/**
* @return
*/
private String getPathListContents() {
// Convert the contents of the path list into a comma-separated list
StringBuffer buffer = new StringBuffer();
if (pathList != null) {
String[] paths = pathList.getItems();
for (int i = 0; i < paths.length; i++) {
String string = paths[i];
buffer.append(string + IBuildInfo.SEPARATOR);
}
}
return buffer.toString();
}
/**
* @return
*/
private String getSymbolListContents() {
// Convert the contents of the symbol list into a comma-separated list
StringBuffer buffer = new StringBuffer();
if (symbolList != null) {
String[] symbols = symbolList.getItems();
for (int i = 0; i < symbols.length; i++) {
String symbol = symbols[i];
buffer.append(symbol + IBuildInfo.SEPARATOR);
}
}
return buffer.toString();
}
/**
*
*/
protected void handleAddPath() {
// Popup an entry dialog
InputDialog dialog = new InputDialog(shell, CUIPlugin.getResourceString(PATH_TITLE), CUIPlugin.getResourceString(PATH_LABEL), "", null);
String path = null;
if (dialog.open() == InputDialog.OK) {
path = dialog.getValue();
}
if (path != null && path.length() > 0) {
pathList.add(path);
pathList.select(pathList.getItemCount() - 1);
enablePathButtons();
}
}
/**
*
*/
protected void handleAddSymbol() {
// Popup an entry dialog
InputDialog dialog = new InputDialog(shell, CUIPlugin.getResourceString(SYMBOL_TITLE), CUIPlugin.getResourceString(SYMBOL_LABEL), "", null);
String symbol = null;
if (dialog.open() == InputDialog.OK) {
symbol = dialog.getValue();
}
if (symbol != null && symbol.length() > 0) {
symbolList.add(symbol);
symbolList.select(symbolList.getItemCount() - 1);
enableSymbolButtons();
}
}
/**
*
*/
protected void handlePathDown() {
// Get the selection index
int index = pathList.getSelectionIndex();
int items = pathList.getItemCount();
if (index == -1 || index == items - 1) {
return;
}
// Swap the items in the list
String selItem = pathList.getItem(index);
pathList.remove(index);
if (index + 1 == items) {
pathList.add(selItem);
} else {
pathList.add(selItem, ++index);
}
// Keep the swapped item selected
pathList.select(index);
enablePathButtons();
}
/**
*
*/
protected void handlePathUp() {
// Get the selection index
int index = pathList.getSelectionIndex();
if (index == -1 || index == 0) {
return;
}
// Swap the items in the list
String selItem = pathList.getItem(index);
pathList.remove(index);
pathList.add(selItem, --index);
// Keep the index selected
pathList.select(index);
enablePathButtons();
}
/**
*
*/
protected void handleRemovePath() {
// Get the selection index
int index = pathList.getSelectionIndex();
if (index == -1) {
return;
}
// Remove the element at that index
pathList.remove(index);
index = index - 1 < 0 ? 0 : index -1;
pathList.select(index);
// Check if the buttons should still be enabled
enablePathButtons();
}
/**
*
*/
protected void handleRemoveSymbol() {
// Get the selection index
int index = symbolList.getSelectionIndex();
if (index == -1) {
return;
}
// Remove the item at that index
symbolList.remove(index);
index = index - 1 < 0 ? 0 : index -1;
symbolList.select(index);
// Check if the button state should be toggled
enableSymbolButtons();
}
/**
*
*/
protected void handleSymbolDown() {
// Get the selection index
int index = symbolList.getSelectionIndex();
int items = symbolList.getItemCount();
if (index == -1 || index == items - 1) {
return;
}
// Swap the items in the list
String selItem = symbolList.getItem(index);
symbolList.remove(index);
if (index + 1 == items) {
symbolList.add(selItem);
} else {
symbolList.add(selItem, ++index);
}
// Keep the swapped item selected
symbolList.select(index);
enableSymbolButtons();
}
/**
*
*/
protected void handleSymbolUp() {
// Get the selection index
int index = symbolList.getSelectionIndex();
if (index == -1 || index == 0) {
return;
}
// Swap the items in the list
String selItem = symbolList.getItem(index);
symbolList.remove(index);
symbolList.add(selItem, --index);
// Keep the index selected
symbolList.select(index);
enableSymbolButtons();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.IWizardTab#isValid()
*/
public boolean isValid() {
// Info on this page is not critical
return true;
}
private void setPathListContents() {
if (project != null) {
try {
CProjectNature nature = (CProjectNature)project.getNature(CProjectNature.C_NATURE_ID);
if (nature != null) {
String paths = nature.getIncludePaths();
StringTokenizer tokens = new StringTokenizer(paths, IBuildInfo.SEPARATOR);
while (tokens.hasMoreTokens()) {
pathList.add(tokens.nextToken());
}
}
} catch (CoreException e) {
// Just have an empty list
}
}
}
private void setSymbolListContents() {
if (project != null) {
try {
CProjectNature nature = (CProjectNature)project.getNature(CProjectNature.C_NATURE_ID);
if (nature != null) {
String symbols = nature.getDefinedSymbols();
StringTokenizer tokens = new StringTokenizer(symbols, IBuildInfo.SEPARATOR);
while (tokens.hasMoreTokens()) {
symbolList.add(tokens.nextToken());
}
}
} catch (CoreException e) {
// Just have an empty list
}
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.ui.wizards.IWizardTab#setVisible(boolean)
*/
public void setVisible(boolean visible) {
// Set the content from the project
setPathListContents();
pathList.select(0);
enablePathButtons();
setSymbolListContents();
symbolList.select(0);
enableSymbolButtons();
}
}

View file

@ -30,6 +30,7 @@ public abstract class StdMakeProjectWizard extends CProjectWizard {
private ReferenceBlock referenceBlock; private ReferenceBlock referenceBlock;
private SettingsBlock settingsBlock; private SettingsBlock settingsBlock;
private BinaryParserBlock binaryParserBlock; private BinaryParserBlock binaryParserBlock;
private BuildPathInfoBlock pathInfoBlock;
public StdMakeProjectWizard() { public StdMakeProjectWizard() {
this(CUIPlugin.getResourceString(WZ_TITLE), CUIPlugin.getResourceString(WZ_DESC)); this(CUIPlugin.getResourceString(WZ_TITLE), CUIPlugin.getResourceString(WZ_DESC));
@ -72,6 +73,17 @@ public abstract class StdMakeProjectWizard extends CProjectWizard {
item3.setData(binaryParserBlock); item3.setData(binaryParserBlock);
item3.setControl(binaryParserBlock.getControl(folder)); item3.setControl(binaryParserBlock.getControl(folder));
addTabItem(binaryParserBlock); addTabItem(binaryParserBlock);
pathInfoBlock = new BuildPathInfoBlock(getValidation());
TabItem pathItem = new TabItem(folder, SWT.NONE);
pathItem.setText(pathInfoBlock.getLabel());
Image pathImg = pathInfoBlock.getImage();
if (pathImg != null) {
pathItem.setImage(pathImg);
}
pathItem.setData(pathInfoBlock);
pathItem.setControl(pathInfoBlock.getControl(folder));
addTabItem(pathInfoBlock);
} }
protected void doRunPrologue(IProgressMonitor monitor) { protected void doRunPrologue(IProgressMonitor monitor) {
@ -89,7 +101,7 @@ public abstract class StdMakeProjectWizard extends CProjectWizard {
if (monitor == null) { if (monitor == null) {
monitor = new NullProgressMonitor(); monitor = new NullProgressMonitor();
} }
monitor.beginTask("Standard Make", 3); monitor.beginTask("Standard Make", 4);
// Update the referenced project if provided. // Update the referenced project if provided.
if (referenceBlock != null) { if (referenceBlock != null) {
referenceBlock.doRun(newProject, new SubProgressMonitor(monitor, 1)); referenceBlock.doRun(newProject, new SubProgressMonitor(monitor, 1));
@ -102,6 +114,10 @@ public abstract class StdMakeProjectWizard extends CProjectWizard {
if (binaryParserBlock != null) { if (binaryParserBlock != null) {
binaryParserBlock.doRun(newProject, new SubProgressMonitor(monitor, 1)); binaryParserBlock.doRun(newProject, new SubProgressMonitor(monitor, 1));
} }
// Update the binary parser
if (pathInfoBlock != null) {
pathInfoBlock.doRun(newProject, new SubProgressMonitor(monitor, 1));
}
} }
} }