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 @@ -