-/*******************************************************************************\r
- * Copyright (c) 2007, 2012 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.browsing.ui.swt.contentassist;\r
-\r
-import java.util.Arrays;\r
-import java.util.Collection;\r
-import java.util.Map;\r
-import java.util.TreeMap;\r
-\r
-import org.eclipse.jface.fieldassist.IContentProposal;\r
-import org.eclipse.jface.fieldassist.IContentProposalListener;\r
-import org.eclipse.jface.fieldassist.TextContentAdapter;\r
-import org.eclipse.jface.layout.GridDataFactory;\r
-import org.eclipse.jface.layout.GridLayoutFactory;\r
-import org.eclipse.swt.SWT;\r
-import org.eclipse.swt.events.FocusEvent;\r
-import org.eclipse.swt.events.FocusListener;\r
-import org.eclipse.swt.events.KeyAdapter;\r
-import org.eclipse.swt.events.KeyEvent;\r
-import org.eclipse.swt.events.ModifyEvent;\r
-import org.eclipse.swt.events.ModifyListener;\r
-import org.eclipse.swt.events.TraverseEvent;\r
-import org.eclipse.swt.events.TraverseListener;\r
-import org.eclipse.swt.widgets.Composite;\r
-import org.eclipse.swt.widgets.Text;\r
-\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- *\r
- * @param <T>\r
- */\r
-public class ContentAssistTextField extends Composite {\r
-\r
- private static final boolean DEBUG = false;\r
- \r
- Text text;\r
- INamedObject acceptedProposal;\r
- INamedObject result;\r
- OpenableContentAssistCommandAdapter contentAssist;\r
-\r
- public <T extends INamedObject> ContentAssistTextField(final Composite parent, T initialValue, final T[] allowedValues, int style) {\r
- this(parent, initialValue, Arrays.asList(allowedValues), style);\r
- }\r
-\r
- public <T extends INamedObject> ContentAssistTextField(final Composite parent, T initialValue, final Collection<T> allowedValues, int style) {\r
- super(parent, style);\r
- this.result = initialValue;\r
-\r
- GridLayoutFactory.fillDefaults().applyTo(this);\r
-\r
- text = new Text(this, style);\r
- text.setText(initialValue == null ? "" : initialValue.getName());\r
- GridDataFactory.fillDefaults().grab(true, true).applyTo(text);\r
-\r
- final Map<String, INamedObject> valueMap = new TreeMap<String, INamedObject>(String.CASE_INSENSITIVE_ORDER);\r
- for (T t : allowedValues) {\r
- valueMap.put(t.getName(), t);\r
- }\r
-\r
- contentAssist = new OpenableContentAssistCommandAdapter(text,\r
- new TextContentAdapter(),\r
- new NamedObjectContentProposalProvider<T>(allowedValues),\r
- (String) null,\r
- (char[]) null,\r
- true\r
- );\r
- contentAssist.addContentProposalListener(new IContentProposalListener() {\r
- @Override\r
- public void proposalAccepted(IContentProposal proposal) {\r
- if (DEBUG)\r
- System.out.println("accepted: " + proposal);\r
- acceptedProposal = ((INamedObjectContentProposal) proposal).getNamedObject();\r
- ContentAssistTextField.this.result = acceptedProposal;\r
- text.setText(acceptedProposal.getName());\r
- text.setSelection(acceptedProposal.getName().length());\r
- //text.selectAll();\r
- }\r
- });\r
-\r
- text.addModifyListener(new ModifyListener() {\r
- @Override\r
- public void modifyText(ModifyEvent e) {\r
- String t = text.getText();\r
- if (DEBUG) {\r
- System.out.println("text: " + t);\r
- System.out.println("value set: " + valueMap);\r
- }\r
- INamedObject obj = valueMap.get(t);\r
- if (obj == null) {\r
- result = null;\r
- if (DEBUG)\r
- System.out.println("no result");\r
- contentAssist.open();\r
- } else {\r
- result = obj;\r
- if (DEBUG)\r
- System.out.println("result: " + result);\r
- }\r
- }\r
- });\r
- text.addKeyListener(new KeyAdapter() {\r
-\r
- @Override\r
- public void keyPressed(KeyEvent e) {\r
- if(e.keyCode == SWT.CR) {\r
- String name = text.getText();\r
- if (DEBUG)\r
- System.out.println("CR: " + name);\r
- if(name.isEmpty()) {\r
- return;\r
- }\r
- if(acceptedProposal == null)\r
- acceptedProposal = FindExactMatch.exec(name, allowedValues);\r
- if(acceptedProposal == null)\r
- contentAssist.open();\r
- else {\r
- ContentAssistTextField.this.result = acceptedProposal;\r
- //text.setText(acceptedProposal.getName());\r
- //text.traverse(SWT.TRAVERSE_TAB_NEXT);\r
- //text.traverse(SWT.TRAVERSE_RETURN);\r
- }\r
- }\r
- }\r
-\r
- });\r
- text.addFocusListener(new FocusListener() {\r
-\r
- TraverseListener listener = new TraverseListener() {\r
- @Override\r
- public void keyTraversed(TraverseEvent e) {\r
-// System.out.println("CA TraverseListener PARENT TRAVERSE: " + e.detail);\r
- if (e.detail == SWT.TRAVERSE_RETURN) {\r
- e.doit = false;\r
- }\r
- }\r
- };\r
-\r
- @Override\r
- public void focusLost(FocusEvent e) {\r
- parent.removeTraverseListener(listener);\r
- }\r
-\r
- @Override\r
- public void focusGained(FocusEvent e) {\r
- parent.addTraverseListener(listener);\r
- }\r
- });\r
-\r
- contentAssist.setPropagateKeys(true);\r
- }\r
-\r
- public INamedObject getResult() {\r
- return result;\r
- }\r
-\r
- public Text getControl() {\r
- return text;\r
- }\r
-\r
- public void openAssist() {\r
- contentAssist.open();\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2012 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * 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:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.browsing.ui.swt.contentassist;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.fieldassist.IContentProposalListener;
+import org.eclipse.jface.fieldassist.TextContentAdapter;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+
+/**
+ * @author Tuukka Lehtonen
+ *
+ * @param <T>
+ */
+public class ContentAssistTextField extends Composite {
+
+ private static final boolean DEBUG = false;
+
+ Text text;
+ INamedObject acceptedProposal;
+ INamedObject result;
+ OpenableContentAssistCommandAdapter contentAssist;
+
+ public <T extends INamedObject> ContentAssistTextField(final Composite parent, T initialValue, final T[] allowedValues, int style) {
+ this(parent, initialValue, Arrays.asList(allowedValues), style);
+ }
+
+ public <T extends INamedObject> ContentAssistTextField(final Composite parent, T initialValue, final Collection<T> allowedValues, int style) {
+ super(parent, style);
+ this.result = initialValue;
+
+ GridLayoutFactory.fillDefaults().applyTo(this);
+
+ text = new Text(this, style);
+ text.setText(initialValue == null ? "" : initialValue.getName());
+ GridDataFactory.fillDefaults().grab(true, true).applyTo(text);
+
+ final Map<String, INamedObject> valueMap = new TreeMap<String, INamedObject>(String.CASE_INSENSITIVE_ORDER);
+ for (T t : allowedValues) {
+ valueMap.put(t.getName(), t);
+ }
+
+ contentAssist = new OpenableContentAssistCommandAdapter(text,
+ new TextContentAdapter(),
+ new NamedObjectContentProposalProvider<T>(allowedValues),
+ (String) null,
+ (char[]) null,
+ true
+ );
+ contentAssist.addContentProposalListener(new IContentProposalListener() {
+ @Override
+ public void proposalAccepted(IContentProposal proposal) {
+ if (DEBUG)
+ System.out.println("accepted: " + proposal);
+ acceptedProposal = ((INamedObjectContentProposal) proposal).getNamedObject();
+ ContentAssistTextField.this.result = acceptedProposal;
+ text.setText(acceptedProposal.getName());
+ text.setSelection(acceptedProposal.getName().length());
+ //text.selectAll();
+ }
+ });
+
+ text.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ String t = text.getText();
+ if (DEBUG) {
+ System.out.println("text: " + t);
+ System.out.println("value set: " + valueMap);
+ }
+ INamedObject obj = valueMap.get(t);
+ if (obj == null) {
+ result = null;
+ if (DEBUG)
+ System.out.println("no result");
+ contentAssist.open();
+ } else {
+ result = obj;
+ if (DEBUG)
+ System.out.println("result: " + result);
+ }
+ }
+ });
+ text.addKeyListener(new KeyAdapter() {
+
+ @Override
+ public void keyPressed(KeyEvent e) {
+ if(e.keyCode == SWT.CR) {
+ String name = text.getText();
+ if (DEBUG)
+ System.out.println("CR: " + name);
+ if(name.isEmpty()) {
+ return;
+ }
+ if(acceptedProposal == null)
+ acceptedProposal = FindExactMatch.exec(name, allowedValues);
+ if(acceptedProposal == null)
+ contentAssist.open();
+ else {
+ ContentAssistTextField.this.result = acceptedProposal;
+ //text.setText(acceptedProposal.getName());
+ //text.traverse(SWT.TRAVERSE_TAB_NEXT);
+ //text.traverse(SWT.TRAVERSE_RETURN);
+ }
+ }
+ }
+
+ });
+ text.addFocusListener(new FocusListener() {
+
+ TraverseListener listener = new TraverseListener() {
+ @Override
+ public void keyTraversed(TraverseEvent e) {
+// System.out.println("CA TraverseListener PARENT TRAVERSE: " + e.detail);
+ if (e.detail == SWT.TRAVERSE_RETURN) {
+ e.doit = false;
+ }
+ }
+ };
+
+ @Override
+ public void focusLost(FocusEvent e) {
+ parent.removeTraverseListener(listener);
+ }
+
+ @Override
+ public void focusGained(FocusEvent e) {
+ parent.addTraverseListener(listener);
+ }
+ });
+
+ contentAssist.setPropagateKeys(true);
+ }
+
+ public INamedObject getResult() {
+ return result;
+ }
+
+ public Text getControl() {
+ return text;
+ }
+
+ public void openAssist() {
+ contentAssist.open();
+ }
+
+}