From 9f5da55417ede00c75d0f4f954061d3f44dff38e Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sun, 22 Jul 2018 19:33:13 +0800
Subject: [PATCH 01/17] Fix#3861_Edit_ReplaceString
---
src/main/java/org/jabref/gui/BasePanel.java | 27 +--
src/main/java/org/jabref/gui/JabRefFrame.java | 2 +
.../java/org/jabref/gui/ReplaceString.fxml | 27 +++
.../org/jabref/gui/ReplaceStringAction.java | 20 ++
.../org/jabref/gui/ReplaceStringView.java | 184 ++++++++++++++++++
5 files changed, 234 insertions(+), 26 deletions(-)
create mode 100644 src/main/java/org/jabref/gui/ReplaceString.fxml
create mode 100644 src/main/java/org/jabref/gui/ReplaceStringAction.java
create mode 100644 src/main/java/org/jabref/gui/ReplaceStringView.java
diff --git a/src/main/java/org/jabref/gui/BasePanel.java b/src/main/java/org/jabref/gui/BasePanel.java
index e23a6a27e3f..e13c930e5cf 100644
--- a/src/main/java/org/jabref/gui/BasePanel.java
+++ b/src/main/java/org/jabref/gui/BasePanel.java
@@ -395,32 +395,7 @@ private void setupActions() {
actions.put(Actions.MERGE_WITH_FETCHED_ENTRY, new MergeWithFetchedEntryAction(this, frame.getDialogService()));
- actions.put(Actions.REPLACE_ALL, () -> {
- final ReplaceStringDialog rsd = new ReplaceStringDialog(frame);
- rsd.setVisible(true);
- if (!rsd.okPressed()) {
- return;
- }
- int counter = 0;
- final NamedCompound ce = new NamedCompound(Localization.lang("Replace string"));
- if (rsd.selOnly()) {
- for (BibEntry be : mainTable.getSelectedEntries()) {
- counter += rsd.replace(be, ce);
- }
- } else {
- for (BibEntry entry : bibDatabaseContext.getDatabase().getEntries()) {
- counter += rsd.replace(entry, ce);
- }
- }
-
- output(Localization.lang("Replaced") + ' ' + counter + ' '
- + (counter == 1 ? Localization.lang("occurrence") : Localization.lang("occurrences")) + '.');
- if (counter > 0) {
- ce.end();
- getUndoManager().addEdit(ce);
- markBaseChanged();
- }
- });
+ actions.put(Actions.REPLACE_ALL, ()-> (new ReplaceStringAction(this)).execute());
actions.put(new SpecialFieldValueViewModel(SpecialField.RELEVANCE.getValues().get(0)).getCommand(),
new SpecialFieldViewModel(SpecialField.RELEVANCE, undoManager).getSpecialFieldAction(SpecialField.RELEVANCE.getValues().get(0), frame));
diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java
index 1eed35d9bfa..8cd33645028 100644
--- a/src/main/java/org/jabref/gui/JabRefFrame.java
+++ b/src/main/java/org/jabref/gui/JabRefFrame.java
@@ -75,6 +75,7 @@
import org.jabref.gui.actions.NewEntryAction;
import org.jabref.gui.actions.NewEntryFromPlainTextAction;
import org.jabref.gui.actions.NewSubLibraryAction;
+import org.jabref.gui.actions.OldCommandWrapper;
import org.jabref.gui.actions.OldDatabaseCommandWrapper;
import org.jabref.gui.actions.OpenBrowserAction;
import org.jabref.gui.actions.SearchForUpdateAction;
@@ -598,6 +599,7 @@ private Node createToolbar() {
factory.createIconButton(StandardActions.CUT, new OldDatabaseCommandWrapper(Actions.CUT, this, Globals.stateManager)),
factory.createIconButton(StandardActions.COPY, new OldDatabaseCommandWrapper(Actions.COPY, this, Globals.stateManager)),
factory.createIconButton(StandardActions.PASTE, new OldDatabaseCommandWrapper(Actions.PASTE, this, Globals.stateManager)),
+ factory.createIconButton(StandardActions.REPLACE_ALL, new ReplaceStringAction(this.getCurrentBasePanel())),
factory.createIconButton(StandardActions.CLEANUP_ENTRIES, new OldDatabaseCommandWrapper(Actions.CLEANUP, this, Globals.stateManager)),
factory.createIconButton(pushToExternal.getMenuAction(), pushToExternal),
diff --git a/src/main/java/org/jabref/gui/ReplaceString.fxml b/src/main/java/org/jabref/gui/ReplaceString.fxml
new file mode 100644
index 00000000000..ac797960c09
--- /dev/null
+++ b/src/main/java/org/jabref/gui/ReplaceString.fxml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/org/jabref/gui/ReplaceStringAction.java b/src/main/java/org/jabref/gui/ReplaceStringAction.java
new file mode 100644
index 00000000000..b1674b4886a
--- /dev/null
+++ b/src/main/java/org/jabref/gui/ReplaceStringAction.java
@@ -0,0 +1,20 @@
+package org.jabref.gui;
+
+import org.jabref.gui.actions.SimpleCommand;
+import org.jabref.model.database.BibDatabase;
+
+public class ReplaceStringAction extends SimpleCommand
+{
+ private BasePanel basePanel;
+
+ public ReplaceStringAction(BasePanel bPanel) {
+ this.basePanel = bPanel;
+ }
+
+ @Override
+ public void execute() {
+ BibDatabase database = basePanel.getDatabase();
+ ReplaceStringView rsc = new ReplaceStringView(database, basePanel);
+ rsc.showAndWait().filter(response -> rsc.isExit());
+ }
+}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
new file mode 100644
index 00000000000..ecb6ae6b5d2
--- /dev/null
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -0,0 +1,184 @@
+package org.jabref.gui;
+
+import javafx.fxml.FXML;
+import javafx.scene.control.Button;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.DialogPane;
+import javafx.scene.control.TextField;
+import javafx.scene.control.ToggleGroup;
+import javafx.stage.Stage;
+
+import org.jabref.gui.undo.NamedCompound;
+import org.jabref.gui.undo.UndoableFieldChange;
+import org.jabref.gui.util.BaseDialog;
+import org.jabref.gui.util.IconValidationDecorator;
+import org.jabref.logic.l10n.Localization;
+import org.jabref.model.database.BibDatabase;
+import org.jabref.model.entry.BibEntry;
+
+import com.airhacks.afterburner.views.ViewLoader;
+import de.saxsys.mvvmfx.utils.validation.visualization.ControlsFxVisualizer;
+
+public class ReplaceStringView extends BaseDialog
+{
+
+ @FXML public ToggleGroup RadioGroup;
+ @FXML public Button CancelButton;
+ @FXML public Button ReplaceButton;
+ @FXML private TextField LimitFieldInput;
+ @FXML private TextField FindField;
+ @FXML private TextField ReplaceField;
+ @FXML private CheckBox checkLimit;
+ @FXML private DialogPane pane;
+
+ private boolean AllFieldReplace;
+ private boolean selOnly;
+ private String findString;
+ private String replaceString;
+ private String[] fieldStrings;
+ private BibDatabase database;
+ private boolean exitSignal;
+ private BasePanel panel;
+ private Stage st;
+
+ private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer();
+
+ public ReplaceStringView(BibDatabase bibDatabase, BasePanel basePanel) {
+ this.setTitle(Localization.lang("Replace String"));
+
+ database = bibDatabase;
+ AllFieldReplace = true;
+ exitSignal = false;
+ selOnly = false;
+ panel = basePanel;
+
+ ViewLoader.view(this)
+ .load()
+ .setAsDialogPane(this);
+
+ st = (Stage) this.pane.getScene().getWindow();
+ st.setOnCloseRequest(event -> st.close());
+ }
+
+ @FXML
+ public void initialize() {
+ visualizer.setDecoration(new IconValidationDecorator());
+ LimitFieldInput.setEditable(true);
+ FindField.setEditable(true);
+ ReplaceField.setEditable(true);
+ checkLimit.setSelected(false);
+ }
+
+ /**
+ * FXML Message handler
+ */
+ @FXML
+ public void ButtonReplace() {
+ findString = FindField.getText();
+ replaceString = ReplaceField.getText();
+ fieldStrings = LimitFieldInput.getText().toLowerCase().split(";");
+ if("".equals(findString))
+ {
+ exitSignal = true;
+ st.close();
+ return;
+ }
+ replace();
+ exitSignal = true;
+ st.close();
+ }
+
+ @FXML
+ public void ButtonCancel() {
+ exitSignal = true;
+ st.close();
+ }
+
+ @FXML
+ public void RadioAll() {
+ AllFieldReplace = true;
+ }
+
+ @FXML
+ public void RadioLimit() {
+ AllFieldReplace = false;
+ }
+
+ @FXML
+ public void selectOnly() {
+ selOnly = !selOnly;
+ }
+
+ public boolean isExit() {
+ return this.exitSignal;
+ }
+
+ /**
+ * General replacement, same as Action:Replace_All in BasePanel.java
+ * Rep check: BasePanel == null
+ * @return : replace count
+ */
+ public int replace() {
+ final NamedCompound ce = new NamedCompound(Localization.lang("Replace string"));
+ int counter = 0;
+ if(this.panel == null)
+ return 0;
+ if(this.selOnly) {
+ for(BibEntry bibEntry: this.panel.getSelectedEntries())
+ {
+ counter += replaceItem(bibEntry, ce);
+ }
+ }
+ else {
+ for(BibEntry bibEntry: this.panel.getDatabase().getEntries())
+ {
+ counter += replaceItem(bibEntry, ce);
+ }
+ }
+ return counter;
+ }
+
+ /**
+ * Does the actual operation on a Bibtex entry based on the
+ * settings specified in this same dialog. Returns the number of
+ * occurences replaced.
+ * Copied and Adapted from org.jabref.gui.ReplaceStringDialog.java
+ */
+ public int replaceItem(BibEntry be, NamedCompound ce) {
+ int counter = 0;
+ if (this.AllFieldReplace) {
+ for (String s : be.getFieldNames()) {
+ counter += replaceField(be, s, ce);
+ }
+ } else {
+ for (String fld : fieldStrings) {
+ counter += replaceField(be, fld, ce);
+ }
+ }
+ return counter;
+ }
+
+ private int replaceField(BibEntry be, String fieldname, NamedCompound ce) {
+ if (!be.hasField(fieldname)) {
+ return 0;
+ }
+ String txt = be.getField(fieldname).get();
+ StringBuilder sb = new StringBuilder();
+ int ind;
+ int piv = 0;
+ int counter = 0;
+ int len1 = this.findString.length();
+ while ((ind = txt.indexOf(this.findString, piv)) >= 0) {
+ counter++;
+ sb.append(txt, piv, ind); // Text leading up to s1
+ sb.append(this.replaceString); // Insert s2
+ piv = ind + len1;
+ }
+ sb.append(txt.substring(piv));
+ String newStr = sb.toString();
+ be.setField(fieldname, newStr);
+ ce.addEdit(new UndoableFieldChange(be, fieldname, txt, newStr));
+ return counter;
+ }
+
+}
From 44a8efd5984afdbd4e4e3c14db29b0d2894dad8b Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sun, 22 Jul 2018 20:14:10 +0800
Subject: [PATCH 02/17] Fix#3861_Edit_ReplaceString_BUILD
---
src/main/java/org/jabref/gui/JabRefFrame.java | 1 -
src/main/java/org/jabref/gui/ReplaceString.fxml | 9 ++++-----
src/main/java/org/jabref/gui/ReplaceStringView.java | 10 +++++-----
3 files changed, 9 insertions(+), 11 deletions(-)
diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java
index 8cd33645028..4968d31b5ab 100644
--- a/src/main/java/org/jabref/gui/JabRefFrame.java
+++ b/src/main/java/org/jabref/gui/JabRefFrame.java
@@ -75,7 +75,6 @@
import org.jabref.gui.actions.NewEntryAction;
import org.jabref.gui.actions.NewEntryFromPlainTextAction;
import org.jabref.gui.actions.NewSubLibraryAction;
-import org.jabref.gui.actions.OldCommandWrapper;
import org.jabref.gui.actions.OldDatabaseCommandWrapper;
import org.jabref.gui.actions.OpenBrowserAction;
import org.jabref.gui.actions.SearchForUpdateAction;
diff --git a/src/main/java/org/jabref/gui/ReplaceString.fxml b/src/main/java/org/jabref/gui/ReplaceString.fxml
index ac797960c09..a50aac367c9 100644
--- a/src/main/java/org/jabref/gui/ReplaceString.fxml
+++ b/src/main/java/org/jabref/gui/ReplaceString.fxml
@@ -1,6 +1,5 @@
-
@@ -8,19 +7,19 @@
-
-
+
+
-
+
-
+
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
index ecb6ae6b5d2..aa373420689 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringView.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -73,7 +73,7 @@ public void initialize() {
* FXML Message handler
*/
@FXML
- public void ButtonReplace() {
+ public void buttonReplace() {
findString = FindField.getText();
replaceString = ReplaceField.getText();
fieldStrings = LimitFieldInput.getText().toLowerCase().split(";");
@@ -89,18 +89,18 @@ public void ButtonReplace() {
}
@FXML
- public void ButtonCancel() {
+ public void buttonCancel() {
exitSignal = true;
st.close();
}
@FXML
- public void RadioAll() {
+ public void radioAll() {
AllFieldReplace = true;
}
@FXML
- public void RadioLimit() {
+ public void radioLimit() {
AllFieldReplace = false;
}
@@ -130,7 +130,7 @@ public int replace() {
}
}
else {
- for(BibEntry bibEntry: this.panel.getDatabase().getEntries())
+ for(BibEntry bibEntry: this.database.getEntries())
{
counter += replaceItem(bibEntry, ce);
}
From 90800c3649dc055ce71e4298cafae8a8aa934a3f Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sun, 22 Jul 2018 20:21:23 +0800
Subject: [PATCH 03/17] Fix#3861_Edit_ReplaceString_BUILDS
---
src/main/java/org/jabref/gui/ReplaceStringView.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
index aa373420689..fee7dee9574 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringView.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -77,7 +77,7 @@ public void buttonReplace() {
findString = FindField.getText();
replaceString = ReplaceField.getText();
fieldStrings = LimitFieldInput.getText().toLowerCase().split(";");
- if("".equals(findString))
+ if ("".equals(findString))
{
exitSignal = true;
st.close();
@@ -121,16 +121,16 @@ public boolean isExit() {
public int replace() {
final NamedCompound ce = new NamedCompound(Localization.lang("Replace string"));
int counter = 0;
- if(this.panel == null)
+ if (this.panel == null)
return 0;
- if(this.selOnly) {
- for(BibEntry bibEntry: this.panel.getSelectedEntries())
+ if (this.selOnly) {
+ for (BibEntry bibEntry: this.panel.getSelectedEntries())
{
counter += replaceItem(bibEntry, ce);
}
}
else {
- for(BibEntry bibEntry: this.database.getEntries())
+ for (BibEntry bibEntry: this.database.getEntries())
{
counter += replaceItem(bibEntry, ce);
}
From b601ba6c170501225c261a7d6ce3bcf78348cffe Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Wed, 25 Jul 2018 16:21:10 +0800
Subject: [PATCH 04/17] FIX#3861ReplaceString_CheckStyle
---
src/main/java/org/jabref/gui/JabRefFrame.java | 1 -
.../java/org/jabref/gui/ReplaceString.fxml | 72 ++++--
.../org/jabref/gui/ReplaceStringAction.java | 10 +-
.../org/jabref/gui/ReplaceStringDialog.java | 221 ------------------
.../org/jabref/gui/ReplaceStringView.java | 143 ++----------
.../jabref/gui/ReplaceStringViewModel.java | 90 +++++++
6 files changed, 167 insertions(+), 370 deletions(-)
delete mode 100644 src/main/java/org/jabref/gui/ReplaceStringDialog.java
create mode 100644 src/main/java/org/jabref/gui/ReplaceStringViewModel.java
diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java
index 4968d31b5ab..1eed35d9bfa 100644
--- a/src/main/java/org/jabref/gui/JabRefFrame.java
+++ b/src/main/java/org/jabref/gui/JabRefFrame.java
@@ -598,7 +598,6 @@ private Node createToolbar() {
factory.createIconButton(StandardActions.CUT, new OldDatabaseCommandWrapper(Actions.CUT, this, Globals.stateManager)),
factory.createIconButton(StandardActions.COPY, new OldDatabaseCommandWrapper(Actions.COPY, this, Globals.stateManager)),
factory.createIconButton(StandardActions.PASTE, new OldDatabaseCommandWrapper(Actions.PASTE, this, Globals.stateManager)),
- factory.createIconButton(StandardActions.REPLACE_ALL, new ReplaceStringAction(this.getCurrentBasePanel())),
factory.createIconButton(StandardActions.CLEANUP_ENTRIES, new OldDatabaseCommandWrapper(Actions.CLEANUP, this, Globals.stateManager)),
factory.createIconButton(pushToExternal.getMenuAction(), pushToExternal),
diff --git a/src/main/java/org/jabref/gui/ReplaceString.fxml b/src/main/java/org/jabref/gui/ReplaceString.fxml
index a50aac367c9..b44b13b6268 100644
--- a/src/main/java/org/jabref/gui/ReplaceString.fxml
+++ b/src/main/java/org/jabref/gui/ReplaceString.fxml
@@ -3,24 +3,56 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/org/jabref/gui/ReplaceStringAction.java b/src/main/java/org/jabref/gui/ReplaceStringAction.java
index b1674b4886a..e115e8f8377 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringAction.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringAction.java
@@ -1,20 +1,18 @@
package org.jabref.gui;
import org.jabref.gui.actions.SimpleCommand;
-import org.jabref.model.database.BibDatabase;
public class ReplaceStringAction extends SimpleCommand
{
private BasePanel basePanel;
- public ReplaceStringAction(BasePanel bPanel) {
- this.basePanel = bPanel;
+ public ReplaceStringAction(BasePanel basePanel) {
+ this.basePanel = basePanel;
}
@Override
public void execute() {
- BibDatabase database = basePanel.getDatabase();
- ReplaceStringView rsc = new ReplaceStringView(database, basePanel);
- rsc.showAndWait().filter(response -> rsc.isExit());
+ ReplaceStringView dialog = new ReplaceStringView(basePanel);
+ dialog.showAndWait();
}
}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringDialog.java b/src/main/java/org/jabref/gui/ReplaceStringDialog.java
deleted file mode 100644
index 10fd5ccc1cf..00000000000
--- a/src/main/java/org/jabref/gui/ReplaceStringDialog.java
+++ /dev/null
@@ -1,221 +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.util.Locale;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-
-import org.jabref.Globals;
-import org.jabref.gui.keyboard.KeyBinding;
-import org.jabref.gui.undo.NamedCompound;
-import org.jabref.gui.undo.UndoableFieldChange;
-import org.jabref.logic.l10n.Localization;
-import org.jabref.model.entry.BibEntry;
-
-/**
- * Dialog for replacing strings.
- */
-class ReplaceStringDialog extends JabRefDialog {
-
- private final JTextField fieldsField = new JTextField("", 30);
- private final JTextField fromField = new JTextField("", 30);
- private final JTextField toField = new JTextField("", 30);
-
- private final JCheckBox selOnly = new JCheckBox(Localization.lang("Limit to selected entries"), false);
- private final JRadioButton allFi = new JRadioButton(Localization.lang("All fields"), true);
- private final JRadioButton field = new JRadioButton(Localization.lang("Limit to fields") + ":", false);
- private boolean okPressed;
- private String[] fieldStrings;
- private String fromString;
- private String toString;
-
-
- public ReplaceStringDialog(JabRefFrame parent) {
- super((JFrame) null, Localization.lang("Replace string"), true, ReplaceStringDialog.class);
-
- ButtonGroup bg = new ButtonGroup();
- bg.add(allFi);
- bg.add(field);
- ActionListener okListener = e -> {
- fromString = fromField.getText();
- toString = toField.getText();
- if ("".equals(fromString)) {
- return;
- }
- okPressed = true;
- fieldStrings = fieldsField.getText().toLowerCase(Locale.ROOT).split(";");
- dispose();
- };
- JButton ok = new JButton(Localization.lang("OK"));
- ok.addActionListener(okListener);
- toField.addActionListener(okListener);
- fieldsField.addActionListener(okListener);
- AbstractAction cancelAction = new AbstractAction() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- dispose();
- }
- };
- JButton cancel = new JButton(Localization.lang("Cancel"));
- cancel.addActionListener(cancelAction);
-
- // Key bindings:
- JPanel settings = new JPanel();
- ActionMap am = settings.getActionMap();
- InputMap im = settings.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
- im.put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close");
- am.put("close", cancelAction);
-
- // Layout starts here.
- GridBagLayout gbl = new GridBagLayout();
- settings.setLayout(gbl);
- JPanel opt = new JPanel();
- opt.setLayout(gbl);
- JPanel main = new JPanel();
- main.setLayout(gbl);
-
- settings.setBorder(BorderFactory.createTitledBorder
- (BorderFactory.createEtchedBorder(),
- Localization.lang("Replace string")));
- main.setBorder(BorderFactory.createTitledBorder
- (BorderFactory.createEtchedBorder(),
- Localization.lang("Strings")));
-
- // Settings panel:
- GridBagConstraints con = new GridBagConstraints();
- con.fill = GridBagConstraints.HORIZONTAL;
- con.gridwidth = 2;
- con.weightx = 0;
- con.anchor = GridBagConstraints.WEST;
- con.gridy = 0;
- con.gridx = 0;
- con.insets = new Insets(3, 5, 3, 5);
- gbl.setConstraints(selOnly, con);
- settings.add(selOnly);
- con.gridy = 1;
- con.insets = new Insets(13, 5, 3, 5);
- gbl.setConstraints(allFi, con);
- settings.add(allFi);
- con.gridwidth = 1;
- con.gridy = 2;
- con.gridx = 0;
- con.insets = new Insets(3, 5, 3, 5);
- gbl.setConstraints(field, con);
- settings.add(field);
- con.gridx = 1;
- con.weightx = 1;
- gbl.setConstraints(fieldsField, con);
- settings.add(fieldsField);
-
- con.weightx = 0;
- con.gridx = 0;
- con.gridy = 0;
- JLabel fl = new JLabel(Localization.lang("Search for") + ":");
- gbl.setConstraints(fl, con);
- main.add(fl);
- con.gridy = 1;
- JLabel tl = new JLabel(Localization.lang("Replace with") + ":");
- gbl.setConstraints(tl, con);
- main.add(tl);
- con.weightx = 1;
- con.gridx = 1;
- con.gridy = 0;
- gbl.setConstraints(fromField, con);
- main.add(fromField);
- con.gridy = 1;
- gbl.setConstraints(toField, con);
- main.add(toField);
-
- // Option buttons:
- con.gridx = GridBagConstraints.RELATIVE;
- con.gridy = GridBagConstraints.RELATIVE;
- con.weightx = 1;
- con.gridwidth = 1;
- con.anchor = GridBagConstraints.EAST;
- con.fill = GridBagConstraints.NONE;
- gbl.setConstraints(ok, con);
- opt.add(ok);
- con.anchor = GridBagConstraints.WEST;
- con.gridwidth = GridBagConstraints.REMAINDER;
- gbl.setConstraints(cancel, con);
- opt.add(cancel);
-
- getContentPane().add(main, BorderLayout.NORTH);
- getContentPane().add(settings, BorderLayout.CENTER);
- getContentPane().add(opt, BorderLayout.SOUTH);
-
- pack();
- }
-
- public boolean okPressed() {
- return okPressed;
- }
-
- private boolean allFields() {
- return allFi.isSelected();
- }
-
- public boolean selOnly() {
- return selOnly.isSelected();
- }
-
- /**
- * Does the actual operation on a Bibtex entry based on the
- * settings specified in this same dialog. Returns the number of
- * occurences replaced.
- */
- public int replace(BibEntry be, NamedCompound ce) {
- int counter = 0;
- if (allFields()) {
- for (String s : be.getFieldNames()) {
- counter += replaceField(be, s, ce);
- }
- } else {
- for (String fld : fieldStrings) {
- counter += replaceField(be, fld, ce);
- }
- }
- return counter;
- }
-
- private int replaceField(BibEntry be, String fieldname, NamedCompound ce) {
- if (!be.hasField(fieldname)) {
- return 0;
- }
- String txt = be.getField(fieldname).get();
- StringBuilder sb = new StringBuilder();
- int ind;
- int piv = 0;
- int counter = 0;
- int len1 = fromString.length();
- while ((ind = txt.indexOf(fromString, piv)) >= 0) {
- counter++;
- sb.append(txt.substring(piv, ind)); // Text leading up to s1
- sb.append(toString); // Insert s2
- piv = ind + len1;
- }
- sb.append(txt.substring(piv));
- String newStr = sb.toString();
- be.setField(fieldname, newStr);
- ce.addEdit(new UndoableFieldChange(be, fieldname, txt, newStr));
- return counter;
- }
-}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
index fee7dee9574..599a21cb0a4 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringView.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -1,20 +1,15 @@
package org.jabref.gui;
import javafx.fxml.FXML;
-import javafx.scene.control.Button;
-import javafx.scene.control.CheckBox;
+import javafx.scene.control.ButtonType;
import javafx.scene.control.DialogPane;
import javafx.scene.control.TextField;
-import javafx.scene.control.ToggleGroup;
import javafx.stage.Stage;
-import org.jabref.gui.undo.NamedCompound;
-import org.jabref.gui.undo.UndoableFieldChange;
import org.jabref.gui.util.BaseDialog;
+import org.jabref.gui.util.ControlHelper;
import org.jabref.gui.util.IconValidationDecorator;
import org.jabref.logic.l10n.Localization;
-import org.jabref.model.database.BibDatabase;
-import org.jabref.model.entry.BibEntry;
import com.airhacks.afterburner.views.ViewLoader;
import de.saxsys.mvvmfx.utils.validation.visualization.ControlsFxVisualizer;
@@ -22,33 +17,23 @@
public class ReplaceStringView extends BaseDialog
{
- @FXML public ToggleGroup RadioGroup;
- @FXML public Button CancelButton;
- @FXML public Button ReplaceButton;
- @FXML private TextField LimitFieldInput;
- @FXML private TextField FindField;
- @FXML private TextField ReplaceField;
- @FXML private CheckBox checkLimit;
+ @FXML private ButtonType replaceButton;
+ @FXML private TextField limitFieldInput;
+ @FXML private TextField findField;
+ @FXML private TextField replaceField;
@FXML private DialogPane pane;
- private boolean AllFieldReplace;
+ private boolean allFieldReplace;
private boolean selOnly;
- private String findString;
- private String replaceString;
- private String[] fieldStrings;
- private BibDatabase database;
- private boolean exitSignal;
private BasePanel panel;
- private Stage st;
+ private Stage stage;
private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer();
- public ReplaceStringView(BibDatabase bibDatabase, BasePanel basePanel) {
+ public ReplaceStringView(BasePanel basePanel) {
this.setTitle(Localization.lang("Replace String"));
- database = bibDatabase;
- AllFieldReplace = true;
- exitSignal = false;
+ allFieldReplace = true;
selOnly = false;
panel = basePanel;
@@ -56,52 +41,38 @@ public ReplaceStringView(BibDatabase bibDatabase, BasePanel basePanel) {
.load()
.setAsDialogPane(this);
- st = (Stage) this.pane.getScene().getWindow();
- st.setOnCloseRequest(event -> st.close());
+ stage = (Stage) this.pane.getScene().getWindow();
+ ControlHelper.setAction(replaceButton, getDialogPane(), event -> buttonReplace());
}
@FXML
public void initialize() {
visualizer.setDecoration(new IconValidationDecorator());
- LimitFieldInput.setEditable(true);
- FindField.setEditable(true);
- ReplaceField.setEditable(true);
- checkLimit.setSelected(false);
}
- /**
- * FXML Message handler
- */
@FXML
public void buttonReplace() {
- findString = FindField.getText();
- replaceString = ReplaceField.getText();
- fieldStrings = LimitFieldInput.getText().toLowerCase().split(";");
+ String findString = findField.getText();
+ String replaceString = replaceField.getText();
+ String[] fieldStrings = limitFieldInput.getText().toLowerCase().split(";");
if ("".equals(findString))
{
- exitSignal = true;
- st.close();
+ stage.close();
return;
}
- replace();
- exitSignal = true;
- st.close();
- }
-
- @FXML
- public void buttonCancel() {
- exitSignal = true;
- st.close();
+ ReplaceStringViewModel viewModel = new ReplaceStringViewModel(panel, fieldStrings, findString, replaceString, selOnly, allFieldReplace);
+ viewModel.replace();
+ stage.close();
}
@FXML
public void radioAll() {
- AllFieldReplace = true;
+ allFieldReplace = true;
}
@FXML
public void radioLimit() {
- AllFieldReplace = false;
+ allFieldReplace = false;
}
@FXML
@@ -109,76 +80,4 @@ public void selectOnly() {
selOnly = !selOnly;
}
- public boolean isExit() {
- return this.exitSignal;
- }
-
- /**
- * General replacement, same as Action:Replace_All in BasePanel.java
- * Rep check: BasePanel == null
- * @return : replace count
- */
- public int replace() {
- final NamedCompound ce = new NamedCompound(Localization.lang("Replace string"));
- int counter = 0;
- if (this.panel == null)
- return 0;
- if (this.selOnly) {
- for (BibEntry bibEntry: this.panel.getSelectedEntries())
- {
- counter += replaceItem(bibEntry, ce);
- }
- }
- else {
- for (BibEntry bibEntry: this.database.getEntries())
- {
- counter += replaceItem(bibEntry, ce);
- }
- }
- return counter;
- }
-
- /**
- * Does the actual operation on a Bibtex entry based on the
- * settings specified in this same dialog. Returns the number of
- * occurences replaced.
- * Copied and Adapted from org.jabref.gui.ReplaceStringDialog.java
- */
- public int replaceItem(BibEntry be, NamedCompound ce) {
- int counter = 0;
- if (this.AllFieldReplace) {
- for (String s : be.getFieldNames()) {
- counter += replaceField(be, s, ce);
- }
- } else {
- for (String fld : fieldStrings) {
- counter += replaceField(be, fld, ce);
- }
- }
- return counter;
- }
-
- private int replaceField(BibEntry be, String fieldname, NamedCompound ce) {
- if (!be.hasField(fieldname)) {
- return 0;
- }
- String txt = be.getField(fieldname).get();
- StringBuilder sb = new StringBuilder();
- int ind;
- int piv = 0;
- int counter = 0;
- int len1 = this.findString.length();
- while ((ind = txt.indexOf(this.findString, piv)) >= 0) {
- counter++;
- sb.append(txt, piv, ind); // Text leading up to s1
- sb.append(this.replaceString); // Insert s2
- piv = ind + len1;
- }
- sb.append(txt.substring(piv));
- String newStr = sb.toString();
- be.setField(fieldname, newStr);
- ce.addEdit(new UndoableFieldChange(be, fieldname, txt, newStr));
- return counter;
- }
-
}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
new file mode 100644
index 00000000000..db0d3950c3d
--- /dev/null
+++ b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
@@ -0,0 +1,90 @@
+package org.jabref.gui;
+
+import org.jabref.gui.undo.NamedCompound;
+import org.jabref.gui.undo.UndoableFieldChange;
+import org.jabref.logic.l10n.Localization;
+import org.jabref.model.entry.BibEntry;
+
+public class ReplaceStringViewModel extends AbstractViewModel
+{
+ private boolean allFieldReplace;
+ private boolean selOnly;
+ private String findString;
+ private String replaceString;
+ private String[] fieldStrings;
+ private BasePanel panel;
+
+ public ReplaceStringViewModel(BasePanel basePanel, String[] fields, String find, String replace, Boolean selectedOnly, Boolean allFieldReplace)
+ {
+ this.panel = basePanel;
+ this.fieldStrings = fields;
+ this.findString = find;
+ this.replaceString = replace;
+ this.selOnly = selectedOnly;
+ this.allFieldReplace = allFieldReplace;
+ }
+
+ public int replace() {
+ final NamedCompound compound = new NamedCompound(Localization.lang("Replace string"));
+ int counter = 0;
+ if (this.panel == null)
+ return 0;
+ if (this.selOnly) {
+ for (BibEntry bibEntry: this.panel.getSelectedEntries())
+ {
+ counter += replaceItem(bibEntry, compound);
+ }
+ }
+ else {
+ for (BibEntry bibEntry: this.panel.getDatabase().getEntries())
+ {
+ counter += replaceItem(bibEntry, compound);
+ }
+ }
+ return counter;
+ }
+
+ /**
+ * Does the actual operation on a Bibtex entry based on the
+ * settings specified in this same dialog. Returns the number of
+ * occurences replaced.
+ * Copied and Adapted from org.jabref.gui.ReplaceStringDialog.java
+ */
+ private int replaceItem(BibEntry entry, NamedCompound compound) {
+ int counter = 0;
+ if (this.allFieldReplace) {
+ for (String fieldName : entry.getFieldNames()) {
+ counter += replaceField(entry, fieldName, compound);
+ }
+ } else {
+ for (String espFieldName : fieldStrings) {
+ counter += replaceField(entry, espFieldName, compound);
+ }
+ }
+ return counter;
+ }
+
+ private int replaceField(BibEntry entry, String fieldname, NamedCompound compound) {
+ if (!entry.hasField(fieldname)) {
+ return 0;
+ }
+ String txt = entry.getField(fieldname).get();
+ StringBuilder stringBuilder = new StringBuilder();
+ int ind;
+ int piv = 0;
+ int counter = 0;
+ int len1 = this.findString.length();
+ while ((ind = txt.indexOf(this.findString, piv)) >= 0) {
+ counter++;
+ stringBuilder.append(txt, piv, ind); // Text leading up to s1
+ stringBuilder.append(this.replaceString); // Insert s2
+ piv = ind + len1;
+ }
+ stringBuilder.append(txt.substring(piv));
+ String newStr = stringBuilder.toString();
+ entry.setField(fieldname, newStr);
+ compound.addEdit(new UndoableFieldChange(entry, fieldname, txt, newStr));
+ return counter;
+ }
+
+}
From d4f00adc81898061c56db72bd19c406029be22e1 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Tue, 7 Aug 2018 20:24:50 +0800
Subject: [PATCH 05/17] ReplaceStringMVVMPattern
---
.../java/org/jabref/gui/ReplaceString.fxml | 12 ++---
.../org/jabref/gui/ReplaceStringView.java | 48 ++++++-----------
.../jabref/gui/ReplaceStringViewModel.java | 51 ++++++++++++++-----
3 files changed, 60 insertions(+), 51 deletions(-)
diff --git a/src/main/java/org/jabref/gui/ReplaceString.fxml b/src/main/java/org/jabref/gui/ReplaceString.fxml
index b44b13b6268..6641a64c071 100644
--- a/src/main/java/org/jabref/gui/ReplaceString.fxml
+++ b/src/main/java/org/jabref/gui/ReplaceString.fxml
@@ -4,7 +4,7 @@
+ fx:controller="org.jabref.gui.ReplaceStringView">
@@ -35,16 +35,16 @@
-
-
+
+
+ text="Limit to Fields:" toggleGroup="$radioGroup"/>
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
index 599a21cb0a4..08bcf5708b2 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringView.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -2,9 +2,9 @@
import javafx.fxml.FXML;
import javafx.scene.control.ButtonType;
-import javafx.scene.control.DialogPane;
+import javafx.scene.control.CheckBox;
+import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
-import javafx.stage.Stage;
import org.jabref.gui.util.BaseDialog;
import org.jabref.gui.util.ControlHelper;
@@ -17,67 +17,49 @@
public class ReplaceStringView extends BaseDialog
{
+ @FXML private RadioButton allReplace;
+ @FXML private CheckBox selectFieldOnly;
@FXML private ButtonType replaceButton;
@FXML private TextField limitFieldInput;
@FXML private TextField findField;
@FXML private TextField replaceField;
- @FXML private DialogPane pane;
- private boolean allFieldReplace;
- private boolean selOnly;
- private BasePanel panel;
- private Stage stage;
+ private ReplaceStringViewModel viewModel;
private final ControlsFxVisualizer visualizer = new ControlsFxVisualizer();
public ReplaceStringView(BasePanel basePanel) {
this.setTitle(Localization.lang("Replace String"));
- allFieldReplace = true;
- selOnly = false;
- panel = basePanel;
+ viewModel = new ReplaceStringViewModel(basePanel);
ViewLoader.view(this)
.load()
.setAsDialogPane(this);
- stage = (Stage) this.pane.getScene().getWindow();
ControlHelper.setAction(replaceButton, getDialogPane(), event -> buttonReplace());
}
@FXML
public void initialize() {
visualizer.setDecoration(new IconValidationDecorator());
+
+ viewModel.getFindStringProperty().bind(findField.textProperty());
+ viewModel.getReplaceStringProperty().bind(replaceField.textProperty());
+ viewModel.getFieldStringProperty().bind(limitFieldInput.textProperty());
+ viewModel.selectOnlyProperty().bind(selectFieldOnly.selectedProperty());
+ viewModel.allFieldReplaceProperty().bind(allReplace.selectedProperty());
}
@FXML
- public void buttonReplace() {
+ private void buttonReplace() {
String findString = findField.getText();
- String replaceString = replaceField.getText();
- String[] fieldStrings = limitFieldInput.getText().toLowerCase().split(";");
if ("".equals(findString))
{
- stage.close();
+ this.close();
return;
}
- ReplaceStringViewModel viewModel = new ReplaceStringViewModel(panel, fieldStrings, findString, replaceString, selOnly, allFieldReplace);
viewModel.replace();
- stage.close();
- }
-
- @FXML
- public void radioAll() {
- allFieldReplace = true;
+ this.close();
}
-
- @FXML
- public void radioLimit() {
- allFieldReplace = false;
- }
-
- @FXML
- public void selectOnly() {
- selOnly = !selOnly;
- }
-
}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
index db0d3950c3d..acde33ee620 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
@@ -1,5 +1,10 @@
package org.jabref.gui;
+import javafx.beans.property.BooleanProperty;
+import javafx.beans.property.SimpleBooleanProperty;
+import javafx.beans.property.SimpleStringProperty;
+import javafx.beans.property.StringProperty;
+
import org.jabref.gui.undo.NamedCompound;
import org.jabref.gui.undo.UndoableFieldChange;
import org.jabref.logic.l10n.Localization;
@@ -8,38 +13,41 @@
public class ReplaceStringViewModel extends AbstractViewModel
{
private boolean allFieldReplace;
- private boolean selOnly;
private String findString;
private String replaceString;
private String[] fieldStrings;
private BasePanel panel;
- public ReplaceStringViewModel(BasePanel basePanel, String[] fields, String find, String replace, Boolean selectedOnly, Boolean allFieldReplace)
+ private StringProperty findStringProperty = new SimpleStringProperty();
+ private StringProperty replaceStringProperty = new SimpleStringProperty();
+ private StringProperty fieldStringProperty = new SimpleStringProperty();
+ private BooleanProperty allFieldReplaceProperty = new SimpleBooleanProperty();
+ private BooleanProperty selectOnlyProperty = new SimpleBooleanProperty();
+
+
+ public ReplaceStringViewModel(BasePanel basePanel)
{
this.panel = basePanel;
- this.fieldStrings = fields;
- this.findString = find;
- this.replaceString = replace;
- this.selOnly = selectedOnly;
- this.allFieldReplace = allFieldReplace;
}
public int replace() {
+ findString = findStringProperty.getValue();
+ replaceString = replaceStringProperty.getValue();
+ fieldStrings = fieldStringProperty.getValue().split(";");
+ boolean selOnly = selectOnlyProperty.getValue();
+ allFieldReplace = allFieldReplaceProperty.getValue();
+
final NamedCompound compound = new NamedCompound(Localization.lang("Replace string"));
int counter = 0;
if (this.panel == null)
return 0;
- if (this.selOnly) {
+ if (selOnly) {
for (BibEntry bibEntry: this.panel.getSelectedEntries())
- {
counter += replaceItem(bibEntry, compound);
- }
}
else {
for (BibEntry bibEntry: this.panel.getDatabase().getEntries())
- {
counter += replaceItem(bibEntry, compound);
- }
}
return counter;
}
@@ -87,4 +95,23 @@ private int replaceField(BibEntry entry, String fieldname, NamedCompound compoun
return counter;
}
+ public BooleanProperty allFieldReplaceProperty() {
+ return allFieldReplaceProperty;
+ }
+
+ public BooleanProperty selectOnlyProperty() {
+ return selectOnlyProperty;
+ }
+
+ public StringProperty getFieldStringProperty() {
+ return fieldStringProperty;
+ }
+
+ public StringProperty getFindStringProperty() {
+ return findStringProperty;
+ }
+
+ public StringProperty getReplaceStringProperty() {
+ return replaceStringProperty;
+ }
}
From 91420f2ae2a1b7b67619c359f96c5fe5386341e5 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Wed, 8 Aug 2018 18:44:14 +0800
Subject: [PATCH 06/17] Fix#3861ReplaceString_ContributeLog
---
CHANGELOG.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 61cf25bc5be..742ad95a53b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,6 +24,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- We changed the default keyboard shortcuts for moving between entries when the entry editor is active to ̀alt + up/down.
- Opening a new file now prompts the directory of the currently selected file, instead of the directory of the last opened file.
- Window state is saved on close and restored on start.
+- We added JavaFX Dialog to change Replace String dialog from swing to JavaFX, which is part of the issue[#3861](https://github.com/JabRef/jabref/issues/3861), with removing the old dialog logic.
@@ -78,6 +79,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- Set/clear/append/rename fields: available through Edit menu
- Manage keywords: available through Edit menu
- Copy linked files to folder: available through File menu
+- We removed the old logic of Replace String dialog (one file), instead, add JavaFX style dialog to cover the old function.
From 3300aa5725a2983fabc2902d8e8800dd07cb2bb6 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Wed, 8 Aug 2018 19:25:04 +0800
Subject: [PATCH 07/17] Fix#3861ReplaceString_Improvements
---
.../org/jabref/gui/ReplaceStringView.java | 6 +++---
.../jabref/gui/ReplaceStringViewModel.java | 21 ++++++++++---------
2 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
index 08bcf5708b2..6f75f150f92 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringView.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -44,9 +44,9 @@ public ReplaceStringView(BasePanel basePanel) {
public void initialize() {
visualizer.setDecoration(new IconValidationDecorator());
- viewModel.getFindStringProperty().bind(findField.textProperty());
- viewModel.getReplaceStringProperty().bind(replaceField.textProperty());
- viewModel.getFieldStringProperty().bind(limitFieldInput.textProperty());
+ viewModel.FindStringProperty().bind(findField.textProperty());
+ viewModel.ReplaceStringProperty().bind(replaceField.textProperty());
+ viewModel.FieldStringProperty().bind(limitFieldInput.textProperty());
viewModel.selectOnlyProperty().bind(selectFieldOnly.selectedProperty());
viewModel.allFieldReplaceProperty().bind(allReplace.selectedProperty());
}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
index acde33ee620..f5e9bc1782f 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
@@ -1,5 +1,7 @@
package org.jabref.gui;
+import java.util.Objects;
+
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleStringProperty;
@@ -27,6 +29,7 @@ public class ReplaceStringViewModel extends AbstractViewModel
public ReplaceStringViewModel(BasePanel basePanel)
{
+ Objects.requireNonNull(basePanel);
this.panel = basePanel;
}
@@ -39,8 +42,6 @@ public int replace() {
final NamedCompound compound = new NamedCompound(Localization.lang("Replace string"));
int counter = 0;
- if (this.panel == null)
- return 0;
if (selOnly) {
for (BibEntry bibEntry: this.panel.getSelectedEntries())
counter += replaceItem(bibEntry, compound);
@@ -72,11 +73,11 @@ private int replaceItem(BibEntry entry, NamedCompound compound) {
return counter;
}
- private int replaceField(BibEntry entry, String fieldname, NamedCompound compound) {
- if (!entry.hasField(fieldname)) {
+ private int replaceField(BibEntry entry, String fieldName, NamedCompound compound) {
+ if (!entry.hasField(fieldName)) {
return 0;
}
- String txt = entry.getField(fieldname).get();
+ String txt = entry.getField(fieldName).get();
StringBuilder stringBuilder = new StringBuilder();
int ind;
int piv = 0;
@@ -90,8 +91,8 @@ private int replaceField(BibEntry entry, String fieldname, NamedCompound compoun
}
stringBuilder.append(txt.substring(piv));
String newStr = stringBuilder.toString();
- entry.setField(fieldname, newStr);
- compound.addEdit(new UndoableFieldChange(entry, fieldname, txt, newStr));
+ entry.setField(fieldName, newStr);
+ compound.addEdit(new UndoableFieldChange(entry, fieldName, txt, newStr));
return counter;
}
@@ -103,15 +104,15 @@ public BooleanProperty selectOnlyProperty() {
return selectOnlyProperty;
}
- public StringProperty getFieldStringProperty() {
+ public StringProperty FieldStringProperty() {
return fieldStringProperty;
}
- public StringProperty getFindStringProperty() {
+ public StringProperty FindStringProperty() {
return findStringProperty;
}
- public StringProperty getReplaceStringProperty() {
+ public StringProperty ReplaceStringProperty() {
return replaceStringProperty;
}
}
From 3c89dee4425d420d4ae934c41ae4c2a896bc9eb4 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Wed, 8 Aug 2018 19:50:21 +0800
Subject: [PATCH 08/17] Fix#3861ReplaceString_checkStyle
---
src/main/java/org/jabref/gui/ReplaceStringView.java | 6 +++---
src/main/java/org/jabref/gui/ReplaceStringViewModel.java | 6 +++---
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/main/java/org/jabref/gui/ReplaceStringView.java b/src/main/java/org/jabref/gui/ReplaceStringView.java
index 6f75f150f92..64c6950b024 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringView.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringView.java
@@ -44,9 +44,9 @@ public ReplaceStringView(BasePanel basePanel) {
public void initialize() {
visualizer.setDecoration(new IconValidationDecorator());
- viewModel.FindStringProperty().bind(findField.textProperty());
- viewModel.ReplaceStringProperty().bind(replaceField.textProperty());
- viewModel.FieldStringProperty().bind(limitFieldInput.textProperty());
+ viewModel.findStringProperty().bind(findField.textProperty());
+ viewModel.replaceStringProperty().bind(replaceField.textProperty());
+ viewModel.fieldStringProperty().bind(limitFieldInput.textProperty());
viewModel.selectOnlyProperty().bind(selectFieldOnly.selectedProperty());
viewModel.allFieldReplaceProperty().bind(allReplace.selectedProperty());
}
diff --git a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
index f5e9bc1782f..624fbd4b43e 100644
--- a/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
+++ b/src/main/java/org/jabref/gui/ReplaceStringViewModel.java
@@ -104,15 +104,15 @@ public BooleanProperty selectOnlyProperty() {
return selectOnlyProperty;
}
- public StringProperty FieldStringProperty() {
+ public StringProperty fieldStringProperty() {
return fieldStringProperty;
}
- public StringProperty FindStringProperty() {
+ public StringProperty findStringProperty() {
return findStringProperty;
}
- public StringProperty ReplaceStringProperty() {
+ public StringProperty replaceStringProperty() {
return replaceStringProperty;
}
}
From 6dad44fcec7b1ac42b7efaa33c7235285cf9c5ca Mon Sep 17 00:00:00 2001
From: Tobias Diez
Date: Wed, 8 Aug 2018 18:38:30 +0200
Subject: [PATCH 09/17] Remove changelog entries
---
CHANGELOG.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 742ad95a53b..61cf25bc5be 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,7 +24,6 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- We changed the default keyboard shortcuts for moving between entries when the entry editor is active to ̀alt + up/down.
- Opening a new file now prompts the directory of the currently selected file, instead of the directory of the last opened file.
- Window state is saved on close and restored on start.
-- We added JavaFX Dialog to change Replace String dialog from swing to JavaFX, which is part of the issue[#3861](https://github.com/JabRef/jabref/issues/3861), with removing the old dialog logic.
@@ -79,7 +78,6 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- Set/clear/append/rename fields: available through Edit menu
- Manage keywords: available through Edit menu
- Copy linked files to folder: available through File menu
-- We removed the old logic of Replace String dialog (one file), instead, add JavaFX style dialog to cover the old function.
From cf7d6b8f9a9bbe48dfb4e42e5d24560ca72f3cb6 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Thu, 9 Aug 2018 15:38:31 +0800
Subject: [PATCH 10/17] Fix#3861RS_conflicttest
---
.../org/jabref/gui/ReplaceStringDialog.java | 220 ++++++++++++++++++
1 file changed, 220 insertions(+)
create mode 100644 src/main/java/org/jabref/gui/ReplaceStringDialog.java
diff --git a/src/main/java/org/jabref/gui/ReplaceStringDialog.java b/src/main/java/org/jabref/gui/ReplaceStringDialog.java
new file mode 100644
index 00000000000..4c493260c00
--- /dev/null
+++ b/src/main/java/org/jabref/gui/ReplaceStringDialog.java
@@ -0,0 +1,220 @@
+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.util.Locale;
+
+import javax.swing.AbstractAction;
+import javax.swing.ActionMap;
+import javax.swing.BorderFactory;
+import javax.swing.ButtonGroup;
+import javax.swing.InputMap;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JRadioButton;
+import javax.swing.JTextField;
+
+import org.jabref.Globals;
+import org.jabref.gui.keyboard.KeyBinding;
+import org.jabref.gui.undo.NamedCompound;
+import org.jabref.gui.undo.UndoableFieldChange;
+import org.jabref.logic.l10n.Localization;
+import org.jabref.model.entry.BibEntry;
+
+/**
+ * Dialog for replacing strings.
+ */
+class ReplaceStringDialog extends JabRefDialog {
+
+ private final JTextField fieldsField = new JTextField("", 30);
+ private final JTextField fromField = new JTextField("", 30);
+ private final JTextField toField = new JTextField("", 30);
+
+ private final JCheckBox selOnly = new JCheckBox(Localization.lang("Limit to selected entries"), false);
+ private final JRadioButton allFi = new JRadioButton(Localization.lang("All fields"), true);
+ private final JRadioButton field = new JRadioButton(Localization.lang("Limit to fields") + ":", false);
+ private boolean okPressed;
+ private String[] fieldStrings;
+ private String fromString;
+ private String toString;
+
+
+ public ReplaceStringDialog(JabRefFrame parent) {
+ super(Localization.lang("Replace string"), true, ReplaceStringDialog.class);
+
+ ButtonGroup bg = new ButtonGroup();
+ bg.add(allFi);
+ bg.add(field);
+ ActionListener okListener = e -> {
+ fromString = fromField.getText();
+ toString = toField.getText();
+ if ("".equals(fromString)) {
+ return;
+ }
+ okPressed = true;
+ fieldStrings = fieldsField.getText().toLowerCase(Locale.ROOT).split(";");
+ dispose();
+ };
+ JButton ok = new JButton(Localization.lang("OK"));
+ ok.addActionListener(okListener);
+ toField.addActionListener(okListener);
+ fieldsField.addActionListener(okListener);
+ AbstractAction cancelAction = new AbstractAction() {
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ dispose();
+ }
+ };
+ JButton cancel = new JButton(Localization.lang("Cancel"));
+ cancel.addActionListener(cancelAction);
+
+ // Key bindings:
+ JPanel settings = new JPanel();
+ ActionMap am = settings.getActionMap();
+ InputMap im = settings.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
+ im.put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close");
+ am.put("close", cancelAction);
+
+ // Layout starts here.
+ GridBagLayout gbl = new GridBagLayout();
+ settings.setLayout(gbl);
+ JPanel opt = new JPanel();
+ opt.setLayout(gbl);
+ JPanel main = new JPanel();
+ main.setLayout(gbl);
+
+ settings.setBorder(BorderFactory.createTitledBorder
+ (BorderFactory.createEtchedBorder(),
+ Localization.lang("Replace string")));
+ main.setBorder(BorderFactory.createTitledBorder
+ (BorderFactory.createEtchedBorder(),
+ Localization.lang("Strings")));
+
+ // Settings panel:
+ GridBagConstraints con = new GridBagConstraints();
+ con.fill = GridBagConstraints.HORIZONTAL;
+ con.gridwidth = 2;
+ con.weightx = 0;
+ con.anchor = GridBagConstraints.WEST;
+ con.gridy = 0;
+ con.gridx = 0;
+ con.insets = new Insets(3, 5, 3, 5);
+ gbl.setConstraints(selOnly, con);
+ settings.add(selOnly);
+ con.gridy = 1;
+ con.insets = new Insets(13, 5, 3, 5);
+ gbl.setConstraints(allFi, con);
+ settings.add(allFi);
+ con.gridwidth = 1;
+ con.gridy = 2;
+ con.gridx = 0;
+ con.insets = new Insets(3, 5, 3, 5);
+ gbl.setConstraints(field, con);
+ settings.add(field);
+ con.gridx = 1;
+ con.weightx = 1;
+ gbl.setConstraints(fieldsField, con);
+ settings.add(fieldsField);
+
+ con.weightx = 0;
+ con.gridx = 0;
+ con.gridy = 0;
+ JLabel fl = new JLabel(Localization.lang("Search for") + ":");
+ gbl.setConstraints(fl, con);
+ main.add(fl);
+ con.gridy = 1;
+ JLabel tl = new JLabel(Localization.lang("Replace with") + ":");
+ gbl.setConstraints(tl, con);
+ main.add(tl);
+ con.weightx = 1;
+ con.gridx = 1;
+ con.gridy = 0;
+ gbl.setConstraints(fromField, con);
+ main.add(fromField);
+ con.gridy = 1;
+ gbl.setConstraints(toField, con);
+ main.add(toField);
+
+ // Option buttons:
+ con.gridx = GridBagConstraints.RELATIVE;
+ con.gridy = GridBagConstraints.RELATIVE;
+ con.weightx = 1;
+ con.gridwidth = 1;
+ con.anchor = GridBagConstraints.EAST;
+ con.fill = GridBagConstraints.NONE;
+ gbl.setConstraints(ok, con);
+ opt.add(ok);
+ con.anchor = GridBagConstraints.WEST;
+ con.gridwidth = GridBagConstraints.REMAINDER;
+ gbl.setConstraints(cancel, con);
+ opt.add(cancel);
+
+ getContentPane().add(main, BorderLayout.NORTH);
+ getContentPane().add(settings, BorderLayout.CENTER);
+ getContentPane().add(opt, BorderLayout.SOUTH);
+
+ pack();
+ }
+
+ public boolean okPressed() {
+ return okPressed;
+ }
+
+ private boolean allFields() {
+ return allFi.isSelected();
+ }
+
+ public boolean selOnly() {
+ return selOnly.isSelected();
+ }
+
+ /**
+ * Does the actual operation on a Bibtex entry based on the
+ * settings specified in this same dialog. Returns the number of
+ * occurences replaced.
+ */
+ public int replace(BibEntry be, NamedCompound ce) {
+ int counter = 0;
+ if (allFields()) {
+ for (String s : be.getFieldNames()) {
+ counter += replaceField(be, s, ce);
+ }
+ } else {
+ for (String fld : fieldStrings) {
+ counter += replaceField(be, fld, ce);
+ }
+ }
+ return counter;
+ }
+
+ private int replaceField(BibEntry be, String fieldname, NamedCompound ce) {
+ if (!be.hasField(fieldname)) {
+ return 0;
+ }
+ String txt = be.getField(fieldname).get();
+ StringBuilder sb = new StringBuilder();
+ int ind;
+ int piv = 0;
+ int counter = 0;
+ int len1 = fromString.length();
+ while ((ind = txt.indexOf(fromString, piv)) >= 0) {
+ counter++;
+ sb.append(txt.substring(piv, ind)); // Text leading up to s1
+ sb.append(toString); // Insert s2
+ piv = ind + len1;
+ }
+ sb.append(txt.substring(piv));
+ String newStr = sb.toString();
+ be.setField(fieldname, newStr);
+ ce.addEdit(new UndoableFieldChange(be, fieldname, txt, newStr));
+ return counter;
+ }
+}
From 609a0658f0348f32ecb9ca875626dd6d069b052d Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Thu, 9 Aug 2018 15:43:00 +0800
Subject: [PATCH 11/17] Fix#3861RS_conflicttest
---
CHANGELOG.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 742ad95a53b..7461d2a1a55 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,7 +24,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- We changed the default keyboard shortcuts for moving between entries when the entry editor is active to ̀alt + up/down.
- Opening a new file now prompts the directory of the currently selected file, instead of the directory of the last opened file.
- Window state is saved on close and restored on start.
-- We added JavaFX Dialog to change Replace String dialog from swing to JavaFX, which is part of the issue[#3861](https://github.com/JabRef/jabref/issues/3861), with removing the old dialog logic.
+
@@ -79,7 +79,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- Set/clear/append/rename fields: available through Edit menu
- Manage keywords: available through Edit menu
- Copy linked files to folder: available through File menu
-- We removed the old logic of Replace String dialog (one file), instead, add JavaFX style dialog to cover the old function.
+
From df86b62881290d21f5515b9eac7f87e931ef752b Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Thu, 9 Aug 2018 16:27:51 +0800
Subject: [PATCH 12/17] Fix#3861ReplaceString_solveConflict
---
.../org/jabref/gui/ReplaceStringDialog.java | 220 ------------------
1 file changed, 220 deletions(-)
delete mode 100644 src/main/java/org/jabref/gui/ReplaceStringDialog.java
diff --git a/src/main/java/org/jabref/gui/ReplaceStringDialog.java b/src/main/java/org/jabref/gui/ReplaceStringDialog.java
deleted file mode 100644
index 4c493260c00..00000000000
--- a/src/main/java/org/jabref/gui/ReplaceStringDialog.java
+++ /dev/null
@@ -1,220 +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.util.Locale;
-
-import javax.swing.AbstractAction;
-import javax.swing.ActionMap;
-import javax.swing.BorderFactory;
-import javax.swing.ButtonGroup;
-import javax.swing.InputMap;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JComponent;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JRadioButton;
-import javax.swing.JTextField;
-
-import org.jabref.Globals;
-import org.jabref.gui.keyboard.KeyBinding;
-import org.jabref.gui.undo.NamedCompound;
-import org.jabref.gui.undo.UndoableFieldChange;
-import org.jabref.logic.l10n.Localization;
-import org.jabref.model.entry.BibEntry;
-
-/**
- * Dialog for replacing strings.
- */
-class ReplaceStringDialog extends JabRefDialog {
-
- private final JTextField fieldsField = new JTextField("", 30);
- private final JTextField fromField = new JTextField("", 30);
- private final JTextField toField = new JTextField("", 30);
-
- private final JCheckBox selOnly = new JCheckBox(Localization.lang("Limit to selected entries"), false);
- private final JRadioButton allFi = new JRadioButton(Localization.lang("All fields"), true);
- private final JRadioButton field = new JRadioButton(Localization.lang("Limit to fields") + ":", false);
- private boolean okPressed;
- private String[] fieldStrings;
- private String fromString;
- private String toString;
-
-
- public ReplaceStringDialog(JabRefFrame parent) {
- super(Localization.lang("Replace string"), true, ReplaceStringDialog.class);
-
- ButtonGroup bg = new ButtonGroup();
- bg.add(allFi);
- bg.add(field);
- ActionListener okListener = e -> {
- fromString = fromField.getText();
- toString = toField.getText();
- if ("".equals(fromString)) {
- return;
- }
- okPressed = true;
- fieldStrings = fieldsField.getText().toLowerCase(Locale.ROOT).split(";");
- dispose();
- };
- JButton ok = new JButton(Localization.lang("OK"));
- ok.addActionListener(okListener);
- toField.addActionListener(okListener);
- fieldsField.addActionListener(okListener);
- AbstractAction cancelAction = new AbstractAction() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- dispose();
- }
- };
- JButton cancel = new JButton(Localization.lang("Cancel"));
- cancel.addActionListener(cancelAction);
-
- // Key bindings:
- JPanel settings = new JPanel();
- ActionMap am = settings.getActionMap();
- InputMap im = settings.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
- im.put(Globals.getKeyPrefs().getKey(KeyBinding.CLOSE), "close");
- am.put("close", cancelAction);
-
- // Layout starts here.
- GridBagLayout gbl = new GridBagLayout();
- settings.setLayout(gbl);
- JPanel opt = new JPanel();
- opt.setLayout(gbl);
- JPanel main = new JPanel();
- main.setLayout(gbl);
-
- settings.setBorder(BorderFactory.createTitledBorder
- (BorderFactory.createEtchedBorder(),
- Localization.lang("Replace string")));
- main.setBorder(BorderFactory.createTitledBorder
- (BorderFactory.createEtchedBorder(),
- Localization.lang("Strings")));
-
- // Settings panel:
- GridBagConstraints con = new GridBagConstraints();
- con.fill = GridBagConstraints.HORIZONTAL;
- con.gridwidth = 2;
- con.weightx = 0;
- con.anchor = GridBagConstraints.WEST;
- con.gridy = 0;
- con.gridx = 0;
- con.insets = new Insets(3, 5, 3, 5);
- gbl.setConstraints(selOnly, con);
- settings.add(selOnly);
- con.gridy = 1;
- con.insets = new Insets(13, 5, 3, 5);
- gbl.setConstraints(allFi, con);
- settings.add(allFi);
- con.gridwidth = 1;
- con.gridy = 2;
- con.gridx = 0;
- con.insets = new Insets(3, 5, 3, 5);
- gbl.setConstraints(field, con);
- settings.add(field);
- con.gridx = 1;
- con.weightx = 1;
- gbl.setConstraints(fieldsField, con);
- settings.add(fieldsField);
-
- con.weightx = 0;
- con.gridx = 0;
- con.gridy = 0;
- JLabel fl = new JLabel(Localization.lang("Search for") + ":");
- gbl.setConstraints(fl, con);
- main.add(fl);
- con.gridy = 1;
- JLabel tl = new JLabel(Localization.lang("Replace with") + ":");
- gbl.setConstraints(tl, con);
- main.add(tl);
- con.weightx = 1;
- con.gridx = 1;
- con.gridy = 0;
- gbl.setConstraints(fromField, con);
- main.add(fromField);
- con.gridy = 1;
- gbl.setConstraints(toField, con);
- main.add(toField);
-
- // Option buttons:
- con.gridx = GridBagConstraints.RELATIVE;
- con.gridy = GridBagConstraints.RELATIVE;
- con.weightx = 1;
- con.gridwidth = 1;
- con.anchor = GridBagConstraints.EAST;
- con.fill = GridBagConstraints.NONE;
- gbl.setConstraints(ok, con);
- opt.add(ok);
- con.anchor = GridBagConstraints.WEST;
- con.gridwidth = GridBagConstraints.REMAINDER;
- gbl.setConstraints(cancel, con);
- opt.add(cancel);
-
- getContentPane().add(main, BorderLayout.NORTH);
- getContentPane().add(settings, BorderLayout.CENTER);
- getContentPane().add(opt, BorderLayout.SOUTH);
-
- pack();
- }
-
- public boolean okPressed() {
- return okPressed;
- }
-
- private boolean allFields() {
- return allFi.isSelected();
- }
-
- public boolean selOnly() {
- return selOnly.isSelected();
- }
-
- /**
- * Does the actual operation on a Bibtex entry based on the
- * settings specified in this same dialog. Returns the number of
- * occurences replaced.
- */
- public int replace(BibEntry be, NamedCompound ce) {
- int counter = 0;
- if (allFields()) {
- for (String s : be.getFieldNames()) {
- counter += replaceField(be, s, ce);
- }
- } else {
- for (String fld : fieldStrings) {
- counter += replaceField(be, fld, ce);
- }
- }
- return counter;
- }
-
- private int replaceField(BibEntry be, String fieldname, NamedCompound ce) {
- if (!be.hasField(fieldname)) {
- return 0;
- }
- String txt = be.getField(fieldname).get();
- StringBuilder sb = new StringBuilder();
- int ind;
- int piv = 0;
- int counter = 0;
- int len1 = fromString.length();
- while ((ind = txt.indexOf(fromString, piv)) >= 0) {
- counter++;
- sb.append(txt.substring(piv, ind)); // Text leading up to s1
- sb.append(toString); // Insert s2
- piv = ind + len1;
- }
- sb.append(txt.substring(piv));
- String newStr = sb.toString();
- be.setField(fieldname, newStr);
- ce.addEdit(new UndoableFieldChange(be, fieldname, txt, newStr));
- return counter;
- }
-}
From d055f98425f05d4e55ee7c23c4b4eccaea0263fd Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Thu, 9 Aug 2018 16:33:46 +0800
Subject: [PATCH 13/17] Fix#ReplaceString_ChangeConflict
---
CHANGELOG.md | 6 ------
1 file changed, 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index eb209c81e27..7461d2a1a55 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -24,10 +24,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- We changed the default keyboard shortcuts for moving between entries when the entry editor is active to ̀alt + up/down.
- Opening a new file now prompts the directory of the currently selected file, instead of the directory of the last opened file.
- Window state is saved on close and restored on start.
-<<<<<<< HEAD
-=======
->>>>>>> 6dad44fcec7b1ac42b7efaa33c7235285cf9c5ca
@@ -82,10 +79,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- Set/clear/append/rename fields: available through Edit menu
- Manage keywords: available through Edit menu
- Copy linked files to folder: available through File menu
-<<<<<<< HEAD
-=======
->>>>>>> 6dad44fcec7b1ac42b7efaa33c7235285cf9c5ca
From 48a4c318a73a872ac71d44b50d09da25bb06279c Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sat, 11 Aug 2018 14:30:39 +0800
Subject: [PATCH 14/17] Fix#3861_build
---
src/main/java/org/jabref/gui/ReplaceString.fxml | 12 ++++++------
src/main/resources/l10n/JabRef_en.properties | 4 ++++
2 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/src/main/java/org/jabref/gui/ReplaceString.fxml b/src/main/java/org/jabref/gui/ReplaceString.fxml
index 6641a64c071..39cf4fddfa5 100644
--- a/src/main/java/org/jabref/gui/ReplaceString.fxml
+++ b/src/main/java/org/jabref/gui/ReplaceString.fxml
@@ -29,22 +29,22 @@
-
+
-
+
+ text="%Limit to Selected Entries"/>
+ selected="true" text="%All Field Replace">
+ text="%Limit to Fields" toggleGroup="$radioGroup"/>
@@ -53,6 +53,6 @@
-
+
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index 8fee34e4680..1ecc4adb9eb 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -897,6 +897,10 @@ Removed\ string=Removed string
Renamed\ string=Renamed string
Replace=Replace
+Replace\ With\:=Replace With:
+Limit\ to\ Selected\ Entries=Limit to Selected Entries
+Limit\ to\ Fields=Limit to Fields
+All\ Field\ Replace=All Field Replace
Replace\ (regular\ expression)=Replace (regular expression)
From 6c65676f7b5eb567d3027c75f9209f99b077764b Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sat, 11 Aug 2018 14:45:52 +0800
Subject: [PATCH 15/17] Fix#3861_build_addneeded/deleteobsoleteproperties
---
src/main/resources/l10n/JabRef_en.properties | 20 ++------------------
1 file changed, 2 insertions(+), 18 deletions(-)
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index 1ecc4adb9eb..c8916d12c33 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -71,8 +71,6 @@ Advanced=Advanced
All\ entries=All entries
All\ entries\ of\ this\ type\ will\ be\ declared\ typeless.\ Continue?=All entries of this type will be declared typeless. Continue?
-All\ fields=All fields
-
Always\ reformat\ BIB\ file\ on\ save\ and\ export=Always reformat BIB file on save and export
and=and
@@ -623,10 +621,6 @@ Leave\ file\ in\ its\ current\ directory=Leave file in its current directory
Left=Left
-Limit\ to\ fields=Limit to fields
-
-Limit\ to\ selected\ entries=Limit to selected entries
-
Link=Link
Link\ local\ file=Link local file
Link\ to\ file\ %0=Link to file %0
@@ -728,8 +722,6 @@ Nothing\ to\ redo=Nothing to redo
Nothing\ to\ undo=Nothing to undo
-occurrences=occurrences
-
OK=OK
One\ or\ more\ keys\ will\ be\ overwritten.\ Continue?=One or more keys will be overwritten. Continue?
@@ -901,18 +893,15 @@ Replace\ With\:=Replace With:
Limit\ to\ Selected\ Entries=Limit to Selected Entries
Limit\ to\ Fields=Limit to Fields
All\ Field\ Replace=All Field Replace
+Find\:=Find:
Replace\ (regular\ expression)=Replace (regular expression)
-Replace\ string=Replace string
-
-Replace\ with=Replace with
+Replace\ String=Replace String
Replace\ Unicode\ ligatures=Replace Unicode ligatures
Replaces\ Unicode\ ligatures\ with\ their\ expanded\ form=Replaces Unicode ligatures with their expanded form
-Replaced=Replaced
-
Required\ fields=Required fields
Reset\ all=Reset all
@@ -956,8 +945,6 @@ Search=Search
Search\ expression=Search expression
-Search\ for=Search for
-
Searching\ for\ duplicates...=Searching for duplicates...
Searching\ for\ files=Searching for files
@@ -1033,8 +1020,6 @@ Status=Status
Stop=Stop
-Strings=Strings
-
Strings\ for\ library=Strings for library
Sublibrary\ from\ AUX=Sublibrary from AUX
@@ -1619,7 +1604,6 @@ Please\ move\ the\ file\ manually\ and\ link\ in\ place.=Please move the file ma
Could\ not\ connect\ to\ %0=Could not connect to %0
Warning\:\ %0\ out\ of\ %1\ entries\ have\ undefined\ title.=Warning: %0 out of %1 entries have undefined title.
Warning\:\ %0\ out\ of\ %1\ entries\ have\ undefined\ BibTeX\ key.=Warning: %0 out of %1 entries have undefined BibTeX key.
-occurrence=occurrence
Added\ new\ '%0'\ entry.=Added new '%0' entry.
Multiple\ entries\ selected.\ Do\ you\ want\ to\ change\ the\ type\ of\ all\ these\ to\ '%0'?=Multiple entries selected. Do you want to change the type of all these to '%0'?
Changed\ type\ to\ '%0'\ for=Changed type to '%0' for
From 45152d57ec9bac46d1d409a39191dd8806523cd3 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sat, 11 Aug 2018 14:51:56 +0800
Subject: [PATCH 16/17] Fix#3861_build_addneeded/deleteobsoleteproperties2
---
src/main/resources/l10n/JabRef_en.properties | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index c8916d12c33..77ac5aafa9d 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -898,6 +898,7 @@ Find\:=Find:
Replace\ (regular\ expression)=Replace (regular expression)
Replace\ String=Replace String
+Replace\ string=Replace string
Replace\ Unicode\ ligatures=Replace Unicode ligatures
Replaces\ Unicode\ ligatures\ with\ their\ expanded\ form=Replaces Unicode ligatures with their expanded form
From b2544877c0898de1532f7387e0672c1eac3492b5 Mon Sep 17 00:00:00 2001
From: marisuki <1539678784@qq.com>
Date: Sat, 11 Aug 2018 18:46:23 +0800
Subject: [PATCH 17/17] Fix
---
src/main/java/org/jabref/gui/ReplaceString.fxml | 2 +-
src/main/resources/l10n/JabRef_en.properties | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/jabref/gui/ReplaceString.fxml b/src/main/java/org/jabref/gui/ReplaceString.fxml
index 39cf4fddfa5..3bf75a8f8a2 100644
--- a/src/main/java/org/jabref/gui/ReplaceString.fxml
+++ b/src/main/java/org/jabref/gui/ReplaceString.fxml
@@ -28,7 +28,7 @@
-
+
diff --git a/src/main/resources/l10n/JabRef_en.properties b/src/main/resources/l10n/JabRef_en.properties
index 77ac5aafa9d..6c7e4ca7907 100644
--- a/src/main/resources/l10n/JabRef_en.properties
+++ b/src/main/resources/l10n/JabRef_en.properties
@@ -894,6 +894,7 @@ Limit\ to\ Selected\ Entries=Limit to Selected Entries
Limit\ to\ Fields=Limit to Fields
All\ Field\ Replace=All Field Replace
Find\:=Find:
+Find\ and\ Replace=Find and Replace
Replace\ (regular\ expression)=Replace (regular expression)