package net.sf.jabref; import java.awt.BorderLayout; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import net.sf.jabref.journals.JournalAbbreviations; import net.sf.jabref.remote.RemoteListener; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.layout.FormLayout; public class AdvancedTab extends JPanel implements PrefsTab { JabRefPreferences _prefs; JabRefFrame _frame; HelpDialog helpDiag; HelpAction remoteHelp; JPanel pan = new JPanel(), lnf = new JPanel(); JLabel lab; JCheckBox useDefault, useRemoteServer, useNativeFileDialogOnMac, filechooserDisableRename, useIEEEAbrv, biblatexMode; JTextField className, remoteServerPort; JButton def1 = new JButton(Globals.lang("Default")), def2 = new JButton(Globals.lang("Default")); JPanel p1 = new JPanel(), p2 = new JPanel(); String oldLnf = ""; boolean oldUseDef, oldBiblMode=false; int oldPort = -1; public AdvancedTab(JabRefPreferences prefs, HelpDialog diag) { _prefs = prefs; remoteHelp = new HelpAction(diag, GUIGlobals.remoteHelp, "Help", GUIGlobals.getIconUrl("helpSmall")); useDefault = new JCheckBox(Globals.lang("Use other look and feel")); useRemoteServer = new JCheckBox(Globals.lang("Listen for remote operation on port")+":"); useNativeFileDialogOnMac = new JCheckBox(Globals.lang("Use native file dialog")); filechooserDisableRename = new JCheckBox(Globals.lang("Disable file renaming in non-native file dialog")); useIEEEAbrv = new JCheckBox(Globals.lang("Use IEEE LaTeX abbreviations")); biblatexMode = new JCheckBox(Globals.lang("BibLaTeX mode")); remoteServerPort = new JTextField(); className = new JTextField(50); final JTextField clName = className; useDefault.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { clName.setEnabled(((JCheckBox)e.getSource()).isSelected()); } }); FormLayout layout = new FormLayout ("1dlu, 8dlu, left:pref, 4dlu, fill:3dlu",//, 4dlu, fill:pref",// 4dlu, left:pref, 4dlu", ""); DefaultFormBuilder builder = new DefaultFormBuilder(layout); JPanel pan = new JPanel(); if (!Globals.ON_MAC) { builder.appendSeparator(Globals.lang("Look and feel")); JLabel lab = new JLabel(Globals.lang("Default look and feel")+": " +(Globals.ON_WIN ? GUIGlobals.windowsDefaultLookAndFeel : GUIGlobals.linuxDefaultLookAndFeel)); builder.nextLine(); builder.append(pan); builder.append(lab); builder.nextLine(); builder.append(pan); builder.append(useDefault); builder.nextLine(); builder.append(pan); JPanel pan2 = new JPanel(); lab = new JLabel(Globals.lang("Class name")+":"); pan2.add(lab); pan2.add(className); builder.append(pan2); builder.nextLine(); builder.append(pan); lab = new JLabel(Globals.lang("Note that you must specify the fully qualified class name for the look and feel,")); builder.append(lab); builder.nextLine(); builder.append(pan); lab = new JLabel(Globals.lang("and the class must be available in your classpath next time you start JabRef.")); builder.append(lab); builder.nextLine(); } builder.appendSeparator(Globals.lang("Remote operation")); builder.nextLine(); builder.append(new JPanel()); builder.append(new JLabel("<html>"+Globals.lang("This feature lets new files be opened or imported into an " +"already running instance of JabRef<BR>instead of opening a new instance. For instance, this " +"is useful when you open a file in JabRef<br>from your web browser." +"<BR>Note that this will prevent you from running more than one instance of JabRef at a time.")+"</html>")); builder.nextLine(); builder.append(new JPanel()); JPanel p = new JPanel(); p.add(useRemoteServer); p.add(remoteServerPort); p.add(remoteHelp.getIconButton()); builder.append(p); //if (Globals.ON_MAC) { builder.nextLine(); builder.appendSeparator(Globals.lang("File dialog")); builder.nextLine(); builder.append(new JPanel()); builder.append(useNativeFileDialogOnMac); builder.nextLine(); builder.append(new JPanel()); builder.append(filechooserDisableRename); //} // IEEE builder.nextLine(); builder.appendSeparator(Globals.lang("Search IEEEXplore")); builder.nextLine(); builder.append(new JPanel()); builder.append(useIEEEAbrv); builder.nextLine(); builder.appendSeparator(Globals.lang("BibLaTeX mode")); builder.append(new JPanel()); builder.append(biblatexMode); pan = builder.getPanel(); pan.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); setLayout(new BorderLayout()); add(pan, BorderLayout.CENTER); } public void setValues() { oldUseDef = _prefs.getBoolean("useDefaultLookAndFeel"); oldLnf = _prefs.get("lookAndFeel"); useDefault.setSelected(!oldUseDef); className.setText(oldLnf); className.setEnabled(!oldUseDef); useRemoteServer.setSelected(_prefs.getBoolean("useRemoteServer")); oldPort = _prefs.getInt("remoteServerPort"); remoteServerPort.setText(String.valueOf(oldPort)); useNativeFileDialogOnMac.setSelected(Globals.prefs.getBoolean("useNativeFileDialogOnMac")); filechooserDisableRename.setSelected(Globals.prefs.getBoolean("filechooserDisableRename")); useIEEEAbrv.setSelected(Globals.prefs.getBoolean("useIEEEAbrv")); oldBiblMode = Globals.prefs.getBoolean("biblatexMode"); biblatexMode.setSelected(oldBiblMode); } public void storeSettings() { _prefs.putBoolean("useDefaultLookAndFeel", !useDefault.isSelected()); _prefs.put("lookAndFeel", className.getText()); _prefs.putBoolean("useNativeFileDialogOnMac", useNativeFileDialogOnMac.isSelected()); _prefs.putBoolean("filechooserDisableRename", filechooserDisableRename.isSelected()); UIManager.put("FileChooser.readOnly", filechooserDisableRename.isSelected()); _prefs.putBoolean("useIEEEAbrv", useIEEEAbrv.isSelected()); if (useIEEEAbrv.isSelected()) Globals.journalAbbrev = new JournalAbbreviations("/resource/IEEEJournalList.txt"); try { int port = Integer.parseInt(remoteServerPort.getText()); if (port != oldPort) { _prefs.putInt("remoteServerPort", port); /*JOptionPane.showMessageDialog(null, Globals.lang("You have changed the menu and label font size. " + "You must restart JabRef for this to come into effect."), Globals.lang("Changed font settings"), JOptionPane.WARNING_MESSAGE);*/ } } catch (NumberFormatException ex) { ex.printStackTrace(); } _prefs.putBoolean("useRemoteServer", useRemoteServer.isSelected()); if (useRemoteServer.isSelected() && (JabRef.remoteListener == null)) { // Start the listener now. JabRef.remoteListener = RemoteListener.openRemoteListener(JabRef.singleton); if (JabRef.remoteListener != null) { JabRef.remoteListener.start(); } } else if (!useRemoteServer.isSelected() && (JabRef.remoteListener != null)) { JabRef.remoteListener.disable(); JabRef.remoteListener = null; } _prefs.putBoolean("biblatexMode", biblatexMode.isSelected()); if ((useDefault.isSelected() == oldUseDef) || !oldLnf.equals(className.getText())) { JOptionPane.showMessageDialog(null, Globals.lang("You have changed the look and feel setting. " +"You must restart JabRef for this to come into effect."), Globals.lang("Changed look and feel settings"), JOptionPane.WARNING_MESSAGE); } if (biblatexMode.isSelected() != oldBiblMode) { JOptionPane.showMessageDialog(null, Globals.lang("You have toggled the BibLaTeX mode. " +"You must restart JabRef for this change to come into effect."), Globals.lang("BibLaTeX mode"), JOptionPane.WARNING_MESSAGE); } } public boolean readyToClose() { try { int portNumber = Integer.parseInt(remoteServerPort.getText()); if (portNumber > 1024 && portNumber <= 65535) return true; // Ok, the number was legal. else { JOptionPane.showMessageDialog (null, Globals.lang("You must enter an integer value in the interval 1025-65535 in the text field for") + " '" + Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"), JOptionPane.ERROR_MESSAGE); return false; } } catch (NumberFormatException ex) { JOptionPane.showMessageDialog (null, Globals.lang("You must enter an integer value in the interval 1025-65535 in the text field for") + " '" + Globals.lang("Remote server port") + "'", Globals.lang("Remote server port"), JOptionPane.ERROR_MESSAGE); return false; } } public String getTabName() { return Globals.lang("Advanced"); } }