Skip to content

Commit a01ea20

Browse files
calixtustobiasdiez
authored andcommitted
Conversion of preferences/exportsorting, import, maintable and entryeditor to mvvm (#5315)
* Initial, Fix double list, setValues to Background, Templates and ExportSort * Fixes in ExportSorting * Fixes, Cleanups, EntryEditorTab, TableTab * Added ImportTab * Fixes wrong encoding * Reverse encoding fix * Checkstyle * Checkstyle * Fixed l10n, fixes checkstyle-config * Fixes after review * Cleanup missed superflous viewModel-casts and lambda-bodies * Don't set values using background task
1 parent 1bec5ef commit a01ea20

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1403
-1363
lines changed

config/checkstyle/checkstyle.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0"?>
22
<!DOCTYPE module PUBLIC
33
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4-
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
4+
"http://www.checkstyle.org/dtds/configuration_1_3.dtd">
55

66
<module name="Checker">
77
<module name="Header">

config/checkstyle/suppressions.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<!DOCTYPE suppressions PUBLIC
44
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
5-
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
5+
"http://www.checkstyle.org/dtds/suppressions_1_1.dtd">
66

77
<suppressions>
88
<suppress checks="[a-zA-Z0-9]*" files="[\\/]gen[\\/]" />

src/main/java/module-info.java

+3
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,7 @@
6262
requires antlr.runtime;
6363
requires commons.lang3;
6464
requires xmpbox;
65+
requires de.saxsys.mvvmfx.validation;
66+
requires richtextfx;
67+
requires unirest.java;
6568
}

src/main/java/org/jabref/gui/SaveOrderConfigDisplay.fxml

