mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +02:00
fix 684486 & 68514
This commit is contained in:
parent
8cdd74a59e
commit
ce9b0e9e66
3 changed files with 29 additions and 263 deletions
|
@ -198,12 +198,19 @@ public class CPathPropertyPage extends PropertyPage implements IStatusChangeList
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (fStore != null) {
|
||||
fStore.removePathEntryStoreListener(this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.dialogs.IDialogPage#dispose()
|
||||
*/
|
||||
public void dispose() {
|
||||
if (fStore != null) {
|
||||
fStore.removePathEntryStoreListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -241,7 +248,10 @@ public class CPathPropertyPage extends PropertyPage implements IStatusChangeList
|
|||
control.getDisplay().asyncExec(new Runnable() {
|
||||
|
||||
public void run() {
|
||||
fCPathsBlock.init(CoreModel.getDefault().create(getProject()), null);
|
||||
Control control = getControl();
|
||||
if (control != null && !control.isDisposed()) {
|
||||
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;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.jface.dialogs.IDialogPage#dispose()
|
||||
*/
|
||||
public void dispose() {
|
||||
if (fStore != null) {
|
||||
fStore.removePathEntryStoreListener(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
if (fIncludesSymbolsBlock != null) {
|
||||
if (!visible) {
|
||||
|
@ -199,9 +210,6 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (fStore != null) {
|
||||
fStore.removePathEntryStoreListener(this);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -224,9 +232,6 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
|||
if (fIncludesSymbolsBlock != null) {
|
||||
getSettings().put(INDEX, fIncludesSymbolsBlock.getPageIndex());
|
||||
}
|
||||
if (fStore != null) {
|
||||
fStore.removePathEntryStoreListener(this);
|
||||
}
|
||||
return super.performCancel();
|
||||
}
|
||||
|
||||
|
@ -242,8 +247,10 @@ public class IncludesSymbolsPropertyPage extends PropertyPage implements IStatus
|
|||
control.getDisplay().asyncExec(new Runnable() {
|
||||
|
||||
public void run() {
|
||||
fIncludesSymbolsBlock.init(getCElement(), null);
|
||||
|
||||
Control control = getControl();
|
||||
if (control != null && !control.isDisposed()) {
|
||||
fIncludesSymbolsBlock.init(getCElement(), null);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue