1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-05 07:15:39 +02:00

update cpath ui

This commit is contained in:
David Inglis 2004-04-20 19:31:05 +00:00
parent 69bab80e56
commit dd0baea2ea
7 changed files with 168 additions and 41 deletions

View file

@ -1,3 +1,14 @@
2004-04-20 David Inglis
Work in progress CPath UI changes
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPListElement.java
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathBasePage.java
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathEntryMessages.properties
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathIncludeEntryPage.java
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/CPathSymbolEntryPage.java
* src/org/eclipse/cdt/internal/ui/dialogs/cpaths/ExtendedCPathBasePage.java
2004-04-20 Alain Magloire 2004-04-20 Alain Magloire
Fix NPE in CDocumentProvider Fix NPE in CDocumentProvider
* src/org/eclipse/cdt/internalu/ui/editor/CDocumentProvider.java * src/org/eclipse/cdt/internalu/ui/editor/CDocumentProvider.java

View file

@ -35,6 +35,7 @@ public class CPListElement {
public static final String MACRO_NAME = "macroname"; //$NON-NLS-1$ public static final String MACRO_NAME = "macroname"; //$NON-NLS-1$
public static final String MACRO_VALUE = "macrovalue"; //$NON-NLS-1$ public static final String MACRO_VALUE = "macrovalue"; //$NON-NLS-1$
public static final String BASE_REF = "baseref"; //$NON-NLS-1$ public static final String BASE_REF = "baseref"; //$NON-NLS-1$
public static final String BASE = "base"; //$NON-NLS-1$
private ICProject fProject; private ICProject fProject;
@ -77,12 +78,14 @@ public class CPListElement {
createAttributeElement(EXCLUSION, new Path[0]); createAttributeElement(EXCLUSION, new Path[0]);
createAttributeElement(SYSTEM_INCLUDE, Boolean.valueOf(false)); createAttributeElement(SYSTEM_INCLUDE, Boolean.valueOf(false));
createAttributeElement(BASE_REF, new Path("")); //$NON-NLS-1$ createAttributeElement(BASE_REF, new Path("")); //$NON-NLS-1$
createAttributeElement(BASE, new Path("")); //$NON-NLS-1$
break; break;
case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO:
createAttributeElement(MACRO_NAME, ""); //$NON-NLS-1$ createAttributeElement(MACRO_NAME, ""); //$NON-NLS-1$
createAttributeElement(MACRO_VALUE, ""); //$NON-NLS-1$ createAttributeElement(MACRO_VALUE, ""); //$NON-NLS-1$
createAttributeElement(EXCLUSION, new Path[0]); createAttributeElement(EXCLUSION, new Path[0]);
createAttributeElement(BASE_REF, new Path("")); //$NON-NLS-1$ createAttributeElement(BASE_REF, new Path("")); //$NON-NLS-1$
createAttributeElement(BASE, new Path("")); //$NON-NLS-1$
break; break;
case IPathEntry.CDT_CONTAINER: case IPathEntry.CDT_CONTAINER:
try { try {
@ -131,7 +134,7 @@ public class CPListElement {
((Boolean) getAttribute(SYSTEM_INCLUDE)).booleanValue(), exclusionPattern); ((Boolean) getAttribute(SYSTEM_INCLUDE)).booleanValue(), exclusionPattern);
case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO:
exclusionPattern = (IPath[]) getAttribute(EXCLUSION); exclusionPattern = (IPath[]) getAttribute(EXCLUSION);
return CoreModel.newMacroEntry(fPath, (String) getAttribute(MACRO_NAME), (String) getAttribute(MACRO_NAME)); return CoreModel.newMacroEntry(fPath, (String) getAttribute(MACRO_NAME), (String) getAttribute(MACRO_NAME), exclusionPattern);
default: default:
return null; return null;
} }
@ -261,7 +264,20 @@ public class CPListElement {
public boolean equals(Object other) { public boolean equals(Object other) {
if (other != null && other.getClass().equals(getClass())) { if (other != null && other.getClass().equals(getClass())) {
CPListElement elem = (CPListElement) other; CPListElement elem = (CPListElement) other;
return elem.fEntryKind == fEntryKind && elem.fPath.equals(fPath); if ( elem.fEntryKind != fEntryKind || !elem.fPath.equals(fPath)) {
return false;
}
switch (fEntryKind) {
case IPathEntry.CDT_INCLUDE:
return (getAttribute(INCLUDE).equals(elem.getAttribute(INCLUDE)) &&
getAttribute(BASE_REF).equals(elem.getAttribute(BASE_REF)) &&
getAttribute(BASE).equals(elem.getAttribute(BASE)));
case IPathEntry.CDT_MACRO:
return (getAttribute(MACRO_NAME).equals(elem.getAttribute(MACRO_NAME)) &&
getAttribute(BASE_REF).equals(elem.getAttribute(BASE_REF)) &&
getAttribute(BASE).equals(elem.getAttribute(BASE)));
}
return true;
} }
return false; return false;
} }
@ -337,6 +353,7 @@ public class CPListElement {
String macroValue = null; String macroValue = null;
boolean sysInclude = false; boolean sysInclude = false;
IPath baseRef = null; IPath baseRef = null;
IPath base = null;
// get the resource // get the resource
IResource res = null; IResource res = null;
@ -398,6 +415,8 @@ public class CPListElement {
exclusion = ((IIncludeEntry) curr).getExclusionPatterns(); exclusion = ((IIncludeEntry) curr).getExclusionPatterns();
sysInclude = ((IIncludeEntry) curr).isSystemInclude(); sysInclude = ((IIncludeEntry) curr).isSystemInclude();
baseRef = ((IIncludeEntry) curr).getBasePath(); baseRef = ((IIncludeEntry) curr).getBasePath();
base = new Path("");
// base = ((IIncludeEntry) curr).getBasePath();
include = ((IIncludeEntry) curr).getIncludePath(); include = ((IIncludeEntry) curr).getIncludePath();
break; break;
case IPathEntry.CDT_MACRO: case IPathEntry.CDT_MACRO:
@ -413,6 +432,8 @@ public class CPListElement {
macroName = ((IMacroEntry) curr).getMacroName(); macroName = ((IMacroEntry) curr).getMacroName();
macroValue = ((IMacroEntry) curr).getMacroValue(); macroValue = ((IMacroEntry) curr).getMacroValue();
baseRef = ((IMacroEntry) curr).getBasePath(); baseRef = ((IMacroEntry) curr).getBasePath();
base = new Path("");
// base = ((IIncludeEntry) curr).getBasePath();
break; break;
case IPathEntry.CDT_PROJECT: case IPathEntry.CDT_PROJECT:
res = root.findMember(path); res = root.findMember(path);
@ -427,6 +448,7 @@ public class CPListElement {
elem.setAttribute(MACRO_VALUE, macroValue); elem.setAttribute(MACRO_VALUE, macroValue);
elem.setAttribute(SYSTEM_INCLUDE, Boolean.valueOf(sysInclude)); elem.setAttribute(SYSTEM_INCLUDE, Boolean.valueOf(sysInclude));
elem.setAttribute(BASE_REF, baseRef); elem.setAttribute(BASE_REF, baseRef);
elem.setAttribute(BASE, base);
elem.setExported(curr.isExported()); elem.setExported(curr.isExported());
if (project.exists()) { if (project.exists()) {

View file

@ -43,7 +43,7 @@ public abstract class CPathBasePage extends AbstractCOptionPage {
IPath currPath = curr.getPath(); IPath currPath = curr.getPath();
if (currPath.isPrefixOf(entryPath) && !currPath.equals(entryPath)) { if (currPath.isPrefixOf(entryPath) && !currPath.equals(entryPath)) {
IPath[] exclusionFilters = (IPath[]) curr.getAttribute(CPListElement.EXCLUSION); IPath[] exclusionFilters = (IPath[]) curr.getAttribute(CPListElement.EXCLUSION);
if (!CoreModelUtil.isExcludedPath(entryPath, exclusionFilters)) { if (!CoreModelUtil.isExcludedPath(entryPath.removeFirstSegments(1), exclusionFilters)) {
IPath pathToExclude = entryPath.removeFirstSegments(currPath.segmentCount()).addTrailingSeparator(); IPath pathToExclude = entryPath.removeFirstSegments(currPath.segmentCount()).addTrailingSeparator();
IPath[] newExclusionFilters = new IPath[exclusionFilters.length + 1]; IPath[] newExclusionFilters = new IPath[exclusionFilters.length + 1];
System.arraycopy(exclusionFilters, 0, newExclusionFilters, 0, exclusionFilters.length); System.arraycopy(exclusionFilters, 0, newExclusionFilters, 0, exclusionFilters.length);

View file

@ -29,6 +29,8 @@ SymbolEntryPage.remove=Remove
SymbolEntryPage.listName=Defines: SymbolEntryPage.listName=Defines:
SymbolEntryPage.editSourcePaths=Edit Source Paths... SymbolEntryPage.editSourcePaths=Edit Source Paths...
SymbolEntryPage.sourcePaths=Source Paths: SymbolEntryPage.sourcePaths=Source Paths:
IncludeEntryPage.addExternal.title=Add User Symbol
IncludeEntryPage.addExternal.message=Symbol definition:
# ------- IncludeEntryPage ---------- # ------- IncludeEntryPage ----------
IncludeEntryPage.title=Include Paths IncludeEntryPage.title=Include Paths
@ -39,7 +41,9 @@ IncludeEntryPage.remove=Remove
IncludeEntryPage.listName=Include Paths: IncludeEntryPage.listName=Include Paths:
IncludeEntryPage.editSourcePaths=Edit Source Paths... IncludeEntryPage.editSourcePaths=Edit Source Paths...
IncludeEntryPage.sourcePaths=Source Paths: IncludeEntryPage.sourcePaths=Source Paths:
IncludeEntryPage.addExternal.button.browse=Browse...
IncludeEntryPage.addExternal.title=Add External Include Path
IncludeEntryPage.addExternal.message=Include path:
# ------- BuildPathsBlock ------- # ------- BuildPathsBlock -------
CPathsBlock.path.up.button=&Up CPathsBlock.path.up.button=&Up
CPathsBlock.path.down.button=&Down CPathsBlock.path.down.button=&Down

View file

@ -9,8 +9,23 @@
******************************************************************************/ ******************************************************************************/
package org.eclipse.cdt.internal.ui.dialogs.cpaths; 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.IPathEntry; import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter; import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Shell;
public class CPathIncludeEntryPage extends ExtendedCPathBasePage { public class CPathIncludeEntryPage extends ExtendedCPathBasePage {
@ -23,6 +38,53 @@ public class CPathIncludeEntryPage extends ExtendedCPathBasePage {
} }
protected void addPath() { protected void addPath() {
InputDialog dialog = new SelectPathInputDialog(getShell(),
CPathEntryMessages.getString("IncludeEntryPage.addExternal.title"), //$NON-NLS-1$
CPathEntryMessages.getString("IncludeEntryPage.addExternal.message"), null, null); //$NON-NLS-1$
String newItem = null;
if (dialog.open() == Window.OK) {
newItem = dialog.getValue();
if (newItem != null && !newItem.equals("")) { //$NON-NLS-1$
List cplist = fPathList.getElements();
CPListElement newPath = newCPElement(((ICElement) getSelection().get(0)).getResource());
newPath.setAttribute(CPListElement.INCLUDE, new Path(newItem));
if (!cplist.contains(newPath)) {
fPathList.addElement(newPath);
fCPathList.add(newPath);
fPathList.postSetSelection(new StructuredSelection(newPath));
}
}
}
}
private class SelectPathInputDialog extends InputDialog {
public SelectPathInputDialog(Shell parentShell, String dialogTitle, String dialogMessage, String initialValue,
IInputValidator validator) {
super(parentShell, dialogTitle, dialogMessage, initialValue, validator);
}
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
Button browse = createButton(parent, 3, CPathEntryMessages.getString("IncludeEntryPage.addExternal.button.browse"), //$NON-NLS-1$
true); //$NON-NLS-1$
browse.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent ev) {
DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN);
String currentName = getText().getText();
if (currentName != null && currentName.trim().length() != 0) {
dialog.setFilterPath(currentName);
}
String dirname = dialog.open();
if (dirname != null) {
getText().setText(dirname);
}
}
});
}
} }
} }

View file

@ -1,16 +1,22 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All * Copyright (c) 2002, 2003, 2004 QNX Software Systems Ltd. and others. All
* rights reserved. This program and the accompanying materials are made * rights reserved. This program and the accompanying materials are made
* available under the terms of the Common Public License v1.0 which * available under the terms of the Common Public License v1.0 which accompanies
* accompanies this distribution, and is available at * this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html * http://www.eclipse.org/legal/cpl-v10.html
* *
* Contributors: QNX Software Systems - Initial API and implementation * Contributors: QNX Software Systems - Initial API and implementation
******************************************************************************/ ******************************************************************************/
package org.eclipse.cdt.internal.ui.dialogs.cpaths; 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.IPathEntry; import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter; import org.eclipse.cdt.internal.ui.wizards.dialogfields.ITreeListAdapter;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
public class CPathSymbolEntryPage extends ExtendedCPathBasePage { public class CPathSymbolEntryPage extends ExtendedCPathBasePage {
@ -23,6 +29,24 @@ public class CPathSymbolEntryPage extends ExtendedCPathBasePage {
} }
protected void addPath() { protected void addPath() {
// Popup an entry dialog
InputDialog dialog = new InputDialog(getShell(), CPathEntryMessages.getString("SymbolEntryPage.addExternal.title"), //$NON-NLS-1$
CPathEntryMessages.getString("SymbolEntryPage.addExternal.message"), "", //$NON-NLS-1$ //$NON-NLS-2$
null);
String symbol = null;
if (dialog.open() == Window.OK) {
symbol = dialog.getValue();
if (symbol != null && symbol.length() > 0) {
List cplist = fPathList.getElements();
CPListElement newPath = newCPElement(((ICElement) getSelection().get(0)).getResource());
newPath.setAttribute(CPListElement.MACRO_NAME, symbol);
if (!cplist.contains(newPath)) {
fPathList.addElement(newPath);
fCPathList.add(newPath);
fPathList.postSetSelection(new StructuredSelection(newPath));
}
}
}
} }
} }

View file

@ -180,8 +180,7 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage {
protected void removePath(CPListElement element) { protected void removePath(CPListElement element) {
ICElement celem = (ICElement) getSelection().get(0); ICElement celem = (ICElement) getSelection().get(0);
if (!celem.getPath().equals(element.getPath())) { if (!celem.getPath().equals(element.getPath())) {
IPath exclude = celem.getPath(); IPath exclude = element.getPath().removeFirstSegments(element.getPath().segmentCount()).addTrailingSeparator();
IPath[] exclusions = (IPath[]) element.getAttribute(CPListElement.EXCLUSION); IPath[] exclusions = (IPath[]) element.getAttribute(CPListElement.EXCLUSION);
IPath[] newExlusions = new IPath[exclusions.length + 1]; IPath[] newExlusions = new IPath[exclusions.length + 1];
System.arraycopy(exclusions, 0, newExlusions, 0, exclusions.length); System.arraycopy(exclusions, 0, newExlusions, 0, exclusions.length);
@ -256,7 +255,9 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage {
while (iter.hasNext()) { while (iter.hasNext()) {
CPListElement element = (CPListElement) iter.next(); CPListElement element = (CPListElement) iter.next();
if (element.getPath().isPrefixOf(resPath) if (element.getPath().isPrefixOf(resPath)
&& !CoreModelUtil.isExcludedPath(resPath, (IPath[]) element.getAttribute(CPListElement.EXCLUSION))) { //$NON-NLS-1$ && (element.getPath().equals(resPath)
|| !CoreModelUtil.isExcludedPath(resPath.removeFirstSegments(1),
(IPath[]) element.getAttribute(CPListElement.EXCLUSION)))) {
newList.add(element); newList.add(element);
} }
} }
@ -294,7 +295,7 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage {
return null; return null;
} }
private CPListElement newCPElement(IResource resource) { protected CPListElement newCPElement(IResource resource) {
return new CPListElement(fCurrCProject, getEntryKind(), resource.getFullPath(), resource); return new CPListElement(fCurrCProject, getEntryKind(), resource.getFullPath(), resource);
} }
@ -366,7 +367,8 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage {
protected CPListElement[] openWorkspacePathEntryDialog(CPListElement existing) { protected CPListElement[] openWorkspacePathEntryDialog(CPListElement existing) {
Class[] acceptedClasses = new Class[] { CPListElement.class}; Class[] acceptedClasses = new Class[] { CPListElement.class};
TypedElementSelectionValidator validator = new TypedElementSelectionValidator(acceptedClasses, existing == null); TypedElementSelectionValidator validator = new TypedElementSelectionValidator(acceptedClasses, existing == null);
ViewerFilter filter = new CPListElementFilter((CPListElement[]) fPathList.getElements().toArray(new CPListElement[0]), getEntryKind(), true); ViewerFilter filter = new CPListElementFilter((CPListElement[]) fPathList.getElements().toArray(new CPListElement[0]),
getEntryKind(), true);
ILabelProvider lp = new WorkbenchCPathLabelProvider(); ILabelProvider lp = new WorkbenchCPathLabelProvider();
ITreeContentProvider cp = new WorkbenchCPathContentProvider(); ITreeContentProvider cp = new WorkbenchCPathContentProvider();
@ -416,6 +418,7 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage {
} }
fPathList.addElements(elementsToAdd); fPathList.addElements(elementsToAdd);
fCPathList.addAll(elementsToAdd);
fPathList.postSetSelection(new StructuredSelection(includes)); fPathList.postSetSelection(new StructuredSelection(includes));
} }
} }
@ -436,7 +439,8 @@ public abstract class ExtendedCPathBasePage extends CPathBasePage {
} }
fPathList.addElements(elementsToAdd); fPathList.addElements(elementsToAdd);
fPathList.postSetSelection(new StructuredSelection(includes)); fCPathList.addAll(elementsToAdd);
fPathList.postSetSelection(new StructuredSelection(elementsToAdd));
} }
} }