Skip to content

Commit

Permalink
Make token separators configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
Bios-Marcel committed Jul 20, 2024
1 parent df821f9 commit af9359d
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
import java.util.function.Function;

public class AutocompleteField extends AutocompleteInput {
public AutocompleteField(Function<String, List<String>> autocompleteGenerator) {
super(autocompleteGenerator);
public AutocompleteField(
final char[] tokenSeparators,
final Function<String, List<String>> autocompleteGenerator) {
super(tokenSeparators, autocompleteGenerator);
}

@Override
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/link/biosmarcel/baka/view/AutocompleteInput.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,17 @@ public abstract class AutocompleteInput {
private final Pane pane;
private final ListView<String> completionList;
private final Function<String, List<String>> autocompleteGenerator;
private final char[] tokenSeparators;

protected final TextInputControl input;

public AutocompleteInput(final Function<String, List<String>> autocompleteGenerator) {
public AutocompleteInput(
final char[] tokenSeparators,
final Function<String, List<String>> autocompleteGenerator) {
pane = new Pane();
input = createInput();
completionList = new ListView<>();
this.tokenSeparators = tokenSeparators;
this.autocompleteGenerator = autocompleteGenerator;

// This is what is the Z-Index on the web. It allows us to render our popup above everything else.
Expand Down Expand Up @@ -108,8 +112,6 @@ private boolean canShowPopup() {
return input.isFocused() && !input.isDisabled();
}

private static final char[] autocompleteAfterChars = new char[]{')', '(', ' ', '\n'};

private void complete() {
final String selectedItem = completionList.getSelectionModel().getSelectedItem();
// selection is always nullable
Expand All @@ -121,7 +123,7 @@ private void complete() {
final var textBeforeCaret = input.getText().substring(0, input.getCaretPosition());

int autocompleteTo = -1;
for (final char c : autocompleteAfterChars) {
for (final char c : tokenSeparators) {
autocompleteTo = Integer.max(textBeforeCaret.lastIndexOf(c), autocompleteTo);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@
import java.util.function.Function;

public class AutocompleteTextArea extends AutocompleteInput {
public AutocompleteTextArea(Function<String, List<String>> autocompleteGenerator) {
super(autocompleteGenerator);
public AutocompleteTextArea(
final char[] tokenSeparators,
final Function<String, List<String>> autocompleteGenerator
) {
super(tokenSeparators, autocompleteGenerator);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,10 @@ protected void updateItem(@Nullable ClassificationRuleFX item, boolean empty) {
selectedRuleProperty = listView.getSelectionModel().selectedItemProperty();
nameField = new TextField();
tagField = new TextField();
queryField = new AutocompleteTextArea(new FilterAutocompleteGenerator(new PaymentFilter())::generate);
queryField = new AutocompleteTextArea(
new char[]{')', '(', ' ', '\n'},
new FilterAutocompleteGenerator(new PaymentFilter())::generate
);

final BooleanBinding disableInputs = Bindings.createBooleanBinding(() -> selectedRuleProperty.getValue() == null, selectedRuleProperty);
selectedRuleProperty.addListener((_, oldValue, newValue) -> {
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/link/biosmarcel/baka/view/PaymentsView.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,10 @@ public PaymentsView(ApplicationState state) {

details = new PaymentDetails(state);

final var filterField = new AutocompleteField(new FilterAutocompleteGenerator(new PaymentFilter())::generate);
final var filterField = new AutocompleteField(
new char[]{')', '(', ' ', '\n'},
new FilterAutocompleteGenerator(new PaymentFilter())::generate
);
final var filter = new PaymentFilter();
filterField.textProperty().addListener((_, _, newText) -> {
try {
Expand Down

0 comments on commit af9359d

Please sign in to comment.