diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5b2f1b66664..119231147eb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -65,6 +65,7 @@ We refer to [GitHub issues](https://github.com/JabRef/jabref/issues) by using `#
- The Medline fetcher now normalizes the author names according to the BibTeX-Standard [#4345](https://github.com/JabRef/jabref/issues/4345)
- We added an option on the Linked File Viewer to rename the attached file of an entry directly on the JabRef. [#4844](https://github.com/JabRef/jabref/issues/4844)
- We added an option in the preference dialog box that allows user to enable helpful tooltips.[#3599](https://github.com/JabRef/jabref/issues/3599)
+- We moved the dropdown menu for selecting the push-application from the toolbar into the tools menu.[#674](https://github.com/JabRef/jabref/issues/674)
### Fixed
diff --git a/src/main/java/org/jabref/gui/JabRefFrame.java b/src/main/java/org/jabref/gui/JabRefFrame.java
index e70d9429b6d..b98aa237784 100644
--- a/src/main/java/org/jabref/gui/JabRefFrame.java
+++ b/src/main/java/org/jabref/gui/JabRefFrame.java
@@ -28,13 +28,16 @@
import javafx.scene.control.ButtonType;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
+import javafx.scene.control.MenuItem;
import javafx.scene.control.ProgressBar;
+import javafx.scene.control.RadioMenuItem;
import javafx.scene.control.Separator;
import javafx.scene.control.SeparatorMenuItem;
import javafx.scene.control.SplitPane;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextInputControl;
+import javafx.scene.control.ToggleGroup;
import javafx.scene.control.ToolBar;
import javafx.scene.control.Tooltip;
import javafx.scene.input.DataFormat;
@@ -95,7 +98,9 @@
import org.jabref.gui.metadata.PreambleEditor;
import org.jabref.gui.preferences.ShowPreferencesAction;
import org.jabref.gui.protectedterms.ManageProtectedTermsAction;
+import org.jabref.gui.push.PushToApplication;
import org.jabref.gui.push.PushToApplicationAction;
+import org.jabref.gui.push.PushToApplicationMenuAction;
import org.jabref.gui.push.PushToApplicationsManager;
import org.jabref.gui.search.GlobalSearchBar;
import org.jabref.gui.shared.ConnectToSharedDatabaseCommand;
@@ -154,7 +159,7 @@ public class JabRefFrame extends BorderPane {
private final CountingUndoManager undoManager;
private SidePaneManager sidePaneManager;
private TabPane tabbedPane;
- private PushToApplicationsManager pushApplications;
+ private PushToApplicationsManager pushToApplicationsManager;
private final DialogService dialogService;
private SidePane sidePane;
@@ -449,7 +454,7 @@ public boolean quit() {
private void initLayout() {
setProgressBarVisible(false);
- pushApplications = new PushToApplicationsManager(this.getDialogService());
+ pushToApplicationsManager = new PushToApplicationsManager(dialogService, stateManager);
BorderPane head = new BorderPane();
head.setTop(createMenu());
@@ -520,7 +525,10 @@ private Node createToolbar() {
leftSide.prefWidthProperty().bind(sidePane.widthProperty());
leftSide.maxWidthProperty().bind(sidePane.widthProperty());
- PushToApplicationAction pushToApplicationAction = new PushToApplicationAction(stateManager, this.getPushApplications(), this.getDialogService());
+ final PushToApplicationAction pushToApplicationAction = getPushToApplicationsManager().getPushToApplicationAction();
+ final Button pushToApplicationButton = factory.createIconButton(pushToApplicationAction.getActionInformation(), pushToApplicationAction);
+ pushToApplicationsManager.setToolBarButton(pushToApplicationButton);
+
HBox rightSide = new HBox(
factory.createIconButton(StandardActions.NEW_ARTICLE, new NewEntryAction(this, BiblatexEntryTypes.ARTICLE, dialogService, Globals.prefs, stateManager)),
factory.createIconButton(StandardActions.DELETE_ENTRY, new OldDatabaseCommandWrapper(Actions.DELETE, this, stateManager)),
@@ -531,7 +539,7 @@ private Node createToolbar() {
factory.createIconButton(StandardActions.COPY, new OldDatabaseCommandWrapper(Actions.COPY, this, stateManager)),
factory.createIconButton(StandardActions.PASTE, new OldDatabaseCommandWrapper(Actions.PASTE, this, stateManager)),
new Separator(Orientation.VERTICAL),
- factory.createIconButton(pushToApplicationAction.getActionInformation(), pushToApplicationAction),
+ pushToApplicationButton,
factory.createIconButton(StandardActions.GENERATE_CITE_KEYS, new OldDatabaseCommandWrapper(Actions.MAKE_KEY, this, stateManager)),
factory.createIconButton(StandardActions.CLEANUP_ENTRIES, new OldDatabaseCommandWrapper(Actions.CLEANUP, this, stateManager)),
new Separator(Orientation.VERTICAL),
@@ -759,7 +767,27 @@ private MenuBar createMenu() {
factory.createMenuItem(StandardActions.SET_FILE_LINKS, new AutoLinkFilesAction(this, prefs, stateManager, undoManager))
);
- final PushToApplicationAction pushToApplicationAction = new PushToApplicationAction(stateManager, this.getPushApplications(), this.getDialogService());
+ final PushToApplicationAction pushToApplicationAction = pushToApplicationsManager.getPushToApplicationAction();
+ final MenuItem pushToApplicationMenuItem = factory.createMenuItem(pushToApplicationAction.getActionInformation(), pushToApplicationAction);
+ pushToApplicationsManager.setMenuItem(pushToApplicationMenuItem);
+
+ final Menu pushApplicationsMenu = factory.createSubMenu(StandardActions.SELECT_PUSH_APPLICATION);
+ final ToggleGroup pushToToggleGroup = new ToggleGroup();
+ RadioMenuItem pushToApplication;
+ PushToApplicationMenuAction pushToApplicationMenuAction;
+ final String activePushToApplication = Globals.prefs.get(JabRefPreferences.PUSH_TO_APPLICATION);
+
+ for (PushToApplication application : pushToApplicationsManager.getApplications()) {
+ pushToApplicationMenuAction = new PushToApplicationMenuAction(application, pushToApplicationAction, pushToApplicationsManager);
+ pushToApplication = factory.createRadioMenuItem(
+ pushToApplicationMenuAction.getActionInformation(),
+ pushToApplicationMenuAction,
+ application.getApplicationName().equals(activePushToApplication));
+
+ pushApplicationsMenu.getItems().add(pushToApplication);
+ pushToApplication.setToggleGroup(pushToToggleGroup);
+ }
+
tools.getItems().addAll(
factory.createMenuItem(StandardActions.NEW_SUB_LIBRARY_FROM_AUX, new NewSubLibraryAction(this, stateManager)),
factory.createMenuItem(StandardActions.FIND_UNLINKED_FILES, new FindUnlinkedFilesAction(this, stateManager)),
@@ -776,7 +804,8 @@ private MenuBar createMenu() {
factory.createMenuItem(StandardActions.GENERATE_CITE_KEYS, new OldDatabaseCommandWrapper(Actions.MAKE_KEY, this, stateManager)),
factory.createMenuItem(StandardActions.REPLACE_ALL, new OldDatabaseCommandWrapper(Actions.REPLACE_ALL, this, stateManager)),
factory.createMenuItem(StandardActions.SEND_AS_EMAIL, new OldDatabaseCommandWrapper(Actions.SEND_AS_EMAIL, this, stateManager)),
- factory.createMenuItem(pushToApplicationAction.getActionInformation(), pushToApplicationAction),
+ pushApplicationsMenu,
+ pushToApplicationMenuItem,
factory.createSubMenu(StandardActions.ABBREVIATE,
factory.createMenuItem(StandardActions.ABBREVIATE_ISO, new OldDatabaseCommandWrapper(Actions.ABBREVIATE_ISO, this, stateManager)),
@@ -1192,8 +1221,8 @@ public SidePaneManager getSidePaneManager() {
return sidePaneManager;
}
- public PushToApplicationsManager getPushApplications() {
- return pushApplications;
+ public PushToApplicationsManager getPushToApplicationsManager() {
+ return pushToApplicationsManager;
}
public GlobalSearchBar getGlobalSearchBar() {
diff --git a/src/main/java/org/jabref/gui/actions/ActionFactory.java b/src/main/java/org/jabref/gui/actions/ActionFactory.java
index 07a8ddb3f2f..719265be957 100644
--- a/src/main/java/org/jabref/gui/actions/ActionFactory.java
+++ b/src/main/java/org/jabref/gui/actions/ActionFactory.java
@@ -4,13 +4,13 @@
import java.lang.reflect.Method;
import java.util.Objects;
-import javafx.scene.Node;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.CheckMenuItem;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
+import javafx.scene.control.RadioMenuItem;
import javafx.scene.control.Tooltip;
import org.jabref.gui.keyboard.KeyBindingRepository;
@@ -113,6 +113,14 @@ public CheckMenuItem createCheckMenuItem(Action action, Command command, boolean
return checkMenuItem;
}
+ public RadioMenuItem createRadioMenuItem(Action action, Command command, boolean selected) {
+ RadioMenuItem radioMenuItem = ActionUtils.createRadioMenuItem(new JabRefAction(action, command, keyBindingRepository));
+ radioMenuItem.setSelected(selected);
+ setGraphic(radioMenuItem, action);
+
+ return radioMenuItem;
+ }
+
public Menu createMenu(Action action) {
Menu menu = ActionUtils.createMenu(new JabRefAction(action, keyBindingRepository));
@@ -148,13 +156,9 @@ public ButtonBase configureIconButton(Action action, Command command, ButtonBase
button.getStyleClass().add("icon-button");
// For some reason the graphic is not set correctly, so let's fix this
+ // ToDO: Find a way to reuse JabRefIconView
button.graphicProperty().unbind();
- action.getIcon().ifPresent(icon -> {
- // ToDO: Find a way to reuse JabRefIconView
- Node graphicNode = icon.getGraphicNode();
- graphicNode.setStyle(String.format("-fx-font-family: %s; -fx-font-size: %s;", icon.fontFamily(), "1em"));
- button.setGraphic(graphicNode);
- });
+ action.getIcon().ifPresent(icon -> button.setGraphic(icon.getGraphicNode()));
return button;
}
diff --git a/src/main/java/org/jabref/gui/actions/StandardActions.java b/src/main/java/org/jabref/gui/actions/StandardActions.java
index eb4c6508955..03d6e65d98c 100644
--- a/src/main/java/org/jabref/gui/actions/StandardActions.java
+++ b/src/main/java/org/jabref/gui/actions/StandardActions.java
@@ -92,6 +92,7 @@ public enum StandardActions implements Action {
OPEN_CONSOLE(Localization.lang("Open terminal here"), Localization.lang("Open terminal here"), IconTheme.JabRefIcons.CONSOLE, KeyBinding.OPEN_CONSOLE),
COPY_LINKED_FILES(Localization.lang("Copy linked files to folder...")),
COPY_DOI(Localization.lang("Copy DOI url")),
+ SELECT_PUSH_APPLICATION(Localization.lang("Select external application")),
ABBREVIATE(Localization.lang("Abbreviate journal names")),
ABBREVIATE_ISO("ISO", Localization.lang("Abbreviate journal names of the selected entries (ISO abbreviation)"), KeyBinding.ABBREVIATE),
ABBREVIATE_MEDLINE("MEDLINE", Localization.lang("Abbreviate journal names of the selected entries (MEDLINE abbreviation)")),
diff --git a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.fxml b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.fxml
index d4cd990c09b..35fb41daa74 100644
--- a/src/main/java/org/jabref/gui/entryeditor/EntryEditor.fxml
+++ b/src/main/java/org/jabref/gui/entryeditor/EntryEditor.fxml
@@ -40,7 +40,14 @@
-
+