Search in sources :

Example 1 with ExternalFileMenuItem

use of org.jabref.gui.externalfiletype.ExternalFileMenuItem in project jabref by JabRef.

the class BasePanel method openExternalFile.

private void openExternalFile() {
    JabRefExecutorService.INSTANCE.execute(() -> {
        final List<BibEntry> bes = mainTable.getSelectedEntries();
        if (bes.size() != 1) {
            output(Localization.lang("This operation requires exactly one item to be selected."));
            return;
        }
        final BibEntry entry = bes.get(0);
        if (!entry.hasField(FieldName.FILE)) {
            // no bibtex field
            new SearchAndOpenFile(entry, BasePanel.this).searchAndOpen();
            return;
        }
        FileListTableModel fileListTableModel = new FileListTableModel();
        entry.getField(FieldName.FILE).ifPresent(fileListTableModel::setContent);
        if (fileListTableModel.getRowCount() == 0) {
            // content in BibTeX field is not readable
            new SearchAndOpenFile(entry, BasePanel.this).searchAndOpen();
            return;
        }
        FileListEntry flEntry = fileListTableModel.getEntry(0);
        ExternalFileMenuItem item = new ExternalFileMenuItem(frame(), entry, "", flEntry.getLink(), flEntry.getType().get().getIcon(), bibDatabaseContext, flEntry.getType());
        item.doClick();
    });
}
Also used : BibEntry(org.jabref.model.entry.BibEntry) FileListTableModel(org.jabref.gui.filelist.FileListTableModel) ExternalFileMenuItem(org.jabref.gui.externalfiletype.ExternalFileMenuItem) FileListEntry(org.jabref.gui.filelist.FileListEntry)

Example 2 with ExternalFileMenuItem

use of org.jabref.gui.externalfiletype.ExternalFileMenuItem in project jabref by JabRef.

the class MainTableSelectionListener method showIconRightClickMenu.

/**
     * Process popup trigger events occurring on an icon cell in the table. Show a menu where the user can choose which
     * external resource to open for the entry. If no relevant external resources exist, let the normal popup trigger
     * handler do its thing instead.
     *
     * @param e The mouse event defining this popup trigger.
     * @param row The row where the event occurred.
     * @param column the MainTableColumn associated with this table cell.
     */
private void showIconRightClickMenu(MouseEvent e, int row, MainTableColumn column) {
    BibEntry entry = tableRows.get(row);
    JPopupMenu menu = new JPopupMenu();
    boolean showDefaultPopup = true;
    // field that can specify a list of links:
    if (!column.getBibtexFields().isEmpty()) {
        for (String field : column.getBibtexFields()) {
            if (FieldName.FILE.equals(field)) {
                // We use a FileListTableModel to parse the field content:
                FileListTableModel fileList = new FileListTableModel();
                entry.getField(field).ifPresent(fileList::setContent);
                for (int i = 0; i < fileList.getRowCount(); i++) {
                    FileListEntry flEntry = fileList.getEntry(i);
                    if (column.isFileFilter() && (!flEntry.getType().get().getName().equalsIgnoreCase(column.getColumnName()))) {
                        continue;
                    }
                    String description = flEntry.getDescription();
                    if ((description == null) || (description.trim().isEmpty())) {
                        description = flEntry.getLink();
                    }
                    menu.add(new ExternalFileMenuItem(panel.frame(), entry, description, flEntry.getLink(), flEntry.getType().get().getIcon(), panel.getBibDatabaseContext(), flEntry.getType()));
                    showDefaultPopup = false;
                }
            } else {
                if (SpecialField.isSpecialField(column.getColumnName())) {
                    // full pop should be shown as left click already shows short popup
                    showDefaultPopup = true;
                } else {
                    Optional<String> content = entry.getField(field);
                    if (content.isPresent()) {
                        Icon icon;
                        JLabel iconLabel = GUIGlobals.getTableIcon(field);
                        if (iconLabel == null) {
                            icon = IconTheme.JabRefIcon.FILE.getIcon();
                        } else {
                            icon = iconLabel.getIcon();
                        }
                        menu.add(new ExternalFileMenuItem(panel.frame(), entry, content.get(), content.get(), icon, panel.getBibDatabaseContext(), field));
                        if (field.equals(FieldName.DOI)) {
                            menu.add(new CopyDoiUrlAction(content.get()));
                        }
                        showDefaultPopup = false;
                    }
                }
            }
        }
        if (showDefaultPopup) {
            processPopupTrigger(e, row);
        } else {
            menu.show(table, e.getX(), e.getY());
        }
    }
}
Also used : BibEntry(org.jabref.model.entry.BibEntry) FileListTableModel(org.jabref.gui.filelist.FileListTableModel) ExternalFileMenuItem(org.jabref.gui.externalfiletype.ExternalFileMenuItem) FileListEntry(org.jabref.gui.filelist.FileListEntry) JLabel(javax.swing.JLabel) JPopupMenu(javax.swing.JPopupMenu) CopyDoiUrlAction(org.jabref.gui.actions.CopyDoiUrlAction) Icon(javax.swing.Icon)

