package org.jabref.gui; import java.awt.Color; import java.awt.Font; import java.util.HashMap; import java.util.Map; import javax.swing.JLabel; import org.jabref.Globals; import org.jabref.gui.externalfiletype.ExternalFileType; import org.jabref.gui.externalfiletype.ExternalFileTypes; import org.jabref.gui.keyboard.EmacsKeyBindings; import org.jabref.gui.specialfields.SpecialFieldViewModel; import org.jabref.logic.l10n.Localization; import org.jabref.model.entry.FieldName; import org.jabref.model.entry.specialfields.SpecialField; import org.jabref.preferences.JabRefPreferences; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * Static variables for graphics files and keyboard shortcuts. */ public class GUIGlobals { public static Color editorTextColor; public static Color validFieldBackgroundColor; public static Color activeBackgroundColor; public static Color invalidFieldBackgroundColor; public static Font currentFont; public static final Color NULL_FIELD_COLOR = new Color(75, 130, 95); // Valid field, green. public static final Color ACTIVE_EDITOR_COLOR = new Color(230, 230, 255); public static final int WIDTH_ICON_COL = JabRefPreferences.getInstance().getInt(JabRefPreferences.ICON_SIZE_SMALL) + 12; // add some additional space to improve appearance public static final int WIDTH_ICON_COL_RANKING = 5 * JabRefPreferences.getInstance().getInt(JabRefPreferences.ICON_SIZE_SMALL); // Width of Ranking Icon Column public static final String UNTITLED_TITLE = Localization.lang("untitled"); public static final int MAX_BACK_HISTORY_SIZE = 10; // The maximum number of "Back" operations stored. // Colors. public static final Color ENTRY_EDITOR_LABEL_COLOR = new Color(100, 100, 150); // Empty field, blue. static final Color INACTIVE_TABBED_COLOR = Color.black; // inactive Database private static final Log LOGGER = LogFactory.getLog(GUIGlobals.class); private static final Map<String, JLabel> TABLE_ICONS = new HashMap<>(); // Contains table icon mappings. Set up static final Color ACTIVE_TABBED_COLOR = ENTRY_EDITOR_LABEL_COLOR.darker(); // active Database (JTabbedPane) private GUIGlobals() { } public static JLabel getTableIcon(String fieldType) { JLabel label = GUIGlobals.TABLE_ICONS.get(fieldType); if (label == null) { LOGGER.info("Error: no table icon defined for type '" + fieldType + "'."); return null; } else { return label; } } public static void updateEntryEditorColors() { GUIGlobals.activeBackgroundColor = JabRefPreferences.getInstance().getColor(JabRefPreferences.ACTIVE_FIELD_EDITOR_BACKGROUND_COLOR); GUIGlobals.validFieldBackgroundColor = JabRefPreferences.getInstance().getColor(JabRefPreferences.VALID_FIELD_BACKGROUND_COLOR); GUIGlobals.invalidFieldBackgroundColor = JabRefPreferences.getInstance().getColor(JabRefPreferences.INVALID_FIELD_BACKGROUND_COLOR); GUIGlobals.editorTextColor = JabRefPreferences.getInstance().getColor(JabRefPreferences.FIELD_EDITOR_TEXT_COLOR); } /** * Perform initializations that are only used in graphical mode. This is to prevent * the "Xlib: connection to ":0.0" refused by server" error when access to the X server * on Un*x is unavailable. */ public static void init() { JLabel label; label = new JLabel(IconTheme.JabRefIcon.PDF_FILE.getSmallIcon()); label.setToolTipText(Localization.lang("Open") + " PDF"); GUIGlobals.TABLE_ICONS.put(FieldName.PDF, label); label = new JLabel(IconTheme.JabRefIcon.WWW.getSmallIcon()); label.setToolTipText(Localization.lang("Open") + " URL"); GUIGlobals.TABLE_ICONS.put(FieldName.URL, label); label = new JLabel(IconTheme.JabRefIcon.WWW.getSmallIcon()); label.setToolTipText(Localization.lang("Open") + " CiteSeer URL"); GUIGlobals.TABLE_ICONS.put("citeseerurl", label); label = new JLabel(IconTheme.JabRefIcon.WWW.getSmallIcon()); label.setToolTipText(Localization.lang("Open") + " ArXiv URL"); GUIGlobals.TABLE_ICONS.put(FieldName.EPRINT, label); label = new JLabel(IconTheme.JabRefIcon.DOI.getSmallIcon()); label.setToolTipText(Localization.lang("Open") + " DOI " + Localization.lang("web link")); GUIGlobals.TABLE_ICONS.put(FieldName.DOI, label); label = new JLabel(IconTheme.JabRefIcon.FILE.getSmallIcon()); label.setToolTipText(Localization.lang("Open") + " PS"); GUIGlobals.TABLE_ICONS.put(FieldName.PS, label); label = new JLabel(IconTheme.JabRefIcon.FOLDER.getSmallIcon()); label.setToolTipText(Localization.lang("Open folder")); GUIGlobals.TABLE_ICONS.put(FieldName.FOLDER, label); label = new JLabel(IconTheme.JabRefIcon.FILE.getSmallIcon()); label.setToolTipText(Localization.lang("Open file")); GUIGlobals.TABLE_ICONS.put(FieldName.FILE, label); for (ExternalFileType fileType : ExternalFileTypes.getInstance().getExternalFileTypeSelection()) { label = new JLabel(fileType.getIcon()); label.setToolTipText(Localization.lang("Open %0 file", fileType.getName())); GUIGlobals.TABLE_ICONS.put(fileType.getName(), label); } SpecialFieldViewModel relevanceViewModel = new SpecialFieldViewModel(SpecialField.RELEVANCE); label = new JLabel(relevanceViewModel.getRepresentingIcon()); label.setToolTipText(relevanceViewModel.getLocalization()); GUIGlobals.TABLE_ICONS.put(SpecialField.RELEVANCE.getFieldName(), label); SpecialFieldViewModel qualityViewModel = new SpecialFieldViewModel(SpecialField.QUALITY); label = new JLabel(qualityViewModel.getRepresentingIcon()); label.setToolTipText(qualityViewModel.getLocalization()); GUIGlobals.TABLE_ICONS.put(SpecialField.QUALITY.getFieldName(), label); // Ranking item in the menu uses one star SpecialFieldViewModel rankViewModel = new SpecialFieldViewModel(SpecialField.RANKING); label = new JLabel(rankViewModel.getRepresentingIcon()); label.setToolTipText(rankViewModel.getLocalization()); GUIGlobals.TABLE_ICONS.put(SpecialField.RANKING.getFieldName(), label); // Priority icon used for the menu SpecialFieldViewModel priorityViewModel = new SpecialFieldViewModel(SpecialField.PRIORITY); label = new JLabel(priorityViewModel.getRepresentingIcon()); label.setToolTipText(priorityViewModel.getLocalization()); GUIGlobals.TABLE_ICONS.put(SpecialField.PRIORITY.getFieldName(), label); // Read icon used for menu SpecialFieldViewModel readViewModel = new SpecialFieldViewModel(SpecialField.READ_STATUS); label = new JLabel(readViewModel.getRepresentingIcon()); label.setToolTipText(readViewModel.getLocalization()); GUIGlobals.TABLE_ICONS.put(SpecialField.READ_STATUS.getFieldName(), label); // Print icon used for menu SpecialFieldViewModel printedViewModel = new SpecialFieldViewModel(SpecialField.PRINTED); label = new JLabel(printedViewModel.getRepresentingIcon()); label.setToolTipText(printedViewModel.getLocalization()); GUIGlobals.TABLE_ICONS.put(SpecialField.PRINTED.getFieldName(), label); if (Globals.prefs.getBoolean(JabRefPreferences.EDITOR_EMACS_KEYBINDINGS)) { EmacsKeyBindings.load(); } // Set up entry editor colors, first time: GUIGlobals.updateEntryEditorColors(); GUIGlobals.currentFont = new Font(Globals.prefs.get(JabRefPreferences.FONT_FAMILY), Globals.prefs.getInt(JabRefPreferences.FONT_STYLE), Globals.prefs.getInt(JabRefPreferences.FONT_SIZE)); } public static void setFont(int size) { currentFont = new Font(currentFont.getFamily(), currentFont.getStyle(), size); // update preferences Globals.prefs.putInt(JabRefPreferences.FONT_SIZE, size); } }