From 7fa909ea97275f5b8d513ed4fc8de9df25998e54 Mon Sep 17 00:00:00 2001 From: Carl Christian Snethlage Date: Sun, 16 Jun 2019 23:10:02 +0200 Subject: [PATCH 01/22] Added previewTab --- .../gui/preferences/PreferencesDialog.css | 43 ++- .../PreferencesDialogViewModel.java | 2 +- .../preferences/PreviewPreferencesTab.java | 231 ---------------- .../jabref/gui/preferences/PreviewTab.fxml | 55 ++++ .../gui/preferences/PreviewTabView.java | 250 ++++++++++++++++++ .../gui/preferences/PreviewTabViewModel.java | 188 +++++++++++++ src/main/resources/l10n/JabRef_en.properties | 3 + 7 files changed, 539 insertions(+), 233 deletions(-) delete mode 100644 src/main/java/org/jabref/gui/preferences/PreviewPreferencesTab.java create mode 100644 src/main/java/org/jabref/gui/preferences/PreviewTab.fxml create mode 100644 src/main/java/org/jabref/gui/preferences/PreviewTabView.java create mode 100644 src/main/java/org/jabref/gui/preferences/PreviewTabViewModel.java diff --git a/src/main/java/org/jabref/gui/preferences/PreferencesDialog.css b/src/main/java/org/jabref/gui/preferences/PreferencesDialog.css index f1b7bfdd5e1..bc62ccf1e00 100644 --- a/src/main/java/org/jabref/gui/preferences/PreferencesDialog.css +++ b/src/main/java/org/jabref/gui/preferences/PreferencesDialog.css @@ -14,7 +14,7 @@ -fx-background: -fx-control-inner-background; } -.split-pane-divider { +.split-pane > .split-pane-divider { -fx-padding: 0 4 0 4; -fx-background-color: transparent; } @@ -26,3 +26,44 @@ *:search-highlight { -fx-background-color: -jr-light-red; } + +.code-area { + -fx-padding: 0; + -fx-border-width: 1; + -fx-background-color: transparent; + -fx-border-color: -fx-outer-border; +} + +.code-area .tagmark .{ + -fx-fill: gray; +} + +.code-area .anytag { + -fx-fill: crimson; +} + +.code-area .paren { + -fx-fill: firebrick; + -fx-font-weight: bold; +} + +.code-area .attribute { + -fx-fill: darkviolet; +} + +.code-area .avalue { + -fx-fill: black; +} + +.code-area .comment { + -fx-fill: teal; +} + +.code-area .highlight-keyword { + -fx-text-fill: -jr-purple; +} + +.code-area .context-menu { + -fx-font-family: sans-serif; + -fx-padding: 0; +} diff --git a/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java b/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java index 85647268743..0347e948824 100644 --- a/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java +++ b/src/main/java/org/jabref/gui/preferences/PreferencesDialogViewModel.java @@ -49,7 +49,7 @@ public PreferencesDialogViewModel(DialogService dialogService, TaskExecutor task preferenceTabs.add(new FileTabView(prefs)); preferenceTabs.add(new TablePrefsTab(prefs)); preferenceTabs.add(new TableColumnsTab(prefs, frame)); - preferenceTabs.add(new PreviewPreferencesTab(dialogService, this.taskExecutor)); + preferenceTabs.add(new PreviewTabView(prefs)); preferenceTabs.add(new ExternalTabView(prefs, frame)); preferenceTabs.add(new GroupsPrefsTab(prefs)); preferenceTabs.add(new EntryEditorPrefsTab(prefs)); diff --git a/src/main/java/org/jabref/gui/preferences/PreviewPreferencesTab.java b/src/main/java/org/jabref/gui/preferences/PreviewPreferencesTab.java deleted file mode 100644 index ec4c6348a23..00000000000 --- a/src/main/java/org/jabref/gui/preferences/PreviewPreferencesTab.java +++ /dev/null @@ -1,231 +0,0 @@ -package org.jabref.gui.preferences; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - -import javafx.beans.binding.Bindings; -import javafx.beans.binding.BooleanBinding; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; -import javafx.scene.Node; -import javafx.scene.control.Button; -import javafx.scene.control.ButtonType; -import javafx.scene.control.DialogPane; -import javafx.scene.control.Label; -import javafx.scene.control.ListView; -import javafx.scene.control.ScrollPane; -import javafx.scene.control.TextArea; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.VBox; - -import org.jabref.Globals; -import org.jabref.JabRefGUI; -import org.jabref.gui.BasePanel; -import org.jabref.gui.DialogService; -import org.jabref.gui.preview.PreviewViewer; -import org.jabref.gui.util.BackgroundTask; -import org.jabref.gui.util.TaskExecutor; -import org.jabref.gui.util.ViewModelListCellFactory; -import org.jabref.logic.citationstyle.CitationStyle; -import org.jabref.logic.citationstyle.CitationStylePreviewLayout; -import org.jabref.logic.citationstyle.PreviewLayout; -import org.jabref.logic.citationstyle.TextBasedPreviewLayout; -import org.jabref.logic.l10n.Localization; -import org.jabref.logic.util.TestEntry; -import org.jabref.model.database.BibDatabaseContext; -import org.jabref.preferences.PreviewPreferences; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PreviewPreferencesTab implements PrefsTab { - - private static final Logger LOGGER = LoggerFactory.getLogger(PreviewPreferencesTab.class); - - private final ObservableList availableModel = FXCollections.observableArrayList(); - private final ObservableList chosenModel = FXCollections.observableArrayList(); - - private final ListView available = new ListView<>(availableModel); - private final ListView chosen = new ListView<>(chosenModel); - - private final Button btnRight = new Button("»"); - private final Button btnLeft = new Button("«"); - private final Button btnUp = new Button(Localization.lang("Up")); - private final Button btnDown = new Button(Localization.lang("Down")); - private final GridPane gridPane = new GridPane(); - private final TextArea previewTextArea = new TextArea(); - private final Button btnTest = new Button(Localization.lang("Test")); - private final Button btnDefault = new Button(Localization.lang("Default")); - private final ScrollPane scrollPane = new ScrollPane(previewTextArea); - private final DialogService dialogService; - private final TaskExecutor taskExecutor; - - public PreviewPreferencesTab(DialogService dialogService, TaskExecutor taskExecutor) { - this.dialogService = dialogService; - this.taskExecutor = taskExecutor; - setupLogic(); - setupGui(); - } - - private void setupLogic() { - BooleanBinding nothingSelectedFromChosen = Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems()); - - btnLeft.disableProperty().bind(nothingSelectedFromChosen); - btnDown.disableProperty().bind(nothingSelectedFromChosen); - btnUp.disableProperty().bind(nothingSelectedFromChosen); - btnRight.disableProperty().bind(Bindings.isEmpty(available.getSelectionModel().getSelectedItems())); - - btnRight.setOnAction(event -> { - for (PreviewLayout layout : available.getSelectionModel().getSelectedItems()) { - availableModel.remove(layout); - chosenModel.add(layout); - } - }); - - btnLeft.setOnAction(event -> { - for (PreviewLayout layout : chosen.getSelectionModel().getSelectedItems()) { - availableModel.add(layout); - chosenModel.remove(layout); - } - }); - - btnUp.setOnAction(event -> { - List newSelectedIndices = new ArrayList<>(); - for (int oldIndex : chosen.getSelectionModel().getSelectedIndices()) { - boolean alreadyTaken = newSelectedIndices.contains(oldIndex - 1); - int newIndex = ((oldIndex > 0) && !alreadyTaken) ? oldIndex - 1 : oldIndex; - chosenModel.add(newIndex, chosenModel.remove(oldIndex)); - chosen.getSelectionModel().select(newIndex); - } - }); - - btnDown.setOnAction(event -> { - List newSelectedIndices = new ArrayList<>(); - ObservableList selectedIndices = chosen.getSelectionModel().getSelectedIndices(); - for (int i = selectedIndices.size() - 1; i >= 0; i--) { - int oldIndex = selectedIndices.get(i); - boolean alreadyTaken = newSelectedIndices.contains(oldIndex + 1); - int newIndex = ((oldIndex < (chosenModel.size() - 1)) && !alreadyTaken) ? oldIndex + 1 : oldIndex; - chosenModel.add(newIndex, chosenModel.remove(oldIndex)); - chosen.getSelectionModel().select(newIndex); - } - }); - - btnDefault.setOnAction(event -> previewTextArea.setText(Globals.prefs.getPreviewPreferences() - .getDefaultPreviewStyle() - .replace("__NEWLINE__", "\n"))); - - btnTest.setOnAction(event -> { - try { - PreviewViewer testPane = new PreviewViewer(new BibDatabaseContext(), dialogService, Globals.stateManager); - testPane.setEntry(TestEntry.getTestEntry()); - - PreviewLayout layout = chosen.getSelectionModel().getSelectedItem(); - testPane.setLayout(layout); - - DialogPane pane = new DialogPane(); - pane.setContent(testPane); - dialogService.showCustomDialogAndWait(Localization.lang("Preview"), pane, ButtonType.OK); - - } catch (StringIndexOutOfBoundsException exception) { - LOGGER.warn("Parsing error.", exception); - dialogService.showErrorDialogAndWait(Localization.lang("Parsing error"), Localization.lang("Parsing error") + ": " + Localization.lang("illegal backslash expression"), exception); - } - }); - } - - private void setupGui() { - VBox vBox = new VBox(); - btnRight.setPrefSize(80, 20); - btnLeft.setPrefSize(80, 20); - btnUp.setPrefSize(80, 20); - btnDown.setPrefSize(80, 20); - vBox.getChildren().addAll(new Label(""), new Label(""), new Label(""), new Label(""), new Label(""), - new Label(""), new Label(""), btnRight, btnLeft, new Label(""), new Label(""), new Label(""), - btnUp, btnDown); - Label currentPreview = new Label(Localization.lang("Current Preview")); - currentPreview.getStyleClass().add("sectionHeader"); - gridPane.add(currentPreview, 1, 1); - gridPane.add(available, 1, 2); - gridPane.add(vBox, 2, 2); - gridPane.add(chosen, 3, 2); - gridPane.add(btnTest, 2, 6); - gridPane.add(btnDefault, 3, 6); - previewTextArea.setPrefSize(600, 300); - gridPane.add(scrollPane, 1, 9); - - btnTest.disableProperty().bind(Bindings.isEmpty(chosen.getSelectionModel().getSelectedItems())); - - new ViewModelListCellFactory().withText(PreviewLayout::getName).install(chosen); - new ViewModelListCellFactory().withText(PreviewLayout::getName).install(available); - } - - @Override - public Node getBuilder() { - return gridPane; - } - - @Override - public void setValues() { - PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences(); - - chosenModel.clear(); - chosenModel.addAll(previewPreferences.getPreviewCycle()); - - availableModel.clear(); - if (chosenModel.stream().noneMatch(layout -> layout instanceof TextBasedPreviewLayout)) { - availableModel.add(previewPreferences.getTextBasedPreviewLayout()); - } - - BackgroundTask.wrap(CitationStyle::discoverCitationStyles) - .onSuccess(value -> value.stream() - .map(CitationStylePreviewLayout::new) - .filter(style -> !chosenModel.contains(style)) - .sorted(Comparator.comparing(PreviewLayout::getName)) - .forEach(availableModel::add)) - .onFailure(ex -> { - LOGGER.error("something went wrong while adding the discovered CitationStyles to the list ", ex); - dialogService.showErrorDialogAndWait(Localization.lang("Error adding discovered CitationStyles"), ex); - }) - .executeWith(taskExecutor); - - previewTextArea.setText(previewPreferences.getPreviewStyle().replace("__NEWLINE__", "\n")); - } - - @Override - public void storeSettings() { - PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences(); - - if (chosenModel.isEmpty()) { - chosenModel.add(previewPreferences.getTextBasedPreviewLayout()); - } - - PreviewPreferences newPreviewPreferences = Globals.prefs.getPreviewPreferences() - .getBuilder() - .withPreviewCycle(chosenModel) - .withPreviewStyle(previewTextArea.getText().replace("\n", "__NEWLINE__")) - .build(); - if (!chosen.getSelectionModel().isEmpty()) { - newPreviewPreferences = newPreviewPreferences.getBuilder().withPreviewCyclePosition(chosen.getSelectionModel().getSelectedIndex()).build(); - } - Globals.prefs.storePreviewPreferences(newPreviewPreferences); - - for (BasePanel basePanel : JabRefGUI.getMainFrame().getBasePanelList()) { - // TODO: Find a better way to update preview - basePanel.closeBottomPane(); - //basePanel.getPreviewPanel().updateLayout(Globals.prefs.getPreviewPreferences()); - } - } - - @Override - public boolean validateSettings() { - return !chosenModel.isEmpty(); - } - - @Override - public String getTabName() { - return Localization.lang("Entry preview"); - } - -} diff --git a/src/main/java/org/jabref/gui/preferences/PreviewTab.fxml b/src/main/java/org/jabref/gui/preferences/PreviewTab.fxml new file mode 100644 index 00000000000..324b6e69d9b --- /dev/null +++ b/src/main/java/org/jabref/gui/preferences/PreviewTab.fxml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + +