Skip to content
Snippets Groups Projects
Commit 93abaf0f authored by Christoph Döbber's avatar Christoph Döbber
Browse files

reworked field assist - now Yellow

refs 86
parent 11f38f2f
No related branches found
No related tags found
No related merge requests found
......@@ -17,8 +17,6 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.ui.fieldassist;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.bindings.keys.ParseException;
import org.eclipse.jface.fieldassist.ContentProposalAdapter;
import org.eclipse.jface.fieldassist.IContentProposal;
import org.eclipse.jface.fieldassist.IContentProposalListener;
......@@ -37,7 +35,7 @@ import org.eclipse.swt.widgets.Text;
* @author doebber
* @author $Author: hoelzl $
* @version $Rev: 18709 $
* @ConQAT.Rating RED Hash:
* @ConQAT.Rating YELLOW Hash: 7CF69F2D99AF737A905EC1FA352EF278
*/
public class FieldAssist {
......@@ -45,29 +43,19 @@ public class FieldAssist {
private final Text field;
/**
* ProposalProvider wrapper class that takes care of proper insertion. This
* is intended to be transparent to the implementor.
*/
private final AF3ContentProposalProvider provider;
/** The keystroke the field assist is activated for. */
private KeyStroke keystroke;
/**
* Default keystroke for assist activation. Used if no other keystroke
* specified.
* Stores the custom proposal provider implemented for the concrete
* application.
*/
public static final String DEFAULT_KEYSTROKE = "Ctrl+Space";
private IProposalProvider concreteProvider;
/**
* Array of chars the assist is activated for. A typical example in Java
* would be '.' as an auto activation char.
* ProposalProvider wrapper class that takes care of proper insertion. This
* is intended to be transparent to the implementor.
*/
private char[] autoActivationChars;
private final AF3ContentProposalProvider provider;
/**
* Constructor. Sufficient for most applications. Initializes with default
* keystroke and no auto activation chars.
* Constructor.
*/
public FieldAssist(Text field, IProposalProvider provider) {
this.field = field;
......@@ -75,30 +63,13 @@ public class FieldAssist {
initialize();
}
/** Constructor. Provides additional parameters which may be null. */
public FieldAssist(Text field, IProposalProvider provider,
KeyStroke keystroke, char[] autoActivationChars) {
this.field = field;
this.provider = new AF3ContentProposalProvider(provider);
this.keystroke = keystroke;
this.autoActivationChars = autoActivationChars;
initialize();
}
/** Initializes the FieldAssist object. */
private void initialize() {
provider.setFiltering(true);
if (keystroke == null) {
try {
keystroke = KeyStroke.getInstance(DEFAULT_KEYSTROKE);
} catch (ParseException e) {
// Should not happen
e.printStackTrace();
}
}
ContentProposalAdapter adapter = new ContentProposalAdapter(field,
new TextContentAdapter(), provider, keystroke,
autoActivationChars);
new TextContentAdapter(), provider,
concreteProvider.getKeystroke(),
concreteProvider.getAutoActivationChars());
adapter.setPropagateKeys(true);
adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_IGNORE);
adapter.addContentProposalListener(new IContentProposalListener() {
......@@ -127,25 +98,19 @@ public class FieldAssist {
private final class AF3ContentProposalProvider extends
SimpleContentProposalProvider {
/**
* Stores the custom proposal provider implemented for the concrete
* application.
*/
private IProposalProvider concreteProvider;
/**
* Constructor for static proposals. Is never called but required by the
* compiler.
*/
public AF3ContentProposalProvider(String[] proposals) {
super(proposals);
this.concreteProvider = new StaticProposalProvider(proposals);
concreteProvider = new StaticProposalProvider(proposals);
}
/** Constructor. */
public AF3ContentProposalProvider(IProposalProvider provider) {
super(new String[0]);
this.concreteProvider = provider;
concreteProvider = provider;
}
/** {@inheritDoc} */
......@@ -162,10 +127,20 @@ public class FieldAssist {
/** Finds the beginning of the word the cursor is placed in. */
private int findBeginningOfWord(String contents, int position) {
int tmp = Math.max(0, position - 1);
while (tmp > 0 && !Character.isWhitespace(contents.charAt(tmp))) {
// TODO include operators like '+' to be handled as whitespace
while (tmp > 0 && !Character.isWhitespace(contents.charAt(tmp))
&& !isAdditionalWhitespace(contents.charAt(tmp))) {
tmp--;
}
return tmp;
}
/** Tests for match with additional whitespace characters. */
private boolean isAdditionalWhitespace(char charAt) {
for (char c : concreteProvider.getAdditionalWhitespaceChars()) {
if (c == charAt) {
return true;
}
}
return false;
}
}
......@@ -17,6 +17,8 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.ui.fieldassist;
import org.eclipse.jface.bindings.keys.KeyStroke;
/**
* Interface defining the {@link IProposalProvider} necessary to add custom
* field assist to text widgets.
......@@ -24,7 +26,7 @@ package org.fortiss.tooling.base.ui.fieldassist;
* @author doebber
* @author $Author: hoelzl $
* @version $Rev: 18709 $
* @ConQAT.Rating RED Hash:
* @ConQAT.Rating YELLOW Hash: 01D3A9BF965A2B25DD796569E355C483
*/
public interface IProposalProvider {
......@@ -35,4 +37,20 @@ public interface IProposalProvider {
*/
public String[] getProposals(String currentWord);
/** The keystroke the field assist is activated for. */
public KeyStroke getKeystroke();
/**
* Array of chars the assist is activated for. A typical example in Java
* would be '.' as an auto activation char.
*/
public char[] getAutoActivationChars();
/**
* Returns an array of chars other than 'space' that will be used to
* determine the beginning of the word to propose for. Typical examples
* might be '.', '=' or any operands.
*/
public char[] getAdditionalWhitespaceChars();
}
/*--------------------------------------------------------------------------+
$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $
| |
| Copyright 2012 ForTISS GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.ui.fieldassist;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.jface.bindings.keys.ParseException;
/**
*
* @author doebber
* @author $Author: hoelzl $
* @version $Rev: 18709 $
* @ConQAT.Rating YELLOW Hash: E6F1B7DFA2427668639A84CD869EF6CC
*/
public abstract class ProposalProviderBase implements IProposalProvider {
/**
* Default keystroke for assist activation. Used if no other keystroke
* specified.
*/
public static final String DEFAULT_KEYSTROKE = "Ctrl+Space";
/** {@inheritDoc} */
@Override
public KeyStroke getKeystroke() {
KeyStroke key = null;
try {
key = KeyStroke.getInstance(DEFAULT_KEYSTROKE);
} catch (ParseException e) {
// Should not happen
e.printStackTrace();
}
return key;
}
/** {@inheritDoc} */
@Override
public char[] getAutoActivationChars() {
return null;
}
/** {@inheritDoc} */
@Override
public char[] getAdditionalWhitespaceChars() {
return new char[0];
}
}
......@@ -23,9 +23,9 @@ package org.fortiss.tooling.base.ui.fieldassist;
* @author doebber
* @author $Author: hoelzl $
* @version $Rev: 18709 $
* @ConQAT.Rating RED Hash:
* @ConQAT.Rating YELLOW Hash: B8C599E7ED32A31EDF996CF140A91067
*/
public final class StaticProposalProvider implements IProposalProvider {
public final class StaticProposalProvider extends ProposalProviderBase {
/** Stores the array of proposals. */
private String[] proposals;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment