|
21 | 21 | import com.google.common.base.Strings; |
22 | 22 | import javafx.application.Platform; |
23 | 23 | import javafx.beans.property.SimpleBooleanProperty; |
| 24 | +import javafx.beans.value.ChangeListener; |
24 | 25 | import javafx.beans.value.ObservableValue; |
25 | 26 | import javafx.fxml.FXML; |
26 | 27 | import javafx.geometry.Pos; |
27 | | -import javafx.scene.control.*; |
| 28 | +import javafx.scene.control.Button; |
| 29 | +import javafx.scene.control.ComboBox; |
| 30 | +import javafx.scene.control.Label; |
| 31 | +import javafx.scene.control.RadioButton; |
| 32 | +import javafx.scene.control.TextField; |
| 33 | +import javafx.scene.input.KeyCode; |
| 34 | +import javafx.scene.input.KeyEvent; |
28 | 35 | import javafx.scene.layout.AnchorPane; |
29 | 36 | import javafx.scene.layout.GridPane; |
30 | 37 | import javafx.scene.layout.HBox; |
@@ -105,26 +112,45 @@ public class AdvancedSearchViewController { |
105 | 112 | private final SimpleBooleanProperty sortAscending = new SimpleBooleanProperty(false); |
106 | 113 | private final SimpleBooleanProperty requireAttachments = new SimpleBooleanProperty(false); |
107 | 114 |
|
| 115 | + private Runnable searchCallback = () -> { |
| 116 | + throw new IllegalStateException("Search callback is not set on AdvancedSearchViewConroller!"); |
| 117 | + }; |
| 118 | + |
108 | 119 | public AdvancedSearchViewController(LogClient logClient, SearchParameters searchParameters) { |
109 | 120 | this.logClient = logClient; |
110 | 121 | this.searchParameters = searchParameters; |
111 | 122 | } |
112 | 123 |
|
| 124 | + public void setSearchCallback(Runnable searchCallback) { |
| 125 | + this.searchCallback = searchCallback; |
| 126 | + } |
| 127 | + |
113 | 128 | @FXML |
114 | 129 | public void initialize() { |
115 | 130 |
|
116 | 131 | searchTitle.textProperty().bindBidirectional(this.searchParameters.titleProperty()); |
| 132 | + searchTitle.setOnKeyReleased(this::searchOnEnter); |
117 | 133 | searchText.textProperty().bindBidirectional(this.searchParameters.textProperty()); |
| 134 | + searchText.setOnKeyReleased(this::searchOnEnter); |
118 | 135 | searchAuthor.textProperty().bindBidirectional(this.searchParameters.authorProperty()); |
| 136 | + searchAuthor.setOnKeyReleased(this::searchOnEnter); |
119 | 137 | levelSelector.valueProperty().bindBidirectional(this.searchParameters.levelProperty()); |
| 138 | + levelSelector.setOnAction(e -> searchCallback.run()); |
120 | 139 | searchTags.textProperty().bindBidirectional(this.searchParameters.tagsProperty()); |
| 140 | + searchParameters.tagsProperty().addListener(searchOnTextChange); |
121 | 141 | searchLogbooks.textProperty().bindBidirectional(this.searchParameters.logbooksProperty()); |
| 142 | + searchParameters.logbooksProperty().addListener(searchOnTextChange); |
122 | 143 | startTime.textProperty().bindBidirectional(this.searchParameters.startTimeProperty()); |
| 144 | + startTime.setOnKeyReleased(this::searchOnEnter); |
123 | 145 | endTime.textProperty().bindBidirectional(this.searchParameters.endTimeProperty()); |
| 146 | + endTime.setOnKeyReleased(this::searchOnEnter); |
124 | 147 | searchParameters.addListener((observable, oldValue, newValue) -> { |
125 | 148 | updateControls(newValue); |
126 | 149 | }); |
| 150 | + sortAscending.addListener(searchOnSortChange); |
| 151 | + |
127 | 152 | attachmentTypes.textProperty().bindBidirectional(this.searchParameters.attachmentsProperty()); |
| 153 | + attachmentTypes.setOnKeyReleased(this::searchOnEnter); |
128 | 154 |
|
129 | 155 | levelLabel.setText(LogbookUIPreferences.level_field_name); |
130 | 156 |
|
@@ -160,6 +186,7 @@ public void initialize() { |
160 | 186 | } |
161 | 187 | if (timeSearchPopover.isShowing()) |
162 | 188 | timeSearchPopover.hide(); |
| 189 | + searchCallback.run(); |
163 | 190 | }); |
164 | 191 | }); |
165 | 192 | Button cancel = new Button(); |
@@ -345,4 +372,19 @@ protected List<String> getValidatedTagsSelection(String tags) { |
345 | 372 | public SimpleBooleanProperty getSortAscending(){ |
346 | 373 | return sortAscending; |
347 | 374 | } |
| 375 | + |
| 376 | + private void searchOnEnter(KeyEvent e) { |
| 377 | + if (e.getCode() == KeyCode.ENTER) { |
| 378 | + searchCallback.run(); |
| 379 | + } |
| 380 | + } |
| 381 | + |
| 382 | + private final ChangeListener<? super String> searchOnTextChange = (options, oldValue, newValue) -> { |
| 383 | + searchCallback.run(); |
| 384 | + }; |
| 385 | + |
| 386 | + private final ChangeListener<? super Boolean> searchOnSortChange = (options, oldValue, newValue) -> { |
| 387 | + searchCallback.run(); |
| 388 | + }; |
| 389 | + |
348 | 390 | } |
0 commit comments