11package org .jabref .gui .preferences ;
22
3+ import java .util .Locale ;
34import java .util .Objects ;
45
6+ import javafx .beans .binding .Bindings ;
57import javafx .beans .property .ReadOnlyObjectWrapper ;
68import javafx .beans .property .ReadOnlyStringWrapper ;
79import javafx .collections .FXCollections ;
810import javafx .collections .ObservableList ;
11+ import javafx .collections .transformation .FilteredList ;
912import javafx .fxml .FXML ;
1013import javafx .scene .control .CheckBox ;
1114import javafx .scene .control .Label ;
1215import javafx .scene .control .TableColumn ;
1316import javafx .scene .control .TableView ;
17+ import javafx .scene .control .TextField ;
1418
1519import org .jabref .gui .util .BaseDialog ;
1620import org .jabref .logic .l10n .Localization ;
@@ -22,6 +26,7 @@ public class PreferencesFilterDialog extends BaseDialog<Void> {
2226
2327 private final JabRefPreferencesFilter preferencesFilter ;
2428 private final ObservableList <JabRefPreferencesFilter .PreferenceOption > preferenceOptions ;
29+ private final FilteredList <JabRefPreferencesFilter .PreferenceOption > filteredOptions ;
2530
2631 @ FXML private TableView <JabRefPreferencesFilter .PreferenceOption > table ;
2732 @ FXML private TableColumn <JabRefPreferencesFilter .PreferenceOption , JabRefPreferencesFilter .PreferenceType > columnType ;
@@ -30,10 +35,12 @@ public class PreferencesFilterDialog extends BaseDialog<Void> {
3035 @ FXML private TableColumn <JabRefPreferencesFilter .PreferenceOption , Object > columnDefaultValue ;
3136 @ FXML private CheckBox showOnlyDeviatingPreferenceOptions ;
3237 @ FXML private Label count ;
38+ @ FXML private TextField searchField ;
3339
3440 public PreferencesFilterDialog (JabRefPreferencesFilter preferencesFilter ) {
3541 this .preferencesFilter = Objects .requireNonNull (preferencesFilter );
3642 this .preferenceOptions = FXCollections .observableArrayList ();
43+ this .filteredOptions = new FilteredList <>(this .preferenceOptions );
3744
3845 ViewLoader .view (this )
3946 .load ()
@@ -45,11 +52,20 @@ public PreferencesFilterDialog(JabRefPreferencesFilter preferencesFilter) {
4552 @ FXML
4653 private void initialize () {
4754 showOnlyDeviatingPreferenceOptions .setOnAction (event -> updateModel ());
55+ filteredOptions .predicateProperty ().bind (Bindings .createObjectBinding (() -> {
56+ String searchText = searchField .getText ();
57+ if ((searchText == null ) || searchText .isEmpty ()) {
58+ return null ;
59+ }
60+ String lowerCaseSearchText = searchText .toLowerCase (Locale .ROOT );
61+ return (option ) -> option .getKey ().toLowerCase (Locale .ROOT ).contains (lowerCaseSearchText );
62+ }, searchField .textProperty ()));
4863 columnType .setCellValueFactory (data -> new ReadOnlyObjectWrapper <>(data .getValue ().getType ()));
4964 columnKey .setCellValueFactory (data -> new ReadOnlyStringWrapper (data .getValue ().getKey ()));
5065 columnValue .setCellValueFactory (data -> new ReadOnlyObjectWrapper <>(data .getValue ().getValue ()));
5166 columnDefaultValue .setCellValueFactory (data -> new ReadOnlyObjectWrapper <>(data .getValue ().getDefaultValue ().orElse ("" )));
52- table .setItems (preferenceOptions );
67+ table .setItems (filteredOptions );
68+ count .textProperty ().bind (Bindings .size (table .getItems ()).asString ("(%d)" ));
5369 updateModel ();
5470 }
5571
@@ -59,6 +75,6 @@ private void updateModel() {
5975 } else {
6076 preferenceOptions .setAll (preferencesFilter .getPreferenceOptions ());
6177 }
62- count .setText (String .format ("(%d)" , preferenceOptions .size ()));
6378 }
79+
6480}
0 commit comments