package ctagsinterface.options; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import javax.swing.InputVerifier; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import org.gjt.sp.jedit.AbstractOptionPane; import org.gjt.sp.jedit.EditBus; import org.gjt.sp.jedit.jEdit; import org.gjt.sp.jedit.msg.PropertiesChanged; import ctagsinterface.main.CtagsInterfacePlugin; @SuppressWarnings("serial") public class GeneralOptionPane extends AbstractOptionPane { static public final String OPTION = CtagsInterfacePlugin.OPTION; static public final String MESSAGE = CtagsInterfacePlugin.MESSAGE; static public final String CTAGS = OPTION + "ctags"; static public final String CMD = OPTION + "cmd"; static public final String PATTERN = OPTION + "pattern"; static public final String UPDATE_ON_LOAD = OPTION + "updateOnLoad"; static public final String UPDATE_ON_SAVE = OPTION + "updateOnSave"; static public final String TOOLTIPS = OPTION + "tooltips"; static public final String COMPLETE_DESC = OPTION + "completeDesc"; static public final String MATCH_LANGUAGE = OPTION + "matchLanguage"; static public final String PREVIEW_VERTICAL_SPLIT = OPTION + "previewVerticalSplit"; static public final String PREVIEW_TOOLBAR = OPTION + "previewToolbar"; static public final String PREVIEW_WRAP = OPTION + "previewWrap"; static public final String PREVIEW_DELAY = OPTION + "previewDelay"; static public final String SHOW_PROGRESS = OPTION + "showProgress"; static public final String AUTO_CLOSE_PROGRESS = OPTION + "autoCloseProgress"; static private final String CHECK_CTAGS = MESSAGE + "checkCtags"; static private final String BAD_CTAGS_PATH = MESSAGE + "badCtagsPath"; static private final String GOOD_CTAGS_PATH= MESSAGE + "goodCtagsPath"; JTextField ctags; JButton checkCtags; JTextField cmd; JTextField pattern; JCheckBox updateOnLoad; JCheckBox updateOnSave; JCheckBox background; JCheckBox tooltips; JCheckBox completeDesc; JCheckBox matchLanguage; JCheckBox previewVerticalSplitter; JCheckBox previewToolbar; JCheckBox previewWrap; JTextField previewDelay; JCheckBox showProgress; JCheckBox autoCloseProgress; public GeneralOptionPane() { super("CtagsInterface-General"); setBorder(new EmptyBorder(5, 5, 5, 5)); JPanel ctagsPanel = new JPanel(); ctags = new JTextField(jEdit.getProperty(CTAGS), 40); ctagsPanel.add(ctags); checkCtags = new JButton(jEdit.getProperty(CHECK_CTAGS)); ctagsPanel.add(checkCtags); checkCtags.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { checkInstall(); } }); addComponent(jEdit.getProperty(MESSAGE + "ctags"), ctagsPanel); cmd = new JTextField(jEdit.getProperty(CMD), 40); addComponent(jEdit.getProperty(MESSAGE + "cmd"), cmd); pattern = new JTextField(jEdit.getProperty(PATTERN), 40); addComponent(jEdit.getProperty(MESSAGE + "pattern"), pattern); updateOnLoad = new JCheckBox(jEdit.getProperty(MESSAGE + "updateOnLoad"), getUpdateOnLoad()); addComponent(updateOnLoad); updateOnSave = new JCheckBox(jEdit.getProperty(MESSAGE + "updateOnSave"), getUpdateOnSave()); addComponent(updateOnSave); tooltips = new JCheckBox(jEdit.getProperty(MESSAGE + "showTooltips"), getShowTooltips()); addComponent(tooltips); completeDesc = new JCheckBox(jEdit.getProperty(MESSAGE + "completeDesc"), getCompleteDesc()); addComponent(completeDesc); matchLanguage = new JCheckBox(jEdit.getProperty(MESSAGE + "matchLanguage"), getMatchLanguage()); addComponent(matchLanguage); matchLanguage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { if (matchLanguage.isSelected()) { JOptionPane.showMessageDialog(null, jEdit.getProperty(MESSAGE + "matchLanguageMessage")); } } }); JPanel previewPanel = new JPanel(); previewPanel.setLayout(new GridLayout(0, 1)); previewPanel.setBorder(new TitledBorder(jEdit.getProperty( MESSAGE + "previewTitle"))); previewVerticalSplitter = new JCheckBox(jEdit.getProperty(MESSAGE + "previewVerticalSplit"), getPreviewVerticalSplit()); previewPanel.add(previewVerticalSplitter); previewToolbar = new JCheckBox(jEdit.getProperty(MESSAGE + "previewToolbar"), getPreviewToolbar()); previewPanel.add(previewToolbar); previewWrap = new JCheckBox(jEdit.getProperty(MESSAGE + "previewWrap"), jEdit.getBooleanProperty(PREVIEW_WRAP)); previewPanel.add(previewWrap); JPanel previewDelayPanel = new JPanel(new BorderLayout()); previewDelayPanel.add(new JLabel(jEdit.getProperty(MESSAGE + "previewDelay")), BorderLayout.WEST); previewDelay = new JTextField(String.valueOf( jEdit.getIntegerProperty(PREVIEW_DELAY)), 5); previewDelay.setInputVerifier(new InputVerifier() { public boolean verify(JComponent c) { try { Integer.valueOf(previewDelay.getText()); } catch (Exception e) { return false; } return true; } }); previewDelayPanel.add(previewDelay, BorderLayout.EAST); previewPanel.add(previewDelayPanel); addComponent(previewPanel); showProgress = new JCheckBox(jEdit.getProperty(MESSAGE + "showProgress"), getShowProgress()); addComponent(showProgress); autoCloseProgress = new JCheckBox(jEdit.getProperty(MESSAGE + "autoCloseProgress"), getAutoCloseProgress()); addComponent(autoCloseProgress); } @Override protected void _save() { jEdit.setProperty(CTAGS, ctags.getText()); jEdit.setProperty(CMD, cmd.getText()); jEdit.setProperty(PATTERN, pattern.getText()); jEdit.setBooleanProperty(UPDATE_ON_LOAD, updateOnLoad.isSelected()); jEdit.setBooleanProperty(UPDATE_ON_SAVE, updateOnSave.isSelected()); jEdit.setBooleanProperty(TOOLTIPS, tooltips.isSelected()); jEdit.setBooleanProperty(COMPLETE_DESC, completeDesc.isSelected()); jEdit.setBooleanProperty(MATCH_LANGUAGE, matchLanguage.isSelected()); jEdit.setBooleanProperty(PREVIEW_VERTICAL_SPLIT, previewVerticalSplitter.isSelected()); jEdit.setBooleanProperty(PREVIEW_TOOLBAR, previewToolbar.isSelected()); jEdit.setBooleanProperty(PREVIEW_WRAP, previewWrap.isSelected()); jEdit.setIntegerProperty(PREVIEW_DELAY, Integer.valueOf(previewDelay.getText())); jEdit.setBooleanProperty(SHOW_PROGRESS, showProgress.isSelected()); jEdit.setBooleanProperty(AUTO_CLOSE_PROGRESS, autoCloseProgress.isSelected()); EditBus.send(new PropertiesChanged(null)); } private boolean checkInstall() { String path = ctags.getText(); File f = new File(path); if ((! f.exists()) || (! f.canExecute())) { JOptionPane.showMessageDialog(this, jEdit.getProperty(BAD_CTAGS_PATH)); return false; } JOptionPane.showMessageDialog(this, jEdit.getProperty(GOOD_CTAGS_PATH)); return true; } public static String getCtags() { String s = jEdit.getProperty(CTAGS); if (s == null || s.length() == 0) return "ctags"; return s; } public static String getCmd() { String s = jEdit.getProperty(CMD); if (s == null) return ""; return s; } public static String getPattern() { String s = jEdit.getProperty(PATTERN); if (s == null) return ""; return s; } public static boolean getUpdateOnSave() { return jEdit.getBooleanProperty(UPDATE_ON_SAVE, true); } public static boolean getUpdateOnLoad() { return jEdit.getBooleanProperty(UPDATE_ON_LOAD, true); } public static boolean getShowTooltips() { return jEdit.getBooleanProperty(TOOLTIPS, true); } public static boolean getCompleteDesc() { return jEdit.getBooleanProperty(COMPLETE_DESC, true); } public static boolean getMatchLanguage() { return jEdit.getBooleanProperty(MATCH_LANGUAGE, false); } public static boolean getPreviewVerticalSplit() { return jEdit.getBooleanProperty(PREVIEW_VERTICAL_SPLIT, true); } public static boolean getPreviewToolbar() { return jEdit.getBooleanProperty(PREVIEW_TOOLBAR, true); } public static boolean getPreviewWrap() { return jEdit.getBooleanProperty(PREVIEW_WRAP, true); } public static void setPreviewWrap(boolean wrap) { jEdit.setBooleanProperty(PREVIEW_WRAP, wrap); } public static int getPreviewDelay() { return jEdit.getIntegerProperty(PREVIEW_DELAY, 0); } public static boolean getShowProgress() { return jEdit.getBooleanProperty(SHOW_PROGRESS, true); } public static boolean getAutoCloseProgress() { return jEdit.getBooleanProperty(AUTO_CLOSE_PROGRESS, true); } }