+47-29
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,53 @@
88
<?import javafx.scene.layout.ColumnConstraints?>
99
<?import javafx.scene.layout.GridPane?>
1010
<?import javafx.scene.layout.RowConstraints?>
11-
<fx:root prefHeight="200.0" prefWidth="600.0" type="javafx.scene.layout.GridPane" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.jabref.gui.SaveOrderConfigDisplayView">
12-
<columnConstraints>
13-
<ColumnConstraints hgrow="SOMETIMES" minWidth="-Infinity" prefWidth="100.0" />
14-
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
15-
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" />
16-
</columnConstraints>
17-
<rowConstraints>
18-
<RowConstraints prefHeight="30.0" />
19-
<RowConstraints prefHeight="30.0" />
20-
<RowConstraints prefHeight="30.0" />
21-
<RowConstraints prefHeight="30.0" />
22-
<RowConstraints prefHeight="30.0" />
23-
<RowConstraints prefHeight="30.0" />
24-
</rowConstraints>
11+
<?import javafx.scene.layout.VBox?>
12+
13+
<fx:root prefWidth="650.0" spacing="10.0" type="VBox"
14+
xmlns="http://javafx.com/javafx/8.0.212" xmlns:fx="http://javafx.com/fxml/1"
15+
fx:controller="org.jabref.gui.SaveOrderConfigDisplayView">
2516
<fx:define>
26-
<ToggleGroup fx:id="saveOrderToggleGroup" />
17+
<ToggleGroup fx:id="saveOrderToggleGroup"/>
2718
</fx:define>
28-
<children>
29-
<ComboBox fx:id="savePriSort" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="3" />
30-
<ComboBox fx:id="saveSecSort" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="4" />
31-
<ComboBox fx:id="saveTerSort" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="5" />
32-
<RadioButton fx:id="exportInSpecifiedOrder" mnemonicParsing="false" prefHeight="5.0" prefWidth="206.0" text="%Export entries ordered as specified" toggleGroup="$saveOrderToggleGroup" GridPane.columnSpan="3" GridPane.rowIndex="2" />
33-
<RadioButton fx:id="exportInTableOrder" mnemonicParsing="false" text="%Export in current table sort order" toggleGroup="$saveOrderToggleGroup" GridPane.columnSpan="3" GridPane.rowIndex="1" />
34-
<RadioButton fx:id="exportInOriginalOrder" mnemonicParsing="false" text="%Export entries in their original order" toggleGroup="$saveOrderToggleGroup" GridPane.columnSpan="3" />
35-
<CheckBox fx:id="savePriDesc" disable="${!exportInSpecifiedOrder.selected}" mnemonicParsing="false" text="%Descending" GridPane.columnIndex="2" GridPane.rowIndex="3" />
36-
<CheckBox fx:id="saveSecDesc" disable="${!exportInSpecifiedOrder.selected}" mnemonicParsing="false" text="%Descending" GridPane.columnIndex="2" GridPane.rowIndex="4" />
37-
<CheckBox fx:id="saveTerDesc" disable="${!exportInSpecifiedOrder.selected}" mnemonicParsing="false" text="%Descending" GridPane.columnIndex="2" GridPane.rowIndex="5" />
38-
<Label disabled="${!exportInSpecifiedOrder.selected}" text="%Primary sort criterion" GridPane.rowIndex="3" />
39-
<Label disabled="${!exportInSpecifiedOrder.selected}" text="%Secondary sort criterion" GridPane.rowIndex="4" />
40-
<Label disabled="${!exportInSpecifiedOrder.selected}" text="%Tertiary sort criterion" GridPane.rowIndex="5" />
41-
</children>
19+
20+
<RadioButton fx:id="exportInOriginalOrder" text="%Export entries in their original order"
21+
toggleGroup="$saveOrderToggleGroup"/>
22+
<RadioButton fx:id="exportInTableOrder" text="%Export in current table sort order"
23+
toggleGroup="$saveOrderToggleGroup"/>
24+
<RadioButton fx:id="exportInSpecifiedOrder"
25+
text="%Export entries ordered as specified" toggleGroup="$saveOrderToggleGroup"/>
26+
27+
<GridPane alignment="CENTER_LEFT" hgap="10.0">
28+
<columnConstraints>
29+
<ColumnConstraints hgrow="SOMETIMES" minWidth="-Infinity" prefWidth="100.0"/>
30+
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
31+
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0"/>
32+
</columnConstraints>
33+
<rowConstraints>
34+
<RowConstraints prefHeight="30.0"/>
35+
<RowConstraints prefHeight="30.0"/>
36+
<RowConstraints prefHeight="30.0"/>
37+
<RowConstraints prefHeight="30.0"/>
38+
<RowConstraints prefHeight="30.0"/>
39+
<RowConstraints prefHeight="30.0"/>
40+
</rowConstraints>
41+
42+
<Label disable="${!exportInSpecifiedOrder.selected}" text="%Primary sort criterion" GridPane.rowIndex="0"/>
43+
<Label disable="${!exportInSpecifiedOrder.selected}" text="%Secondary sort criterion" GridPane.rowIndex="1"/>
44+
<Label disable="${!exportInSpecifiedOrder.selected}" text="%Tertiary sort criterion" GridPane.rowIndex="2"/>
45+
46+
<ComboBox fx:id="savePriSort" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="0"
47+
disable="${!exportInSpecifiedOrder.selected}"/>
48+
<ComboBox fx:id="saveSecSort" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="1"
49+
disable="${!exportInSpecifiedOrder.selected}"/>
50+
<ComboBox fx:id="saveTerSort" editable="true" GridPane.columnIndex="1" GridPane.rowIndex="2"
51+
disable="${!exportInSpecifiedOrder.selected}"/>
52+
53+
<CheckBox fx:id="savePriDesc" disable="${!exportInSpecifiedOrder.selected}" mnemonicParsing="false"
54+
text="%Descending" GridPane.columnIndex="2" GridPane.rowIndex="0"/>
55+
<CheckBox fx:id="saveSecDesc" disable="${!exportInSpecifiedOrder.selected}" mnemonicParsing="false"
56+
text="%Descending" GridPane.columnIndex="2" GridPane.rowIndex="1"/>
57+
<CheckBox fx:id="saveTerDesc" disable="${!exportInSpecifiedOrder.selected}" mnemonicParsing="false"
58+
text="%Descending" GridPane.columnIndex="2" GridPane.rowIndex="2"/>
59+
</GridPane>
4260
</fx:root>

src/main/java/org/jabref/gui/SaveOrderConfigDisplayView.java

+31-16
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,34 @@
77
import javafx.scene.control.ComboBox;
88
import javafx.scene.control.RadioButton;
99
import javafx.scene.control.ToggleGroup;
10-
import javafx.scene.layout.GridPane;
10+
import javafx.scene.layout.VBox;
1111

12+
import org.jabref.gui.util.FieldsUtil;
13+
import org.jabref.gui.util.ViewModelListCellFactory;
1214
import org.jabref.logic.l10n.Localization;
1315
import org.jabref.model.entry.field.Field;
1416
import org.jabref.model.metadata.SaveOrderConfig;
1517
import org.jabref.preferences.PreferencesService;
1618

1719
import com.airhacks.afterburner.views.ViewLoader;
1820

