Skip to content

Commit 585dff6

Browse files
committed
Use better binding and init default fetcher in view model as it should be
1 parent 4923a29 commit 585dff6

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

src/main/java/org/jabref/gui/importer/fetcher/WebSearchPane.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,13 @@
2929

3030
public class WebSearchPane extends SidePaneComponent {
3131

32-
private final JabRefFrame frame;
3332
private final JabRefPreferences preferences;
3433
private final WebSearchPaneViewModel viewModel;
3534

3635
public WebSearchPane(SidePaneManager sidePaneManager, JabRefPreferences preferences, JabRefFrame frame) {
3736
super(sidePaneManager, IconTheme.JabRefIcons.WWW, Localization.lang("Web search"));
38-
this.frame = frame;
3937
this.preferences = preferences;
40-
this.viewModel = new WebSearchPaneViewModel(preferences.getImportFormatPreferences(), frame);
38+
this.viewModel = new WebSearchPaneViewModel(preferences.getImportFormatPreferences(), frame, preferences);
4139
}
4240

4341
@Override
@@ -52,8 +50,8 @@ protected Node createContentPane() {
5250
new ViewModelListCellFactory<SearchBasedFetcher>()
5351
.withText(SearchBasedFetcher::getName)
5452
.install(fetchers);
55-
viewModel.selectedFetcherProperty().bind(fetchers.getSelectionModel().selectedItemProperty());
5653
fetchers.itemsProperty().bind(viewModel.fetchersProperty());
54+
fetchers.valueProperty().bindBidirectional(viewModel.selectedFetcherProperty());
5755
fetchers.setMaxWidth(Double.POSITIVE_INFINITY);
5856

5957
// Create help button for currently selected fetcher
@@ -79,17 +77,6 @@ protected Node createContentPane() {
7977
Button search = new Button(Localization.lang("Search"));
8078
search.setOnAction(event -> viewModel.search());
8179

82-
// Poor mans binding of default index
83-
// (this logic should actually be in the view model but selected item property is readonly)
84-
int defaultFetcher = preferences.getInt(JabRefPreferences.SELECTED_FETCHER_INDEX);
85-
if (defaultFetcher <= 0 || defaultFetcher >= fetchers.getItems().size()) {
86-
fetchers.getSelectionModel().selectFirst();
87-
} else {
88-
fetchers.getSelectionModel().select(defaultFetcher);
89-
}
90-
EasyBind.subscribe(fetchers.getSelectionModel().selectedIndexProperty(),
91-
newIndex -> preferences.putInt(JabRefPreferences.SELECTED_FETCHER_INDEX, newIndex));
92-
9380
// Put everything together
9481
VBox container = new VBox();
9582
container.setAlignment(Pos.CENTER);

src/main/java/org/jabref/gui/importer/fetcher/WebSearchPaneViewModel.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222
import org.jabref.logic.importer.WebFetchers;
2323
import org.jabref.logic.l10n.Localization;
2424
import org.jabref.model.entry.BibEntry;
25+
import org.jabref.preferences.JabRefPreferences;
2526

2627
import org.apache.commons.lang3.StringUtils;
28+
import org.fxmisc.easybind.EasyBind;
2729
import org.slf4j.Logger;
2830
import org.slf4j.LoggerFactory;
2931

@@ -36,13 +38,25 @@ public class WebSearchPaneViewModel {
3638
private final StringProperty query = new SimpleStringProperty();
3739
private JabRefFrame frame;
3840

39-
public WebSearchPaneViewModel(ImportFormatPreferences importPreferences, JabRefFrame frame) {
40-
// TODO: Rework so that we don't rely on JabRefFrame
41+
public WebSearchPaneViewModel(ImportFormatPreferences importPreferences, JabRefFrame frame, JabRefPreferences preferences) {
42+
// TODO: Rework so that we don't rely on JabRefFrame and not the complete preferences
4143
this.frame = frame;
4244

4345
List<SearchBasedFetcher> allFetchers = WebFetchers.getSearchBasedFetchers(importPreferences);
4446
allFetchers.sort(Comparator.comparing(WebFetcher::getName));
4547
fetchers.setAll(allFetchers);
48+
49+
// Choose last-selected fetcher as default
50+
int defaultFetcherIndex = preferences.getInt(JabRefPreferences.SELECTED_FETCHER_INDEX);
51+
if (defaultFetcherIndex <= 0 || defaultFetcherIndex >= fetchers.size()) {
52+
selectedFetcherProperty().setValue(fetchers.get(0));
53+
} else {
54+
selectedFetcherProperty().setValue(fetchers.get(defaultFetcherIndex));
55+
}
56+
EasyBind.subscribe(selectedFetcherProperty(), newFetcher -> {
57+
int newIndex = fetchers.indexOf(newFetcher);
58+
preferences.putInt(JabRefPreferences.SELECTED_FETCHER_INDEX, newIndex);
59+
});
4660
}
4761

4862
public ObservableList<SearchBasedFetcher> getFetchers() {

0 commit comments

Comments
 (0)