package jreepad; import java.awt.Component; import java.awt.Dimension; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.JTextField; import javax.swing.SpinnerNumberModel; import javax.swing.SwingConstants; /** * The preferences dialog. * * @version $Id$ */ public class PrefsDialog extends JDialog { private JCheckBox loadLastFileOnOpenCheckBox; private JCheckBox autoDateNodesCheckBox; private JCheckBox autoDetectHtmlCheckBox; private JComboBox fileEncodingSelector; private JComboBox fileFormatSelector; private JCheckBox showGreenStripCheckBox; private JTextField dateFormatField; private JComboBox defaultSearchModeSelector; private JSpinner wrapWidthSpinner; private Box webSearchPrefsBox; private JTextField webSearchNameField; private JTextField webSearchPrefixField; private JTextField webSearchPostfixField; private JComboBox htmlExportModeSelector; private JCheckBox urlsToLinksCheckBox; private JComboBox htmlExportAnchorTypeSelector; private JButton prefsOkButton; private JButton prefsCancelButton; private JButton prefsDateInfoButton; private PrefsDialog self; // bleh - yucky but needed by actionlistener public PrefsDialog(Frame owner) { super(owner, JreepadViewer.lang.getString("PREFS_WINDOWTITLE"), true); setVisible(false); self = this; Box hBox, vBox; vBox = Box.createVerticalBox(); vBox.setAlignmentX(Component.LEFT_ALIGNMENT); Box genPrefVBox = Box.createVerticalBox(); vBox.setAlignmentX(Component.LEFT_ALIGNMENT); genPrefVBox.add(loadLastFileOnOpenCheckBox = new JCheckBox(JreepadViewer.lang .getString("PREFS_LOADLASTFILEONOPEN"), getPrefs().loadLastFileOnOpen)); loadLastFileOnOpenCheckBox.setHorizontalAlignment(SwingConstants.LEFT); loadLastFileOnOpenCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); genPrefVBox.add(autoDateNodesCheckBox = new JCheckBox(JreepadViewer.lang .getString("PREFS_AUTODATE_NODES"), getPrefs().autoDateInArticles)); autoDateNodesCheckBox.setHorizontalAlignment(SwingConstants.LEFT); autoDateNodesCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_DATEFORMAT_LABEL"), SwingConstants.LEFT)); dateFormatField = new JTextField(getPrefs().dateFormat, 20); hBox.add(dateFormatField); //hBox.add(new JLabel("(" + JreepadViewer.lang.getString("PREFS_DATEFORMAT_LABEL2") + ")", SwingConstants.LEFT)); hBox.add(prefsDateInfoButton = new JButton(JreepadViewer.lang.getString("INFO"))); prefsDateInfoButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(self, JreepadViewer.lang.getString("HELP_DATEFORMAT") , JreepadViewer.lang.getString("HELP_DATEFORMAT_TITLE"), JOptionPane.INFORMATION_MESSAGE); } }); genPrefVBox.add(hBox); genPrefVBox.add(autoDetectHtmlCheckBox = new JCheckBox(JreepadViewer.lang .getString("PREFS_AUTODETECT_HTML"), getPrefs().autoDetectHtmlArticles)); autoDetectHtmlCheckBox.setHorizontalAlignment(SwingConstants.LEFT); autoDetectHtmlCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); // hBox.add(Box.createGlue()); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_CHAR_ENCODING"), SwingConstants.LEFT)); hBox.add(fileEncodingSelector = new JComboBox(JreepadPrefs.characterEncodings)); fileEncodingSelector.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(Box.createGlue()); genPrefVBox.add(hBox); fileEncodingSelector.setSelectedIndex(getPrefs().fileEncoding); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); // hBox.add(Box.createGlue()); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_SAVE_FILETYPE"), SwingConstants.LEFT)); hBox.add(fileFormatSelector = new JComboBox(JreepadPrefs.mainFileTypes)); fileFormatSelector.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(Box.createGlue()); genPrefVBox.add(hBox); fileFormatSelector.setSelectedIndex(getPrefs().mainFileType); // genPrefVBox.add(quoteCsvCheckBox = new JCheckBox(lang.getString("PREFS_QUOTE_CSV"), // getPrefs().addQuotesToCsvOutput)); // quoteCsvCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); // quoteCsvCheckBox.setHorizontalAlignment(SwingConstants.LEFT); genPrefVBox.add(showGreenStripCheckBox = new JCheckBox(JreepadViewer.lang.getString("PREFS_GREEN_STRIP"), getPrefs().showGreenStrip)); showGreenStripCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); showGreenStripCheckBox.setHorizontalAlignment(SwingConstants.LEFT); JPanel genPanel = new JPanel(); genPanel.setAlignmentX(Component.LEFT_ALIGNMENT); genPanel.add(genPrefVBox); genPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), JreepadViewer.lang.getString("PREFS_GENERAL"))); vBox.add(genPanel); genPanel = new JPanel(); genPanel.setAlignmentX(Component.LEFT_ALIGNMENT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_DEFAULT_LINK_ACTION"), SwingConstants.LEFT)); hBox.add(defaultSearchModeSelector = new JComboBox(new String[] { JreepadViewer.lang.getString("PREFS_DEFAULT_LINK_ACTION_WEBSEARCH"), JreepadViewer.lang.getString("PREFS_DEFAULT_LINK_ACTION_NODESEARCH") })); hBox.add(Box.createGlue()); defaultSearchModeSelector.setSelectedIndex(getPrefs().defaultSearchMode); defaultSearchModeSelector.setAlignmentX(Component.LEFT_ALIGNMENT); genPanel.add(hBox); genPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), JreepadViewer.lang.getString("PREFS_LINK_ACTION_NAME"))); vBox.add(genPanel); genPanel = new JPanel(); genPanel.setAlignmentX(Component.LEFT_ALIGNMENT); genPrefVBox = Box.createVerticalBox(); // hBox = Box.createHorizontalBox(); // hBox.add(wrapToWindowCheckBox = new JCheckBox("Wrap article to window width", // getPrefs().wrapToWindow)); // hBox.add(new JLabel("(won't take effect until you restart Jreepad)")); // genPrefVBox.add(hBox); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_HARDWRAP_WIDTH"), SwingConstants.LEFT)); hBox.add(wrapWidthSpinner = new JSpinner(new SpinnerNumberModel( getPrefs().characterWrapWidth, 1, 1000, 1))); hBox.add(Box.createGlue()); wrapWidthSpinner.setAlignmentX(Component.LEFT_ALIGNMENT); wrapWidthSpinner.getEditor().setAlignmentX(Component.LEFT_ALIGNMENT); // hBox.add(wrapWidthSpinner = new DSpinner(1,1000,getPrefs().characterWrapWidth)); hBox.add(Box.createGlue()); genPrefVBox.add(hBox); genPanel.add(genPrefVBox); genPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), JreepadViewer.lang.getString("PREFS_HARDWRAP_NAME"))); vBox.add(genPanel); // fontsPrefsBox = Box.createHorizontalBox(); // fontsPrefsBox.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), // "Font (for article)")); // Box tempVBox = Box.createHorizontalBox(); // tempVBox.add(new JLabel("Font for tree:")); // tempVBox.add(treeFontFamilySelector = new JComboBox(fonts)); // fontsPrefsBox.add(tempVBox); // tempVBox = Box.createHorizontalBox(); // fontsPrefsBox.add(new JLabel("Font face:")); // fontsPrefsBox.add(articleFontFamilySelector = new JComboBox(fonts)); // fontsPrefsBox.add(tempVBox); // tempVBox = Box.createHorizontalBox(); // tempVBox.add(new JLabel("Font size:")); // fontsPrefsBox.add(articleFontSizeSelector = new JComboBox(fontSizes)); // fontsPrefsBox.add(new JLabel("pt")); // fontsPrefsBox.add(tempVBox); // vBox.add(fontsPrefsBox); webSearchPrefsBox = Box.createVerticalBox(); webSearchPrefsBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_WEBSEARCH_LABEL1"), SwingConstants.LEFT)); hBox.add(webSearchNameField = new JTextField(getPrefs().webSearchName)); webSearchNameField.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_WEBSEARCH_LABEL2"), SwingConstants.LEFT)); hBox.add(Box.createGlue()); webSearchPrefsBox.add(hBox); hBox = Box.createHorizontalBox(); hBox.add(new JLabel("http://", SwingConstants.LEFT)); hBox.add(webSearchPrefixField = new JTextField(getPrefs().webSearchPrefix)); webSearchPrefixField.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_SELECTEDTEXT_PLACEHOLDER"), SwingConstants.LEFT)); hBox.add(webSearchPostfixField = new JTextField(getPrefs().webSearchPostfix)); webSearchPostfixField.setAlignmentX(Component.LEFT_ALIGNMENT); webSearchPrefsBox.add(hBox); JPanel webSearchPanel = new JPanel(); webSearchPanel.setAlignmentX(Component.LEFT_ALIGNMENT); webSearchPanel.add(webSearchPrefsBox); webSearchPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory .createEtchedBorder(), JreepadViewer.lang.getString("PREFS_WEBSEARCH_NAME"))); vBox.add(webSearchPanel); // Now the HTML export options genPanel = new JPanel(); genPanel.setAlignmentX(Component.LEFT_ALIGNMENT); genPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), JreepadViewer.lang.getString("PREFS_HTML_NAME"))); Box htmlVBox = Box.createVerticalBox(); htmlVBox.setAlignmentX(Component.LEFT_ALIGNMENT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); // hBox.add(Box.createGlue()); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_HTML_TREATTEXTAS"), SwingConstants.LEFT)); htmlExportModeSelector = new JComboBox(JreepadArticle.getHtmlExportArticleTypes()); htmlExportModeSelector.setAlignmentX(Component.LEFT_ALIGNMENT); htmlExportModeSelector.setSelectedIndex(getPrefs().htmlExportArticleType); htmlExportModeSelector.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (htmlExportModeSelector.getSelectedIndex() == 2) { urlsToLinksCheckBox.setEnabled(false); urlsToLinksCheckBox.setSelected(false); } else { urlsToLinksCheckBox.setEnabled(true); urlsToLinksCheckBox.setSelected(getPrefs().htmlExportUrlsToLinks); } } }); hBox.add(htmlExportModeSelector); hBox.add(Box.createGlue()); htmlVBox.add(hBox); htmlVBox.add(urlsToLinksCheckBox = new JCheckBox(JreepadViewer.lang.getString("PREFS_HTML_AUTOLINK"), getPrefs().htmlExportUrlsToLinks)); urlsToLinksCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); urlsToLinksCheckBox.setHorizontalAlignment(SwingConstants.LEFT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.LEFT_ALIGNMENT); // hBox.add(Box.createGlue()); hBox.add(new JLabel(JreepadViewer.lang.getString("PREFS_HTML_INTERNALLINKS"), SwingConstants.LEFT)); htmlExportAnchorTypeSelector = new JComboBox(JreepadArticle.getHtmlExportAnchorLinkTypes()); htmlExportAnchorTypeSelector.setSelectedIndex(getPrefs().htmlExportAnchorLinkType); htmlExportAnchorTypeSelector.setAlignmentX(Component.LEFT_ALIGNMENT); hBox.add(htmlExportAnchorTypeSelector); hBox.add(Box.createGlue()); htmlVBox.add(hBox); genPanel.add(htmlVBox); vBox.add(genPanel); genPanel = new JPanel(); genPanel.setAlignmentX(Component.LEFT_ALIGNMENT); hBox = Box.createHorizontalBox(); hBox.setAlignmentX(Component.CENTER_ALIGNMENT); hBox.add(prefsOkButton = new JButton(JreepadViewer.lang.getString("OK"))); hBox.add(prefsCancelButton = new JButton(JreepadViewer.lang.getString("CANCEL"))); prefsOkButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { getPrefs().loadLastFileOnOpen = loadLastFileOnOpenCheckBox.isSelected(); getPrefs().autoDateInArticles = autoDateNodesCheckBox.isSelected(); getPrefs().autoDetectHtmlArticles = autoDetectHtmlCheckBox.isSelected(); getPrefs().webSearchName = webSearchNameField.getText(); getPrefs().webSearchPrefix = webSearchPrefixField.getText(); getPrefs().webSearchPostfix = webSearchPostfixField.getText(); getPrefs().defaultSearchMode = defaultSearchModeSelector.getSelectedIndex(); getPrefs().fileEncoding = fileEncodingSelector.getSelectedIndex(); getPrefs().mainFileType = fileFormatSelector.getSelectedIndex(); getPrefs().characterWrapWidth = ((Integer)(wrapWidthSpinner.getValue())) .intValue(); // getPrefs().characterWrapWidth = wrapWidthSpinner.getValue(); // setFontsFromPrefsBox(); // getPrefs().wrapToWindow = wrapToWindowCheckBox.isSelected(); // theJreepad.setEditorPaneKit(); getPrefs().htmlExportArticleType = htmlExportModeSelector.getSelectedIndex(); getPrefs().htmlExportAnchorLinkType = htmlExportAnchorTypeSelector .getSelectedIndex(); // getPrefs().addQuotesToCsvOutput = quoteCsvCheckBox.isSelected(); getPrefs().showGreenStrip = showGreenStripCheckBox.isSelected(); String dateFormat = dateFormatField.getText(); try { new SimpleDateFormat(dateFormat); } catch (IllegalArgumentException ex) { JOptionPane.showMessageDialog(PrefsDialog.this, JreepadViewer.lang.getString("MSG_INVALID_DATEFORMAT"), JreepadViewer.lang.getString("TITLE_INVALID_DATEFORMAT") , JOptionPane.ERROR_MESSAGE); return; } getPrefs().dateFormat = dateFormat; // If exporting as HTML then we ignore this checkbox if (htmlExportModeSelector.getSelectedIndex() != 2) getPrefs().htmlExportUrlsToLinks = urlsToLinksCheckBox.isSelected(); getPrefs().save(); setVisible(false); } }); prefsCancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setVisible(false); } }); genPanel.add(hBox); vBox.add(genPanel); getContentPane().add(vBox); // Finished establishing the prefs dialogue box } private static JreepadPrefs getPrefs() { return JreepadView.getPrefs(); } }