From 4e112eca7750a4f530c986be55c178c43c16d3ea Mon Sep 17 00:00:00 2001 From: Elliott Baron Date: Sat, 26 Jun 2010 22:27:34 -0400 Subject: Update codan plugins to CDT 7.0. * org.eclipse.cdt.codan.checkers.ui: Updated. * org.eclipse.cdt.codan.checkers: Updated. * org.eclipse.cdt.codan.core: Updated. * org.eclipse.cdt.codan.ui: Updated. * org.eclipse.cdt.codan.core.cxx: Added. * org.eclipse.cdt.codan.extension/META-INF/MANIFEST.MF: Import org.eclipse.cdt.codan.core.cxx.model. * org.eclipse.cdt.codan.extension/src/org/eclipse/cdt/codan/extension/checkers/AbstractPropSimChecker.java: Superclass moved. --- .../ui/dialogs/ExclusionInclusionEntryDialog.java | 284 +++++++++++++++++++++ 1 file changed, 284 insertions(+) create mode 100644 org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ExclusionInclusionEntryDialog.java (limited to 'org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ExclusionInclusionEntryDialog.java') diff --git a/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ExclusionInclusionEntryDialog.java b/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ExclusionInclusionEntryDialog.java new file mode 100644 index 0000000..5367e8b --- /dev/null +++ b/org.eclipse.cdt.codan.ui/src/org/eclipse/cdt/codan/internal/ui/dialogs/ExclusionInclusionEntryDialog.java @@ -0,0 +1,284 @@ +/******************************************************************************* + * Copyright (c) 2010 Alena Laskavaia 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Alena Laskavaia - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.codan.internal.ui.dialogs; + +import java.text.MessageFormat; +import java.util.List; + +import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference; +import org.eclipse.cdt.codan.internal.ui.CodanUIMessages; +import org.eclipse.cdt.codan.internal.ui.widgets.BasicElementLabels; +import org.eclipse.cdt.internal.ui.dialogs.StatusInfo; +import org.eclipse.cdt.internal.ui.dialogs.TypedElementSelectionValidator; +import org.eclipse.cdt.internal.ui.dialogs.TypedViewerFilter; +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.IStringButtonAdapter; +import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil; +import org.eclipse.cdt.internal.ui.wizards.dialogfields.StringButtonDialogField; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.jface.dialogs.StatusDialog; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.ViewerFilter; +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +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; +import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; +import org.eclipse.ui.dialogs.ISelectionStatusValidator; +import org.eclipse.ui.model.WorkbenchContentProvider; +import org.eclipse.ui.model.WorkbenchLabelProvider; +import org.eclipse.ui.views.navigator.ResourceComparator; + +public class ExclusionInclusionEntryDialog extends StatusDialog { + private StringButtonDialogField fExclusionPatternDialog; + private StatusInfo fExclusionPatternStatus; + private IContainer fCurrSourceFolder; + private String fExclusionPattern; + private List fExistingPatterns; + private boolean fIsExclusion; + + public ExclusionInclusionEntryDialog(Shell parent, boolean isExclusion, + String patternToEdit, List existingPatterns, + FileScopeProblemPreference entryToEdit) { + super(parent); + fIsExclusion = isExclusion; + fExistingPatterns = existingPatterns; + String title, message; + if (isExclusion) { + if (patternToEdit == null) { + title = CodanUIMessages.ExclusionInclusionEntryDialog_exclude_add_title; + } else { + title = CodanUIMessages.ExclusionInclusionEntryDialog_exclude_edit_title; + } + message = MessageFormat + .format(CodanUIMessages.ExclusionInclusionEntryDialog_exclude_pattern_label, + BasicElementLabels.getPathLabel( + entryToEdit.getPath(), false)); + } else { + if (patternToEdit == null) { + title = CodanUIMessages.ExclusionInclusionEntryDialog_include_add_title; + } else { + title = CodanUIMessages.ExclusionInclusionEntryDialog_include_edit_title; + } + message = MessageFormat + .format(CodanUIMessages.ExclusionInclusionEntryDialog_include_pattern_label, + BasicElementLabels.getPathLabel( + entryToEdit.getPath(), false)); + } + setTitle(title); + if (patternToEdit != null) { + fExistingPatterns.remove(patternToEdit); + } + IProject currProject = entryToEdit.getProject(); + IWorkspaceRoot root = currProject != null ? currProject.getWorkspace() + .getRoot() : ResourcesPlugin.getWorkspace().getRoot(); + IResource res = root.findMember(entryToEdit.getPath()); + if (res instanceof IContainer) { + fCurrSourceFolder = (IContainer) res; + } + fExclusionPatternStatus = new StatusInfo(); + ExclusionPatternAdapter adapter = new ExclusionPatternAdapter(); + fExclusionPatternDialog = new StringButtonDialogField(adapter); + fExclusionPatternDialog.setLabelText(message); + fExclusionPatternDialog + .setButtonLabel(CodanUIMessages.ExclusionInclusionEntryDialog_pattern_button); + fExclusionPatternDialog.setDialogFieldListener(adapter); + fExclusionPatternDialog.enableButton(fCurrSourceFolder != null); + if (patternToEdit == null) { + fExclusionPatternDialog.setText(""); //$NON-NLS-1$ + } else { + fExclusionPatternDialog.setText(patternToEdit.toString()); + } + } + + @Override + protected Control createDialogArea(Composite parent) { + Composite composite = (Composite) super.createDialogArea(parent); + int widthHint = convertWidthInCharsToPixels(60); + Composite inner = new Composite(composite, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginHeight = 0; + layout.marginWidth = 0; + layout.numColumns = 2; + inner.setLayout(layout); + Label description = new Label(inner, SWT.WRAP); + if (fIsExclusion) { + description + .setText(CodanUIMessages.ExclusionInclusionEntryDialog_exclude_description); + } else { + description + .setText(CodanUIMessages.ExclusionInclusionEntryDialog_include_description); + } + GridData gd = new GridData(); + gd.horizontalSpan = 2; + gd.widthHint = convertWidthInCharsToPixels(80); + description.setLayoutData(gd); + fExclusionPatternDialog.doFillIntoGrid(inner, 3); + LayoutUtil.setWidthHint(fExclusionPatternDialog.getLabelControl(null), + widthHint); + LayoutUtil.setHorizontalSpan( + fExclusionPatternDialog.getLabelControl(null), 2); + LayoutUtil.setWidthHint(fExclusionPatternDialog.getTextControl(null), + widthHint); + LayoutUtil.setHorizontalGrabbing(fExclusionPatternDialog + .getTextControl(null)); + fExclusionPatternDialog.postSetFocusOnDialogField(parent.getDisplay()); + applyDialogFont(composite); + return composite; + } + + // -------- ExclusionPatternAdapter -------- + private class ExclusionPatternAdapter implements IDialogFieldListener, + IStringButtonAdapter { + // -------- IDialogFieldListener + public void dialogFieldChanged(DialogField field) { + doStatusLineUpdate(); + } + + public void changeControlPressed(DialogField field) { + doChangeControlPressed(); + } + } + + protected void doChangeControlPressed() { + IPath pattern = chooseExclusionPattern(); + if (pattern != null) { + fExclusionPatternDialog.setText(pattern.toString()); + } + } + + protected void doStatusLineUpdate() { + checkIfPatternValid(); + updateStatus(fExclusionPatternStatus); + } + + protected void checkIfPatternValid() { + String pattern = fExclusionPatternDialog.getText().trim(); + if (pattern.length() == 0) { + fExclusionPatternStatus + .setError(CodanUIMessages.ExclusionInclusionEntryDialog_error_empty); + return; + } + IPath path = new Path(pattern); + if (path.isAbsolute() || path.getDevice() != null) { + fExclusionPatternStatus + .setError(CodanUIMessages.ExclusionInclusionEntryDialog_error_notrelative); + return; + } + if (fExistingPatterns.contains(pattern)) { + fExclusionPatternStatus + .setError(CodanUIMessages.ExclusionInclusionEntryDialog_error_exists); + return; + } + fExclusionPattern = pattern; + fExclusionPatternStatus.setOK(); + } + + public String getExclusionPattern() { + return fExclusionPattern; + } + + /* + * @see org.eclipse.jface.window.Window#configureShell(Shell) + */ + @Override + protected void configureShell(Shell newShell) { + super.configureShell(newShell); + } + + // ---------- util method ------------ + private IPath chooseExclusionPattern() { + String title, message; + if (fIsExclusion) { + title = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseExclusionPattern_title; + message = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseExclusionPattern_description; + } else { + title = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseInclusionPattern_title; + message = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseInclusionPattern_description; + } + IPath initialPath = new Path(fExclusionPatternDialog.getText()); + IPath[] res = chooseExclusionPattern(getShell(), fCurrSourceFolder, + title, message, initialPath, false); + if (res == null) { + return null; + } + return res[0]; + } + + public static IPath[] chooseExclusionPattern(Shell shell, + IContainer currentSourceFolder, String title, String message, + IPath initialPath, boolean multiSelection) { + Class[] acceptedClasses = new Class[] { IFolder.class, IFile.class, + IProject.class }; + ISelectionStatusValidator validator = new TypedElementSelectionValidator( + acceptedClasses, multiSelection); + ViewerFilter filter = new TypedViewerFilter(acceptedClasses); + ILabelProvider lp = new WorkbenchLabelProvider(); + ITreeContentProvider cp = new WorkbenchContentProvider(); + IResource initialElement = null; + if (initialPath != null) { + IContainer curr = currentSourceFolder; + int nSegments = initialPath.segmentCount(); + for (int i = 0; i < nSegments; i++) { + IResource elem = curr.findMember(initialPath.segment(i)); + if (elem != null) { + initialElement = elem; + } + if (elem instanceof IContainer) { + curr = (IContainer) elem; + } else { + break; + } + } + } + ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog( + shell, lp, cp); + dialog.setTitle(title); + dialog.setValidator(validator); + dialog.setMessage(message); + dialog.addFilter(filter); + dialog.setInput(currentSourceFolder); + dialog.setInitialSelection(initialElement); + dialog.setComparator(new ResourceComparator(ResourceComparator.NAME)); + dialog.setHelpAvailable(false); + if (dialog.open() == Window.OK) { + Object[] objects = dialog.getResult(); + int existingSegments = currentSourceFolder.getFullPath() + .segmentCount(); + IPath[] resArr = new IPath[objects.length]; + for (int i = 0; i < objects.length; i++) { + IResource currRes = (IResource) objects[i]; + IPath path = currRes.getFullPath() + .removeFirstSegments(existingSegments).makeRelative(); + if (currRes instanceof IContainer) { + path = path.addTrailingSeparator(); + } + resArr[i] = path; + } + return resArr; + } + return null; + } +} -- cgit