Skip to content

Commit 5d2b765

Browse files
authored
Convert "Show preferences" dialog to JavaFX (#4605)
1 parent c6a1fcb commit 5d2b765

File tree

3 files changed

+80
-100
lines changed

3 files changed

+80
-100
lines changed

src/main/java/org/jabref/gui/preferences/PreferencesDialog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ private void construct() {
126126
exportPreferences.setOnAction(e -> exportPreferences());
127127
exportPreferences.setMaxWidth(Double.MAX_VALUE);
128128
Button showPreferences = new Button(Localization.lang("Show preferences"));
129-
showPreferences.setOnAction(e -> new PreferencesFilterDialog(new JabRefPreferencesFilter(prefs)).setVisible(true));
129+
showPreferences.setOnAction(e -> new PreferencesFilterDialog(new JabRefPreferencesFilter(prefs)).showAndWait());
130130
showPreferences.setMaxWidth(Double.MAX_VALUE);
131131
Button resetPreferences = new Button(Localization.lang("Reset preferences"));
132132
resetPreferences.setOnAction(e -> resetPreferences());
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<?import javafx.geometry.Insets?>
4+
<?import javafx.scene.control.ButtonType?>
5+
<?import javafx.scene.control.CheckBox?>
6+
<?import javafx.scene.control.DialogPane?>
7+
<?import javafx.scene.control.Label?>
8+
<?import javafx.scene.control.TableColumn?>
9+
<?import javafx.scene.control.TableView?>
10+
<?import javafx.scene.layout.BorderPane?>
11+
<?import javafx.scene.layout.HBox?>
12+
<DialogPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="600.0" prefWidth="950.0"
13+
xmlns="http://javafx.com/javafx/8.0.121" fx:controller="org.jabref.gui.preferences.PreferencesFilterDialog">
14+
15+
<content>
16+
<BorderPane>
17+
<bottom>
18+
<HBox>
19+
<CheckBox fx:id="showOnlyDeviatingPreferenceOptions"
20+
text="%Show only preferences deviating from their default value"/>
21+
<HBox HBox.hgrow="ALWAYS"/>
22+
<Label fx:id="count"/>
23+
</HBox>
24+
</bottom>
25+
<center>
26+
<TableView fx:id="table">
27+
<columns>
28+
<TableColumn fx:id="columnType" text="%type"/>
29+
<TableColumn fx:id="columnKey" text="%key"/>
30+
<TableColumn fx:id="columnValue" text="%value"/>
31+
<TableColumn fx:id="columnDefaultValue" text="%default"/>
32+
</columns>
33+
<padding>
34+
<Insets bottom="30.0"/>
35+
</padding>
36+
</TableView>
37+
</center>
38+
</BorderPane>
39+
</content>
40+
<ButtonType fx:constant="CLOSE"/>
41+
</DialogPane>
Lines changed: 38 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,125 +1,64 @@
11
package org.jabref.gui.preferences;
22

3-
import java.awt.BorderLayout;
4-
import java.awt.Dimension;
5-
import java.awt.FlowLayout;
6-
import java.util.List;
73
import java.util.Objects;
84

9-
import javax.swing.JCheckBox;
10-
import javax.swing.JLabel;
11-
import javax.swing.JPanel;
12-
import javax.swing.JScrollPane;
13-
import javax.swing.JTable;
14-
import javax.swing.table.AbstractTableModel;
15-
16-
import org.jabref.gui.JabRefDialog;
17-
import org.jabref.gui.WrapLayout;
5+
import javafx.beans.property.ReadOnlyObjectWrapper;
6+
import javafx.beans.property.ReadOnlyStringWrapper;
7+
import javafx.collections.FXCollections;
8+
import javafx.collections.ObservableList;
9+
import javafx.fxml.FXML;
10+
import javafx.scene.control.CheckBox;
11+
import javafx.scene.control.Label;
12+
import javafx.scene.control.TableColumn;
13+
import javafx.scene.control.TableView;
14+
15+
import org.jabref.gui.util.BaseDialog;
1816
import org.jabref.logic.l10n.Localization;
1917
import org.jabref.preferences.JabRefPreferencesFilter;
2018

21-
class PreferencesFilterDialog extends JabRefDialog {
19+
import com.airhacks.afterburner.views.ViewLoader;
20+
21+
public class PreferencesFilterDialog extends BaseDialog<Void> {
2222

2323
private final JabRefPreferencesFilter preferencesFilter;
24+
private final ObservableList<JabRefPreferencesFilter.PreferenceOption> preferenceOptions;
2425

25-
private final JTable table;
26-
private final JCheckBox showOnlyDeviatingPreferenceOptions;
27-
private final JLabel count;
26+
@FXML private TableView<JabRefPreferencesFilter.PreferenceOption> table;
27+
@FXML private TableColumn<JabRefPreferencesFilter.PreferenceOption, JabRefPreferencesFilter.PreferenceType> columnType;
28+
@FXML private TableColumn<JabRefPreferencesFilter.PreferenceOption, String> columnKey;
29+
@FXML private TableColumn<JabRefPreferencesFilter.PreferenceOption, Object> columnValue;
30+
@FXML private TableColumn<JabRefPreferencesFilter.PreferenceOption, Object> columnDefaultValue;
31+
@FXML private CheckBox showOnlyDeviatingPreferenceOptions;
32+
@FXML private Label count;
2833

2934
public PreferencesFilterDialog(JabRefPreferencesFilter preferencesFilter) {
30-
super(true, PreferencesFilterDialog.class);
31-
3235
this.preferencesFilter = Objects.requireNonNull(preferencesFilter);
36+
this.preferenceOptions = FXCollections.observableArrayList();
3337

34-
this.setTitle(Localization.lang("Preferences"));
35-
this.setSize(new Dimension(800, 600));
38+
ViewLoader.view(this)
39+
.load()
40+
.setAsDialogPane(this);
3641

37-
JPanel panel = new JPanel();
38-
panel.setLayout(new BorderLayout());
39-
40-
JPanel northPanel = new JPanel();
41-
northPanel.setLayout(new WrapLayout(FlowLayout.LEFT));
42-
showOnlyDeviatingPreferenceOptions = new JCheckBox(Localization.lang("Show only preferences deviating from their default value"), false);
43-
showOnlyDeviatingPreferenceOptions.addChangeListener(x -> updateModel());
44-
northPanel.add(showOnlyDeviatingPreferenceOptions);
45-
count = new JLabel();
46-
northPanel.add(count);
47-
panel.add(northPanel, BorderLayout.NORTH);
48-
49-
table = new JTable();
50-
table.setAutoCreateRowSorter(true);
42+
this.setTitle(Localization.lang("Preferences"));
43+
}
5144

45+
@FXML
46+
private void initialize() {
47+
showOnlyDeviatingPreferenceOptions.setOnAction(event -> updateModel());
48+
columnType.setCellValueFactory(data -> new ReadOnlyObjectWrapper<>(data.getValue().getType()));
49+
columnKey.setCellValueFactory(data -> new ReadOnlyStringWrapper(data.getValue().getKey()));
50+
columnValue.setCellValueFactory(data -> new ReadOnlyObjectWrapper<>(data.getValue().getValue()));
51+
columnDefaultValue.setCellValueFactory(data -> new ReadOnlyObjectWrapper<>(data.getValue().getDefaultValue().orElse("")));
52+
table.setItems(preferenceOptions);
5253
updateModel();
53-
panel.add(new JScrollPane(table), BorderLayout.CENTER);
54-
55-
this.getContentPane().add(panel);
5654
}
5755

5856
private void updateModel() {
59-
List<JabRefPreferencesFilter.PreferenceOption> preferenceOptions;
60-
6157
if (showOnlyDeviatingPreferenceOptions.isSelected()) {
62-
preferenceOptions = preferencesFilter.getDeviatingPreferences();
58+
preferenceOptions.setAll(preferencesFilter.getDeviatingPreferences());
6359
} else {
64-
preferenceOptions = preferencesFilter.getPreferenceOptions();
60+
preferenceOptions.setAll(preferencesFilter.getPreferenceOptions());
6561
}
66-
67-
table.setModel(new PreferencesTableModel(preferenceOptions));
6862
count.setText(String.format("(%d)", preferenceOptions.size()));
6963
}
70-
71-
private static class PreferencesTableModel extends AbstractTableModel {
72-
73-
private final List<JabRefPreferencesFilter.PreferenceOption> preferences;
74-
75-
public PreferencesTableModel(List<JabRefPreferencesFilter.PreferenceOption> preferences) {
76-
this.preferences = Objects.requireNonNull(preferences);
77-
}
78-
79-
@Override
80-
public String getColumnName(int column) {
81-
if (column == 0) {
82-
return Localization.lang("type");
83-
} else if (column == 1) {
84-
return Localization.lang("key");
85-
} else if (column == 2) {
86-
return Localization.lang("value");
87-
} else if (column == 3) {
88-
return Localization.lang("default");
89-
} else {
90-
return "n/a";
91-
}
92-
}
93-
94-
@Override
95-
public int getRowCount() {
96-
return preferences.size();
97-
}
98-
99-
@Override
100-
public int getColumnCount() {
101-
return 4;
102-
}
103-
104-
@Override
105-
public Object getValueAt(int rowIndex, int columnIndex) {
106-
if ((rowIndex < 0) || ((rowIndex - 1) > preferences.size())) {
107-
return "n/a";
108-
}
109-
110-
JabRefPreferencesFilter.PreferenceOption preferenceOption = preferences.get(rowIndex);
111-
if (columnIndex == 0) {
112-
return preferenceOption.getType();
113-
} else if (columnIndex == 1) {
114-
return preferenceOption.getKey();
115-
} else if (columnIndex == 2) {
116-
return preferenceOption.getValue();
117-
} else if (columnIndex == 3) {
118-
return preferenceOption.getDefaultValue().orElse("NULL");
119-
} else {
120-
return "n/a";
121-
}
122-
}
123-
}
124-
12564
}

0 commit comments

Comments
 (0)