From 346bd36c37b6099e2cf6e0fd78baacb51cb3f31a Mon Sep 17 00:00:00 2001 From: Joerg Lenhard Date: Sat, 2 Sep 2017 14:38:31 +0100 Subject: [PATCH 1/5] Update EntryEditor instead of recreating it --- src/main/java/org/jabref/gui/BasePanel.java | 7 +- .../jabref/gui/entryeditor/EntryEditor.java | 112 ++++++++++-------- 2 files changed, 65 insertions(+), 54 deletions(-) diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 8d31ddfb8d6..6114e78d7f1 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -1486,11 +1486,12 @@ public void showEntry(final BibEntry bibEntry) { * @return A suitable entry editor. */ public EntryEditor getEntryEditor(BibEntry entry) { - String lastTabName = ""; if (currentEditor != null) { - lastTabName = currentEditor.getVisibleTabName(); + currentEditor.setEntry(entry); + return currentEditor; + } else { + return new EntryEditor(this, entry); } - return new EntryEditor(frame, BasePanel.this, entry, lastTabName); } public EntryEditor getCurrentEditor() { diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index 61b6fc8aa96..ff7c462f703 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -110,11 +110,11 @@ public class EntryEditor extends JPanel implements EntryContainer { /** * A reference to the entry this object works on. */ - private final BibEntry entry; + private BibEntry entry; /** * The currently displayed type */ - private final String displayedBibEntryType; + private String displayedBibEntryType; /** * The action concerned with closing the window. @@ -153,71 +153,52 @@ public class EntryEditor extends JPanel implements EntryContainer { * Indicates that we are about to go to the next or previous entry */ private final BooleanProperty movingToDifferentEntry = new SimpleBooleanProperty(); - private final EntryType entryType; + private EntryType entryType; private SourceTab sourceTab; + private final BorderLayout layout; - public EntryEditor(JabRefFrame frame, BasePanel panel, BibEntry entry, String lastTabName) { - this.frame = frame; + public EntryEditor(BasePanel panel, BibEntry entry) { + this.frame = panel.frame(); this.panel = panel; - this.entry = Objects.requireNonNull(entry); - entry.registerListener(this); - entryType = EntryTypes.getTypeOrDefault(entry.getType(), - this.frame.getCurrentBasePanel().getBibDatabaseContext().getMode()); - - displayedBibEntryType = entry.getType(); writeXmp = new WriteXMPEntryEditorAction(panel, this); - BorderLayout borderLayout = new BorderLayout(); - setLayout(borderLayout); - setupToolBar(); + layout = new BorderLayout(); + setLayout(layout); container = OS.LINUX ? new CustomJFXPanel() : new JFXPanel(); - container.addKeyListener(new KeyAdapter() { + setEntry(entry); + setupToolBar(); + container.setScene(new Scene(tabbed)); + add(container, BorderLayout.CENTER); - @Override - public void keyPressed(java.awt.event.KeyEvent e) { + DefaultTaskExecutor.runInJavaFXThread(() -> { + EasyBind.subscribe(tabbed.getSelectionModel().selectedItemProperty(), tab -> { + EntryEditorTab activeTab = (EntryEditorTab) tab; + if (activeTab != null) { + activeTab.notifyAboutFocus(); + } + }); + }); + + setupKeyBindings(); + } + + public void setEntry(BibEntry entry) { + this.entry = Objects.requireNonNull(entry); + entry.registerListener(this); + entryType = EntryTypes.getTypeOrDefault(entry.getType(), + this.frame.getCurrentBasePanel().getBibDatabaseContext().getMode()); + + displayedBibEntryType = entry.getType(); - //We need to consume this event here to prevent the propgation of keybinding events back to the JFrame - Optional keyBinding = Globals.getKeyPrefs().mapToKeyBinding(e); - if (keyBinding.isPresent()) { - switch (keyBinding.get()) { - case CUT: - case COPY: - case PASTE: - case CLOSE_ENTRY_EDITOR: - case DELETE_ENTRY: - case SELECT_ALL: - case ENTRY_EDITOR_NEXT_PANEL: - case ENTRY_EDITOR_NEXT_PANEL_2: - case ENTRY_EDITOR_PREVIOUS_PANEL: - case ENTRY_EDITOR_PREVIOUS_PANEL_2: - e.consume(); - break; - default: - //do nothing - } - } - } - }); DefaultTaskExecutor.runInJavaFXThread(() -> { - addTabs(lastTabName); + addTabs(this.getVisibleTabName()); tabbed.setStyle("-fx-font-size: " + Globals.prefs.getFontSizeFX() + "pt;"); - container.setScene(new Scene(tabbed)); }); - add(container, BorderLayout.CENTER); - - EasyBind.subscribe(tabbed.getSelectionModel().selectedItemProperty(), tab -> { - EntryEditorTab activeTab = (EntryEditorTab) tab; - if (activeTab != null) { - activeTab.notifyAboutFocus(); - } - }); - - setupKeyBindings(); } @Subscribe @@ -284,6 +265,34 @@ private void selectLastUsedTab(String lastTabName) { * Set-up key bindings specific for the entry editor. */ private void setupKeyBindings() { + container.addKeyListener(new KeyAdapter() { + + @Override + public void keyPressed(java.awt.event.KeyEvent e) { + + //We need to consume this event here to prevent the propgation of keybinding events back to the JFrame + Optional keyBinding = Globals.getKeyPrefs().mapToKeyBinding(e); + if (keyBinding.isPresent()) { + switch (keyBinding.get()) { + case CUT: + case COPY: + case PASTE: + case CLOSE_ENTRY_EDITOR: + case DELETE_ENTRY: + case SELECT_ALL: + case ENTRY_EDITOR_NEXT_PANEL: + case ENTRY_EDITOR_NEXT_PANEL_2: + case ENTRY_EDITOR_PREVIOUS_PANEL: + case ENTRY_EDITOR_PREVIOUS_PANEL_2: + e.consume(); + break; + default: + //do nothing + } + } + } + }); + tabbed.addEventFilter(KeyEvent.KEY_PRESSED, event -> { Optional keyBinding = Globals.getKeyPrefs().mapToKeyBinding(event); if (keyBinding.isPresent()) { @@ -383,6 +392,7 @@ public BibDatabase getDatabase() { } private void setupToolBar() { + JPanel leftPan = new JPanel(); leftPan.setLayout(new BorderLayout()); JToolBar toolBar = new OSXCompatibleToolbar(SwingConstants.VERTICAL); From 548537f125e05961fb961fcc497811ff53c1967d Mon Sep 17 00:00:00 2001 From: Joerg Lenhard Date: Sat, 2 Sep 2017 14:48:42 +0100 Subject: [PATCH 2/5] Update TypeLabel on entry change --- .../java/org/jabref/gui/entryeditor/EntryEditor.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index ff7c462f703..55532c5265f 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -156,6 +156,7 @@ public class EntryEditor extends JPanel implements EntryContainer { private EntryType entryType; private SourceTab sourceTab; private final BorderLayout layout; + private TypeLabel typeLabel; public EntryEditor(BasePanel panel, BibEntry entry) { this.frame = panel.frame(); @@ -167,7 +168,8 @@ public EntryEditor(BasePanel panel, BibEntry entry) { setLayout(layout); container = OS.LINUX ? new CustomJFXPanel() : new JFXPanel(); - + // Create type-label + typeLabel = new TypeLabel(""); setEntry(entry); setupToolBar(); container.setScene(new Scene(tabbed)); @@ -199,6 +201,8 @@ public void setEntry(BibEntry entry) { tabbed.setStyle("-fx-font-size: " + Globals.prefs.getFontSizeFX() + "pt;"); }); + TypedBibEntry typedEntry = new TypedBibEntry(entry, panel.getBibDatabaseContext().getMode()); + typeLabel.setText(typedEntry.getTypeForDisplay()); } @Subscribe @@ -432,9 +436,7 @@ private void setupToolBar() { closeBut.setMargin(new Insets(8, 0, 8, 0)); leftPan.add(closeBut, BorderLayout.NORTH); - // Create type-label - TypedBibEntry typedEntry = new TypedBibEntry(entry, panel.getBibDatabaseContext().getMode()); - leftPan.add(new TypeLabel(typedEntry.getTypeForDisplay()), BorderLayout.CENTER); + leftPan.add(typeLabel, BorderLayout.CENTER); TypeButton typeButton = new TypeButton(); toolBar.add(typeButton); From 11c5ad7883734a11135a6abe46ecbb9ac836a788 Mon Sep 17 00:00:00 2001 From: Joerg Lenhard Date: Wed, 18 Oct 2017 12:08:43 +0200 Subject: [PATCH 3/5] Set scene on JavaFXThread --- src/main/java/org/jabref/gui/entryeditor/EntryEditor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index 55532c5265f..8332c66aa87 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -172,7 +172,9 @@ public EntryEditor(BasePanel panel, BibEntry entry) { typeLabel = new TypeLabel(""); setEntry(entry); setupToolBar(); - container.setScene(new Scene(tabbed)); + DefaultTaskExecutor.runInJavaFXThread(() -> + container.setScene(new Scene(tabbed)) + ); add(container, BorderLayout.CENTER); DefaultTaskExecutor.runInJavaFXThread(() -> { From 9f576ffe0d6c7d0c190dda8ddfd74ba61b8cf137 Mon Sep 17 00:00:00 2001 From: Joerg Lenhard Date: Wed, 18 Oct 2017 12:09:01 +0200 Subject: [PATCH 4/5] Refactor constructor of EntryEditor --- src/main/java/org/jabref/gui/BasePanel.java | 4 +++- src/main/java/org/jabref/gui/entryeditor/EntryEditor.java | 3 +-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java index 6114e78d7f1..692db1be4d1 100644 --- a/src/main/java/org/jabref/gui/BasePanel.java +++ b/src/main/java/org/jabref/gui/BasePanel.java @@ -1490,7 +1490,9 @@ public EntryEditor getEntryEditor(BibEntry entry) { currentEditor.setEntry(entry); return currentEditor; } else { - return new EntryEditor(this, entry); + EntryEditor editor = new EntryEditor(this); + editor.setEntry(entry); + return editor; } } diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java index 8332c66aa87..dadc3c4039f 100644 --- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java +++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.java @@ -158,7 +158,7 @@ public class EntryEditor extends JPanel implements EntryContainer { private final BorderLayout layout; private TypeLabel typeLabel; - public EntryEditor(BasePanel panel, BibEntry entry) { + public EntryEditor(BasePanel panel) { this.frame = panel.frame(); this.panel = panel; @@ -170,7 +170,6 @@ public EntryEditor(BasePanel panel, BibEntry entry) { container = OS.LINUX ? new CustomJFXPanel() : new JFXPanel(); // Create type-label typeLabel = new TypeLabel(""); - setEntry(entry); setupToolBar(); DefaultTaskExecutor.runInJavaFXThread(() -> container.setScene(new Scene(tabbed)) From 8c9c9780cac006d06db2780937ce1f1a948547aa Mon Sep 17 00:00:00 2001 From: Joerg Lenhard Date: Wed, 18 Oct 2017 12:34:13 +0200 Subject: [PATCH 5/5] Add Changelog entry --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a344fdcdaf..9a5b8c89c03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `# - Crossreferenced entries are now used when a BibTex key is generated for an entry with empty fields. [#2811](https://github.com/JabRef/jabref/issues/2811) - We now set the WM_CLASS of the UI to org-jabref-JabRefMain to allow certain Un*x window managers to properly identify its windows - We changed the default paths for the OpenOffice/LibreOffice binaries to the default path for LibreOffice - +- We no longer create a new entry editor when selecting a new entry to increase performance. [#3187](https://github.com/JabRef/jabref/pull/3187) ### Fixed - We fixed the translation of \textendash in the entry preview [#3307](https://github.com/JabRef/jabref/issues/3307)