package org.jabref.gui.fieldeditors; import java.awt.Color; import java.lang.reflect.InvocationTargetException; import javax.swing.JComponent; import javax.swing.SwingUtilities; import javafx.embed.swing.JFXPanel; import javafx.scene.Scene; import org.jabref.gui.GUIGlobals; import org.jabref.gui.autocompleter.AutoCompleteListener; import org.jabref.gui.util.DefaultTaskExecutor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * An implementation of the FieldEditor backed by a {@link EditorTextArea}. * Used for multi-line input, currently all BibTexFields except Bibtex key! */ public class TextArea implements FieldEditor { private static final Log LOGGER = LogFactory.getLog(TextArea.class); private final JFXPanel swingPanel; private final EditorTextArea textArea; private String fieldName; private AutoCompleteListener autoCompleteListener; public TextArea(String fieldName, String content) { this(fieldName, content, ""); } public TextArea(String fieldName, String content, String title) { textArea = new EditorTextArea(content); textArea.setPromptText(title); swingPanel = new JFXPanel(); swingPanel.setBackground(GUIGlobals.activeBackgroundColor); DefaultTaskExecutor.runInJavaFXThread( () -> { Scene scene = new Scene(textArea); swingPanel.setScene(scene); } ); /* // Add the global focus listener, so a menu item can see if this field // was focused when an action was called. addFocusListener(Globals.getFocusListener()); addFocusListener(new FieldEditorFocusListener()); */ this.fieldName = fieldName; /* FieldTextMenu popMenu = new FieldTextMenu(this); this.addMouseListener(popMenu); label.addMouseListener(popMenu); */ } @Override public String getFieldName() { return fieldName; } public void setFieldName(String newName) { fieldName = newName; } @Override public void setBackground(Color color) { } @Override public JComponent getPane() { return swingPanel; } @Override public JComponent getTextComponent() { return null; } @Override public boolean hasFocus() { return false; } @Override public void setActiveBackgroundColor() { setBackgroundColor(GUIGlobals.activeBackgroundColor); } @Override public void setValidBackgroundColor() { setBackgroundColor(GUIGlobals.validFieldBackgroundColor); } @Override public void setInvalidBackgroundColor() { setBackgroundColor(GUIGlobals.invalidFieldBackgroundColor); } private void setBackgroundColor(Color color) { if (SwingUtilities.isEventDispatchThread()) { setBackground(color); } else { try { SwingUtilities.invokeAndWait(() -> setBackground(color)); } catch (InvocationTargetException | InterruptedException e) { LOGGER.info("Problem setting background color", e); } } } @Override public String getText() { return textArea.getText(); } @Override public void setText(String newText) { textArea.setText(newText); } @Override public void append(String text) { } @Override public void setEnabled(boolean enabled) { } @Override public void paste(String textToInsert) { /* replaceSelection(textToInsert); */ } @Override public String getSelectedText() { return null; } @Override public void undo() { // Nothing } @Override public void redo() { // Nothing } @Override public void setAutoCompleteListener(AutoCompleteListener listener) { autoCompleteListener = listener; } @Override public void clearAutoCompleteSuggestion() { /* if (autoCompleteListener != null) { autoCompleteListener.clearCurrentSuggestion(this); } */ } @Override public void requestFocus() { } }