From 082e2e03c8e2aec5ed651b52bc0168f0ef8bb19f Mon Sep 17 00:00:00 2001 From: 1160300608 <18846010223@163.com> Date: Wed, 15 Aug 2018 10:25:17 +0800 Subject: [PATCH 1/4] convert the NewEntryType Dialog to javafx --- src/main/java/org/jabref/gui/BasePanel.java | 9 +- src/main/java/org/jabref/gui/EntryType.fxml | 70 ++++ .../java/org/jabref/gui/EntryTypeDialog.java | 354 ------------------ .../java/org/jabref/gui/EntryTypeView.java | 293 +++++++++++++++ .../org/jabref/gui/EntryTypeViewModel.java | 13 + .../jabref/gui/actions/NewEntryAction.java | 8 +- .../actions/NewEntryFromPlainTextAction.java | 8 +- 7 files changed, 392 insertions(+), 363 deletions(-) create mode 100644 src/main/java/org/jabref/gui/EntryType.fxml delete mode 100644 src/main/java/org/jabref/gui/EntryTypeDialog.java create mode 100644 src/main/java/org/jabref/gui/EntryTypeView.java create mode 100644 src/main/java/org/jabref/gui/EntryTypeViewModel.java diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index c7820865c80..9101ef58a86 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -798,10 +798,13 @@ public BibEntry newEntry(EntryType type) { EntryType actualType = type; if (actualType == null) { // Find out what type is wanted. - final EntryTypeDialog etd = new EntryTypeDialog(frame); + //final EntryTypeDialog etd = new EntryTypeDialog(frame); + final EntryTypeView etv = new EntryTypeView(frame.getCurrentBasePanel()); // We want to center the dialog, to make it look nicer. - etd.setVisible(true); - actualType = etd.getChoice(); + //etd.setVisible(true); + //actualType = etd.getChoice(); + etv.showAndWait(); + actualType = etv.getChoice(); } if (actualType != null) { // Only if the dialog was not canceled. final BibEntry be = new BibEntry(actualType.getName()); diff --git a/src/main/java/org/jabref/gui/EntryType.fxml b/src/main/java/org/jabref/gui/EntryType.fxml new file mode 100644 index 00000000000..30d301ffce7 --- /dev/null +++ b/src/main/java/org/jabref/gui/EntryType.fxml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/java/org/jabref/gui/EntryTypeDialog.java b/src/main/java/org/jabref/gui/EntryTypeDialog.java deleted file mode 100644 index d37d398420a..00000000000 --- a/src/main/java/org/jabref/gui/EntryTypeDialog.java +++ /dev/null @@ -1,354 +0,0 @@ -package org.jabref.gui; - -import java.awt.BorderLayout; -import java.awt.GridBagConstraints; -import java.awt.GridBagLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.util.Collection; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ExecutionException; - -import javax.swing.AbstractAction; -import javax.swing.BorderFactory; -import javax.swing.BoxLayout; -import javax.swing.JButton; -import javax.swing.JComboBox; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.SwingUtilities; -import javax.swing.SwingWorker; - -import org.jabref.Globals; -import org.jabref.gui.importer.ImportInspectionDialog; -import org.jabref.gui.keyboard.KeyBinding; -import org.jabref.logic.bibtex.DuplicateCheck; -import org.jabref.logic.bibtexkeypattern.BibtexKeyGenerator; -import org.jabref.logic.importer.FetcherException; -import org.jabref.logic.importer.IdBasedFetcher; -import org.jabref.logic.importer.WebFetchers; -import org.jabref.logic.l10n.Localization; -import org.jabref.model.EntryTypes; -import org.jabref.model.database.BibDatabaseMode; -import org.jabref.model.entry.BibEntry; -import org.jabref.model.entry.BiblatexEntryTypes; -import org.jabref.model.entry.BibtexEntryTypes; -import org.jabref.model.entry.EntryType; -import org.jabref.model.entry.IEEETranEntryTypes; -import org.jabref.preferences.JabRefPreferences; - -import com.jgoodies.forms.builder.ButtonBarBuilder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Dialog that prompts the user to choose a type for an entry. - * Returns null if canceled. - */ -public class EntryTypeDialog extends JabRefDialog implements ActionListener { - - private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeDialog.class); - private static final int COLUMN = 3; - private final JabRefFrame frame; - private final CancelAction cancelAction = new CancelAction(); - private EntryType type; - private SwingWorker, Void> fetcherWorker = new FetcherWorker(); - private JButton generateButton; - private JTextField idTextField; - private JComboBox comboBox; - - public EntryTypeDialog(JabRefFrame frame) { - // modal dialog - super(null, true, EntryTypeDialog.class); - - this.frame = frame; - - setTitle(Localization.lang("Select entry type")); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosing(WindowEvent e) { - cancelAction.actionPerformed(null); - } - }); - - getContentPane().setLayout(new BorderLayout()); - getContentPane().add(createCancelButtonBarPanel(), BorderLayout.SOUTH); - getContentPane().add(createEntryGroupsPanel(), BorderLayout.CENTER); - - pack(); - setResizable(false); - } - - private JPanel createEntryGroupsPanel() { - JPanel panel = new JPanel(); - panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); - - if (frame.getCurrentBasePanel().getBibDatabaseContext().isBiblatexMode()) { - panel.add(createEntryGroupPanel("biblatex", BiblatexEntryTypes.ALL)); - - List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBLATEX); - if (!customTypes.isEmpty()) { - panel.add(createEntryGroupPanel(Localization.lang("Custom"), customTypes)); - } - } else { - panel.add(createEntryGroupPanel("BibTeX", BibtexEntryTypes.ALL)); - panel.add(createEntryGroupPanel("IEEETran", IEEETranEntryTypes.ALL)); - - List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBTEX); - if (!customTypes.isEmpty()) { - panel.add(createEntryGroupPanel(Localization.lang("Custom"), customTypes)); - } - } - panel.add(createIdFetcherPanel()); - - return panel; - } - - private JPanel createCancelButtonBarPanel() { - JButton cancel = new JButton(Localization.lang("Cancel")); - cancel.addActionListener(this); - - // Make ESC close dialog, equivalent to clicking Cancel. - cancel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close"); - cancel.getActionMap().put("close", cancelAction); - - JPanel buttons = new JPanel(); - ButtonBarBuilder bb = new ButtonBarBuilder(buttons); - bb.addGlue(); - bb.addButton(cancel); - bb.addGlue(); - return buttons; - } - - private JPanel createEntryGroupPanel(String groupTitle, Collection entries) { - JPanel panel = new JPanel(); - GridBagLayout bagLayout = new GridBagLayout(); - panel.setLayout(bagLayout); - GridBagConstraints constraints = new GridBagConstraints(); - constraints.anchor = GridBagConstraints.WEST; - constraints.fill = GridBagConstraints.HORIZONTAL; - constraints.insets = new Insets(4, 4, 4, 4); - // column count - int col = 0; - - for (EntryType entryType : entries) { - TypeButton entryButton = new TypeButton(entryType.getName(), entryType); - entryButton.addActionListener(this); - // Check if we should finish the row. - col++; - if (col == EntryTypeDialog.COLUMN) { - col = 0; - constraints.gridwidth = GridBagConstraints.REMAINDER; - } else { - constraints.gridwidth = 1; - } - bagLayout.setConstraints(entryButton, constraints); - panel.add(entryButton); - } - panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), groupTitle)); - - return panel; - } - - private JPanel createIdFetcherPanel() { - JLabel fetcherLabel = new JLabel(Localization.lang("ID type")); - JLabel idLabel = new JLabel(Localization.lang("ID")); - generateButton = new JButton(Localization.lang("Generate")); - idTextField = new JTextField(""); - comboBox = new JComboBox<>(); - - WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).forEach(fetcher -> comboBox.addItem(fetcher.getName())); - - comboBox.setSelectedItem(Globals.prefs.get(JabRefPreferences.ID_ENTRY_GENERATOR)); - - generateButton.addActionListener(action -> { - fetcherWorker.execute(); - }); - - comboBox.addActionListener(e -> { - idTextField.requestFocus(); - idTextField.selectAll(); - }); - - idTextField.addActionListener(event -> fetcherWorker.execute()); - - JPanel jPanel = new JPanel(); - - GridBagConstraints constraints = new GridBagConstraints(); - constraints.insets = new Insets(4, 4, 4, 4); - - GridBagLayout layout = new GridBagLayout(); - jPanel.setLayout(layout); - - constraints.fill = GridBagConstraints.HORIZONTAL; - - constraints.gridx = 0; - constraints.gridy = 0; - constraints.weightx = 1; - jPanel.add(fetcherLabel, constraints); - - constraints.gridx = 1; - constraints.gridy = 0; - constraints.weightx = 2; - jPanel.add(comboBox, constraints); - - constraints.gridx = 0; - constraints.gridy = 1; - constraints.weightx = 1; - jPanel.add(idLabel, constraints); - - constraints.gridx = 1; - constraints.gridy = 1; - constraints.weightx = 2; - jPanel.add(idTextField, constraints); - - constraints.gridy = 2; - constraints.gridx = 0; - constraints.gridwidth = 2; - constraints.fill = GridBagConstraints.NONE; - jPanel.add(generateButton, constraints); - - jPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), Localization.lang("ID-based entry generator"))); - - SwingUtilities.invokeLater(() -> idTextField.requestFocus()); - - return jPanel; - } - - private void stopFetching() { - if (fetcherWorker.getState() == SwingWorker.StateValue.STARTED) { - fetcherWorker.cancel(true); - } - } - - @Override - public void actionPerformed(ActionEvent e) { - if (e.getSource() instanceof TypeButton) { - type = ((TypeButton) e.getSource()).getType(); - } - stopFetching(); - dispose(); - } - - public EntryType getChoice() { - return type; - } - - static class TypeButton extends JButton implements Comparable { - - private final EntryType type; - - TypeButton(String label, EntryType type) { - super(label); - this.type = type; - } - - @Override - public int compareTo(TypeButton o) { - return type.getName().compareTo(o.type.getName()); - } - - public EntryType getType() { - return type; - } - } - - class CancelAction extends AbstractAction { - - public CancelAction() { - super("Cancel"); - } - - @Override - public void actionPerformed(ActionEvent e) { - stopFetching(); - dispose(); - } - } - - private class FetcherWorker extends SwingWorker, Void> { - - private boolean fetcherException = false; - private String fetcherExceptionMessage = ""; - private IdBasedFetcher fetcher = null; - private String searchID = ""; - - @Override - protected Optional doInBackground() throws Exception { - Optional bibEntry = Optional.empty(); - SwingUtilities.invokeLater(() -> { - generateButton.setEnabled(false); - generateButton.setText(Localization.lang("Searching...")); - }); - - Globals.prefs.put(JabRefPreferences.ID_ENTRY_GENERATOR, String.valueOf(comboBox.getSelectedItem())); - fetcher = WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).get(comboBox.getSelectedIndex()); - searchID = idTextField.getText(); - if (!searchID.isEmpty()) { - try { - bibEntry = fetcher.performSearchById(searchID); - } catch (FetcherException e) { - LOGGER.error(e.getMessage(), e); - fetcherException = true; - fetcherExceptionMessage = e.getMessage(); - } - } - return bibEntry; - } - - @Override - protected void done() { - try { - Optional result = get(); - if (result.isPresent()) { - final BibEntry bibEntry = result.get(); - if ((DuplicateCheck.containsDuplicate(frame.getCurrentBasePanel().getDatabase(), bibEntry, frame.getCurrentBasePanel().getBibDatabaseContext().getMode()).isPresent())) { - //If there are duplicates starts ImportInspectionDialog - final BasePanel panel = frame.getCurrentBasePanel(); - - ImportInspectionDialog diag = new ImportInspectionDialog(frame, panel, Localization.lang("Import"), false); - diag.addEntry(bibEntry); - diag.entryListComplete(); - diag.setVisible(true); - diag.toFront(); - } else { - // Regenerate CiteKey of imported BibEntry - new BibtexKeyGenerator(frame.getCurrentBasePanel().getBibDatabaseContext(), Globals.prefs.getBibtexKeyPatternPreferences()).generateAndSetKey(bibEntry); - // Update Timestamps - if (Globals.prefs.getTimestampPreferences().includeCreatedTimestamp()) { - bibEntry.setField(Globals.prefs.getTimestampPreferences().getTimestampField(), Globals.prefs.getTimestampPreferences().now()); - } - frame.getCurrentBasePanel().insertEntry(bibEntry); - } - - dispose(); - } else if (searchID.trim().isEmpty()) { - frame.getDialogService().showWarningDialogAndWait(Localization.lang("Empty search ID"), - Localization.lang("The given search ID was empty.")); - } else if (!fetcherException) { - frame.getDialogService().showErrorDialogAndWait(Localization.lang("No files found.", - Localization.lang("Fetcher '%0' did not find an entry for id '%1'.", fetcher.getName(), searchID) + "\n" + fetcherExceptionMessage)); - } else { - frame.getDialogService().showErrorDialogAndWait(Localization.lang("Error"), Localization.lang("Error while fetching from %0", fetcher.getName()) + "." + "\n" + fetcherExceptionMessage); - } - fetcherWorker = new FetcherWorker(); - SwingUtilities.invokeLater(() -> { - idTextField.requestFocus(); - idTextField.selectAll(); - generateButton.setText(Localization.lang("Generate")); - generateButton.setEnabled(true); - }); - } catch (ExecutionException | InterruptedException e) { - LOGGER.error(String.format("Exception during fetching when using fetcher '%s' with entry id '%s'.", searchID, fetcher.getName()), e); - } - } - } -} diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java new file mode 100644 index 00000000000..2c83c929a36 --- /dev/null +++ b/src/main/java/org/jabref/gui/EntryTypeView.java @@ -0,0 +1,293 @@ +package org.jabref.gui; + +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ExecutionException; + +import javafx.application.Platform; +import javafx.concurrent.Task; +import javafx.concurrent.Worker; +import javafx.event.Event; +import javafx.fxml.FXML; +import javafx.geometry.HPos; +import javafx.geometry.Insets; +import javafx.scene.control.Button; +import javafx.scene.control.ButtonType; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextField; +import javafx.scene.control.TitledPane; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.VBox; +import javafx.stage.Window; + +import org.jabref.Globals; +import org.jabref.gui.importer.ImportInspectionDialog; +import org.jabref.gui.util.BaseDialog; +import org.jabref.gui.util.IconValidationDecorator; +import org.jabref.logic.bibtex.DuplicateCheck; +import org.jabref.logic.bibtexkeypattern.BibtexKeyGenerator; +import org.jabref.logic.importer.FetcherException; +import org.jabref.logic.importer.IdBasedFetcher; +import org.jabref.logic.importer.WebFetchers; +import org.jabref.logic.l10n.Localization; +import org.jabref.model.EntryTypes; +import org.jabref.model.database.BibDatabaseMode; +import org.jabref.model.entry.BibEntry; +import org.jabref.model.entry.BiblatexEntryTypes; +import org.jabref.model.entry.BibtexEntryTypes; +import org.jabref.model.entry.EntryType; +import org.jabref.model.entry.IEEETranEntryTypes; +import org.jabref.preferences.JabRefPreferences; + +import com.airhacks.afterburner.views.ViewLoader; +import de.saxsys.mvvmfx.utils.validation.visualization.ControlsFxVisualizer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Dialog that prompts the user to choose a type for an entry. + * Returns null if canceled. + */ +public class EntryTypeView extends BaseDialog { + + @FXML private Button generateButton; + @FXML private Button cancelButton; + @FXML private ButtonType button; + @FXML private TextField idTextField; + @FXML private ComboBox comboBox; + @FXML private TitledPane biblatexPane; + @FXML private TitledPane bibTexPane; + @FXML private TitledPane ieeetranPane; + @FXML private TitledPane customPane; + @FXML private VBox vBox; + + private EntryType type; + private static final int COLUMN = 3; + private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeView.class); + + private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer(); + private final BasePanel basePanel; + private Task> fetcherWorker = new FetcherWorker(); + + public EntryTypeView(BasePanel basePanel) { + this.basePanel = basePanel; + this.setTitle(Localization.lang("Select entry type")); + //viewModel = new EntryTypeViewModel(basePanel); + ViewLoader.view(this) + .load() + .setAsDialogPane(this); + + //ControlHelper.setAction(cancelButton, getDialogPane(), event -> cancelHandle(event)); + cancelButton.setOnAction(event -> cancelHandle(event)); + + //cancelButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close"); + //cancelButton.getActionMap().put("close", cancelAction); + //ControlHelper.setAction(generateButton, getDialogPane(), action -> { + // fetcherWorker.run(); + //}); + generateButton.setOnAction(action -> { + fetcherWorker.run(); + }); + comboBox.onActionProperty().addListener(e -> { + idTextField.requestFocus(); + idTextField.selectAll(); + }); + + idTextField.onActionProperty().addListener(event -> fetcherWorker.run()); + + if (basePanel.getBibDatabaseContext().isBiblatexMode()) { + biblatexPane.setContent(createPane(BiblatexEntryTypes.ALL)); + vBox.getChildren().remove(bibTexPane); + vBox.getChildren().remove(ieeetranPane); + List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBLATEX); + if (EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBLATEX).isEmpty()) { + vBox.getChildren().remove(customPane); + } else { + customPane.setContent(createPane(customTypes)); + } + //vBox.getChildren().remove(customPane); + //bibTexPane.setVisible(false); + //ieeetranPane.setVisible(false); + } else { + bibTexPane.setContent(createPane(BibtexEntryTypes.ALL)); + ieeetranPane.setContent(createPane(IEEETranEntryTypes.ALL)); + vBox.getChildren().remove(biblatexPane); + + List customTypes = EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBTEX); + if (EntryTypes.getAllCustomTypes(BibDatabaseMode.BIBTEX).isEmpty()) { + vBox.getChildren().remove(customPane); + } else { + customPane.setContent(createPane(customTypes)); + } + //vBox.getChildren().remove(customPane); + //biblatexPane.setVisible(false); + } + + } + + private GridPane createPane(Collection entries) { + GridPane gridpane = new GridPane(); + gridpane.setPadding(new Insets(4)); + gridpane.setVgap(4); + // row count + int row = 0; + // col count + int col = 0; + for (EntryType entryType : entries) { + TypeButton entryButton = new TypeButton(entryType.getName(), entryType); + entryButton.setOnAction(event -> cancelHandle(event)); + if (col == EntryTypeView.COLUMN) { + col = 0; + row++; + //constraints.gridwidth = GridBagConstraints.REMAINDER; + } else { + //constraints.gridwidth = 1; + } + GridPane.setHalignment(entryButton, HPos.CENTER); + gridpane.add(entryButton, col, row); + col++; + } + return gridpane; + } + + @FXML + public void initialize() { + visualizer.setDecoration(new IconValidationDecorator()); + + WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).forEach(fetcher -> comboBox.getItems().add(fetcher.getName())); + comboBox.setValue(Globals.prefs.get(JabRefPreferences.ID_ENTRY_GENERATOR)); + + Window window = this.getDialogPane().getScene().getWindow(); + window.setOnCloseRequest(event -> window.hide()); + // this.getDialogPane().getButtonTypes().add(ButtonType.CLOSE); + // Node closeButton = this.getDialogPane().lookupButton(ButtonType.CLOSE); + // + // closeButton.managedProperty().bind(closeButton.visibleProperty()); + // closeButton.setVisible(false); + //bibTexPane.managedProperty().bind(biblatexPane.visibleProperty()); + //ieeetranPane.managedProperty().bind(ieeetranPane.visibleProperty()); + //biblatexPane.managedProperty().bind(biblatexPane.visibleProperty()); + } + + public EntryType getChoice() { + return type; + } + + private void stopFetching() { + if (fetcherWorker.getState() == Worker.State.RUNNING) { + fetcherWorker.cancel(true); + } + } + + static class TypeButton extends Button implements Comparable { + + private final EntryType type; + + TypeButton(String label, EntryType type) { + super(label); + this.type = type; + } + + @Override + public int compareTo(TypeButton o) { + return type.getName().compareTo(o.type.getName()); + } + + public EntryType getType() { + return type; + } + } + + private class FetcherWorker extends Task> { + + private boolean fetcherException = false; + private String fetcherExceptionMessage = ""; + private IdBasedFetcher fetcher = null; + private String searchID = ""; + + @Override + protected void done() { + try { + Optional result = get(); + if (result.isPresent()) { + final BibEntry bibEntry = result.get(); + if ((DuplicateCheck.containsDuplicate(basePanel.getDatabase(), bibEntry, basePanel.getBibDatabaseContext().getMode()).isPresent())) { + //If there are duplicates starts ImportInspectionDialog + final BasePanel panel = basePanel; + + ImportInspectionDialog diag = new ImportInspectionDialog(basePanel.frame(), panel, Localization.lang("Import"), false); + diag.addEntry(bibEntry); + diag.entryListComplete(); + diag.setVisible(true); + diag.toFront(); + } else { + // Regenerate CiteKey of imported BibEntry + new BibtexKeyGenerator(basePanel.getBibDatabaseContext(), Globals.prefs.getBibtexKeyPatternPreferences()).generateAndSetKey(bibEntry); + // Update Timestamps + if (Globals.prefs.getTimestampPreferences().includeCreatedTimestamp()) { + bibEntry.setField(Globals.prefs.getTimestampPreferences().getTimestampField(), Globals.prefs.getTimestampPreferences().now()); + } + basePanel.insertEntry(bibEntry); + } + + close(); + } else if (searchID.trim().isEmpty()) { + basePanel.frame().getDialogService().showWarningDialogAndWait(Localization.lang("Empty search ID"), + Localization.lang("The given search ID was empty.")); + } else if (!fetcherException) { + basePanel.frame().getDialogService().showErrorDialogAndWait(Localization.lang("No files found.", + Localization.lang("Fetcher '%0' did not find an entry for id '%1'.", fetcher.getName(), searchID) + "\n" + fetcherExceptionMessage)); + } else { + basePanel.frame().getDialogService().showErrorDialogAndWait(Localization.lang("Error"), Localization.lang("Error while fetching from %0", fetcher.getName()) + "." + "\n" + fetcherExceptionMessage); + } + fetcherWorker = new FetcherWorker(); + Platform.runLater(() -> { + idTextField.requestFocus(); + idTextField.selectAll(); + //((Button) (getDialogPane().lookupButton(generateButton))).setText(Localization.lang("Generate")); + //((Button) (getDialogPane().lookupButton(generateButton))).setDisable(true); + generateButton.setText(Localization.lang("Generate")); + generateButton.setDisable(true); + }); + } catch (ExecutionException | InterruptedException e) { + LOGGER.error(String.format("Exception during fetching when using fetcher '%s' with entry id '%s'.", searchID, fetcher.getName()), e); + } + } + + @Override + protected Optional call() throws Exception { + Optional bibEntry = Optional.empty(); + Platform.runLater(() -> { + //((Button) (getDialogPane().lookupButton(generateButton))).setText(Localization.lang("Searching...")); + //((Button) (getDialogPane().lookupButton(generateButton))).setDisable(true); + generateButton.setDisable(true); + generateButton.setText(Localization.lang("Searching...")); + }); + + Globals.prefs.put(JabRefPreferences.ID_ENTRY_GENERATOR, String.valueOf(comboBox.getSelectionModel().getSelectedItem())); + fetcher = WebFetchers.getIdBasedFetchers(Globals.prefs.getImportFormatPreferences()).get(comboBox.getSelectionModel().getSelectedIndex()); + searchID = idTextField.getText(); + if (!searchID.isEmpty()) { + try { + bibEntry = fetcher.performSearchById(searchID); + } catch (FetcherException e) { + LOGGER.error(e.getMessage(), e); + fetcherException = true; + fetcherExceptionMessage = e.getMessage(); + } + } + return bibEntry; + } + } + + + @FXML + private void cancelHandle(Event event) { + if (event.getSource() instanceof TypeButton) { + type = ((TypeButton) event.getSource()).getType(); + } + stopFetching(); + this.getDialogPane().getScene().getWindow().hide(); + } +} diff --git a/src/main/java/org/jabref/gui/EntryTypeViewModel.java b/src/main/java/org/jabref/gui/EntryTypeViewModel.java new file mode 100644 index 00000000000..bcec627e7c3 --- /dev/null +++ b/src/main/java/org/jabref/gui/EntryTypeViewModel.java @@ -0,0 +1,13 @@ +package org.jabref.gui; + +import java.util.Objects; + +public class EntryTypeViewModel extends AbstractViewModel { + + private final BasePanel panel; + + public EntryTypeViewModel(BasePanel basePanel) { + Objects.requireNonNull(basePanel); + this.panel = basePanel; + } +} diff --git a/src/main/java/org/jabref/gui/actions/NewEntryAction.java b/src/main/java/org/jabref/gui/actions/NewEntryAction.java index 72e657e2fb8..4ff85828234 100644 --- a/src/main/java/org/jabref/gui/actions/NewEntryAction.java +++ b/src/main/java/org/jabref/gui/actions/NewEntryAction.java @@ -5,7 +5,7 @@ import java.util.Optional; import org.jabref.Globals; -import org.jabref.gui.EntryTypeDialog; +import org.jabref.gui.EntryTypeView; import org.jabref.gui.JabRefFrame; import org.jabref.model.entry.EntryType; @@ -42,8 +42,10 @@ public void execute() { if (type.isPresent()) { jabRefFrame.getCurrentBasePanel().newEntry(type.get()); } else { - EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame); - typeChoiceDialog.setVisible(true); + //EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame); + //typeChoiceDialog.setVisible(true); + EntryTypeView typeChoiceDialog = new EntryTypeView(jabRefFrame.getCurrentBasePanel()); + typeChoiceDialog.showAndWait(); EntryType selectedType = typeChoiceDialog.getChoice(); if (selectedType == null) { return; diff --git a/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java b/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java index 0c048ea7ed8..a33c0121d35 100644 --- a/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java +++ b/src/main/java/org/jabref/gui/actions/NewEntryFromPlainTextAction.java @@ -1,6 +1,6 @@ package org.jabref.gui.actions; -import org.jabref.gui.EntryTypeDialog; +import org.jabref.gui.EntryTypeView; import org.jabref.gui.JabRefFrame; import org.jabref.gui.plaintextimport.TextInputDialog; import org.jabref.logic.util.UpdateField; @@ -31,8 +31,10 @@ public void execute() { return; } - EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame); - typeChoiceDialog.setVisible(true); + //EntryTypeDialog typeChoiceDialog = new EntryTypeDialog(jabRefFrame); + EntryTypeView typeChoiceDialog = new EntryTypeView(jabRefFrame.getCurrentBasePanel()); + //typeChoiceDialog.setVisible(true); + typeChoiceDialog.showAndWait(); EntryType selectedType = typeChoiceDialog.getChoice(); if (selectedType == null) { return; From 78db8ec22caa65f52de9c3623d87dc09ccff057e Mon Sep 17 00:00:00 2001 From: 1160300608 <18846010223@163.com> Date: Wed, 15 Aug 2018 10:31:30 +0800 Subject: [PATCH 2/4] delete useless class file --- .../java/org/jabref/gui/EntryTypeViewModel.java | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/main/java/org/jabref/gui/EntryTypeViewModel.java diff --git a/src/main/java/org/jabref/gui/EntryTypeViewModel.java b/src/main/java/org/jabref/gui/EntryTypeViewModel.java deleted file mode 100644 index bcec627e7c3..00000000000 --- a/src/main/java/org/jabref/gui/EntryTypeViewModel.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.jabref.gui; - -import java.util.Objects; - -public class EntryTypeViewModel extends AbstractViewModel { - - private final BasePanel panel; - - public EntryTypeViewModel(BasePanel basePanel) { - Objects.requireNonNull(basePanel); - this.panel = basePanel; - } -} From b4193289031f9cd08b905792e89c480ad1414fb9 Mon Sep 17 00:00:00 2001 From: 1160300608 <18846010223@163.com> Date: Wed, 15 Aug 2018 11:06:25 +0800 Subject: [PATCH 3/4] fix order and empty else statement --- src/main/java/org/jabref/gui/EntryTypeView.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/jabref/gui/EntryTypeView.java b/src/main/java/org/jabref/gui/EntryTypeView.java index 2c83c929a36..ddce6052f45 100644 --- a/src/main/java/org/jabref/gui/EntryTypeView.java +++ b/src/main/java/org/jabref/gui/EntryTypeView.java @@ -13,7 +13,6 @@ import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.scene.control.Button; -import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; import javafx.scene.control.TextField; import javafx.scene.control.TitledPane; @@ -51,9 +50,11 @@ */ public class EntryTypeView extends BaseDialog { + private static final int COLUMN = 3; + private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeView.class); + @FXML private Button generateButton; @FXML private Button cancelButton; - @FXML private ButtonType button; @FXML private TextField idTextField; @FXML private ComboBox comboBox; @FXML private TitledPane biblatexPane; @@ -62,12 +63,9 @@ public class EntryTypeView extends BaseDialog { @FXML private TitledPane customPane; @FXML private VBox vBox; - private EntryType type; - private static final int COLUMN = 3; - private static final Logger LOGGER = LoggerFactory.getLogger(EntryTypeView.class); - private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer(); private final BasePanel basePanel; + private EntryType type; private Task> fetcherWorker = new FetcherWorker(); public EntryTypeView(BasePanel basePanel) { @@ -141,9 +139,10 @@ private GridPane createPane(Collection entries) { col = 0; row++; //constraints.gridwidth = GridBagConstraints.REMAINDER; - } else { - //constraints.gridwidth = 1; } + //else { + //constraints.gridwidth = 1; + //} GridPane.setHalignment(entryButton, HPos.CENTER); gridpane.add(entryButton, col, row); col++; @@ -281,7 +280,6 @@ protected Optional call() throws Exception { } } - @FXML private void cancelHandle(Event event) { if (event.getSource() instanceof TypeButton) { From 0d39e1e5003ce927639914af1593fd748c5bddda Mon Sep 17 00:00:00 2001 From: 1160300608 <18846010223@163.com> Date: Wed, 15 Aug 2018 16:41:42 +0800 Subject: [PATCH 4/4] fix pdfImport old dialog problem --- src/main/java/org/jabref/pdfimport/PdfImporter.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/pdfimport/PdfImporter.java b/src/main/java/org/jabref/pdfimport/PdfImporter.java index 78428efab3e..691a88fa31c 100644 --- a/src/main/java/org/jabref/pdfimport/PdfImporter.java +++ b/src/main/java/org/jabref/pdfimport/PdfImporter.java @@ -14,7 +14,7 @@ import org.jabref.Globals; import org.jabref.gui.BasePanel; import org.jabref.gui.BasePanelMode; -import org.jabref.gui.EntryTypeDialog; +import org.jabref.gui.EntryTypeView; import org.jabref.gui.JabRefFrame; import org.jabref.gui.externalfiles.DroppedFileHandler; import org.jabref.gui.externalfiletype.ExternalFileTypes; @@ -224,8 +224,10 @@ private void doContentImport(String fileName, List res) { private Optional createNewEntry() { // Find out what type is desired - EntryTypeDialog etd = new EntryTypeDialog(frame); - etd.setVisible(true); + //EntryTypeDialog etd = new EntryTypeDialog(frame); + EntryTypeView etd = new EntryTypeView(frame.getCurrentBasePanel()); + //etd.setVisible(true); + etd.showAndWait(); EntryType type = etd.getChoice(); if (type != null) { // Only if the dialog was not canceled.