1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-31 21:05:37 +02:00

update make view to use make target provider

This commit is contained in:
David Inglis 2003-08-19 02:22:13 +00:00
parent 2bb372a867
commit 8043fd6640
5 changed files with 149 additions and 282 deletions

View file

@ -44,7 +44,6 @@
%MakeConversionWizard.description %MakeConversionWizard.description
</description> </description>
</wizard> </wizard>
<!-- For C++ Wizards --> <!-- For C++ Wizards -->
<wizard <wizard
name="%WizardNewCCMakeProject.name" name="%WizardNewCCMakeProject.name"
@ -59,7 +58,7 @@
</description> </description>
</wizard> </wizard>
<wizard <wizard
name="%WizardConvertMakeWizard.name" name="%WizardConvertMakeProject.name"
icon="icons/ctool16/convert-normal.gif" icon="icons/ctool16/convert-normal.gif"
category="org.eclipse.cdt.ui.newCCWizards" category="org.eclipse.cdt.ui.newCCWizards"
class="org.eclipse.cdt.make.ui.wizards.ConvertToMakeProjectWizard" class="org.eclipse.cdt.make.ui.wizards.ConvertToMakeProjectWizard"
@ -70,7 +69,6 @@
%MakeConversionWizard.description %MakeConversionWizard.description
</description> </description>
</wizard> </wizard>
</extension> </extension>
<extension <extension
point="org.eclipse.ui.popupMenus"> point="org.eclipse.ui.popupMenus">
@ -217,10 +215,11 @@
<extension <extension
point="org.eclipse.ui.actionSets"> point="org.eclipse.ui.actionSets">
<actionSet <actionSet
label="%ActionSetMake.label" label="%ActionUpdateActionSet.label"
id="org.eclipse.cdt.make.ui.actionSet1"> id="org.eclipse.cdt.make.ui.updateActionSet">
<action <action
label="org.eclipse.cdt.make.ui.action1" label="org.eclipse.cdt.make.ui.action1"
class="org.eclipse.cdt.make.ui.actions.UpdateMakeProjectAction"
id="org.eclipse.cdt.make.ui.action1"> id="org.eclipse.cdt.make.ui.action1">
</action> </action>
</actionSet> </actionSet>

View file

@ -7,23 +7,15 @@ package org.eclipse.cdt.make.ui.actions;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.eclipse.cdt.make.core.IMakeBuilderInfo;
import org.eclipse.cdt.make.core.MakeBuilder;
import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.cdt.make.internal.ui.MakeUIPlugin; import org.eclipse.cdt.make.internal.ui.MakeUIPlugin;
import org.eclipse.cdt.make.ui.views.MakeTarget; import org.eclipse.cdt.make.ui.views.MakeTarget;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableContext; import org.eclipse.jface.operation.IRunnableContext;
import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorInput;

View file

