View | Details | Raw Unified | Return to bug 187127 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/tasks/ui/editors/AbstractRepositoryTaskEditor.java (-1 / +96 lines)
Lines 45-51 Link Here
45
import org.eclipse.jface.fieldassist.ControlDecoration;
45
import org.eclipse.jface.fieldassist.ControlDecoration;
46
import org.eclipse.jface.fieldassist.FieldDecoration;
46
import org.eclipse.jface.fieldassist.FieldDecoration;
47
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
47
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
48
import org.eclipse.jface.fieldassist.IContentProposal;
49
import org.eclipse.jface.fieldassist.IContentProposalListener;
50
import org.eclipse.jface.fieldassist.IContentProposalListener2;
48
import org.eclipse.jface.fieldassist.IContentProposalProvider;
51
import org.eclipse.jface.fieldassist.IContentProposalProvider;
52
import org.eclipse.jface.fieldassist.IControlContentAdapter;
49
import org.eclipse.jface.fieldassist.TextContentAdapter;
53
import org.eclipse.jface.fieldassist.TextContentAdapter;
50
import org.eclipse.jface.layout.GridDataFactory;
54
import org.eclipse.jface.layout.GridDataFactory;
51
import org.eclipse.jface.resource.JFaceResources;
55
import org.eclipse.jface.resource.JFaceResources;
Lines 2000-2006 Link Here
2000
			GridDataFactory.fillDefaults().hint(150, SWT.DEFAULT).applyTo(text);
2004
			GridDataFactory.fillDefaults().hint(150, SWT.DEFAULT).applyTo(text);
2001
2005
2002
			if (hasContentAssist(addCCattribute)) {
2006
			if (hasContentAssist(addCCattribute)) {
2003
				ContentAssistCommandAdapter adapter = applyContentAssist(text,
2007
				ContentAssistCommandAdapter adapter = applyCCContentAssist(text,
2004
						createContentProposalProvider(addCCattribute));
2008
						createContentProposalProvider(addCCattribute));
2005
				ILabelProvider propsalLabelProvider = createProposalLabelProvider(addCCattribute);
2009
				ILabelProvider propsalLabelProvider = createProposalLabelProvider(addCCattribute);
2006
				if (propsalLabelProvider != null) {
2010
				if (propsalLabelProvider != null) {
Lines 3999-4002 Link Here
3999
		return hyperlink;
4003
		return hyperlink;
4000
	}
4004
	}
4001
4005
4006
	/**
4007
	 * Adds content assist to the given text field.
4008
	 * 
4009
	 * @param text
4010
	 *            text field to decorate.
4011
	 * @param proposalProvider
4012
	 *            instance providing content proposals
4013
	 * @return the ContentAssistCommandAdapter for the field.
4014
	 */
4015
	protected ContentAssistCommandAdapter applyCCContentAssist(Text text, IContentProposalProvider proposalProvider) {
4016
		ControlDecoration controlDecoration = new ControlDecoration(text, (SWT.TOP | SWT.LEFT));
4017
		controlDecoration.setMarginWidth(0);
4018
		controlDecoration.setShowHover(true);
4019
		controlDecoration.setShowOnlyOnFocus(true);
4020
4021
		FieldDecoration contentProposalImage = FieldDecorationRegistry.getDefault().getFieldDecoration(
4022
				FieldDecorationRegistry.DEC_CONTENT_PROPOSAL);
4023
		controlDecoration.setImage(contentProposalImage.getImage());
4024
4025
		TextContentAdapter textContentAdapter = new TextContentAdapter();
4026
4027
		MultiContentAssistCommandAdapter adapter = new MultiContentAssistCommandAdapter(text, textContentAdapter,
4028
				proposalProvider, "org.eclipse.ui.edit.text.contentAssist.proposals", new char[0]);
4029
		MultiProposalListener listener = new MultiProposalListener(adapter);
4030
4031
		adapter.addContentProposalListener((IContentProposalListener) listener);
4032
		adapter.addContentProposalListener((IContentProposalListener2) listener);
4033
4034
		IBindingService bindingService = (IBindingService) PlatformUI.getWorkbench().getService(IBindingService.class);
4035
		controlDecoration.setDescriptionText(NLS.bind("Content Assist Available ({0})",
4036
				bindingService.getBestActiveBindingFormattedFor(adapter.getCommandId())));
4037
4038
		return adapter;
4039
	}
4040
4041
	static class MultiProposalListener implements IContentProposalListener, IContentProposalListener2 {
4042
4043
		private final MultiContentAssistCommandAdapter adapter;
4044
4045
		public MultiProposalListener(MultiContentAssistCommandAdapter adapter) {
4046
			super();
4047
			this.adapter = adapter;
4048
		}
4049
4050
		private int getIndexOfLeftSeparator(String contents, int position) {
4051
			int i = contents.lastIndexOf(' ', position - 1);
4052
			i = Math.max(contents.lastIndexOf(',', position - 1), i);
4053
			return i;
4054
		}
4055
4056
		public void proposalAccepted(IContentProposal proposal) {
4057
			String contents = proposal.getContent();
4058
			int position = proposal.getCursorPosition();
4059
			int leftSeparator = getIndexOfLeftSeparator(contents, position);
4060
4061
			assert leftSeparator <= position;
4062
			if (leftSeparator != -1) {
4063
				Control c = adapter.getControl();
4064
				if (c instanceof Text) {
4065
					Text t = (Text) c;
4066
					t.setSelection(leftSeparator);
4067
					adapter.reopen();
4068
				}
4069
			}
4070
		}
4071
4072
		public void proposalPopupClosed(ContentProposalAdapter adapter) {
4073
			// ignore
4074
4075
		}
4076
4077
		public void proposalPopupOpened(ContentProposalAdapter adapter) {
4078
			// ignore
4079
4080
		}
4081
	};
4082
4083
	private class MultiContentAssistCommandAdapter extends ContentAssistCommandAdapter {
4084
4085
		public MultiContentAssistCommandAdapter(Control control, IControlContentAdapter controlContentAdapter,
4086
				IContentProposalProvider proposalProvider, String commandId, char[] autoActivationCharacters) {
4087
			super(control, controlContentAdapter, proposalProvider, commandId, autoActivationCharacters);
4088
			// ignore
4089
		}
4090
4091
		public void reopen() {
4092
			this.openProposalPopup();
4093
		}
4094
4095
	}
4096
4002
}
4097
}

Return to bug 187127