19-
public class SaveOrderConfigDisplayView extends GridPane {
20-
21-
private final SaveOrderConfig config;
21+
public class SaveOrderConfigDisplayView extends VBox {
2222

2323
@FXML private ToggleGroup saveOrderToggleGroup;
24-
@FXML private ComboBox<Field> savePriSort;
25-
@FXML private ComboBox<Field> saveSecSort;
26-
@FXML private ComboBox<Field> saveTerSort;
2724
@FXML private RadioButton exportInSpecifiedOrder;
2825
@FXML private RadioButton exportInTableOrder;
2926
@FXML private RadioButton exportInOriginalOrder;
27+
@FXML private ComboBox<Field> savePriSort;
28+
@FXML private ComboBox<Field> saveSecSort;
29+
@FXML private ComboBox<Field> saveTerSort;
3030
@FXML private CheckBox savePriDesc;
3131
@FXML private CheckBox saveSecDesc;
3232
@FXML private CheckBox saveTerDesc;
3333
@Inject private PreferencesService preferencesService;
3434

3535
private SaveOrderConfigDisplayViewModel viewModel;
3636

37-
public SaveOrderConfigDisplayView(SaveOrderConfig config) {
38-
this.config = config;
39-
37+
public SaveOrderConfigDisplayView() {
4038
ViewLoader.view(this)
4139
.root(this)
4240
.load();
@@ -45,26 +43,43 @@ public SaveOrderConfigDisplayView(SaveOrderConfig config) {
4543
@FXML
4644
private void initialize() {
4745

48-
viewModel = new SaveOrderConfigDisplayViewModel(config, preferencesService);
46+
viewModel = new SaveOrderConfigDisplayViewModel(preferencesService);
4947

50-
exportInSpecifiedOrder.selectedProperty().bindBidirectional(viewModel.saveInSpecifiedOrderProperty());
51-
exportInTableOrder.selectedProperty().bindBidirectional(viewModel.saveInTableOrderProperty());
5248
exportInOriginalOrder.selectedProperty().bindBidirectional(viewModel.saveInOriginalProperty());
49+
exportInTableOrder.selectedProperty().bindBidirectional(viewModel.saveInTableOrderProperty());
50+
exportInSpecifiedOrder.selectedProperty().bindBidirectional(viewModel.saveInSpecifiedOrderProperty());
5351

52+
new ViewModelListCellFactory<Field>()
53+
.withText(FieldsUtil::getNameWithType)
54+
.install(savePriSort);
5455
savePriSort.itemsProperty().bindBidirectional(viewModel.priSortFieldsProperty());
55-
saveSecSort.itemsProperty().bindBidirectional(viewModel.secSortFieldsProperty());
56-
saveTerSort.itemsProperty().bindBidirectional(viewModel.terSortFieldsProperty());
57-
5856
savePriSort.valueProperty().bindBidirectional(viewModel.savePriSortSelectedValueProperty());
57+
savePriSort.setConverter(FieldsUtil.fieldStringConverter);
58+
59+
new ViewModelListCellFactory<Field>()
60+
.withText(FieldsUtil::getNameWithType)
61+
.install(saveSecSort);
62+
saveSecSort.itemsProperty().bindBidirectional(viewModel.secSortFieldsProperty());
5963
saveSecSort.valueProperty().bindBidirectional(viewModel.saveSecSortSelectedValueProperty());
64+
saveSecSort.setConverter(FieldsUtil.fieldStringConverter);
65+
66+
new ViewModelListCellFactory<Field>()
67+
.withText(FieldsUtil::getNameWithType)
68+
.install(saveTerSort);
69+
saveTerSort.itemsProperty().bindBidirectional(viewModel.terSortFieldsProperty());
6070
saveTerSort.valueProperty().bindBidirectional(viewModel.saveTerSortSelectedValueProperty());
71+
saveTerSort.setConverter(FieldsUtil.fieldStringConverter);
6172

6273
savePriDesc.selectedProperty().bindBidirectional(viewModel.savePriDescPropertySelected());
6374
saveSecDesc.selectedProperty().bindBidirectional(viewModel.saveSecDescPropertySelected());
6475
saveTerDesc.selectedProperty().bindBidirectional(viewModel.saveTerDescPropertySelected());
6576

6677
}
6778

79+
public void setValues(SaveOrderConfig config) {
80+
viewModel.setSaveOrderConfig(config);
81+
}
82+
6883
public void changeExportDescriptionToSave() {
6984
exportInOriginalOrder.setText(Localization.lang("Save entries in their original order"));
7085
exportInSpecifiedOrder.setText(Localization.lang("Save entries ordered as specified"));

src/main/java/org/jabref/gui/SaveOrderConfigDisplayViewModel.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,13 @@ public class SaveOrderConfigDisplayViewModel {
3737

3838
private final PreferencesService prefs;
3939

40-
public SaveOrderConfigDisplayViewModel(SaveOrderConfig config, PreferencesService prefs) {
40+
public SaveOrderConfigDisplayViewModel(PreferencesService prefs) {
4141
this.prefs = prefs;
4242

4343
Set<Field> fieldNames = FieldFactory.getCommonFields();
4444
priSortFieldsProperty.addAll(fieldNames);
4545
secSortFieldsProperty.addAll(fieldNames);
4646
terSortFieldsProperty.addAll(fieldNames);
47-
48-
setSaveOrderConfig(config);
4947
}
5048

5149
public ListProperty<Field> priSortFieldsProperty() {

src/main/java/org/jabref/gui/icon/IconTheme.java

+4
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,10 @@ public enum JabRefIcons implements JabRefIcon {
271271
PREVIOUS_UP(MaterialDesignIcon.CHEVRON_UP),
272272
NEXT_RIGHT(MaterialDesignIcon.CHEVRON_RIGHT),
273273
NEXT_DOWN(MaterialDesignIcon.CHEVRON_DOWN),
274+
LIST_MOVE_LEFT(MaterialDesignIcon.CHEVRON_LEFT),
275+
LIST_MOVE_UP(MaterialDesignIcon.CHEVRON_UP),
276+
LIST_MOVE_RIGHT(MaterialDesignIcon.CHEVRON_RIGHT),
277+
LIST_MOVE_DOWN(MaterialDesignIcon.CHEVRON_DOWN),
274278
FIT_WIDTH(MaterialDesignIcon.ARROW_EXPAND_ALL),
275279
FIT_SINGLE_PAGE(MaterialDesignIcon.NOTE),
276280
ZOOM_OUT(MaterialDesignIcon.MAGNIFY_MINUS),

src/main/java/org/jabref/gui/libraryproperties/LibraryPropertiesDialogView.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,9 @@ private void initialize() {
7979
encoding.disableProperty().bind(viewModel.encodingDisableProperty());
8080
protect.disableProperty().bind(viewModel.protectDisableProperty());
8181

82+
saveOrderConfigDisplayView = new SaveOrderConfigDisplayView();
8283
Optional<SaveOrderConfig> storedSaveOrderConfig = panel.getBibDatabaseContext().getMetaData().getSaveOrderConfig();
83-
if (storedSaveOrderConfig.isPresent()) {
84-
saveOrderConfigDisplayView = new SaveOrderConfigDisplayView(storedSaveOrderConfig.get());
85-
oldSaveOrderConfig = storedSaveOrderConfig.get();
86-
} else {
87-
oldSaveOrderConfig = preferencesService.loadExportSaveOrder();
88-
saveOrderConfigDisplayView = new SaveOrderConfigDisplayView(preferencesService.loadExportSaveOrder());
89-
}
84+
oldSaveOrderConfig = storedSaveOrderConfig.orElseGet(preferencesService::loadExportSaveOrder);
9085

9186
saveOrderConfigDisplayView.changeExportDescriptionToSave();
9287
fieldFormatterCleanupsPanel = new FieldFormatterCleanupsPanel(Localization.lang("Enable save actions"),
@@ -103,6 +98,7 @@ private void initialize() {
10398

10499
private void setValues() {
105100
fieldFormatterCleanupsPanel.setValues(panel.getBibDatabaseContext().getMetaData());
101+
saveOrderConfigDisplayView.setValues(oldSaveOrderConfig);
106102
}
107103

108104
@FXML

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@
1111
import org.jabref.gui.util.TaskExecutor;
1212
import org.jabref.preferences.JabRefPreferences;
1313

14-
public abstract class AbstractPreferenceTabView extends VBox implements PreferencesTab {
14+
public abstract class AbstractPreferenceTabView<T extends PreferenceTabViewModel> extends VBox implements PreferencesTab {
1515

1616
@Inject protected TaskExecutor taskExecutor;
1717
@Inject protected DialogService dialogService;
1818

19-
protected PreferenceTabViewModel viewModel;
19+
protected T viewModel;
2020

2121
protected JabRefPreferences preferences;
2222

0 commit comments

Comments
 (0)