Example 3 with ExternalFileMenuItem

use of org.jabref.gui.externalfiletype.ExternalFileMenuItem in project jabref by JabRef.

the class MainTableSelectionListener method mouseClicked.

@Override
public void mouseClicked(MouseEvent e) {
    // First find the column on which the user has clicked.
    final int row = table.rowAtPoint(e.getPoint());
    // A double click on an entry should open the entry's editor.
    if (e.getClickCount() == 2) {
        BibEntry toShow = tableRows.get(row);
        editSignalled(toShow);
        return;
    }
    final int col = table.columnAtPoint(e.getPoint());
    // get the MainTableColumn which is currently visible at col
    int modelIndex = table.getColumnModel().getColumn(col).getModelIndex();
    MainTableColumn modelColumn = table.getMainTableColumn(modelIndex);
    // action will be taken when the button is released:
    if (OS.WINDOWS && (modelColumn.isIconColumn()) && (e.getButton() != MouseEvent.BUTTON1)) {
        return;
    }
    // Check if the clicked colum is a specialfield column
    if (modelColumn.isIconColumn() && (SpecialField.isSpecialField(modelColumn.getColumnName()))) {
        // handle specialfield
        handleSpecialFieldLeftClick(e, modelColumn.getColumnName());
    } else if (modelColumn.isIconColumn()) {
        // left click on icon field
        Object value = table.getValueAt(row, col);
        if (value == null) {
            // No icon here, so we do nothing.
            return;
        }
        final BibEntry entry = tableRows.get(row);
        final List<String> fieldNames = modelColumn.getBibtexFields();
        // Open it now. We do this in a thread, so the program won't freeze during the wait.
        JabRefExecutorService.INSTANCE.execute(() -> {
            panel.output(Localization.lang("External viewer called") + '.');
            // (is relevant for combinations such as "url/doi")
            for (String fieldName : fieldNames) {
                // Check if field is present, if not skip this field
                if (entry.hasField(fieldName)) {
                    String link = entry.getField(fieldName).get();
                    // field that can specify a list of links:
                    if (fieldName.equals(FieldName.FILE)) {
                        // We use a FileListTableModel to parse the field content:
                        FileListTableModel fileList = new FileListTableModel();
                        fileList.setContent(link);
                        FileListEntry flEntry = null;
                        // If there are one or more links of the correct type, open the first one:
                        if (modelColumn.isFileFilter()) {
                            for (int i = 0; i < fileList.getRowCount(); i++) {
                                if (fileList.getEntry(i).getType().toString().equals(modelColumn.getColumnName())) {
                                    flEntry = fileList.getEntry(i);
                                    break;
                                }
                            }
                        } else if (fileList.getRowCount() > 0) {
                            //If there are no file types specified open the first file
                            flEntry = fileList.getEntry(0);
                        }
                        if (flEntry != null) {
                            ExternalFileMenuItem item = new ExternalFileMenuItem(panel.frame(), entry, "", flEntry.getLink(), flEntry.getType().map(ExternalFileType::getIcon).orElse(null), panel.getBibDatabaseContext(), flEntry.getType());
                            item.doClick();
                        }
                    } else {
                        try {
                            JabRefDesktop.openExternalViewer(panel.getBibDatabaseContext(), link, fieldName);
                        } catch (IOException ex) {
                            panel.output(Localization.lang("Unable to open link."));
                            LOGGER.info("Unable to open link", ex);
                        }
                    }
                    // only open the first link
                    break;
                }
            }
        });
    } else if (modelColumn.getBibtexFields().contains(FieldName.CROSSREF)) {
        // Clicking on crossref column
        tableRows.get(row).getField(FieldName.CROSSREF).ifPresent(crossref -> panel.getDatabase().getEntryByKey(crossref).ifPresent(entry -> panel.highlightEntry(entry)));
    }
    panel.frame().updateEnabledState();
}
Also used : FocusListener(java.awt.event.FocusListener) KeyListener(java.awt.event.KeyListener) PreviewPanel(org.jabref.gui.PreviewPanel) FieldName(org.jabref.model.entry.FieldName) JabRefDesktop(org.jabref.gui.desktop.JabRefDesktop) IconTheme(org.jabref.gui.IconTheme) SpecialField(org.jabref.model.entry.specialfields.SpecialField) BasePanel(org.jabref.gui.BasePanel) SpecialFieldValue(org.jabref.model.entry.specialfields.SpecialFieldValue) SwingUtilities(javax.swing.SwingUtilities) SpecialFieldViewModel(org.jabref.gui.specialfields.SpecialFieldViewModel) Locale(java.util.Locale) SpecialFieldValueViewModel(org.jabref.gui.specialfields.SpecialFieldValueViewModel) Localization(org.jabref.logic.l10n.Localization) CopyDoiUrlAction(org.jabref.gui.actions.CopyDoiUrlAction) SpecialFieldMenuAction(org.jabref.gui.specialfields.SpecialFieldMenuAction) MouseListener(java.awt.event.MouseListener) Timer(javax.swing.Timer) ExternalFileType(org.jabref.gui.externalfiletype.ExternalFileType) BasePanelMode(org.jabref.gui.BasePanelMode) EventList(ca.odell.glazedlists.EventList) JPopupMenu(javax.swing.JPopupMenu) BibEntry(org.jabref.model.entry.BibEntry) FileListTableModel(org.jabref.gui.filelist.FileListTableModel) IOException(java.io.IOException) Icon(javax.swing.Icon) JabRefGUI(org.jabref.JabRefGUI) EntryEditor(org.jabref.gui.entryeditor.EntryEditor) KeyEvent(java.awt.event.KeyEvent) MouseEvent(java.awt.event.MouseEvent) Globals(org.jabref.Globals) FileListEntry(org.jabref.gui.filelist.FileListEntry) RightClickMenu(org.jabref.gui.menus.RightClickMenu) ListEvent(ca.odell.glazedlists.event.ListEvent) Objects(java.util.Objects) List(java.util.List) GUIGlobals(org.jabref.gui.GUIGlobals) ListEventListener(ca.odell.glazedlists.event.ListEventListener) FocusEvent(java.awt.event.FocusEvent) JLabel(javax.swing.JLabel) OS(org.jabref.logic.util.OS) Optional(java.util.Optional) Log(org.apache.commons.logging.Log) LogFactory(org.apache.commons.logging.LogFactory) JabRefExecutorService(org.jabref.JabRefExecutorService) ExternalFileMenuItem(org.jabref.gui.externalfiletype.ExternalFileMenuItem) PreviewPreferences(org.jabref.preferences.PreviewPreferences) BibEntry(org.jabref.model.entry.BibEntry) FileListTableModel(org.jabref.gui.filelist.FileListTableModel) ExternalFileMenuItem(org.jabref.gui.externalfiletype.ExternalFileMenuItem) FileListEntry(org.jabref.gui.filelist.FileListEntry) EventList(ca.odell.glazedlists.EventList) List(java.util.List) IOException(java.io.IOException)

Aggregations

ExternalFileMenuItem (org.jabref.gui.externalfiletype.ExternalFileMenuItem)3 FileListEntry (org.jabref.gui.filelist.FileListEntry)3 FileListTableModel (org.jabref.gui.filelist.FileListTableModel)3 Icon (javax.swing.Icon)2 JLabel (javax.swing.JLabel)2 JPopupMenu (javax.swing.JPopupMenu)2 CopyDoiUrlAction (org.jabref.gui.actions.CopyDoiUrlAction)2 BibEntry (org.jabref.model.entry.BibEntry)2 EventList (ca.odell.glazedlists.EventList)1 ListEvent (ca.odell.glazedlists.event.ListEvent)1 ListEventListener (ca.odell.glazedlists.event.ListEventListener)1 FocusEvent (java.awt.event.FocusEvent)1 FocusListener (java.awt.event.FocusListener)1 KeyEvent (java.awt.event.KeyEvent)1 KeyListener (java.awt.event.KeyListener)1 MouseEvent (java.awt.event.MouseEvent)1 MouseListener (java.awt.event.MouseListener)1 IOException (java.io.IOException)1 List (java.util.List)1 Locale (java.util.Locale)1