Skip to content

Commit

Permalink
Using a decent auto-complete implementation for JTextField
Browse files Browse the repository at this point in the history
  • Loading branch information
gastaldi committed Mar 29, 2015
1 parent 0be1eb7 commit 3615092
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 154 deletions.
5 changes: 4 additions & 1 deletion pom.xml
Expand Up @@ -12,7 +12,7 @@
<packaging>pom</packaging>

<name>JBoss Forge Parent Project</name>
<description>The fastest way to build applications, share your software, and enjoy doing it</description>
<description>The fastest way to build applications, share your software, and enjoy doing it. Bundled with Forge ${forge.version}</description>
<url>http://forge.jboss.org</url>
<licenses>
<license>
Expand Down Expand Up @@ -64,6 +64,9 @@
</modules>

<properties>
<forge.version>2.15.2.Final</forge.version>
<furnace.version>2.15.3.Final</furnace.version>
<angularjs.addon.version>2.1.4.Final</angularjs.addon.version>
<netbeans.version>RELEASE80</netbeans.version>
<brandingToken>jbossforge</brandingToken>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand Down
3 changes: 0 additions & 3 deletions runtime/pom.xml
Expand Up @@ -225,9 +225,6 @@ Contributors:
</dependency>
</dependencies>
<properties>
<forge.version>2.15.2.Final</forge.version>
<furnace.version>2.15.3.Final</furnace.version>
<angularjs.addon.version>2.1.3.Final</angularjs.addon.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<netbeans.hint.license>epl10_1</netbeans.hint.license>
</properties>
Expand Down
5 changes: 5 additions & 0 deletions ui/pom.xml
Expand Up @@ -52,6 +52,11 @@ Contributors:
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.fifesoft</groupId>
<artifactId>autocomplete</artifactId>
<version>2.5.4</version>
</dependency>
<!-- Netbeans module dependencies -->
<dependency>
<groupId>org.netbeans.api</groupId>
Expand Down
Expand Up @@ -15,6 +15,7 @@
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
import org.fife.ui.autocomplete.AutoCompletion;
import org.jboss.forge.addon.convert.Converter;
import org.jboss.forge.addon.convert.ConverterFactory;
import org.jboss.forge.addon.ui.context.UIContext;
Expand All @@ -25,7 +26,7 @@
import org.jboss.forge.addon.ui.input.UICompleter;
import org.jboss.forge.addon.ui.input.UIInput;
import org.jboss.forge.addon.ui.util.InputComponents;
import org.jboss.forge.netbeans.ui.wizard.component.completion.AutoCompletionListener;
import org.jboss.forge.netbeans.ui.wizard.component.completion.ForgeAutoCompletionProvider;
import org.openide.util.ChangeSupport;
import org.openide.util.lookup.ServiceProvider;

Expand Down Expand Up @@ -96,12 +97,15 @@ protected Class<?>[] getSupportedInputComponentTypes() {
}

protected void setupAutoCompleteFor(UIContext context, InputComponent<?, Object> input, JTextComponent txt) {
UICompleter completer = null;
UICompleter<String> completer = null;
if (input instanceof HasCompleter) {
completer = ((HasCompleter) input).getCompleter();
}

if (completer != null) {
txt.getDocument().addDocumentListener(new AutoCompletionListener(txt, context, input, completer));
ForgeAutoCompletionProvider provider = new ForgeAutoCompletionProvider(context, input, completer);
AutoCompletion autoCompletion = new AutoCompletion(provider);
autoCompletion.install(txt);
}
}
}

This file was deleted.

@@ -0,0 +1,76 @@
/*
* Copyright (c) 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* George Gastaldi <ggastald@redhat.com> - initial API and implementation and/or initial documentation
*/
package org.jboss.forge.netbeans.ui.wizard.component.completion;

import java.awt.Point;
import java.util.ArrayList;
import java.util.List;
import javax.swing.text.JTextComponent;
import org.fife.ui.autocomplete.BasicCompletion;
import org.fife.ui.autocomplete.Completion;
import org.fife.ui.autocomplete.CompletionProvider;
import org.fife.ui.autocomplete.CompletionProviderBase;
import org.fife.ui.autocomplete.ParameterizedCompletion;
import org.jboss.forge.addon.ui.context.UIContext;
import org.jboss.forge.addon.ui.input.InputComponent;
import org.jboss.forge.addon.ui.input.UICompleter;

/**
* Implementation of {@link CompletionProvider}
*
* @author <a href="mailto:ggastald@redhat.com">George Gastaldi</a>
*/
public class ForgeAutoCompletionProvider extends CompletionProviderBase {

private final UIContext context;
private final InputComponent<?, ?> inputComponent;
private final UICompleter<String> completer;

public ForgeAutoCompletionProvider(UIContext context, InputComponent<?, ?> inputComponent, UICompleter<String> completer) {
this.context = context;
this.inputComponent = inputComponent;
this.completer = completer;
}

private List<Completion> getCompletionByInputText(String inputText) {
List<Completion> result = new ArrayList<>();
if (inputText != null) {
Iterable<String> completionProposals = completer.getCompletionProposals(context, (InputComponent<?, String>) inputComponent, inputText);
if (completionProposals != null) {
for (String proposal : completionProposals) {
result.add(new BasicCompletion(this, proposal));
}
}
}
return result;
}

@Override
public String getAlreadyEnteredText(JTextComponent comp) {
return comp.getText();
}

@Override
protected List<Completion> getCompletionsImpl(JTextComponent comp) {
String inputText = getAlreadyEnteredText(comp);
return getCompletionByInputText(inputText);
}

@Override
public List<Completion> getCompletionsAt(JTextComponent comp, Point p) {
return getCompletions(comp);
}

@Override
public List<ParameterizedCompletion> getParameterizedCompletions(JTextComponent tc) {
throw new UnsupportedOperationException("Not supported yet.");
}

}

0 comments on commit 3615092

Please sign in to comment.