@ -5,35 +5,35 @@ package org.eclipse.cdt.make.ui.views;
* All Rights Reserved. * All Rights Reserved.
*/ */
import org.eclipse.cdt.make.core.IMakeTarget;
import org.eclipse.cdt.make.core.IMakeTargetListener;
import org.eclipse.cdt.make.core.IMakeTargetProvider;
import org.eclipse.cdt.make.core.MakeTargetEvent;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.widgets.Control;
public class MakeContentProvider implements ITreeContentProvider, IResourceChangeListener {
public class MakeContentProvider implements ITreeContentProvider, IMakeTargetListener {
protected Viewer viewer; protected Viewer viewer;
/** /**
* Constructor for MakeContentProvider * Constructor for MakeContentProvider
*/ */
public MakeContentProvider() { public MakeContentProvider() {
super();
} }
/** /**
* @see ITreeContentProvider#getChildren(Object) * @see ITreeContentProvider#getChildren(Object)
*/ */
public Object[] getChildren(Object obj) { public Object[] getChildren(Object obj) {
if (obj instanceof MakeTarget) { if (obj instanceof IContainer) {
MakeTarget md = (MakeTarget)obj; if (viewer != null) {
return (Object[])md.getChildren(); Object input = viewer.getInput();
if (input instanceof IMakeTargetProvider) {
IMakeTargetProvider provider = (IMakeTargetProvider)obj;
return provider.getTargets((IContainer)obj);
}
}
} }
return new Object[0]; return new Object[0];
} }
@ -42,9 +42,10 @@ public class MakeContentProvider implements ITreeContentProvider, IResourceChang
* @see ITreeContentProvider#getParent(Object) * @see ITreeContentProvider#getParent(Object)
*/ */
public Object getParent(Object obj) { public Object getParent(Object obj) {
if (obj instanceof MakeTarget) { if (obj instanceof IMakeTarget) {
MakeTarget directives = (MakeTarget)obj; return ((IMakeTarget)obj).getContainer();
return directives.getParent(); } else if (obj instanceof IContainer) {
return ((IContainer)obj).getParent();
} }
return null; return null;
} }
@ -69,10 +70,10 @@ public class MakeContentProvider implements ITreeContentProvider, IResourceChang
public void dispose() { public void dispose() {
if (viewer != null) { if (viewer != null) {
Object obj = viewer.getInput(); Object obj = viewer.getInput();
if (obj instanceof MakeTarget) { if (obj instanceof IMakeTargetProvider) {
MakeTarget target = (MakeTarget)obj; IMakeTargetProvider provider = (IMakeTargetProvider)obj;
IWorkspace workspace = target.getResource().getWorkspace(); provider.removeListener(this);
workspace.removeResourceChangeListener(this); provider = null;
} }
} }
} }
@ -83,86 +84,21 @@ public class MakeContentProvider implements ITreeContentProvider, IResourceChang
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
this.viewer = viewer; this.viewer = viewer;
if (oldInput != null) { if (oldInput != null) {
if (oldInput instanceof MakeTarget) { if (oldInput instanceof IMakeTargetProvider) {
IResource res = ((MakeTarget)oldInput).getResource(); ((IMakeTargetProvider)oldInput).removeListener(this);
if (res instanceof IWorkspaceRoot) {
IWorkspace workspace = res.getWorkspace();
workspace.removeResourceChangeListener(this);
}
} }
} }
if (newInput != null) { if (newInput != null) {
if (newInput instanceof MakeTarget) { if (newInput instanceof IMakeTargetProvider) {
IResource res = ((MakeTarget)newInput).getResource(); ((IMakeTargetProvider)newInput).addListener(this);
if (res instanceof IWorkspaceRoot) {
IWorkspace workspace = res.getWorkspace();
workspace.addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE);
}
} }
} }
} }
public void resourceChanged (final IResourceChangeEvent event) { /* (non-Javadoc)
final IResourceDelta deltas = event.getDelta(); * @see org.eclipse.cdt.make.core.IMakeTargetListener#targetChanged(org.eclipse.cdt.make.core.MakeTargetEvent)
Control ctrl = viewer.getControl(); */
if (ctrl != null && !ctrl.isDisposed()) { public void targetChanged(MakeTargetEvent event) {
// Get the affected resource
ctrl.getDisplay().syncExec(new Runnable() {
public void run() {
processDelta (deltas);
}
});
}
}
void processDelta (IResourceDelta delta) {
// Bail out if the widget was disposed.
Control ctrl = viewer.getControl();
if (ctrl == null || ctrl.isDisposed()) {
return;
}
if (delta == null) {
return;
}
int changeFlags = delta.getFlags();
IResourceDelta[] affectedChildren =
delta.getAffectedChildren(IResourceDelta.CHANGED);
// Not interested in Content changes.
for (int i = 0; i < affectedChildren.length; i++) {
if ((affectedChildren[i].getFlags() & IResourceDelta.TYPE) != 0) {
return;
}
}
// handle open and closing.
if ((changeFlags & (IResourceDelta.OPEN | IResourceDelta.SYNC)) != 0) {
ctrl.setRedraw(false);
viewer.refresh();
ctrl.setRedraw(true);
return;
}
// Handle changed children recursively.
for (int i = 0; i < affectedChildren.length; i++) {
processDelta(affectedChildren[i]);
}
// We are only interested in creation and deletion of folders.
affectedChildren = delta.getAffectedChildren(IResourceDelta.REMOVED | IResourceDelta.ADDED);
if (affectedChildren.length > 0) {
for (int i = 0; i < affectedChildren.length; i++) {
IResource r = affectedChildren[i].getResource();
if (r instanceof IContainer) {
ctrl.setRedraw(false);
viewer.refresh();
ctrl.setRedraw(true);
break;
}
}
}
} }
} }

