Search in sources :

Example 1 with PreviewPreferences

use of org.jabref.preferences.PreviewPreferences in project jabref by JabRef.

the class BasePanel method setupActions.

private void setupActions() {
    SaveDatabaseAction saveAction = new SaveDatabaseAction(this);
    CleanupAction cleanUpAction = new CleanupAction(this, Globals.prefs);
    actions.put(Actions.UNDO, undoAction);
    actions.put(Actions.REDO, redoAction);
    actions.put(Actions.FOCUS_TABLE, (BaseAction) () -> {
        mainTable.requestFocus();
    });
    // The action for opening an entry editor.
    actions.put(Actions.EDIT, (BaseAction) selectionListener::editSignalled);
    // The action for saving a database.
    actions.put(Actions.SAVE, saveAction);
    actions.put(Actions.SAVE_AS, (BaseAction) saveAction::saveAs);
    actions.put(Actions.SAVE_SELECTED_AS, new SaveSelectedAction(SavePreferences.DatabaseSaveType.ALL));
    actions.put(Actions.SAVE_SELECTED_AS_PLAIN, new SaveSelectedAction(SavePreferences.DatabaseSaveType.PLAIN_BIBTEX));
    // The action for copying selected entries.
    actions.put(Actions.COPY, (BaseAction) () -> copy());
    actions.put(Actions.PRINT_PREVIEW, new PrintPreviewAction());
    actions.put(Actions.CUT, (BaseAction) this::cut);
    //when you modify this action be sure to adjust Actions.CUT,
    //they are the same except of the Localization, delete confirmation and Actions.COPY call
    actions.put(Actions.DELETE, (BaseAction) () -> delete(false));
    // The action for pasting entries or cell contents.
    //  - more robust detection of available content flavors (doesn't only look at first one offered)
    //  - support for parsing string-flavor clipboard contents which are bibtex entries.
    //    This allows you to (a) paste entire bibtex entries from a text editor, web browser, etc
    //                       (b) copy and paste entries between multiple instances of JabRef (since
    //         only the text representation seems to get as far as the X clipboard, at least on my system)
    actions.put(Actions.PASTE, (BaseAction) () -> paste());
    actions.put(Actions.SELECT_ALL, (BaseAction) mainTable::selectAll);
    // The action for opening the preamble editor
    actions.put(Actions.EDIT_PREAMBLE, (BaseAction) () -> {
        if (preambleEditor == null) {
            PreambleEditor form = new PreambleEditor(frame, BasePanel.this, bibDatabaseContext.getDatabase());
            form.setLocationRelativeTo(frame);
            form.setVisible(true);
            preambleEditor = form;
        } else {
            preambleEditor.setVisible(true);
        }
    });
    // The action for opening the string editor
    actions.put(Actions.EDIT_STRINGS, (BaseAction) () -> {
        if (stringDialog == null) {
            StringDialog form = new StringDialog(frame, BasePanel.this, bibDatabaseContext.getDatabase());
            form.setVisible(true);
            stringDialog = form;
        } else {
            stringDialog.setVisible(true);
        }
    });
    actions.put(FindUnlinkedFilesDialog.ACTION_COMMAND, (BaseAction) () -> {
        final FindUnlinkedFilesDialog dialog = new FindUnlinkedFilesDialog(frame, frame, BasePanel.this);
        dialog.setLocationRelativeTo(frame);
        dialog.setVisible(true);
    });
    // The action for auto-generating keys.
    actions.put(Actions.MAKE_KEY, new AbstractWorker() {

        List<BibEntry> entries;

        int numSelected;

        boolean canceled;

        // Run first, in EDT:
        @Override
        public void init() {
            entries = getSelectedEntries();
            numSelected = entries.size();
            if (entries.isEmpty()) {
                // None selected. Inform the user to select entries first.
                JOptionPane.showMessageDialog(frame, Localization.lang("First select the entries you want keys to be generated for."), Localization.lang("Autogenerate BibTeX keys"), JOptionPane.INFORMATION_MESSAGE);
                return;
            }
            frame.block();
            output(formatOutputMessage(Localization.lang("Generating BibTeX key for"), numSelected));
        }

        // Run second, on a different thread:
        @Override
        public void run() {
            // We don't want to generate keys for entries which already have one thus remove the entries
            if (Globals.prefs.getBoolean(JabRefPreferences.AVOID_OVERWRITING_KEY)) {
                entries.removeIf(BibEntry::hasCiteKey);
            // if we're going to override some cite keys warn the user about it
            } else if (Globals.prefs.getBoolean(JabRefPreferences.WARN_BEFORE_OVERWRITING_KEY)) {
                if (entries.parallelStream().anyMatch(BibEntry::hasCiteKey)) {
                    CheckBoxMessage cbm = new CheckBoxMessage(Localization.lang("One or more keys will be overwritten. Continue?"), Localization.lang("Disable this confirmation dialog"), false);
                    final int answer = JOptionPane.showConfirmDialog(frame, cbm, Localization.lang("Overwrite keys"), JOptionPane.YES_NO_OPTION);
                    Globals.prefs.putBoolean(JabRefPreferences.WARN_BEFORE_OVERWRITING_KEY, !cbm.isSelected());
                    // The user doesn't want to overide cite keys
                    if (answer == JOptionPane.NO_OPTION) {
                        canceled = true;
                        return;
                    }
                }
            }
            // generate the new cite keys for each entry
            final NamedCompound ce = new NamedCompound(Localization.lang("Autogenerate BibTeX keys"));
            AbstractBibtexKeyPattern citeKeyPattern = bibDatabaseContext.getMetaData().getCiteKeyPattern(Globals.prefs.getBibtexKeyPatternPreferences().getKeyPattern());
            for (BibEntry entry : entries) {
                String oldCiteKey = entry.getCiteKeyOptional().orElse("");
                BibtexKeyPatternUtil.makeAndSetLabel(citeKeyPattern, bibDatabaseContext.getDatabase(), entry, Globals.prefs.getBibtexKeyPatternPreferences());
                String newCiteKey = entry.getCiteKeyOptional().orElse("");
                if (!oldCiteKey.equals(newCiteKey)) {
                    ce.addEdit(new UndoableKeyChange(entry, oldCiteKey, newCiteKey));
                }
            }
            ce.end();
            // register the undo event only if new cite keys were generated
            if (ce.hasEdits()) {
                getUndoManager().addEdit(ce);
            }
        }

        // Run third, on EDT:
        @Override
        public void update() {
            if (canceled) {
                frame.unblock();
                return;
            }
            markBaseChanged();
            numSelected = entries.size();
            ////////////////////////////////////////////////////////////////////////////////
            for (final BibEntry bibEntry : entries) {
                SwingUtilities.invokeLater(() -> {
                    final int row = mainTable.findEntry(bibEntry);
                    if ((row >= 0) && (mainTable.getSelectedRowCount() < entries.size())) {
                        mainTable.addRowSelectionInterval(row, row);
                    }
                });
            }
            ////////////////////////////////////////////////////////////////////////////////
            output(formatOutputMessage(Localization.lang("Generated BibTeX key for"), numSelected));
            frame.unblock();
        }
    });
    // The action for cleaning up entry.
    actions.put(Actions.CLEANUP, cleanUpAction);
    actions.put(Actions.MERGE_ENTRIES, (BaseAction) () -> new MergeEntriesDialog(BasePanel.this));
    actions.put(Actions.SEARCH, (BaseAction) frame.getGlobalSearchBar()::focus);
    actions.put(Actions.GLOBAL_SEARCH, (BaseAction) frame.getGlobalSearchBar()::performGlobalSearch);
    // The action for copying the selected entry's key.
    actions.put(Actions.COPY_KEY, (BaseAction) () -> copyKey());
    // The action for copying the selected entry's title.
    actions.put(Actions.COPY_TITLE, (BaseAction) () -> copyTitle());
    // The action for copying a cite for the selected entry.
    actions.put(Actions.COPY_CITE_KEY, (BaseAction) () -> copyCiteKey());
    // The action for copying the BibTeX key and the title for the first selected entry
    actions.put(Actions.COPY_KEY_AND_TITLE, (BaseAction) () -> copyKeyAndTitle());
    actions.put(Actions.COPY_CITATION_ASCII_DOC, (BaseAction) () -> copyCitationToClipboard(CitationStyleOutputFormat.ASCII_DOC));
    actions.put(Actions.COPY_CITATION_XSLFO, (BaseAction) () -> copyCitationToClipboard(CitationStyleOutputFormat.XSL_FO));
    actions.put(Actions.COPY_CITATION_HTML, (BaseAction) () -> copyCitationToClipboard(CitationStyleOutputFormat.HTML));
    actions.put(Actions.COPY_CITATION_RTF, (BaseAction) () -> copyCitationToClipboard(CitationStyleOutputFormat.RTF));
    actions.put(Actions.COPY_CITATION_TEXT, (BaseAction) () -> copyCitationToClipboard(CitationStyleOutputFormat.TEXT));
    // The action for copying the BibTeX keys as hyperlinks to the urls of the selected entries
    actions.put(Actions.COPY_KEY_AND_LINK, new CopyBibTeXKeyAndLinkAction(mainTable));
    actions.put(Actions.MERGE_DATABASE, new AppendDatabaseAction(frame, this));
    actions.put(Actions.ADD_FILE_LINK, new AttachFileAction(this));
    actions.put(Actions.OPEN_EXTERNAL_FILE, (BaseAction) () -> openExternalFile());
    actions.put(Actions.OPEN_FOLDER, (BaseAction) () -> JabRefExecutorService.INSTANCE.execute(() -> {
        final List<Path> files = FileUtil.getListOfLinkedFiles(mainTable.getSelectedEntries(), bibDatabaseContext.getFileDirectoriesAsPaths(Globals.prefs.getFileDirectoryPreferences()));
        for (final Path f : files) {
            try {
                JabRefDesktop.openFolderAndSelectFile(f.toAbsolutePath());
            } catch (IOException e) {
                LOGGER.info("Could not open folder", e);
            }
        }
    }));
    actions.put(Actions.OPEN_CONSOLE, (BaseAction) () -> JabRefDesktop.openConsole(frame.getCurrentBasePanel().getBibDatabaseContext().getDatabaseFile().orElse(null)));
    actions.put(Actions.PULL_CHANGES_FROM_SHARED_DATABASE, (BaseAction) () -> {
        DBMSSynchronizer dbmsSynchronizer = frame.getCurrentBasePanel().getBibDatabaseContext().getDBMSSynchronizer();
        dbmsSynchronizer.pullChanges();
    });
    actions.put(Actions.OPEN_URL, new OpenURLAction());
    actions.put(Actions.MERGE_WITH_FETCHED_ENTRY, new MergeWithFetchedEntryAction(this));
    actions.put(Actions.REPLACE_ALL, (BaseAction) () -> {
        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.DUPLI_CHECK, (BaseAction) () -> JabRefExecutorService.INSTANCE.execute(new DuplicateSearch(BasePanel.this)));
    actions.put(Actions.PLAIN_TEXT_IMPORT, (BaseAction) () -> {
        EntryTypeDialog etd = new EntryTypeDialog(frame);
        etd.setLocationRelativeTo(BasePanel.this);
        etd.setVisible(true);
        EntryType tp = etd.getChoice();
        if (tp == null) {
            return;
        }
        BibEntry bibEntry = new BibEntry(tp.getName());
        TextInputDialog tidialog = new TextInputDialog(frame, bibEntry);
        tidialog.setLocationRelativeTo(BasePanel.this);
        tidialog.setVisible(true);
        if (tidialog.okPressed()) {
            UpdateField.setAutomaticFields(Collections.singletonList(bibEntry), false, false, Globals.prefs.getUpdateFieldPreferences());
            insertEntry(bibEntry);
        }
    });
    actions.put(Actions.MARK_ENTRIES, new MarkEntriesAction(frame, 0));
    actions.put(Actions.UNMARK_ENTRIES, (BaseAction) () -> {
        try {
            List<BibEntry> bes = mainTable.getSelectedEntries();
            if (bes.isEmpty()) {
                output(Localization.lang("This operation requires one or more entries to be selected."));
                return;
            }
            NamedCompound ce = new NamedCompound(Localization.lang("Unmark entries"));
            for (BibEntry be : bes) {
                EntryMarker.unmarkEntry(be, false, bibDatabaseContext.getDatabase(), ce);
            }
            ce.end();
            getUndoManager().addEdit(ce);
            markBaseChanged();
            String outputStr;
            if (bes.size() == 1) {
                outputStr = Localization.lang("Unmarked selected entry");
            } else {
                outputStr = Localization.lang("Unmarked all %0 selected entries", Integer.toString(bes.size()));
            }
            output(outputStr);
        } catch (Throwable ex) {
            LOGGER.warn("Could not unmark", ex);
        }
    });
    actions.put(Actions.UNMARK_ALL, (BaseAction) () -> {
        NamedCompound ce = new NamedCompound(Localization.lang("Unmark all"));
        for (BibEntry be : bibDatabaseContext.getDatabase().getEntries()) {
            EntryMarker.unmarkEntry(be, false, bibDatabaseContext.getDatabase(), ce);
        }
        ce.end();
        getUndoManager().addEdit(ce);
        markBaseChanged();
        output(Localization.lang("Unmarked all entries"));
    });
    // Note that we can't put the number of entries that have been reverted into the undoText as the concrete number cannot be injected
    actions.put(new SpecialFieldValueViewModel(SpecialField.RELEVANCE.getValues().get(0)).getActionName(), new SpecialFieldViewModel(SpecialField.RELEVANCE).getSpecialFieldAction(SpecialField.RELEVANCE.getValues().get(0), frame));
    actions.put(new SpecialFieldValueViewModel(SpecialField.QUALITY.getValues().get(0)).getActionName(), new SpecialFieldViewModel(SpecialField.QUALITY).getSpecialFieldAction(SpecialField.QUALITY.getValues().get(0), frame));
    actions.put(new SpecialFieldValueViewModel(SpecialField.PRINTED.getValues().get(0)).getActionName(), new SpecialFieldViewModel(SpecialField.PRINTED).getSpecialFieldAction(SpecialField.PRINTED.getValues().get(0), frame));
    for (SpecialFieldValue prio : SpecialField.PRIORITY.getValues()) {
        actions.put(new SpecialFieldValueViewModel(prio).getActionName(), new SpecialFieldViewModel(SpecialField.PRIORITY).getSpecialFieldAction(prio, this.frame));
    }
    for (SpecialFieldValue rank : SpecialField.RANKING.getValues()) {
        actions.put(new SpecialFieldValueViewModel(rank).getActionName(), new SpecialFieldViewModel(SpecialField.RANKING).getSpecialFieldAction(rank, this.frame));
    }
    for (SpecialFieldValue status : SpecialField.READ_STATUS.getValues()) {
        actions.put(new SpecialFieldValueViewModel(status).getActionName(), new SpecialFieldViewModel(SpecialField.READ_STATUS).getSpecialFieldAction(status, this.frame));
    }
    actions.put(Actions.TOGGLE_PREVIEW, (BaseAction) () -> {
        PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences();
        boolean enabled = !previewPreferences.isPreviewPanelEnabled();
        PreviewPreferences newPreviewPreferences = previewPreferences.getBuilder().withPreviewPanelEnabled(enabled).build();
        Globals.prefs.storePreviewPreferences(newPreviewPreferences);
        setPreviewActiveBasePanels(enabled);
        frame.setPreviewToggle(enabled);
    });
    actions.put(Actions.NEXT_PREVIEW_STYLE, (BaseAction) selectionListener::nextPreviewStyle);
    actions.put(Actions.PREVIOUS_PREVIEW_STYLE, (BaseAction) selectionListener::previousPreviewStyle);
    actions.put(Actions.MANAGE_SELECTORS, (BaseAction) () -> {
        ContentSelectorDialog csd = new ContentSelectorDialog(frame, frame, BasePanel.this, false, null);
        csd.setLocationRelativeTo(frame);
        csd.setVisible(true);
    });
    actions.put(Actions.EXPORT_TO_CLIPBOARD, new ExportToClipboardAction(frame));
    actions.put(Actions.SEND_AS_EMAIL, new SendAsEMailAction(frame));
    actions.put(Actions.WRITE_XMP, new WriteXMPAction(this));
    actions.put(Actions.ABBREVIATE_ISO, new AbbreviateAction(this, true));
    actions.put(Actions.ABBREVIATE_MEDLINE, new AbbreviateAction(this, false));
    actions.put(Actions.UNABBREVIATE, new UnabbreviateAction(this));
    actions.put(Actions.AUTO_SET_FILE, new SynchronizeFileField(this));
    actions.put(Actions.BACK, (BaseAction) BasePanel.this::back);
    actions.put(Actions.FORWARD, (BaseAction) BasePanel.this::forward);
    actions.put(Actions.RESOLVE_DUPLICATE_KEYS, new SearchFixDuplicateLabels(this));
    actions.put(Actions.ADD_TO_GROUP, new GroupAddRemoveDialog(this, true, false));
    actions.put(Actions.REMOVE_FROM_GROUP, new GroupAddRemoveDialog(this, false, false));
    actions.put(Actions.MOVE_TO_GROUP, new GroupAddRemoveDialog(this, true, true));
    actions.put(Actions.DOWNLOAD_FULL_TEXT, new FindFullTextAction(this));
}
Also used : DBMSSynchronizer(org.jabref.shared.DBMSSynchronizer) CheckBoxMessage(org.jabref.gui.util.component.CheckBoxMessage) AbstractBibtexKeyPattern(org.jabref.model.bibtexkeypattern.AbstractBibtexKeyPattern) UnabbreviateAction(org.jabref.gui.journals.UnabbreviateAction) NamedCompound(org.jabref.gui.undo.NamedCompound) ArrayList(java.util.ArrayList) List(java.util.List) PreviewPreferences(org.jabref.preferences.PreviewPreferences) FindFullTextAction(org.jabref.gui.externalfiles.FindFullTextAction) SpecialFieldValueViewModel(org.jabref.gui.specialfields.SpecialFieldValueViewModel) AbbreviateAction(org.jabref.gui.journals.AbbreviateAction) CleanupAction(org.jabref.gui.actions.CleanupAction) UndoableKeyChange(org.jabref.gui.undo.UndoableKeyChange) MergeEntriesDialog(org.jabref.gui.mergeentries.MergeEntriesDialog) MergeWithFetchedEntryAction(org.jabref.gui.mergeentries.MergeWithFetchedEntryAction) SynchronizeFileField(org.jabref.gui.externalfiles.SynchronizeFileField) ContentSelectorDialog(org.jabref.gui.contentselector.ContentSelectorDialog) AppendDatabaseAction(org.jabref.gui.importer.actions.AppendDatabaseAction) WriteXMPAction(org.jabref.gui.externalfiles.WriteXMPAction) SearchFixDuplicateLabels(org.jabref.gui.bibtexkeypattern.SearchFixDuplicateLabels) SaveDatabaseAction(org.jabref.gui.exporter.SaveDatabaseAction) MarkEntriesAction(org.jabref.gui.worker.MarkEntriesAction) AttachFileAction(org.jabref.gui.filelist.AttachFileAction) ExportToClipboardAction(org.jabref.gui.exporter.ExportToClipboardAction) AbstractWorker(org.jabref.gui.worker.AbstractWorker) Path(java.nio.file.Path) BibEntry(org.jabref.model.entry.BibEntry) GroupAddRemoveDialog(org.jabref.gui.groups.GroupAddRemoveDialog) BaseAction(org.jabref.gui.actions.BaseAction) IOException(java.io.IOException) SendAsEMailAction(org.jabref.gui.worker.SendAsEMailAction) EntryType(org.jabref.model.entry.EntryType) SpecialFieldViewModel(org.jabref.gui.specialfields.SpecialFieldViewModel) CopyBibTeXKeyAndLinkAction(org.jabref.gui.actions.CopyBibTeXKeyAndLinkAction) TextInputDialog(org.jabref.gui.plaintextimport.TextInputDialog) SpecialFieldValue(org.jabref.model.entry.specialfields.SpecialFieldValue)

Example 2 with PreviewPreferences

use of org.jabref.preferences.PreviewPreferences in project jabref by JabRef.

the class BasePanel method saveDividerLocation.

/**
     * Depending on whether a preview or an entry editor is showing, save the current divider location in the correct
     * preference setting.
     */
public void saveDividerLocation() {
    if (mode == BasePanelMode.SHOWING_PREVIEW) {
        int previewPanelHeight = splitPane.getHeight() - splitPane.getDividerLocation();
        PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences().getBuilder().withPreviewPanelHeight(previewPanelHeight).build();
        Globals.prefs.storePreviewPreferences(previewPreferences);
    } else if (mode == BasePanelMode.SHOWING_EDITOR) {
        Globals.prefs.putInt(JabRefPreferences.ENTRY_EDITOR_HEIGHT, splitPane.getHeight() - splitPane.getDividerLocation());
    }
}
Also used : PreviewPreferences(org.jabref.preferences.PreviewPreferences)

Example 3 with PreviewPreferences

use of org.jabref.preferences.PreviewPreferences in project jabref by JabRef.

the class PreviewPanel method updateLayout.

public void updateLayout() {
    if (fixedLayout) {
        LOGGER.debug("cannot change the layout because the layout is fixed");
        return;
    }
    PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences();
    String style = previewPreferences.getPreviewCycle().get(previewPreferences.getPreviewCyclePosition());
    if (CitationStyle.isCitationStyleFile(style)) {
        if (basePanel.isPresent()) {
            layout = Optional.empty();
            CitationStyle citationStyle = CitationStyle.createCitationStyleFromFile(style);
            if (citationStyle != null) {
                basePanel.get().getCitationStyleCache().setCitationStyle(citationStyle);
                basePanel.get().output(Localization.lang("Preview style changed to: %0", citationStyle.getTitle()));
            }
        }
    } else {
        updatePreviewLayout(previewPreferences.getPreviewStyle());
        if (basePanel.isPresent()) {
            basePanel.get().output(Localization.lang("Preview style changed to: %0", Localization.lang("Preview")));
        }
    }
    update();
}
Also used : CitationStyle(org.jabref.logic.citationstyle.CitationStyle) PreviewPreferences(org.jabref.preferences.PreviewPreferences)

Example 4 with PreviewPreferences

use of org.jabref.preferences.PreviewPreferences in project jabref by JabRef.

the class PreviewPrefsTab method storeSettings.

@Override
public void storeSettings() {
    List<String> styles = new ArrayList<>();
    Enumeration<Object> elements = chosenModel.elements();
    while (elements.hasMoreElements()) {
        Object obj = elements.nextElement();
        if (obj instanceof CitationStyle) {
            styles.add(((CitationStyle) obj).getFilepath());
        } else if (obj instanceof String) {
            styles.add("Preview");
        }
    }
    PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences().getBuilder().withPreviewCycle(styles).withPreviewStyle(layout.getText().replace("\n", "__NEWLINE__")).build();
    Globals.prefs.storePreviewPreferences(previewPreferences);
    // update preview
    for (BasePanel basePanel : JabRefGUI.getMainFrame().getBasePanelList()) {
        basePanel.getPreviewPanel().updateLayout();
    }
}
Also used : CitationStyle(org.jabref.logic.citationstyle.CitationStyle) BasePanel(org.jabref.gui.BasePanel) ArrayList(java.util.ArrayList) PreviewPreferences(org.jabref.preferences.PreviewPreferences)

Example 5 with PreviewPreferences

use of org.jabref.preferences.PreviewPreferences in project jabref by JabRef.

the class PreviewPrefsTab method setValues.

@Override
public void setValues() {
    PreviewPreferences previewPreferences = Globals.prefs.getPreviewPreferences();
    chosenModel.clear();
    boolean isPreviewChosen = false;
    for (String style : previewPreferences.getPreviewCycle()) {
        if (CitationStyle.isCitationStyleFile(style)) {
            chosenModel.addElement(CitationStyle.createCitationStyleFromFile(style));
        } else {
            if (isPreviewChosen) {
                LOGGER.error("Preview is already in the list, something went wrong");
                continue;
            }
            isPreviewChosen = true;
            chosenModel.addElement(Localization.lang("Preview"));
        }
    }
    availableModel.clear();
    if (!isPreviewChosen) {
        availableModel.addElement(Localization.lang("Preview"));
    }
    btnLeft.setEnabled(!chosen.isSelectionEmpty());
    btnRight.setEnabled(!available.isSelectionEmpty());
    btnUp.setEnabled(!chosen.isSelectionEmpty());
    btnDown.setEnabled(!chosen.isSelectionEmpty());
    if (discoverCitationStyleWorker != null) {
        discoverCitationStyleWorker.cancel(true);
    }
    discoverCitationStyleWorker = new SwingWorker<List<CitationStyle>, Void>() {

        @Override
        protected List<CitationStyle> doInBackground() throws Exception {
            return CitationStyle.discoverCitationStyles();
        }

        @Override
        public void done() {
            if (this.isCancelled()) {
                return;
            }
            try {
                get().stream().filter(style -> !previewPreferences.getPreviewCycle().contains(style.getFilepath())).sorted((style0, style1) -> style0.getTitle().compareTo(style1.getTitle())).forEach(availableModel::addElement);
                btnRight.setEnabled(!availableModel.isEmpty());
            } catch (InterruptedException | ExecutionException e) {
                LOGGER.error("something went wrong while adding the discovered CitationStyles to the list ");
            }
        }
    };
    discoverCitationStyleWorker.execute();
    layout.setText(Globals.prefs.getPreviewPreferences().getPreviewStyle().replace("__NEWLINE__", "\n"));
}
Also used : ListSelectionModel(javax.swing.ListSelectionModel) TestEntry(org.jabref.logic.util.TestEntry) PreviewPanel(org.jabref.gui.PreviewPanel) Enumeration(java.util.Enumeration) ArrayUtils(org.apache.commons.lang3.ArrayUtils) BasePanel(org.jabref.gui.BasePanel) ArrayList(java.util.ArrayList) SwingWorker(javax.swing.SwingWorker) Localization(org.jabref.logic.l10n.Localization) BorderLayout(java.awt.BorderLayout) BoxLayout(javax.swing.BoxLayout) CitationStyle(org.jabref.logic.citationstyle.CitationStyle) FormBuilder(com.jgoodies.forms.builder.FormBuilder) JButton(javax.swing.JButton) Paddings(com.jgoodies.forms.factories.Paddings) JList(javax.swing.JList) JabRefGUI(org.jabref.JabRefGUI) JOptionPane(javax.swing.JOptionPane) Globals(org.jabref.Globals) ExecutionException(java.util.concurrent.ExecutionException) JScrollPane(javax.swing.JScrollPane) Dimension(java.awt.Dimension) List(java.util.List) DefaultListModel(javax.swing.DefaultListModel) Log(org.apache.commons.logging.Log) JTextArea(javax.swing.JTextArea) LogFactory(org.apache.commons.logging.LogFactory) JPanel(javax.swing.JPanel) PreviewPreferences(org.jabref.preferences.PreviewPreferences) ArrayList(java.util.ArrayList) JList(javax.swing.JList) List(java.util.List) PreviewPreferences(org.jabref.preferences.PreviewPreferences) ExecutionException(java.util.concurrent.ExecutionException)

Aggregations

PreviewPreferences (org.jabref.preferences.PreviewPreferences)6 ArrayList (java.util.ArrayList)3 CitationStyle (org.jabref.logic.citationstyle.CitationStyle)3 List (java.util.List)2 BasePanel (org.jabref.gui.BasePanel)2 FormBuilder (com.jgoodies.forms.builder.FormBuilder)1 Paddings (com.jgoodies.forms.factories.Paddings)1 BorderLayout (java.awt.BorderLayout)1 Dimension (java.awt.Dimension)1 IOException (java.io.IOException)1 Path (java.nio.file.Path)1 Enumeration (java.util.Enumeration)1 ExecutionException (java.util.concurrent.ExecutionException)1 BoxLayout (javax.swing.BoxLayout)1 DefaultListModel (javax.swing.DefaultListModel)1 JButton (javax.swing.JButton)1 JList (javax.swing.JList)1 JOptionPane (javax.swing.JOptionPane)1 JPanel (javax.swing.JPanel)1 JScrollPane (javax.swing.JScrollPane)1