Commit c3b645fb authored by Philip Makedonski's avatar Philip Makedonski
Browse files

* added configurable tracing for content assist, #122

parent ff5a1e1a
Loading
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -292,6 +292,17 @@
			<filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
		</page>
	</extension>
	<extension point="org.eclipse.ui.preferencePages">
      <page
			category="org.etsi.mts.tdl.TDLtx"
            class="org.etsi.mts.tdl.ui.contentassist.PropertyPage"
            id="org.etsi.mts.tdl.ui.contentassist.propertyPage"
            name="Content Assist"
            >
      </page>
   </extension>
	
	
	<extension point="org.eclipse.ui.menus">
		<menuContribution locationURI="popup:#TextEditorContext?after=xtext.ui.openDeclaration">
			<command
+133 −0
Original line number Diff line number Diff line
package org.etsi.mts.tdl.ui.contentassist;

import java.util.Arrays;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.preferences.ScopedPreferenceStore;

public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
	
	public static final String TRACE_UI = "TraceUI";

	public static final String PREFERENCE_SCOPE = "org.etsi.mts.tdl.tx.ui";

	private static final List<String> REQUIRED_SETTINGS = Arrays.asList(new String[] { /* TODO */ });

	protected IAdaptable element;

	protected Map<FieldEditor, String> fields = new Hashtable<FieldEditor, String>();

	public PropertyPage() {
		super(GRID);
	}

//	@Override
	public IAdaptable getElement() {
		return element;
	}

//	@Override
	public void setElement(IAdaptable element) {
		this.element = element;
	}

	@Override
	protected IPreferenceStore doGetPreferenceStore() {
		ProjectScope ps = new ProjectScope((IProject) this.element);
		ScopedPreferenceStore scopedStore = new ScopedPreferenceStore(ps, PREFERENCE_SCOPE);
		scopedStore.setDefault(TRACE_UI, false);
		return scopedStore;
	}

	@Override
	protected void initialize() {
		for (FieldEditor e : fields.keySet()) {
			String value = getPreferenceStore().getString(e.getPreferenceName());
			fields.put(e, value);
			initialize(e.getPreferenceName(), value, e);
		}
		super.initialize();
	}

	protected void initialize(String name, String value, FieldEditor e) {
		if (name.equals(TRACE_UI)) {
		}
	}

	@Override
	protected void addField(FieldEditor editor) {
		super.addField(editor);
		fields.put(editor, "");
	}

	@Override
	public void propertyChange(PropertyChangeEvent event) {
		super.propertyChange(event);
		if (event.getProperty().equals(FieldEditor.VALUE)) {
			FieldEditor e = (FieldEditor) event.getSource();

			String name = e.getPreferenceName();
			Object valueObj = event.getNewValue();
			String value = valueObj.toString();

			fields.put(e, value);

			initialize(name, value, e);

			checkState();
		}
	}

	@Override
	protected void checkState() {
		setErrorMessage(null);
		super.checkState();
	}

	@Override
	protected void createFieldEditors() {

		Composite parent = getFieldEditorParent();
		BooleanFieldEditor traceUI = new BooleanFieldEditor(TRACE_UI, "Trace Content Assist", parent);
		addField(traceUI);
		
		// TODO
	}

	private boolean isValid(FieldEditor e) {
		String name = e.getPreferenceName();
		String value = fields.get(e);

		if (REQUIRED_SETTINGS.contains(name)) {
			if (value.isEmpty()) {
				setErrorMessage(String.format("%s must be selected!", e.getLabelText()));
				return false;
			}
		}

		return true;
	}

	@Override
	public void init(IWorkbench workbench) {
		setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE, PREFERENCE_SCOPE));
        setDescription("Content Assist Configuration");
	}

}
 No newline at end of file
+7 −2
Original line number Diff line number Diff line
@@ -8,10 +8,13 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;

import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.xtext.AbstractElement;
import org.eclipse.xtext.AbstractRule;
import org.eclipse.xtext.Assignment;
@@ -139,8 +142,10 @@ public class TDLtxProposalProvider extends AbstractTDLtxProposalProvider {
	
	@Override
	public void createProposals(ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
		traceCompletions = false;
		traceCompletionsInUI = false;
		IPreferenceStore store = new ScopedPreferenceStore(InstanceScope.INSTANCE, PropertyPage.PREFERENCE_SCOPE);
		boolean traceEnabled = store.getBoolean(PropertyPage.TRACE_UI);
		traceCompletions = traceEnabled;
		traceCompletionsInUI = traceEnabled;
		superRule = true;
		superReference = true;
		superContainment = true;