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

bug 123358: Need easier way to change non-source folder into a source folder

This commit is contained in:
Andrew Gvozdev 2010-01-18 03:02:09 +00:00
parent 2c098ef25a
commit e2c52d813c
2 changed files with 110 additions and 25 deletions

View file

@ -325,7 +325,11 @@ implements
excludeFromBuildCheck.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
getResDesc().setExcluded(excludeFromBuildCheck.getSelection());
ICResourceDescription rcDescription = getResDesc();
rcDescription.setExcluded(excludeFromBuildCheck.getSelection());
if (currentTab instanceof AbstractCPropertyTab) {
((AbstractCPropertyTab)currentTab).updateData(rcDescription);
}
}
});
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2008 Intel Corporation and others.
* Copyright (c) 2007, 2010 Intel Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -14,18 +14,21 @@ package org.eclipse.cdt.ui.newui;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
@ -46,12 +49,18 @@ import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICExclusionPatternPathEntry;
import org.eclipse.cdt.core.settings.model.ICMultiItemsHolder;
import org.eclipse.cdt.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.internal.ui.CPluginImages;
/**
* CLocationTab implements common features for "Source Location" and "Output Location"
* tabs in project preferences.
*
*/
public abstract class CLocationTab extends AbstractCPropertyTab {
private final Image IMG_EN = CPluginImages.get(CPluginImages.IMG_OBJS_CFOLDER);
@ -246,6 +255,10 @@ public abstract class CLocationTab extends AbstractCPropertyTab {
setEntries(cfgd, p);
tree.setInput(cfgd);
updateData(cfgd);
if (page instanceof AbstractPage) {
ICConfigurationDescription cfgDescription = cfgd.getConfiguration();
((AbstractPage)page).cfgChanged(cfgDescription);
}
}
@Override
@ -255,16 +268,29 @@ public abstract class CLocationTab extends AbstractCPropertyTab {
return;
}
setAllVisible(true, null);
cfgd = _cfgd;
src = new ArrayList<_Entry>();
for (ICExclusionPatternPathEntry e : getEntries(cfgd))
src.add(new _Entry(e));
tree.setInput(src);
// get CProject
IAdaptable ad = page.getElement();
if (ad instanceof ICProject)
if (ad instanceof ICProject) {
cprj = (ICProject)ad;
}
IResource rc = (IResource)ad;
setAllVisible(true, null);
src = new ArrayList<_Entry>();
_Entry selectedSourcePath = null;
for (ICExclusionPatternPathEntry e : getEntries(cfgd)) {
_Entry entry = new _Entry(e);
if (entry.ent.isValueWorkspacePath() && entry.ent.getFullPath().equals(rc.getFullPath())) {
selectedSourcePath = entry;
}
src.add(entry);
}
tree.setInput(src);
if (selectedSourcePath!=null) {
ISelection selection = new StructuredSelection(new Object[] {selectedSourcePath});
tree.setSelection(selection);
}
updateButtons();
}
@ -286,34 +312,25 @@ public abstract class CLocationTab extends AbstractCPropertyTab {
}
// This page can be displayed for project only
// This page can be displayed either for project or for folder
@Override
public boolean canBeVisible() {
if (page.getResDesc() instanceof ICMultiItemsHolder)
return false; // cannot work with multi cfg
return page.isForProject();
return page.isForProject() || page.isForFolder();
}
private String[] getProjectDialog(Shell shell) {
IPath path = new Path(EMPTY_STR);
Set<IPath> set = new HashSet<IPath>(src.size());
for (_Entry e : src)
set.add(e.getPath());
LocDialog dialog = new LocDialog(shell, set);
dialog.setInput(page.getProject());
IResource container = null;
if(path.isAbsolute()){
IContainer cs[] = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocation(path);
if(cs != null && cs.length > 0)
container = cs[0];
}
dialog.setInitialSelection(container);
dialog.setTitle(WORKSPACE_DIR_DIALOG_TITLE);
dialog.setMessage(WORKSPACE_DIR_DIALOG_MSG);
dialog.setTitle(WORKSPACE_DIR_DIALOG_TITLE);
dialog.setMessage(WORKSPACE_DIR_DIALOG_MSG);
if (dialog.open() == Window.OK) {
Object[] resources = dialog.getResult();
if (resources != null) {
@ -346,7 +363,7 @@ public abstract class CLocationTab extends AbstractCPropertyTab {
p = _f.getFullPath();
}
@SuppressWarnings("unchecked")
@SuppressWarnings("rawtypes")
public Object getAdapter(Class adapter) {
return f.getAdapter(adapter);
}
@ -359,6 +376,51 @@ public abstract class CLocationTab extends AbstractCPropertyTab {
public IPath getPath() {
return p;
}
private CLocationTab getOuterType() {
return CLocationTab.this;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + ((p == null) ? 0 : p.hashCode());
result = prime * result + (isRoot ? 1231 : 1237);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Holder other = (Holder) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (isRoot != other.isRoot)
return false;
if (p == null) {
if (other.p != null)
return false;
} else if (!p.equals(other.p))
return false;
return true;
}
/**
* For debugging purpose only
* @see java.lang.Object#toString()
*/
@SuppressWarnings("nls")
@Override
public String toString() {
return "[Holder] " + p;
}
}
class LocDialog extends ElementTreeSelectionDialog {
@ -424,5 +486,24 @@ public abstract class CLocationTab extends AbstractCPropertyTab {
existing = ex;
}
@Override
protected TreeViewer createTreeViewer(Composite parent) {
TreeViewer treeViewer = super.createTreeViewer(parent);
// Expand the tree and select current resource
if (page.getElement() instanceof IFolder) {
IFolder folder = (IFolder)page.getElement();
List<Holder> list = new ArrayList<Holder>();
list.add(new Holder(folder));
for (IContainer parentFolder = folder.getParent();parentFolder instanceof IFolder;parentFolder=parentFolder.getParent()) {
list.add(0,new Holder((IFolder) parentFolder));
}
treeViewer.expandToLevel(new TreePath(list.toArray()), 0);
setInitialSelection(new Holder(folder));
}
return treeViewer;
}
}
}