View file

@ -5,38 +5,23 @@ package org.eclipse.cdt.make.ui.views;
* All Rights Reserved. * All Rights Reserved.
*/ */
import java.util.Hashtable; import org.eclipse.cdt.make.core.IMakeTarget;
import java.util.Map; import org.eclipse.core.resources.IContainer;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
public class MakeLabelProvider implements ILabelProvider { public class MakeLabelProvider extends LabelProvider {
/**
* The cache of images that have been dispensed by this provider.
* Maps ImageDescriptor->Image.
*/
private Map imageTable = null;
/** /**
* @see ILabelProvider#getImage(Object) * @see ILabelProvider#getImage(Object)
*/ */
public Image getImage(Object obj) { public Image getImage(Object obj) {
Image image = null; Image image = null;
//obtain the cached image corresponding to the descriptor if (obj instanceof IMakeTarget) {
if (imageTable == null) { } else if (obj instanceof IContainer) {
imageTable = new Hashtable(4); return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
}
if (obj instanceof MakeTarget) {
ImageDescriptor descriptor = ((MakeTarget)obj).getImageDescriptor();
image = (Image) imageTable.get(descriptor);
if (image == null) {
image = descriptor.createImage();
imageTable.put(descriptor, image);
}
} }
return image; return image;
} }
@ -46,33 +31,10 @@ public class MakeLabelProvider implements ILabelProvider {
*/ */
public String getText(Object obj) { public String getText(Object obj) {
if (obj instanceof MakeTarget) { if (obj instanceof MakeTarget) {
return ((MakeTarget)obj).toString(); return ((IMakeTarget)obj).getName();
} else if (obj instanceof IContainer) {
return ((IContainer)obj).getName();
} }
return ""; return "";
} }
/**
* @see IBaseLabelProvider#addListener(ILabelProviderListener)
*/
public void addListener(ILabelProviderListener arg0) {
}
/**
* @see IBaseLabelProvider#dispose()
*/
public void dispose() {
}
/**
* @see IBaseLabelProvider#isLabelProperty(Object, String)
*/
public boolean isLabelProperty(Object arg0, String arg1) {
return false;
}
/**
* @see IBaseLabelProvider#removeListener(ILabelProviderListener)
*/
public void removeListener(ILabelProviderListener arg0) {
}
} }

View file

