mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-29 20:05:35 +02:00
fix 684486 & 68514
This commit is contained in:
parent
8cdd74a59e
commit
ce9b0e9e66
3 changed files with 29 additions and 263 deletions
|
@ -198,10 +198,17 @@ public class CPathPropertyPage extends PropertyPage implements IStatusChangeList
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.dialogs.IDialogPage#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
if (fStore != null) {
|
if (fStore != null) {
|
||||||
fStore.removePathEntryStoreListener(this);
|
fStore.removePathEntryStoreListener(this);
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -241,8 +248,11 @@ public class CPathPropertyPage extends PropertyPage implements IStatusChangeList
|
||||||
control.getDisplay().asyncExec(new Runnable() {
|
control.getDisplay().asyncExec(new Runnable() {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Control control = getControl();
|
||||||
|
if (control != null && !control.isDisposed()) {
|
||||||
fCPathsBlock.init(CoreModel.getDefault().create(getProject()), null);
|
fCPathsBlock.init(CoreModel.getDefault().create(getProject()), null);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,251 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004 QNX Software Systems 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.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
|
||||||
import org.eclipse.cdt.core.model.CoreModelUtil;
|
|
||||||
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.core.model.ISourceRoot;
|
|
||||||
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.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.jface.viewers.IColorProvider;
|
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
|
||||||
import org.eclipse.jface.viewers.StructuredSelection;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.graphics.Color;
|
|
||||||
import org.eclipse.swt.graphics.RGB;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Display;
|
|
||||||
|
|
||||||
public abstract class ExtendedCPathBasePage extends CPathBasePage {
|
|
||||||
|
|
||||||
protected List fCPathList;
|
|
||||||
protected ICProject fCurrCProject;
|
|
||||||
|
|
||||||
private ListDialogField fPathList;
|
|
||||||
private TreeListDialogField fSrcList;
|
|
||||||
|
|
||||||
private class ListAdapter implements IListAdapter, IDialogFieldListener {
|
|
||||||
|
|
||||||
public void dialogFieldChanged(DialogField field) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void customButtonPressed(ListDialogField field, int index) {
|
|
||||||
buttonPressed(index, field.getSelectedElements());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void selectionChanged(ListDialogField field) {
|
|
||||||
pathSelectionChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doubleClicked(ListDialogField field) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private class ModifiedCPListLabelProvider extends CPElementLabelProvider implements IColorProvider {
|
|
||||||
|
|
||||||
private final Color inDirect = new Color(Display.getDefault(), new RGB(170, 170, 170));
|
|
||||||
|
|
||||||
public Color getBackground(Object element) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Color getForeground(Object element) {
|
|
||||||
if (isPathInheritedFromSelected((CPElement) element)) {
|
|
||||||
return inDirect;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ExtendedCPathBasePage(ITreeListAdapter adapter, String title, String pathTitle, String[] buttons) {
|
|
||||||
super(title);
|
|
||||||
ListAdapter includeListAdaper = new ListAdapter();
|
|
||||||
|
|
||||||
fPathList = new ListDialogField(includeListAdaper, buttons, new ModifiedCPListLabelProvider()) {
|
|
||||||
|
|
||||||
protected int getListStyle() {
|
|
||||||
return super.getListStyle() & ~SWT.MULTI;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
fPathList.setDialogFieldListener(includeListAdaper);
|
|
||||||
fPathList.setLabelText(pathTitle);
|
|
||||||
fSrcList = new TreeListDialogField(adapter,
|
|
||||||
null /*new String[]{CPathEntryMessages.getString("ExtendingCPathBasePage.editSourcePaths")}*/, //$NON-NLS-1$
|
|
||||||
new CElementLabelProvider()) {
|
|
||||||
|
|
||||||
protected int getTreeStyle() {
|
|
||||||
return super.getTreeStyle() & ~SWT.MULTI;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
fSrcList.setLabelText(CPathEntryMessages.getString("ExtendingCPathBasePage.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, fPathList}, true);
|
|
||||||
LayoutUtil.setHorizontalGrabbing(fPathList.getListControl(null));
|
|
||||||
|
|
||||||
int buttonBarWidth = converter.convertWidthInCharsToPixels(30);
|
|
||||||
fPathList.setButtonsMinWidth(buttonBarWidth);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ListDialogField getPathList() {
|
|
||||||
return fPathList;
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract protected void buttonPressed(int indx, List selected);
|
|
||||||
|
|
||||||
protected abstract void pathSelectionChanged();
|
|
||||||
|
|
||||||
protected boolean isPathInheritedFromSelected(CPElement element) {
|
|
||||||
IPath resPath = element.getPath();
|
|
||||||
List sel = getSelection();
|
|
||||||
if (!sel.isEmpty()) {
|
|
||||||
if (sel.get(0) instanceof ICElement) {
|
|
||||||
ICElement celem = (ICElement) sel.get(0);
|
|
||||||
if (!celem.getPath().equals(resPath)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void removeFromSelectedPath(CPElement element) {
|
|
||||||
ICElement celem = (ICElement) getSelection().get(0);
|
|
||||||
if (!celem.getPath().equals(element.getPath())) {
|
|
||||||
IPath exclude = celem.getPath().removeFirstSegments(element.getPath().segmentCount()).addTrailingSeparator();
|
|
||||||
IPath[] exclusions = (IPath[]) element.getAttribute(CPElement.EXCLUSION);
|
|
||||||
IPath[] newExlusions = new IPath[exclusions.length + 1];
|
|
||||||
System.arraycopy(exclusions, 0, newExlusions, 0, exclusions.length);
|
|
||||||
newExlusions[exclusions.length] = exclude;
|
|
||||||
element.setAttribute(CPElement.EXCLUSION, newExlusions);
|
|
||||||
selectionChanged(new StructuredSelection(getSelection()));
|
|
||||||
} else {
|
|
||||||
fCPathList.remove(element);
|
|
||||||
fPathList.removeElement(element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void init(ICProject project, List cPaths) {
|
|
||||||
fCurrCProject = project;
|
|
||||||
List list = new ArrayList();
|
|
||||||
try {
|
|
||||||
List clist = project.getChildrenOfType(ICElement.C_CCONTAINER);
|
|
||||||
list.addAll(clist);
|
|
||||||
} catch (CModelException e) {
|
|
||||||
CUIPlugin.getDefault().log(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < list.size(); i++) {
|
|
||||||
if (((ISourceRoot) list.get(i)).getResource() == project.getProject()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (i == list.size()) {
|
|
||||||
list.add(0, project);
|
|
||||||
}
|
|
||||||
fSrcList.setElements(list);
|
|
||||||
fCPathList = filterList(cPaths);
|
|
||||||
fPathList.setElements(fCPathList);
|
|
||||||
fSrcList.selectElements(new StructuredSelection(list.get(0)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public List getCPaths() {
|
|
||||||
return fCPathList;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IPathEntry[] getRawPathEntries() {
|
|
||||||
IPathEntry[] currEntries = new IPathEntry[fCPathList.size()];
|
|
||||||
for (int i = 0; i < currEntries.length; i++) {
|
|
||||||
CPElement curr = (CPElement) fCPathList.get(i);
|
|
||||||
currEntries[i] = curr.getPathEntry();
|
|
||||||
}
|
|
||||||
return currEntries;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List getSelection() {
|
|
||||||
return fSrcList.getSelectedElements();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSelection(List selection) {
|
|
||||||
fSrcList.selectElements(new StructuredSelection(selection));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void selectionChanged(IStructuredSelection selection) {
|
|
||||||
fPathList.setElements(filterList(getCPaths(), selection));
|
|
||||||
}
|
|
||||||
|
|
||||||
protected List filterList(List list, IStructuredSelection selection) {
|
|
||||||
if (selection.isEmpty()) {
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
Object sel = selection.getFirstElement();
|
|
||||||
IPath resPath;
|
|
||||||
resPath = ((ICElement) sel).getPath();
|
|
||||||
List newList = new ArrayList(list.size());
|
|
||||||
Iterator iter = list.iterator();
|
|
||||||
while (iter.hasNext()) {
|
|
||||||
CPElement element = (CPElement) iter.next();
|
|
||||||
if (element.getPath().isPrefixOf(resPath)
|
|
||||||
&& (element.getPath().equals(resPath) || !CoreModelUtil.isExcludedPath(resPath.removeFirstSegments(1),
|
|
||||||
(IPath[]) element.getAttribute(CPElement.EXCLUSION)))) {
|
|
||||||
newList.add(element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return newList;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void performApply(IProgressMonitor monitor) throws CoreException {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void performDefaults() {
|
|
||||||
}
|
|
||||||
|
|
||||||
// private IPathEntry[] getUsedPathFiles(CPListElement existing) {
|
|
||||||
// List res= new ArrayList();
|
|
||||||
// List cplist= fPathList.getElements();
|
|
||||||
// for (int i= 0; i < cplist.size(); i++) {
|
|
||||||
// CPListElement elem= (CPListElement)cplist.get(i);
|
|
||||||
// if (isEntryKind(elem.getEntryKind()) && (elem != existing)) {
|
|
||||||
// IResource resource= elem.getResource();
|
|
||||||
// if (resource instanceof IFile) {
|
|
||||||
// res.add(resource);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return (IFile[]) res.toArray(new IFile[res.size()]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
|
@ -113,6 +113,17 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.jface.dialogs.IDialogPage#dispose()
|
||||||
|
*/
|
||||||
|
public void dispose() {
|
||||||
|
if (fStore != null) {
|
||||||
|
fStore.removePathEntryStoreListener(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setVisible(boolean visible) {
|
public void setVisible(boolean visible) {
|
||||||
if (fIncludesSymbolsBlock != null) {
|
if (fIncludesSymbolsBlock != null) {
|
||||||
if (!visible) {
|
if (!visible) {
|
||||||
|
@ -199,9 +210,6 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fStore != null) {
|
|
||||||
fStore.removePathEntryStoreListener(this);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,9 +232,6 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
||||||
if (fIncludesSymbolsBlock != null) {
|
if (fIncludesSymbolsBlock != null) {
|
||||||
getSettings().put(INDEX, fIncludesSymbolsBlock.getPageIndex());
|
getSettings().put(INDEX, fIncludesSymbolsBlock.getPageIndex());
|
||||||
}
|
}
|
||||||
if (fStore != null) {
|
|
||||||
fStore.removePathEntryStoreListener(this);
|
|
||||||
}
|
|
||||||
return super.performCancel();
|
return super.performCancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,8 +247,10 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
||||||
control.getDisplay().asyncExec(new Runnable() {
|
control.getDisplay().asyncExec(new Runnable() {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Control control = getControl();
|
||||||
|
if (control != null && !control.isDisposed()) {
|
||||||
fIncludesSymbolsBlock.init(getCElement(), null);
|
fIncludesSymbolsBlock.init(getCElement(), null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue