diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeProjectOptionBlock.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeProjectOptionBlock.java index 4233532526d..9f28412db7b 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeProjectOptionBlock.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/MakeProjectOptionBlock.java @@ -10,8 +10,8 @@ package org.eclipse.cdt.make.internal.ui; import org.eclipse.cdt.make.core.MakeBuilder; import org.eclipse.cdt.make.core.MakeCorePlugin; -import org.eclipse.cdt.make.ui.BuildPathInfoBlock; -import org.eclipse.cdt.make.ui.SettingsBlock; +import org.eclipse.cdt.make.ui.dialogs.BuildPathInfoBlock; +import org.eclipse.cdt.make.ui.dialogs.SettingsBlock; import org.eclipse.cdt.ui.dialogs.BinaryParserBlock; import org.eclipse.cdt.ui.dialogs.ICOptionContainer; import org.eclipse.cdt.ui.dialogs.TabFolderOptionBlock; diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/part/ListViewerPart.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/part/ListViewerPart.java new file mode 100644 index 00000000000..2a647f56fa8 --- /dev/null +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/internal/ui/part/ListViewerPart.java @@ -0,0 +1,35 @@ +package org.eclipse.cdt.make.internal.ui.part; + +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; + +public class ListViewerPart extends StructuredViewerPart { + + public ListViewerPart(String[] buttonLabels) { + super(buttonLabels); + } + + protected StructuredViewer createStructuredViewer(Composite parent, int style) { + TableViewer tableViewer = new TableViewer(parent, SWT.SINGLE | SWT.BORDER); + tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent e) { + ListViewerPart.this.selectionChanged((IStructuredSelection) e.getSelection()); + } + }); + return tableViewer; + } + + protected void buttonSelected(Button button, int index) { + } + + protected void selectionChanged(IStructuredSelection selection) { + } + + +} diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java index 482a12a0da7..d50c89ef3f1 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeContentProvider.java @@ -7,6 +7,7 @@ package org.eclipse.cdt.make.ui; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.eclipse.cdt.make.core.IMakeTarget; import org.eclipse.cdt.make.core.IMakeTargetListener; @@ -27,12 +28,19 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Control; public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener, IResourceChangeListener { + private boolean bFlatten; + protected StructuredViewer viewer; /** * Constructor for MakeContentProvider */ public MakeContentProvider() { + this(false); + } + + public MakeContentProvider(boolean flat) { + bFlatten = flat; } public Object[] getChildren(Object obj) { @@ -72,6 +80,15 @@ public class MakeContentProvider implements ITreeContentProvider, IMakeTargetLis } public Object[] getElements(Object obj) { + if ( bFlatten ) { + List list = new ArrayList(); + Object[] children = getChildren(obj); + for( int i = 0; i < children.length; i++ ) { + list.add(children[i]); + list.addAll(Arrays.asList(getElements(children[i]))); + } + return list.toArray(); + } return getChildren(obj); } diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeLabelProvider.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeLabelProvider.java index 37f5b8aab79..0b4c74669f1 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeLabelProvider.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/MakeLabelProvider.java @@ -8,12 +8,23 @@ package org.eclipse.cdt.make.ui; import org.eclipse.cdt.make.core.IMakeTarget; import org.eclipse.cdt.make.internal.ui.MakeUIImages; import org.eclipse.core.resources.IContainer; +import org.eclipse.core.runtime.IPath; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.model.WorkbenchLabelProvider; public class MakeLabelProvider extends LabelProvider { + private IPath pathPrefix; + WorkbenchLabelProvider fLableProvider = new WorkbenchLabelProvider(); + + public MakeLabelProvider() { + this(null); + } + + public MakeLabelProvider(IPath removePrefix) { + pathPrefix = removePrefix; + } /** * @see ILabelProvider#getImage(Object) */ @@ -31,12 +42,32 @@ public class MakeLabelProvider extends LabelProvider { * @see ILabelProvider#getText(Object) */ public String getText(Object obj) { + StringBuffer str = new StringBuffer(); if (obj instanceof IMakeTarget) { - return ((IMakeTarget)obj).getName(); + if ( pathPrefix != null) { + IPath targetPath = ((IMakeTarget)obj).getContainer().getProjectRelativePath(); + if ( pathPrefix.isPrefixOf(targetPath) ) { + targetPath = targetPath.removeFirstSegments(pathPrefix.segmentCount()); + } + str.append(targetPath.toString()); + if (targetPath.segmentCount() > 0) { + str.append("/"); + } + } + str.append(((IMakeTarget)obj).getName()); } else if (obj instanceof IContainer) { - return fLableProvider.getText(obj); + if ( pathPrefix != null ) { + IPath targetPath = ((IContainer)obj).getProjectRelativePath(); + if ( pathPrefix.isPrefixOf(targetPath) ) { + targetPath = targetPath.removeFirstSegments(pathPrefix.segmentCount()); + } + str.append(targetPath.toString()); + str.append("/"); + } else { + return fLableProvider.getText(obj); + } } - return ""; //$NON-NLS-1$ + return str.toString(); } public void dispose() { diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/actions/BuildTargetAction.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/actions/BuildTargetAction.java index 26856b234a4..1e070eb4937 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/actions/BuildTargetAction.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/actions/BuildTargetAction.java @@ -19,6 +19,7 @@ import org.eclipse.core.runtime.QualifiedName; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.window.Window; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; @@ -41,14 +42,15 @@ public class BuildTargetAction extends ActionDelegate implements IObjectActionDe dialog.setTarget(new IMakeTarget[] { target }); } catch (CoreException e) { } - dialog.open(); - IMakeTarget target = dialog.getTarget(); - if (target != null) { - try { - fContainer.setSessionProperty( - new QualifiedName(MakeUIPlugin.getUniqueIdentifier(), "lastTarget"), - target.getName()); - } catch (CoreException e1) { + if (dialog.open() == Window.OK) { + IMakeTarget target = dialog.getTarget(); + if (target != null) { + try { + fContainer.setSessionProperty( + new QualifiedName(MakeUIPlugin.getUniqueIdentifier(), "lastTarget"), + target.getName()); + } catch (CoreException e1) { + } } } } diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/BuildPathInfoBlock.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java similarity index 99% rename from build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/BuildPathInfoBlock.java rename to build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java index bc3659936ca..8dc9750d1d8 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/BuildPathInfoBlock.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java @@ -9,7 +9,7 @@ * IBM Rational Software - Initial API and implementation * QNX Software Systems - Move to Make plugin ***********************************************************************/ -package org.eclipse.cdt.make.ui; +package org.eclipse.cdt.make.ui.dialogs; import java.util.ArrayList; import java.util.StringTokenizer; diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildTargetDialog.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildTargetDialog.java index a5cf334eca0..82507775986 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildTargetDialog.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildTargetDialog.java @@ -1,13 +1,16 @@ package org.eclipse.cdt.make.ui.dialogs; import org.eclipse.cdt.make.core.IMakeTarget; -import org.eclipse.cdt.make.internal.ui.part.CheckboxTablePart; +import org.eclipse.cdt.make.internal.ui.part.ListViewerPart; import org.eclipse.cdt.make.ui.MakeContentProvider; import org.eclipse.cdt.make.ui.MakeLabelProvider; import org.eclipse.core.resources.IContainer; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; -import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.SWT; @@ -15,12 +18,13 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class BuildTargetDialog extends Dialog { private IMakeTarget[] selected; - private CheckboxTableViewer targetListViewer; + private StructuredViewer listViewer; private IContainer fContainer; public BuildTargetDialog(Shell shell, IContainer container) { @@ -50,26 +54,41 @@ public class BuildTargetDialog extends Dialog { protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); ((GridLayout)composite.getLayout()).numColumns = 2; - CheckboxTablePart part = new CheckboxTablePart(new String[] { "Select All", "Deselect All", "New" }); - part.createControl(parent, SWT.NULL, 2); - targetListViewer = part.getTableViewer(); - targetListViewer.setContentProvider(new MakeContentProvider()); - targetListViewer.addFilter(new ViewerFilter() { + Label title = new Label(composite, SWT.NONE); + GridData gd = new GridData(); + gd.horizontalSpan = 2; + title.setLayoutData(gd); + title.setText("Make Targets for: " + fContainer.getFullPath().toString().substring(1)); + ListViewerPart part = new ListViewerPart(new String[] { "Add Target...", "Remove Target", "Edit Target..." }); + part.createControl(composite, SWT.NULL, 2); + listViewer = part.getViewer(); + listViewer.setContentProvider(new MakeContentProvider(true)); + listViewer.addFilter(new ViewerFilter() { public boolean select(Viewer viewer, Object parentElement, Object element) { return (element instanceof IMakeTarget); } }); - targetListViewer.setLabelProvider(new MakeLabelProvider()); + listViewer.setLabelProvider(new MakeLabelProvider(fContainer.getProjectRelativePath())); + listViewer.addDoubleClickListener(new IDoubleClickListener() { + public void doubleClick(DoubleClickEvent event) { + okPressed(); + } + }); - GridData gd = (GridData) part.getControl().getLayoutData(); - gd.heightHint = 100; - gd.widthHint = 100; - - targetListViewer.setInput(fContainer); + gd = (GridData) part.getControl().getLayoutData(); + gd.heightHint = convertHeightInCharsToPixels(15); + gd.widthHint = convertWidthInCharsToPixels(50); + part.getControl().setLayoutData(gd); + + listViewer.setInput(fContainer); if (selected != null) - targetListViewer.setCheckedElements(selected); + listViewer.setSelection(new StructuredSelection(selected), true); return composite; } + + protected void okPressed() { + super.okPressed(); + } } diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/SettingsBlock.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/SettingsBlock.java similarity index 99% rename from build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/SettingsBlock.java rename to build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/SettingsBlock.java index 9b40438e577..b4c130d5c22 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/SettingsBlock.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/SettingsBlock.java @@ -1,4 +1,4 @@ -package org.eclipse.cdt.make.ui; +package org.eclipse.cdt.make.ui.dialogs; /* * (c) Copyright QNX Software Systems Ltd. 2002.