@ -5,27 +5,31 @@ package org.eclipse.cdt.make.ui.views;
* All Rights Reserved. * All Rights Reserved.
*/ */
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.cdt.make.core.MakeCorePlugin;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IActionBars; import org.eclipse.ui.IActionBars;
import org.eclipse.ui.part.DrillDownAdapter;
import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.part.ViewPart;
public class MakeView extends ViewPart { public class MakeView extends ViewPart {
TreeViewer viewer; TreeViewer viewer;
DrillDownAdapter drillDownAdapter;
public MakeView() { public MakeView() {
super(); super();
@ -39,9 +43,92 @@ public class MakeView extends ViewPart {
} }
/** /**
* Handles double clicks in viewer. * @see ContentOutlinePage#createControl
* Opens editor if file double-clicked.
*/ */
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setUseHashlookup(true);
viewer.setContentProvider(new MakeContentProvider());
viewer.setLabelProvider(new MakeLabelProvider());
drillDownAdapter = new DrillDownAdapter(viewer);
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
handleDoubleClick(event);
}
});
viewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
handleSelectionChanged(event);
}
});
viewer.getControl().addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent event) {
if (event.character == SWT.DEL && event.stateMask == 0) {
handleDeleteKeyPressed();
}
}
});
viewer.setContentProvider(new MakeContentProvider());
viewer.setLabelProvider(new MakeLabelProvider());
viewer.setInput(MakeCorePlugin.getDefault().getTargetProvider());
getSite().setSelectionProvider(viewer);
makeActions();
hookContextMenu();
contributeToActionBars();
}
private void makeActions() {
// dinglis-TODO Auto-generated method stub
}
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
private void fillLocalToolBar(IToolBarManager toolBar) {
drillDownAdapter.addNavigationActions(toolBar);
}
private void fillLocalPullDown(IMenuManager manager) {
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
MakeView.this.fillContextMenu(manager);
updateActions((IStructuredSelection) viewer.getSelection());
}
});
Menu menu = menuMgr.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, viewer);
}
protected void fillContextMenu(IMenuManager manager) {
// manager.add(deleteAction);
// manager.add(renameAction);
manager.add(new Separator());
drillDownAdapter.addNavigationActions(manager);
// Other plug-ins can contribute there actions here
manager.add(new Separator("Additions"));
}
protected void handleDeleteKeyPressed() {
// dinglis-TODO Auto-generated method stub
}
protected void handleDoubleClick(DoubleClickEvent event) { protected void handleDoubleClick(DoubleClickEvent event) {
IStructuredSelection s = (IStructuredSelection) event.getSelection(); IStructuredSelection s = (IStructuredSelection) event.getSelection();
Object element = s.getFirstElement(); Object element = s.getFirstElement();
@ -56,126 +143,17 @@ public class MakeView extends ViewPart {
//} //}
} }
/** void handleSelectionChanged(SelectionChangedEvent event) {
* called to create the context menu of the outline IStructuredSelection sel = (IStructuredSelection) event.getSelection();
*/ // updateStatusLine(sel);
protected void contextMenuAboutToShow(IMenuManager menu) { updateActions(sel);
IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); }
Object element = selection.getFirstElement();
if (element instanceof MakeTarget) { void updateActions(IStructuredSelection sel) {
final MakeTarget ta = (MakeTarget) element; // deleteAction.selectionChanged(sel);
Action add = new Action("Add...") { // renameAction.selectionChanged(sel);
public void run() {
InputDialog dialog =
new InputDialog(getViewSite().getShell(), "Target Dialog: ", "Enter Target(s): ", null, null);
dialog.open();
String value = dialog.getValue();
if (value != null && value.length() > 0) {
// IResource res = ta.getResource();
// MakeUtil.addPersistentTarget(res, value);
viewer.getControl().setRedraw(false);
viewer.refresh();
viewer.getControl().setRedraw(true);
viewer.expandToLevel(ta, 2);
}
}
};
Action edit = new Action("Edit...") {
public void run() {
String oldtarget = ta.toString();
InputDialog dialog =
new InputDialog(getViewSite().getShell(), "Target Dialog: ", "Enter Target(s): ", oldtarget, null);
dialog.open();
String value = dialog.getValue();
if (value != null && value.length() > 0 && !value.equals(oldtarget)) {
// IResource res = ta.getResource();
// MakeUtil.replacePersistentTarget(res, oldtarget, value);
viewer.getControl().setRedraw(false);
viewer.refresh();
viewer.getControl().setRedraw(true);
viewer.expandToLevel(ta, 2);
}
}
};
Action del = new Action("Delete") {
public void run() {
String target = ta.toString();
if (target != null) {
// IResource res = ta.getResource();
// MakeUtil.removePersistentTarget(res, target);
viewer.getControl().setRedraw(false);
viewer.refresh();
viewer.getControl().setRedraw(true);
}
}
};
// Action build = new MakeBuildAction(new MakeTarget[] { ta }, getViewSite().getShell(), "Build");
menu.add(add);
menu.add(edit);
menu.add(del);
//menu.add (new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
// menu.add(build);
if (ta.isLeaf()) {
add.setEnabled(false);
} else {
edit.setEnabled(false);
del.setEnabled(false);
}
}
//menu.add (new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));
} }
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
// fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
private void fillLocalToolBar(IToolBarManager toolBar) {
Action refreshAllAction = new Action("Refresh") {
public void run() {
viewer.refresh();
}
};
toolBar.add(refreshAllAction);
}
/**
* @see ContentOutlinePage#createControl
*/
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setUseHashlookup(true);
viewer.setContentProvider(new MakeContentProvider());
viewer.setLabelProvider(new MakeLabelProvider());
MenuManager manager = new MenuManager("#PopUp");
manager.setRemoveAllWhenShown(true);
manager.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
contextMenuAboutToShow(manager);
}
});
Control control = viewer.getControl();
Menu menu = manager.createContextMenu(control);
control.setMenu(menu);
viewer.setInput(new MakeTarget(ResourcesPlugin.getWorkspace().getRoot()));
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
handleDoubleClick(event);
}
});
contributeToActionBars();
getSite().setSelectionProvider(viewer);
}
} }