mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-03 14:25:37 +02:00
begining of new include/symbols page.
This commit is contained in:
parent
9ae54e47ff
commit
6df42f9ccf
15 changed files with 844 additions and 314 deletions
|
@ -1,3 +1,13 @@
|
|||
2004-04-07 David Inglis
|
||||
|
||||
Begining of new Include/Symbols UI pages.
|
||||
|
||||
* src/org/eclipse/cdt/internal/dialogs/cpaths/*.java
|
||||
|
||||
Changes here due to refactor
|
||||
|
||||
* src/org/eclipse/cdt/internal/ui/preferences/
|
||||
|
||||
2004-04-05 Alain Magloire
|
||||
From Chris Wiebe
|
||||
This patch cleans up the layout of the checkboxes on the Open Type dialog.
|
||||
|
|
|
@ -0,0 +1,224 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All
|
||||
* rights reserved. This program and the accompanying materials are made
|
||||
* available under the terms of the Common Public License v1.0 which
|
||||
* accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors: QNX Software Systems - Initial API and implementation
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.dialogs.cpaths;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.model.ICModelStatus;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.internal.core.model.CModelStatus;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
|
||||
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
|
||||
import org.eclipse.cdt.ui.dialogs.ICOptionPage;
|
||||
import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Preferences;
|
||||
|
||||
|
||||
abstract public class AbstractPathOptionBlock extends TabFolderOptionBlock implements ICOptionContainer {
|
||||
|
||||
private StatusInfo fCPathStatus;
|
||||
private StatusInfo fBuildPathStatus;
|
||||
|
||||
private ICProject fCurrCProject;
|
||||
|
||||
private String fUserSettingsTimeStamp;
|
||||
private long fFileTimeStamp;
|
||||
|
||||
private int fPageIndex, fPageCount;
|
||||
private CPathBasePage fCurrPage;
|
||||
|
||||
private IStatusChangeListener fContext;
|
||||
|
||||
public AbstractPathOptionBlock(IStatusChangeListener context, int pageToShow) {
|
||||
super(false);
|
||||
|
||||
fContext = context;
|
||||
fPageIndex = pageToShow;
|
||||
|
||||
fCPathStatus = new StatusInfo();
|
||||
fBuildPathStatus = new StatusInfo();
|
||||
|
||||
setOptionContainer(this);
|
||||
|
||||
}
|
||||
|
||||
// -------- public api --------
|
||||
|
||||
/**
|
||||
* @return Returns the current class path (raw). Note that the entries
|
||||
* returned must not be valid.
|
||||
*/
|
||||
public IPathEntry[] getRawCPath() {
|
||||
List elements = getCPaths();
|
||||
int nElements = elements.size();
|
||||
IPathEntry[] entries = new IPathEntry[elements.size()];
|
||||
|
||||
for (int i = 0; i < nElements; i++) {
|
||||
CPListElement currElement = (CPListElement) elements.get(i);
|
||||
entries[i] = currElement.getPathEntry();
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
|
||||
protected ArrayList getExistingEntries(IPathEntry[] cPathEntries) {
|
||||
ArrayList newCPath = new ArrayList();
|
||||
for (int i = 0; i < cPathEntries.length; i++) {
|
||||
IPathEntry curr = cPathEntries[i];
|
||||
newCPath.add(CPListElement.createFromExisting(curr, fCurrCProject));
|
||||
}
|
||||
return newCPath;
|
||||
}
|
||||
|
||||
abstract protected List getCPaths();
|
||||
|
||||
private String getEncodedSettings() {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
|
||||
int nElements = getCPaths().size();
|
||||
buf.append('[').append(nElements).append(']');
|
||||
for (int i = 0; i < nElements; i++) {
|
||||
CPListElement elem = (CPListElement) getCPaths().get(i);
|
||||
elem.appendEncodedSettings(buf);
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public boolean hasChangesInDialog() {
|
||||
String currSettings = getEncodedSettings();
|
||||
return !currSettings.equals(fUserSettingsTimeStamp);
|
||||
}
|
||||
|
||||
public boolean hasChangesInCPathFile() {
|
||||
IFile file = fCurrCProject.getProject().getFile(".cdtproject"); //$NON-NLS-1$
|
||||
return fFileTimeStamp != file.getModificationStamp();
|
||||
}
|
||||
|
||||
public void initializeTimeStamps() {
|
||||
IFile file = fCurrCProject.getProject().getFile(".cdtproject"); //$NON-NLS-1$
|
||||
fFileTimeStamp = file.getModificationStamp();
|
||||
fUserSettingsTimeStamp = getEncodedSettings();
|
||||
}
|
||||
|
||||
abstract protected void addTabs();
|
||||
|
||||
protected void setCProject(ICProject project) {
|
||||
fCurrCProject = project;
|
||||
}
|
||||
|
||||
protected ICProject getCProject() {
|
||||
return fCurrCProject;
|
||||
}
|
||||
|
||||
public IProject getProject() {
|
||||
return fCurrCProject.getProject();
|
||||
}
|
||||
|
||||
protected void doStatusLineUpdate() {
|
||||
IStatus res = findMostSevereStatus();
|
||||
fContext.statusChanged(res);
|
||||
}
|
||||
|
||||
private IStatus findMostSevereStatus() {
|
||||
return StatusUtil.getMostSevere(new IStatus[] { fCPathStatus, fBuildPathStatus});
|
||||
}
|
||||
|
||||
protected StatusInfo getPathStatus() {
|
||||
return fCPathStatus;
|
||||
}
|
||||
|
||||
// -------- tab switching ----------
|
||||
|
||||
public void setCurrentPage(ICOptionPage page) {
|
||||
super.setCurrentPage(page);
|
||||
CPathBasePage newPage = (CPathBasePage) page;
|
||||
if (fCurrPage != null) {
|
||||
List selection = fCurrPage.getSelection();
|
||||
if (!selection.isEmpty()) {
|
||||
newPage.setSelection(selection);
|
||||
}
|
||||
}
|
||||
fCurrPage = (CPathBasePage) page;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionContainer#updateContainer()
|
||||
*/
|
||||
public void updateContainer() {
|
||||
update();
|
||||
}
|
||||
|
||||
protected void updateBuildPathStatus() {
|
||||
List elements = getCPaths();
|
||||
IPathEntry[] entries = new IPathEntry[elements.size()];
|
||||
|
||||
for (int i = elements.size() - 1; i >= 0; i--) {
|
||||
CPListElement currElement = (CPListElement) elements.get(i);
|
||||
entries[i] = currElement.getPathEntry();
|
||||
}
|
||||
|
||||
ICModelStatus status = CModelStatus.VERIFIED_OK; // CoreModelUtil.validateCPathEntries(fCurrCProject, entries);
|
||||
if (!status.isOK()) {
|
||||
fBuildPathStatus.setError(status.getMessage());
|
||||
return;
|
||||
}
|
||||
fBuildPathStatus.setOK();
|
||||
}
|
||||
|
||||
public Preferences getPreferences() {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void addPage(CPathBasePage page) {
|
||||
addTab(page);
|
||||
if (fPageIndex == fPageCount) {
|
||||
fCurrPage = page;
|
||||
}
|
||||
fPageCount++;
|
||||
}
|
||||
|
||||
protected ICOptionPage getStartPage() {
|
||||
if (fCurrPage == null) {
|
||||
return super.getStartPage();
|
||||
}
|
||||
return fCurrPage;
|
||||
}
|
||||
|
||||
abstract protected void internalConfigureCProject(List cPathEntries, IProgressMonitor monitor) throws CoreException, InterruptedException;
|
||||
|
||||
// -------- creation -------------------------------
|
||||
|
||||
public void configureCProject(IProgressMonitor monitor) throws CoreException, InterruptedException {
|
||||
if (monitor == null) {
|
||||
monitor = new NullProgressMonitor();
|
||||
}
|
||||
monitor.setTaskName(CPathEntryMessages.getString("CPathsBlock.operationdesc_c")); //$NON-NLS-1$
|
||||
monitor.beginTask("", 10); //$NON-NLS-1$
|
||||
|
||||
try {
|
||||
internalConfigureCProject(getCPaths(), monitor);
|
||||
initializeTimeStamps();
|
||||
} finally {
|
||||
monitor.done();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -8,24 +8,17 @@
|
|||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.dialogs.cpaths;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.core.model.CoreModelUtil;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.resource.ImageDescriptor;
|
||||
|
||||
public abstract class CPathBasePage extends AbstractCOptionPage {
|
||||
|
||||
public abstract List getSelection();
|
||||
|
||||
public abstract void setSelection(List selection);
|
||||
|
||||
public abstract boolean isEntryKind(int kind);
|
||||
|
||||
public CPathBasePage(String title) {
|
||||
super(title);
|
||||
}
|
||||
|
@ -33,20 +26,6 @@ public abstract class CPathBasePage extends AbstractCOptionPage {
|
|||
super(title, image);
|
||||
}
|
||||
|
||||
protected void filterAndSetSelection(List list) {
|
||||
ArrayList res = new ArrayList(list.size());
|
||||
for (int i = list.size() - 1; i >= 0; i--) {
|
||||
Object curr = list.get(i);
|
||||
if (curr instanceof CPListElement) {
|
||||
CPListElement elem = (CPListElement) curr;
|
||||
if (elem.getParentContainer() == null && isEntryKind(elem.getEntryKind())) {
|
||||
res.add(curr);
|
||||
}
|
||||
}
|
||||
}
|
||||
setSelection(res);
|
||||
}
|
||||
|
||||
protected void fixNestingConflicts(List newEntries, List existing, Set modifiedSourceEntries) {
|
||||
for (int i = 0; i < newEntries.size(); i++) {
|
||||
CPListElement curr = (CPListElement) newEntries.get(i);
|
||||
|
@ -74,4 +53,10 @@ public abstract class CPathBasePage extends AbstractCOptionPage {
|
|||
}
|
||||
}
|
||||
}
|
||||
public abstract List getSelection();
|
||||
|
||||
public abstract void setSelection(List selection);
|
||||
|
||||
public abstract boolean isEntryKind(int kind);
|
||||
|
||||
}
|
||||
|
|
|
@ -20,17 +20,34 @@ CPathsPropertyPage.unsavedchanges.button.ignore=Apply Later
|
|||
|
||||
BuildPathsBlock.tab.libraries=&Libraries
|
||||
|
||||
# ------- BuildPathsBlock -------
|
||||
# -------- SymbolsEntryPage ---------
|
||||
SymbolEntryPage.title=Symbols
|
||||
SymbolEntryPage.add=Add...
|
||||
SymbolEntryPage.addFromProject=Add from project...
|
||||
SymbolEntryPage.addContributed=Add contributed...
|
||||
SymbolEntryPage.remove=Remove
|
||||
SymbolEntryPage.defines=Defines:
|
||||
SymbolEntryPage.editSourcePaths=Edit source paths...
|
||||
SymbolEntryPage.sourcePath=Source Paths:
|
||||
|
||||
# ------- IncludeEntryPage ----------
|
||||
IncludeEntryPage.title=Include Paths
|
||||
IncludeEntryPage.addFromWorksapce=Add from Workspace...
|
||||
IncludeEntryPage.addExternal=Add External...
|
||||
IncludeEntryPage.addContributed=Add Contributed...
|
||||
IncludeEntryPage.remove=Remove
|
||||
IncludeEntryPage.includePath=Include Paths:
|
||||
IncludeEntryPage.editSourcePaths=Edit source paths...
|
||||
IncludeEntryPage.sourcePaths=Source Paths:
|
||||
|
||||
# ------- BuildPathsBlock -------
|
||||
CPathsBlock.path.up.button=&Up
|
||||
CPathsBlock.path.down.button=&Down
|
||||
CPathsBlock.path.checkall.button=Select &All
|
||||
CPathsBlock.path.uncheckall.button=D&eselect All
|
||||
|
||||
CPathsBlock.path.label=Path order and exported entries:\n(Exported entries are contributed to dependent projects)
|
||||
CPathsBlock.warning.EntryMissing=Build path entry is missing: {0}
|
||||
CPathsBlock.warning.EntriesMissing={0} build path entries are missing.
|
||||
|
||||
CPathsBlock.operationdesc_project=Creating project...
|
||||
CPathsBlock.operationdesc_c=Setting build paths...
|
||||
|
||||
|
@ -136,16 +153,18 @@ LibrariesWorkbookPage.AdvancedDialog.createfolder=Create &New Class Folder
|
|||
LibrariesWorkbookPage.AdvancedDialog.addfolder=Add &Existing Class Folder
|
||||
LibrariesWorkbookPage.AdvancedDialog.addcontainer=Add &Container:
|
||||
|
||||
# -------- OrderExportPage ---------
|
||||
OrderExportsPage.title=&Order and Export
|
||||
OrderExportsPage.description=
|
||||
|
||||
# ------- ExclusionPatternDialog -------
|
||||
|
||||
ExclusionPatternDialog.title=Source Folder Exclusion Patterns
|
||||
|
||||
ExclusionPatternDialog.pattern.label=E&xclusion patterns for ''{0}'':
|
||||
ExclusionPatternDialog.pattern.add=A&dd...
|
||||
ExclusionPatternDialog.pattern.add.multiple=Add &Multiple...
|
||||
ExclusionPatternDialog.pattern.remove=&Remove
|
||||
ExclusionPatternDialog.pattern.edit=&Edit...
|
||||
|
||||
ExclusionPatternDialog.ChooseExclusionPattern.title=Exclusion Pattern Selection
|
||||
ExclusionPatternDialog.ChooseExclusionPattern.description=&Choose folders or files to exclude:
|
||||
|
||||
|
@ -154,36 +173,14 @@ ExclusionPatternDialog.ChooseExclusionPattern.description=&Choose folders or fil
|
|||
ExclusionPatternEntryDialog.add.title=Add Exclusion Pattern
|
||||
ExclusionPatternEntryDialog.edit.title=Edit Exclusion Pattern
|
||||
ExclusionPatternEntryDialog.description=Enter a pattern for excluding files from the source folder. Allowed wildcards are '*', '?' and '**'. Examples: 'java/util/A*.java', 'java/util/', '**/Test*'.
|
||||
|
||||
ExclusionPatternEntryDialog.pattern.label=E&xclusion pattern (Path relative to ''{0}''):
|
||||
ExclusionPatternEntryDialog.pattern.button=Bro&wse...
|
||||
|
||||
ExclusionPatternEntryDialog.error.empty=Enter a pattern.
|
||||
ExclusionPatternEntryDialog.error.notrelative=Pattern must be a relative path.
|
||||
ExclusionPatternEntryDialog.error.exists=Pattern already exists.
|
||||
|
||||
ExclusionPatternEntryDialog.ChooseExclusionPattern.title=Exclusion Pattern Selection
|
||||
ExclusionPatternEntryDialog.ChooseExclusionPattern.description=&Choose a folder or file to exclude:
|
||||
|
||||
OrderExportsPage.title=&Order and Export
|
||||
OrderExportsPage.description=
|
||||
# ------- ClasspathContainerDefaultPage-------
|
||||
|
||||
ClasspathContainerDefaultPage.title=Classpath Container
|
||||
ClasspathContainerDefaultPage.description=Select classpath container path. First segment is the container type.
|
||||
|
||||
ClasspathContainerDefaultPage.path.label=&Classpath container path:
|
||||
|
||||
ClasspathContainerDefaultPage.path.error.enterpath=Enter path.
|
||||
ClasspathContainerDefaultPage.path.error.invalidpath=Invalid path.
|
||||
ClasspathContainerDefaultPage.path.error.needssegment=Path needs at least one segment.
|
||||
ClasspathContainerDefaultPage.path.error.alreadyexists=Entry already exists.
|
||||
|
||||
# ------- ClasspathContainerSelectionPage-------
|
||||
|
||||
ClasspathContainerSelectionPage.title=Add Library
|
||||
ClasspathContainerSelectionPage.description=Select the library type to add.
|
||||
|
||||
# ------- CPListLabelProvider -------
|
||||
|
||||
CPListLabelProvider.new=(new)
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All
|
||||
* rights reserved. This program and the accompanying materials are made
|
||||
* available under the terms of the Common Public License v1.0 which accompanies
|
||||
* this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors: QNX Software Systems - Initial API and implementation
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.dialogs.cpaths;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.internal.ui.util.PixelConverter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IListAdapter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.TreeListDialogField;
|
||||
import org.eclipse.cdt.ui.CElementLabelProvider;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
|
||||
public class CPathIncludeEntryPage extends CPathBasePage {
|
||||
|
||||
private ListDialogField fIncludeList;
|
||||
private TreeListDialogField fSrcList;
|
||||
|
||||
private class IncludeListAdapter implements IListAdapter, IDialogFieldListener {
|
||||
|
||||
public void dialogFieldChanged(DialogField field) {
|
||||
}
|
||||
|
||||
public void customButtonPressed(ListDialogField field, int index) {
|
||||
}
|
||||
|
||||
public void selectionChanged(ListDialogField field) {
|
||||
}
|
||||
|
||||
public void doubleClicked(ListDialogField field) {
|
||||
}
|
||||
}
|
||||
|
||||
public CPathIncludeEntryPage(ITreeListAdapter adapter) {
|
||||
super(CPathEntryMessages.getString("IncludeEntryPage.title")); //$NON-NLS-1$
|
||||
IncludeListAdapter includeListAdaper = new IncludeListAdapter();
|
||||
|
||||
String[] buttonLabel = new String[] { CPathEntryMessages.getString("IncludeEntryPage.addFromWorksapce"), CPathEntryMessages.getString("IncludeEntryPage.addExternal"), CPathEntryMessages.getString("IncludeEntryPage.addContributed"), null, CPathEntryMessages.getString("IncludeEntryPage.remove")}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||
fIncludeList = new ListDialogField(includeListAdaper, buttonLabel, new CPListLabelProvider());
|
||||
fIncludeList.setDialogFieldListener(includeListAdaper);
|
||||
fIncludeList.setLabelText(CPathEntryMessages.getString("IncludeEntryPage.includePath")); //$NON-NLS-1$
|
||||
fSrcList = new TreeListDialogField(adapter, new String[] { CPathEntryMessages.getString("IncludeEntryPage.editSourcePaths")}, new CElementLabelProvider()); //$NON-NLS-1$
|
||||
fSrcList.setLabelText(CPathEntryMessages.getString("IncludeEntryPage.sourcePaths")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void createControl(Composite parent) {
|
||||
PixelConverter converter = new PixelConverter(parent);
|
||||
|
||||
Composite composite = new Composite(parent, SWT.NONE);
|
||||
|
||||
setControl(composite);
|
||||
|
||||
LayoutUtil.doDefaultLayout(composite, new DialogField[] { fSrcList, fIncludeList}, true);
|
||||
LayoutUtil.setHorizontalGrabbing(fIncludeList.getListControl(null));
|
||||
|
||||
int buttonBarWidth = converter.convertWidthInCharsToPixels(30);
|
||||
fIncludeList.setButtonsMinWidth(buttonBarWidth);
|
||||
}
|
||||
|
||||
public void init(ICProject project) {
|
||||
fSrcList.setElements(project.getChildrenOfType(ICElement.C_CCONTAINER));
|
||||
}
|
||||
|
||||
public List getSelection() {
|
||||
return fSrcList.getSelectedElements();
|
||||
}
|
||||
|
||||
public void setSelection(List selection) {
|
||||
fSrcList.selectElements(new StructuredSelection(selection));
|
||||
}
|
||||
|
||||
public boolean isEntryKind(int kind) {
|
||||
return kind == IPathEntry.CDT_INCLUDE;
|
||||
}
|
||||
|
||||
public void performApply(IProgressMonitor monitor) throws CoreException {
|
||||
}
|
||||
|
||||
public void performDefaults() {
|
||||
}
|
||||
}
|
|
@ -52,7 +52,7 @@ import org.eclipse.ui.model.WorkbenchLabelProvider;
|
|||
|
||||
public class CPathSourceEntryPage extends CPathBasePage {
|
||||
|
||||
private ListDialogField fClassPathList;
|
||||
private ListDialogField fCPathList;
|
||||
private ICProject fCurrCProject;
|
||||
private IPath fProjPath;
|
||||
|
||||
|
@ -72,7 +72,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
|
|||
setDescription(CPathEntryMessages.getString("SourcePathEntryPage.description")); //$NON-NLS-1$
|
||||
|
||||
fWorkspaceRoot = CUIPlugin.getWorkspace().getRoot();
|
||||
fClassPathList = classPathList;
|
||||
fCPathList = classPathList;
|
||||
|
||||
SourceContainerAdapter adapter = new SourceContainerAdapter();
|
||||
|
||||
|
@ -106,7 +106,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
|
|||
private void updateFoldersList() {
|
||||
ArrayList folders = new ArrayList();
|
||||
|
||||
List cpelements = fClassPathList.getElements();
|
||||
List cpelements = fCPathList.getElements();
|
||||
for (int i = 0; i < cpelements.size(); i++) {
|
||||
CPListElement cpe = (CPListElement) cpelements.get(i);
|
||||
if (cpe.getEntryKind() == IPathEntry.CDT_SOURCE) {
|
||||
|
@ -306,7 +306,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
|
|||
if (dialog.open() == Window.OK) {
|
||||
selElement.setAttribute(CPListElement.EXCLUSION, dialog.getExclusionPattern());
|
||||
fFoldersList.refresh();
|
||||
fClassPathList.dialogFieldChanged(); // validate
|
||||
fCPathList.dialogFieldChanged(); // validate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
|
|||
}
|
||||
if (selElements.isEmpty()) {
|
||||
fFoldersList.refresh();
|
||||
fClassPathList.dialogFieldChanged(); // validate
|
||||
fCPathList.dialogFieldChanged(); // validate
|
||||
} else {
|
||||
fFoldersList.removeElements(selElements);
|
||||
}
|
||||
|
@ -390,7 +390,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
|
|||
private void updateClasspathList() {
|
||||
List srcelements = fFoldersList.getElements();
|
||||
|
||||
List cpelements = fClassPathList.getElements();
|
||||
List cpelements = fCPathList.getElements();
|
||||
int nEntries = cpelements.size();
|
||||
// backwards, as entries will be deleted
|
||||
int lastRemovePos = nEntries;
|
||||
|
@ -414,7 +414,7 @@ public class CPathSourceEntryPage extends CPathBasePage {
|
|||
}
|
||||
|
||||
if (lastRemovePos != nEntries || !srcelements.isEmpty()) {
|
||||
fClassPathList.setElements(cpelements);
|
||||
fCPathList.setElements(cpelements);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,99 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All
|
||||
* rights reserved. This program and the accompanying materials are made
|
||||
* available under the terms of the Common Public License v1.0 which
|
||||
* accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors: QNX Software Systems - Initial API and implementation
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.dialogs.cpaths;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.internal.ui.util.PixelConverter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IListAdapter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.TreeListDialogField;
|
||||
import org.eclipse.cdt.ui.CElementLabelProvider;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.jface.viewers.StructuredSelection;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
|
||||
public class CPathSymbolEntryPage extends CPathBasePage {
|
||||
|
||||
private ListDialogField fSymbolsList;
|
||||
private TreeListDialogField fSrcList;
|
||||
|
||||
private class SymbolsListAdapter implements IListAdapter, IDialogFieldListener {
|
||||
|
||||
public void dialogFieldChanged(DialogField field) {
|
||||
}
|
||||
|
||||
public void customButtonPressed(ListDialogField field, int index) {
|
||||
}
|
||||
|
||||
public void selectionChanged(ListDialogField field) {
|
||||
}
|
||||
|
||||
public void doubleClicked(ListDialogField field) {
|
||||
}
|
||||
}
|
||||
|
||||
public CPathSymbolEntryPage(ITreeListAdapter adapter) {
|
||||
super(CPathEntryMessages.getString("SymbolEntryPage.title")); //$NON-NLS-1$
|
||||
SymbolsListAdapter includeListAdaper = new SymbolsListAdapter();
|
||||
|
||||
String[] buttonLabel = new String[] { CPathEntryMessages.getString("SymbolEntryPage.add"), CPathEntryMessages.getString("SymbolEntryPage.addFromProject"), CPathEntryMessages.getString("SymbolEntryPage.addContributed"), null, CPathEntryMessages.getString("SymbolEntryPage.remove")}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
|
||||
fSymbolsList = new ListDialogField(includeListAdaper, buttonLabel, new CPListLabelProvider());
|
||||
fSymbolsList.setDialogFieldListener(includeListAdaper);
|
||||
fSymbolsList.setLabelText(CPathEntryMessages.getString("SymbolEntryPage.defines")); //$NON-NLS-1$
|
||||
fSrcList = new TreeListDialogField(adapter, new String[] { CPathEntryMessages.getString("SymbolEntryPage.editSourcePaths")}, new CElementLabelProvider()); //$NON-NLS-1$
|
||||
fSrcList.setLabelText(CPathEntryMessages.getString("SymbolEntryPage.sourcePath")); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void createControl(Composite parent) {
|
||||
PixelConverter converter = new PixelConverter(parent);
|
||||
|
||||
Composite composite = new Composite(parent, SWT.NONE);
|
||||
|
||||
setControl(composite);
|
||||
LayoutUtil.doDefaultLayout(composite, new DialogField[] { fSrcList, fSymbolsList}, true);
|
||||
LayoutUtil.setHorizontalGrabbing(fSymbolsList.getListControl(null));
|
||||
|
||||
int buttonBarWidth = converter.convertWidthInCharsToPixels(30);
|
||||
fSymbolsList.setButtonsMinWidth(buttonBarWidth);
|
||||
|
||||
}
|
||||
|
||||
public List getSelection() {
|
||||
return fSrcList.getSelectedElements();
|
||||
}
|
||||
|
||||
public void setSelection(List selection) {
|
||||
fSrcList.selectElements(new StructuredSelection(selection));
|
||||
}
|
||||
|
||||
public boolean isEntryKind(int kind) {
|
||||
return kind == IPathEntry.CDT_MACRO;
|
||||
}
|
||||
|
||||
public void performApply(IProgressMonitor monitor) throws CoreException {
|
||||
}
|
||||
|
||||
public void performDefaults() {
|
||||
}
|
||||
|
||||
public void init(ICProject project) {
|
||||
fSrcList.setElements(project.getChildrenOfType(ICElement.C_CCONTAINER));
|
||||
}
|
||||
}
|
|
@ -12,57 +12,32 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICModelStatus;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.internal.core.model.CModelStatus;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.CheckedListDialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||
import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
|
||||
import org.eclipse.cdt.ui.dialogs.ICOptionPage;
|
||||
import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Preferences;
|
||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
|
||||
public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionContainer {
|
||||
public class CPathTabBlock extends AbstractPathOptionBlock {
|
||||
|
||||
private CheckedListDialogField fCPathList;
|
||||
|
||||
private StatusInfo fCPathStatus;
|
||||
private StatusInfo fBuildPathStatus;
|
||||
|
||||
private ICProject fCurrCProject;
|
||||
|
||||
private String fUserSettingsTimeStamp;
|
||||
private long fFileTimeStamp;
|
||||
|
||||
private int fPageIndex, fPageCount;
|
||||
|
||||
private CPathSourceEntryPage fSourcePage;
|
||||
private CPathProjectsEntryPage fProjectsPage;
|
||||
private CPathOutputEntryPage fOutputPage;
|
||||
//private LibrariesWorkbookPage fLibrariesPage;
|
||||
|
||||
private CPathBasePage fCurrPage;
|
||||
|
||||
private IStatusChangeListener fContext;
|
||||
|
||||
private CPathOrderExportPage fOrderExportPage;
|
||||
|
||||
private class BuildPathAdapter implements IDialogFieldListener {
|
||||
|
@ -75,15 +50,13 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
|
||||
void buildPathDialogFieldChanged(DialogField field) {
|
||||
if (field == fCPathList) {
|
||||
updateClassPathStatus();
|
||||
updateCPathStatus();
|
||||
}
|
||||
doStatusLineUpdate();
|
||||
}
|
||||
|
||||
public CPathTabBlock(IStatusChangeListener context, int pageToShow) {
|
||||
super(true);
|
||||
fContext = context;
|
||||
fPageIndex = pageToShow;
|
||||
super(context, pageToShow);
|
||||
|
||||
String[] buttonLabels = new String[] { /* 0 */CPathEntryMessages.getString("CPathsBlock.path.up.button"), //$NON-NLS-1$
|
||||
/* 1 */CPathEntryMessages.getString("CPathsBlock.path.down.button"), //$NON-NLS-1$
|
||||
|
@ -101,11 +74,10 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
fCPathList.setCheckAllButtonIndex(3);
|
||||
fCPathList.setUncheckAllButtonIndex(4);
|
||||
|
||||
fCPathStatus = new StatusInfo();
|
||||
fBuildPathStatus = new StatusInfo();
|
||||
}
|
||||
|
||||
fCurrCProject = null;
|
||||
setOptionContainer(this);
|
||||
protected List getCPaths() {
|
||||
return fCPathList.getElements();
|
||||
}
|
||||
|
||||
protected void addTabs() {
|
||||
|
@ -119,26 +91,6 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
addPage(fOrderExportPage);
|
||||
}
|
||||
|
||||
private void addPage(CPathBasePage page) {
|
||||
addTab(page);
|
||||
if (fPageIndex == fPageCount) {
|
||||
fCurrPage = page;
|
||||
}
|
||||
fPageCount++;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock#getStartPage()
|
||||
*/
|
||||
protected ICOptionPage getStartPage() {
|
||||
if (fCurrPage == null) {
|
||||
return super.getStartPage();
|
||||
}
|
||||
return fCurrPage;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -146,10 +98,10 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
*/
|
||||
public Control createContents(Composite parent) {
|
||||
Control control = super.createContents(parent);
|
||||
if (fCurrCProject != null) {
|
||||
fSourcePage.init(fCurrCProject);
|
||||
fOutputPage.init(fCurrCProject);
|
||||
fProjectsPage.init(fCurrCProject);
|
||||
if (getCProject() != null) {
|
||||
fSourcePage.init(getCProject());
|
||||
fOutputPage.init(getCProject());
|
||||
fProjectsPage.init(getCProject());
|
||||
//fLibrariesPage.init(fCurrCProject);
|
||||
}
|
||||
Dialog.applyDialogFont(control);
|
||||
|
@ -175,18 +127,15 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
* project
|
||||
*/
|
||||
public void init(ICProject cproject, IPathEntry[] cpathEntries) {
|
||||
fCurrCProject = cproject;
|
||||
setCProject(cproject);
|
||||
boolean projectExists = false;
|
||||
List newClassPath = null;
|
||||
|
||||
IProject project = fCurrCProject.getProject();
|
||||
projectExists = (project.exists() && project.getFile(".cdtproject").exists()); //$NON-NLS-1$
|
||||
if (projectExists) {
|
||||
if (cpathEntries == null) {
|
||||
try {
|
||||
cpathEntries = fCurrCProject.getRawPathEntries();
|
||||
} catch (CModelException e) {
|
||||
}
|
||||
IProject project = getProject();
|
||||
if (cpathEntries == null) {
|
||||
try {
|
||||
cpathEntries = getCProject().getRawPathEntries();
|
||||
} catch (CModelException e) {
|
||||
}
|
||||
}
|
||||
if (cpathEntries != null) {
|
||||
|
@ -208,9 +157,9 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
fCPathList.setCheckedElements(exportedEntries);
|
||||
|
||||
if (fProjectsPage != null) {
|
||||
fSourcePage.init(fCurrCProject);
|
||||
fOutputPage.init(fCurrCProject);
|
||||
fProjectsPage.init(fCurrCProject);
|
||||
fSourcePage.init(getCProject());
|
||||
fOutputPage.init(getCProject());
|
||||
fProjectsPage.init(getCProject());
|
||||
// fLibrariesPage.init(fCurrCProject);
|
||||
}
|
||||
|
||||
|
@ -218,43 +167,6 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
initializeTimeStamps();
|
||||
}
|
||||
|
||||
private ArrayList getExistingEntries(IPathEntry[] cPathEntries) {
|
||||
ArrayList newCPath = new ArrayList();
|
||||
for (int i = 0; i < cPathEntries.length; i++) {
|
||||
IPathEntry curr = cPathEntries[i];
|
||||
newCPath.add(CPListElement.createFromExisting(curr, fCurrCProject));
|
||||
}
|
||||
return newCPath;
|
||||
}
|
||||
|
||||
private String getEncodedSettings() {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
|
||||
int nElements = fCPathList.getSize();
|
||||
buf.append('[').append(nElements).append(']');
|
||||
for (int i = 0; i < nElements; i++) {
|
||||
CPListElement elem = (CPListElement) fCPathList.getElement(i);
|
||||
elem.appendEncodedSettings(buf);
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public boolean hasChangesInDialog() {
|
||||
String currSettings = getEncodedSettings();
|
||||
return !currSettings.equals(fUserSettingsTimeStamp);
|
||||
}
|
||||
|
||||
public boolean hasChangesInCPathFile() {
|
||||
IFile file = fCurrCProject.getProject().getFile(".cdtproject"); //$NON-NLS-1$
|
||||
return fFileTimeStamp != file.getModificationStamp();
|
||||
}
|
||||
|
||||
public void initializeTimeStamps() {
|
||||
IFile file = fCurrCProject.getProject().getFile(".cdtproject"); //$NON-NLS-1$
|
||||
fFileTimeStamp = file.getModificationStamp();
|
||||
fUserSettingsTimeStamp = getEncodedSettings();
|
||||
}
|
||||
|
||||
private List getDefaultCPath(ICProject cproj) {
|
||||
List list = new ArrayList();
|
||||
// IResource srcFolder;
|
||||
|
@ -277,33 +189,6 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
return list;
|
||||
}
|
||||
|
||||
// -------- public api --------
|
||||
|
||||
/**
|
||||
* @return Returns the Java project. Can return
|
||||
* <code>null<code> if the page has not
|
||||
* been initialized.
|
||||
*/
|
||||
public ICProject getCProject() {
|
||||
return fCurrCProject;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the current class path (raw). Note that the entries
|
||||
* returned must not be valid.
|
||||
*/
|
||||
public IPathEntry[] getRawCPath() {
|
||||
List elements = fCPathList.getElements();
|
||||
int nElements = elements.size();
|
||||
IPathEntry[] entries = new IPathEntry[elements.size()];
|
||||
|
||||
for (int i = 0; i < nElements; i++) {
|
||||
CPListElement currElement = (CPListElement) elements.get(i);
|
||||
entries[i] = currElement.getPathEntry();
|
||||
}
|
||||
return entries;
|
||||
}
|
||||
|
||||
// -------- evaluate default settings --------
|
||||
|
||||
// private List getDefaultClassPath(IJavaProject jproj) {
|
||||
|
@ -328,20 +213,11 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
// }
|
||||
//
|
||||
|
||||
private void doStatusLineUpdate() {
|
||||
IStatus res = findMostSevereStatus();
|
||||
fContext.statusChanged(res);
|
||||
}
|
||||
|
||||
private IStatus findMostSevereStatus() {
|
||||
return StatusUtil.getMostSevere(new IStatus[] { fCPathStatus, fBuildPathStatus});
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the build path.
|
||||
*/
|
||||
public void updateClassPathStatus() {
|
||||
fCPathStatus.setOK();
|
||||
public void updateCPathStatus() {
|
||||
getPathStatus().setOK();
|
||||
|
||||
List elements = fCPathList.getElements();
|
||||
|
||||
|
@ -352,14 +228,14 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
for (int i = elements.size() - 1; i >= 0; i--) {
|
||||
CPListElement currElement = (CPListElement) elements.get(i);
|
||||
boolean isChecked = fCPathList.isChecked(currElement);
|
||||
if ( currElement.getEntryKind() == IPathEntry.CDT_SOURCE) {
|
||||
if (currElement.getEntryKind() == IPathEntry.CDT_SOURCE) {
|
||||
if (isChecked) {
|
||||
fCPathList.setCheckedWithoutUpdate(currElement, false);
|
||||
}
|
||||
} else {
|
||||
currElement.setExported(isChecked);
|
||||
}
|
||||
|
||||
|
||||
entries[i] = currElement.getPathEntry();
|
||||
if (currElement.isMissing()) {
|
||||
nEntriesMissing++;
|
||||
|
@ -371,10 +247,10 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
|
||||
if (nEntriesMissing > 0) {
|
||||
if (nEntriesMissing == 1) {
|
||||
fCPathStatus.setWarning(CPathEntryMessages.getFormattedString("BuildPathsBlock.warning.EntryMissing", //$NON-NLS-1$
|
||||
getPathStatus().setWarning(CPathEntryMessages.getFormattedString("CPathsBlock.warning.EntryMissing", //$NON-NLS-1$
|
||||
entryMissing.getPath().toString()));
|
||||
} else {
|
||||
fCPathStatus.setWarning(CPathEntryMessages.getFormattedString("BuildPathsBlock.warning.EntriesMissing", //$NON-NLS-1$
|
||||
getPathStatus().setWarning(CPathEntryMessages.getFormattedString("CPathsBlock.warning.EntriesMissing", //$NON-NLS-1$
|
||||
String.valueOf(nEntriesMissing)));
|
||||
}
|
||||
}
|
||||
|
@ -387,44 +263,12 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
updateBuildPathStatus();
|
||||
}
|
||||
|
||||
private void updateBuildPathStatus() {
|
||||
List elements = fCPathList.getElements();
|
||||
IPathEntry[] entries = new IPathEntry[elements.size()];
|
||||
|
||||
for (int i = elements.size() - 1; i >= 0; i--) {
|
||||
CPListElement currElement = (CPListElement) elements.get(i);
|
||||
entries[i] = currElement.getPathEntry();
|
||||
}
|
||||
|
||||
ICModelStatus status = CModelStatus.VERIFIED_OK; // CoreModelUtil.validateCPathEntries(fCurrCProject, entries);
|
||||
if (!status.isOK()) {
|
||||
fBuildPathStatus.setError(status.getMessage());
|
||||
return;
|
||||
}
|
||||
fBuildPathStatus.setOK();
|
||||
}
|
||||
|
||||
// -------- creation -------------------------------
|
||||
|
||||
public void configureCProject(IProgressMonitor monitor) throws CoreException, InterruptedException {
|
||||
if (monitor == null) {
|
||||
monitor = new NullProgressMonitor();
|
||||
}
|
||||
monitor.setTaskName(CPathEntryMessages.getString("CPathsBlock.operationdesc_c")); //$NON-NLS-1$
|
||||
monitor.beginTask("", 10); //$NON-NLS-1$
|
||||
|
||||
try {
|
||||
internalConfigureCProject(fCPathList.getElements(), monitor);
|
||||
} finally {
|
||||
monitor.done();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates the Java project and sets the configured build path and output
|
||||
* location. If the project already exists only build paths are updated.
|
||||
*/
|
||||
private void internalConfigureCProject(List cPathEntries, IProgressMonitor monitor) throws CoreException, InterruptedException {
|
||||
protected void internalConfigureCProject(List cPathEntries, IProgressMonitor monitor) throws CoreException, InterruptedException {
|
||||
// 10 monitor steps to go
|
||||
|
||||
monitor.worked(2);
|
||||
|
@ -444,8 +288,7 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
|
||||
monitor.worked(1);
|
||||
|
||||
fCurrCProject.setRawPathEntries(classpath, new SubProgressMonitor(monitor, 7));
|
||||
initializeTimeStamps();
|
||||
getCProject().setRawPathEntries(classpath, new SubProgressMonitor(monitor, 7));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -462,50 +305,4 @@ public class CPathTabBlock extends TabFolderOptionBlock implements ICOptionConta
|
|||
folder.create(force, local, monitor);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// -------- tab switching ----------
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock#setCurrentPage(org.eclipse.cdt.ui.dialogs.ICOptionPage)
|
||||
*/
|
||||
public void setCurrentPage(ICOptionPage page) {
|
||||
super.setCurrentPage(page);
|
||||
CPathBasePage newPage = (CPathBasePage) page;
|
||||
if (fCurrPage != null) {
|
||||
List selection = fCurrPage.getSelection();
|
||||
if (!selection.isEmpty()) {
|
||||
newPage.setSelection(selection);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionContainer#updateContainer()
|
||||
*/
|
||||
public void updateContainer() {
|
||||
update();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionContainer#getProject()
|
||||
*/
|
||||
public IProject getProject() {
|
||||
return fCurrCProject.getProject();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionContainer#getPreferences()
|
||||
*/
|
||||
public Preferences getPreferences() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,218 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All
|
||||
* rights reserved. This program and the accompanying materials are made
|
||||
* available under the terms of the Common Public License v1.0 which
|
||||
* accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors: QNX Software Systems - Initial API and implementation
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.dialogs.cpaths;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import org.eclipse.cdt.core.CProjectNature;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
|
||||
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.jface.dialogs.IDialogSettings;
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
|
||||
import org.eclipse.ui.dialogs.PropertyPage;
|
||||
|
||||
|
||||
public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatusChangeListener {
|
||||
|
||||
private static final String PAGE_SETTINGS = "IncludeSysmbolsPropertyPage"; //$NON-NLS-1$
|
||||
private static final String INDEX = "pageIndex"; //$NON-NLS-1$
|
||||
|
||||
IncludesSymbolsTabBlock fIncludesSymbolsBlock;
|
||||
|
||||
/**
|
||||
* @see PropertyPage#createContents
|
||||
*/
|
||||
protected Control createContents(Composite parent) {
|
||||
IProject project = getProject();
|
||||
Control result;
|
||||
if (project == null || !isCProject(project)) {
|
||||
result = createWithoutCProject(parent);
|
||||
} else if (!project.isOpen()) {
|
||||
result = createForClosedProject(parent);
|
||||
} else {
|
||||
result = createWithCProject(parent, project);
|
||||
}
|
||||
Dialog.applyDialogFont(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private IDialogSettings getSettings() {
|
||||
IDialogSettings cSettings = CUIPlugin.getDefault().getDialogSettings();
|
||||
IDialogSettings pageSettings = cSettings.getSection(PAGE_SETTINGS);
|
||||
if (pageSettings == null) {
|
||||
pageSettings = cSettings.addNewSection(PAGE_SETTINGS);
|
||||
pageSettings.put(INDEX, 3);
|
||||
}
|
||||
return pageSettings;
|
||||
}
|
||||
|
||||
/*
|
||||
* Content for valid projects.
|
||||
*/
|
||||
private Control createWithCProject(Composite parent, IProject project) {
|
||||
fIncludesSymbolsBlock = new IncludesSymbolsTabBlock(this, getSettings().getInt(INDEX));
|
||||
fIncludesSymbolsBlock.init(getCElement(), null);
|
||||
return fIncludesSymbolsBlock.createContents(parent);
|
||||
}
|
||||
|
||||
/*
|
||||
* Content for non-C projects.
|
||||
*/
|
||||
private Control createWithoutCProject(Composite parent) {
|
||||
Label label = new Label(parent, SWT.LEFT);
|
||||
label.setText(CPathEntryMessages.getString("CPathsPropertyPage.no_C_project.message")); //$NON-NLS-1$
|
||||
|
||||
fIncludesSymbolsBlock = null;
|
||||
setValid(true);
|
||||
return label;
|
||||
}
|
||||
|
||||
/*
|
||||
* Content for closed projects.
|
||||
*/
|
||||
private Control createForClosedProject(Composite parent) {
|
||||
Label label = new Label(parent, SWT.LEFT);
|
||||
label.setText(CPathEntryMessages.getString("CPathsPropertyPage.closed_project.message")); //$NON-NLS-1$
|
||||
|
||||
fIncludesSymbolsBlock = null;
|
||||
setValid(true);
|
||||
return label;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
if (fIncludesSymbolsBlock != null) {
|
||||
if (!visible) {
|
||||
if (fIncludesSymbolsBlock.hasChangesInDialog()) {
|
||||
String title= CPathEntryMessages.getString("CPathsPropertyPage.unsavedchanges.title"); //$NON-NLS-1$
|
||||
String message= CPathEntryMessages.getString("CPathsPropertyPage.unsavedchanges.message"); //$NON-NLS-1$
|
||||
String[] buttonLabels= new String[] {
|
||||
CPathEntryMessages.getString("CPathsPropertyPage.unsavedchanges.button.save"), //$NON-NLS-1$
|
||||
CPathEntryMessages.getString("CPathsPropertyPage.unsavedchanges.button.discard"), //$NON-NLS-1$
|
||||
CPathEntryMessages.getString("CPathsPropertyPage.unsavedchanges.button.ignore") //$NON-NLS-1$
|
||||
};
|
||||
MessageDialog dialog= new MessageDialog(getShell(), title, null, message, MessageDialog.QUESTION, buttonLabels, 0);
|
||||
int res= dialog.open();
|
||||
if (res == 0) {
|
||||
performOk();
|
||||
} else if (res == 1) {
|
||||
fIncludesSymbolsBlock.init(getCElement(), null);
|
||||
} else {
|
||||
fIncludesSymbolsBlock.initializeTimeStamps();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!fIncludesSymbolsBlock.hasChangesInDialog() && fIncludesSymbolsBlock.hasChangesInCPathFile()) {
|
||||
fIncludesSymbolsBlock.init(getCElement(), null);
|
||||
}
|
||||
}
|
||||
}
|
||||
super.setVisible(visible);
|
||||
}
|
||||
|
||||
private IProject getProject() {
|
||||
IAdaptable adaptable = getElement();
|
||||
if (adaptable != null) {
|
||||
ICElement elem = (ICElement) adaptable.getAdapter(ICElement.class);
|
||||
return elem.getCProject().getProject();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private ICElement getCElement() {
|
||||
IAdaptable adaptable = getElement();
|
||||
if (adaptable != null) {
|
||||
ICElement elem = (ICElement) adaptable.getAdapter(ICElement.class);
|
||||
return elem;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isCProject(IProject proj) {
|
||||
try {
|
||||
return proj.hasNature(CProjectNature.C_NATURE_ID);
|
||||
} catch (CoreException e) {
|
||||
CUIPlugin.getDefault().log(e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see IPreferencePage#performOk
|
||||
*/
|
||||
public boolean performOk() {
|
||||
if (fIncludesSymbolsBlock != null) {
|
||||
getSettings().put(INDEX, fIncludesSymbolsBlock.getPageIndex());
|
||||
|
||||
Shell shell = getControl().getShell();
|
||||
IRunnableWithProgress runnable = new IRunnableWithProgress() {
|
||||
|
||||
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
|
||||
try {
|
||||
fIncludesSymbolsBlock.configureCProject(monitor);
|
||||
} catch (CoreException e) {
|
||||
throw new InvocationTargetException(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(runnable);
|
||||
try {
|
||||
new ProgressMonitorDialog(shell).run(true, true, op);
|
||||
} catch (InvocationTargetException e) {
|
||||
String title = CPathEntryMessages.getString("CPathsPropertyPage.error.title"); //$NON-NLS-1$
|
||||
String message = CPathEntryMessages.getString("CPathsPropertyPage.error.message"); //$NON-NLS-1$
|
||||
ExceptionHandler.handle(e, shell, title, message);
|
||||
return false;
|
||||
} catch (InterruptedException e) {
|
||||
// cancelled
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see IStatusChangeListener#statusChanged
|
||||
*/
|
||||
public void statusChanged(IStatus status) {
|
||||
setValid(!status.matches(IStatus.ERROR));
|
||||
StatusUtil.applyToStatusLine(this, status);
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.jface.preference.IPreferencePage#performCancel()
|
||||
*/
|
||||
public boolean performCancel() {
|
||||
if (fIncludesSymbolsBlock != null) {
|
||||
getSettings().put(INDEX, fIncludesSymbolsBlock.getPageIndex());
|
||||
}
|
||||
return super.performCancel();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,124 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All
|
||||
* rights reserved. This program and the accompanying materials are made
|
||||
* available under the terms of the Common Public License v1.0 which accompanies
|
||||
* this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors: QNX Software Systems - Initial API and implementation
|
||||
******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.dialogs.cpaths;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICContainer;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.IPathEntry;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.TreeListDialogField;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.jface.dialogs.Dialog;
|
||||
import org.eclipse.swt.events.KeyEvent;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
|
||||
public class IncludesSymbolsTabBlock extends AbstractPathOptionBlock {
|
||||
|
||||
private CPathIncludeEntryPage fIncludePage;
|
||||
private CPathSymbolEntryPage fSymbolsPage;
|
||||
private SourceTreeAdapter fSourceTreeAdapter;
|
||||
|
||||
private class SourceTreeAdapter implements ITreeListAdapter {
|
||||
|
||||
public void customButtonPressed(TreeListDialogField field, int index) {
|
||||
}
|
||||
|
||||
public void selectionChanged(TreeListDialogField field) {
|
||||
}
|
||||
|
||||
public void doubleClicked(TreeListDialogField field) {
|
||||
}
|
||||
|
||||
public void keyPressed(TreeListDialogField field, KeyEvent event) {
|
||||
}
|
||||
|
||||
public Object[] getChildren(TreeListDialogField field, Object element) {
|
||||
List children = new ArrayList();
|
||||
if (element instanceof ICContainer) {
|
||||
children.addAll(((ICContainer) element).getChildrenOfType(ICElement.C_CCONTAINER));
|
||||
children.addAll(((ICContainer) element).getChildrenOfType(ICElement.C_UNIT));
|
||||
}
|
||||
return children.toArray();
|
||||
}
|
||||
|
||||
public Object getParent(TreeListDialogField field, Object element) {
|
||||
return ((ICElement) element).getParent();
|
||||
}
|
||||
|
||||
public boolean hasChildren(TreeListDialogField field, Object element) {
|
||||
if (element instanceof ICContainer) {
|
||||
return ((ICContainer) element).hasChildren();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public IncludesSymbolsTabBlock(IStatusChangeListener context, int pageToShow) {
|
||||
super(context, pageToShow);
|
||||
fSourceTreeAdapter = new SourceTreeAdapter();
|
||||
}
|
||||
|
||||
protected void addTabs() {
|
||||
fIncludePage = new CPathIncludeEntryPage(fSourceTreeAdapter);
|
||||
addPage(fIncludePage);
|
||||
fSymbolsPage = new CPathSymbolEntryPage(fSourceTreeAdapter);
|
||||
addPage(fSymbolsPage);
|
||||
}
|
||||
|
||||
public Control createContents(Composite parent) {
|
||||
Control control = super.createContents(parent);
|
||||
if (getCProject() != null) {
|
||||
fIncludePage.init(getCProject());
|
||||
fSymbolsPage.init(getCProject());
|
||||
}
|
||||
Dialog.applyDialogFont(control);
|
||||
return control;
|
||||
}
|
||||
|
||||
protected List getCPaths() {
|
||||
return new ArrayList();
|
||||
}
|
||||
|
||||
public void init(ICElement cElement, IPathEntry[] cpathEntries) {
|
||||
setCProject(cElement.getCProject());
|
||||
boolean projectExists = false;
|
||||
List newClassPath = null;
|
||||
|
||||
IProject project = getProject();
|
||||
if (cpathEntries == null) {
|
||||
try {
|
||||
cpathEntries = getCProject().getRawPathEntries();
|
||||
} catch (CModelException e) {
|
||||
}
|
||||
}
|
||||
if (cpathEntries != null) {
|
||||
newClassPath = getExistingEntries(cpathEntries);
|
||||
}
|
||||
if (fIncludePage != null) {
|
||||
fIncludePage.init(getCProject());
|
||||
fSymbolsPage.init(getCProject());
|
||||
}
|
||||
doStatusLineUpdate();
|
||||
initializeTimeStamps();
|
||||
}
|
||||
|
||||
protected void internalConfigureCProject(List cPathEntries, IProgressMonitor monitor) throws CoreException,
|
||||
InterruptedException {
|
||||
|
||||
}
|
||||
}
|
|
@ -56,7 +56,7 @@ import org.eclipse.cdt.core.model.ITranslationUnit;
|
|||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.internal.ui.util.ExceptionHandler;
|
||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||
import org.eclipse.cdt.internal.ui.wizards.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
|
||||
/**
|
||||
*/
|
||||
|
|
|
@ -32,12 +32,12 @@ import org.eclipse.cdt.core.model.ICProject;
|
|||
import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
||||
import org.eclipse.cdt.internal.ui.util.PixelConverter;
|
||||
import org.eclipse.cdt.internal.ui.util.SWTUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IListAdapter;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
|
||||
/**
|
||||
*/
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.eclipse.ui.help.WorkbenchHelp;
|
|||
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
|
||||
/*
|
||||
* The page to configure the compiler options.
|
||||
|
|
|
@ -36,7 +36,7 @@ import org.eclipse.cdt.core.model.ICProject;
|
|||
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.StatusUtil;
|
||||
import org.eclipse.cdt.internal.ui.wizards.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.IStatusChangeListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||
import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil;
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2003 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Common Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.wizards;
|
||||
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
|
||||
public interface IStatusChangeListener {
|
||||
|
||||
/**
|
||||
* Notifies this listener that the given status has changed.
|
||||
*
|
||||
* @param status the new status
|
||||
*/
|
||||
void statusChanged(IStatus status);
|
||||
}
|
Loading…
Add table
Reference in a new issue