X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fcom%2Fdogcows%2FVimCoder.java;h=5841a42e7772fe6847d02793dded2e2a06b86831;hb=8be63558ddcd4c6acdff9c3f3f9b48948df81fce;hp=658bae13051ddc080a266bd9610cec8bf721929e;hpb=28c8fae03b2294d6486233cd62f4d4d9d11603ca;p=chaz%2Fvimcoder diff --git a/src/com/dogcows/VimCoder.java b/src/com/dogcows/VimCoder.java index 658bae1..5841a42 100644 --- a/src/com/dogcows/VimCoder.java +++ b/src/com/dogcows/VimCoder.java @@ -2,13 +2,12 @@ package com.dogcows; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeListener; +import java.awt.event.*; import java.io.*; import java.text.SimpleDateFormat; import java.util.*; import javax.swing.*; +import javax.swing.border.*; import com.topcoder.client.contestApplet.common.Common; import com.topcoder.client.contestApplet.common.LocalPreferences; @@ -28,23 +27,23 @@ public class VimCoder /** * The name and version of this plugin. */ - public final static String version = "VimCoder 0.3"; + public final static String version = "VimCoder 0.3.5"; /** * The website of the plugin project. */ - public final static String website = "http://www.dogcows.com/vimcoder"; + public final static String website = "http://github.com/chazmcgarvey/vimcoder"; /** * The first part of the command used to invoke the Vim server. */ - private static String vimCommand = "gvim"; + private static String vimCommand = "gvim"; /** * The path to the main VimCoder directory. */ - private static File rootDir; + private static File rootDir; static { if (System.getProperty("os.name").toLowerCase().equals("win")) @@ -52,29 +51,35 @@ public class VimCoder vimCommand = "C:\\WINDOWS\\gvim.bat"; } rootDir = new File(System.getProperty("user.home") + - System.getProperty("file.separator") + ".vimcoder"); + System.getProperty("file.separator") + ".vimcoder"); } + /** + * Whether or not to use the contest name and point value as problem + * directory names. + */ + private static boolean contestDirNames = false; + /** * The panel given to the Arena applet when it is requested. */ - private JPanel panel; + private JPanel panel; /** * The text widget where log messages are appended. */ - private JTextArea logArea; + private JTextArea logArea; /** * The current editor object (or null if there is none). */ - private Editor editor; + private Editor editor; /** * The configuration panel. */ - private JDialog configDialog; + private JDialog configDialog; /** @@ -87,6 +92,11 @@ public class VimCoder */ private final static String ROOTDIR = "com.dogcows.VimCoder.config.rootdir"; + /** + * The key for the problem directory name preference. + */ + private final static String CONTESTDIRNAMES = "com.dogcows.VimCoder.config.contestdirnames"; + /** * The preferences object for storing plugin settings. */ @@ -111,6 +121,16 @@ public class VimCoder return rootDir; } + /** + * Get whether or not to save problems in a human-readable directory + * structure. + * @return The directory name setting. + */ + public static boolean isContestDirNames() + { + return contestDirNames; + } + /** * Instantiate the entry point of the editor plugin. @@ -187,8 +207,7 @@ public class VimCoder } catch (Exception exception) { - logError("Failed to get source code: " + - exception.getLocalizedMessage()); + logError("Failed to get source code: " + exception.getLocalizedMessage()); throw exception; } } @@ -207,7 +226,7 @@ public class VimCoder catch (Exception exception) { logError("Failed to save the source given by the server: " + - exception.getLocalizedMessage()); + exception.getLocalizedMessage()); return; } } @@ -221,8 +240,7 @@ public class VimCoder * statement. */ public void setProblemComponent(ProblemComponentModel component, - Language language, - Renderer renderer) + Language language, Renderer renderer) { try { @@ -231,7 +249,7 @@ public class VimCoder catch (Exception exception) { logError("An error occured while loading the problem: " + - exception.getLocalizedMessage()); + exception.getLocalizedMessage()); } } @@ -240,65 +258,89 @@ public class VimCoder */ public void configure() { + final int border = 10; + final int inset = 2; + loadConfiguration(); configDialog = new JDialog(); - Container pane = configDialog.getContentPane(); + Container container = configDialog.getContentPane(); + container.setForeground(Common.FG_COLOR); + container.setBackground(Common.WPB_COLOR); + + JPanel pane = new JPanel(); + container.add(pane); + + BoxLayout boxLayout = new BoxLayout(pane, BoxLayout.Y_AXIS); + pane.setLayout(boxLayout); + pane.setBorder(BorderFactory.createEmptyBorder(border, border, border, border)); + + JPanel fieldPanel = new JPanel(new GridBagLayout()); + pane.add(fieldPanel); + pane.add(Box.createRigidArea(new Dimension(0, border))); - pane.setPreferredSize(new Dimension(550, 135)); - pane.setLayout(new GridBagLayout()); - pane.setForeground(Common.FG_COLOR); - pane.setBackground(Common.WPB_COLOR); GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.HORIZONTAL; + c.insets = new Insets(inset, inset, inset, inset); - JLabel rootDirLabel = new JLabel("Storage Directory:", SwingConstants.RIGHT); + JLabel rootDirLabel = new JLabel("Storage Directory:"); rootDirLabel.setForeground(Common.FG_COLOR); - c.fill = GridBagConstraints.HORIZONTAL; - c.insets = new Insets(5, 5, 5, 5); c.gridx = 0; c.gridy = 0; c.gridwidth = 1; - pane.add(rootDirLabel, c); + fieldPanel.add(rootDirLabel, c); - final JTextField rootDirField = new JTextField(rootDir.getPath(), 25); + final JTextField rootDirField = new JTextField(rootDir.getPath()); + rootDirField.setPreferredSize(new Dimension(0, 24)); c.gridx = 1; c.gridy = 0; - pane.add(rootDirField, c); + c.weightx = 1.0; + fieldPanel.add(rootDirField, c); JButton browseButton = new JButton("Browse"); c.gridx = 2; c.gridy = 0; + c.weightx = 0.0; c.anchor = GridBagConstraints.BASELINE_LEADING; - pane.add(browseButton, c); + fieldPanel.add(browseButton, c); + + final JCheckBox contestDirNamesButton = new JCheckBox( + "Store problems according to contest name and point value.", + contestDirNames + ); + contestDirNamesButton.setForeground(Common.FG_COLOR); + contestDirNamesButton.setBackground(Common.WPB_COLOR); + contestDirNamesButton.setFont(rootDirLabel.getFont()); + c.gridx = 1; + c.gridy = 1; + c.gridwidth = 2; + fieldPanel.add(contestDirNamesButton, c); - JLabel vimCommandLabel = new JLabel("Vim Command:", SwingConstants.RIGHT); + JLabel vimCommandLabel = new JLabel("Vim Command:"); vimCommandLabel.setForeground(Common.FG_COLOR); - c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; - c.gridy = 1; - pane.add(vimCommandLabel, c); + c.gridy = 2; + c.gridwidth = 1; + fieldPanel.add(vimCommandLabel, c); - final JTextField vimCommandField = new JTextField(vimCommand, 25); + final JTextField vimCommandField = new JTextField(vimCommand); + vimCommandField.setPreferredSize(new Dimension(0, 24)); c.gridx = 1; - c.gridy = 1; + c.gridy = 2; + c.weightx = 1.0; c.gridwidth = 2; - pane.add(vimCommandField, c); + fieldPanel.add(vimCommandField, c); - JButton closeButton = new JButton("Cancel"); - c.fill = GridBagConstraints.NONE; - c.gridx = 1; - c.gridy = 2; - c.gridwidth = 1; - c.anchor = GridBagConstraints.EAST; - pane.add(closeButton, c); + JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.TRAILING, inset, inset)); + buttonPanel.setPreferredSize(new Dimension(400, 24 + 2 * inset)); + pane.add(buttonPanel); JButton saveButton = new JButton("Save"); - c.fill = GridBagConstraints.HORIZONTAL; - c.gridx = 2; - c.gridy = 2; - c.anchor = GridBagConstraints.EAST; - pane.add(saveButton, c); - configDialog.getRootPane().setDefaultButton(saveButton); + buttonPanel.add(saveButton); + buttonPanel.add(Box.createRigidArea(new Dimension(1, 0))); + + JButton closeButton = new JButton("Close"); + buttonPanel.add(closeButton); browseButton.addActionListener(new ActionListener() { @@ -331,13 +373,14 @@ public class VimCoder { prefs.setProperty(VIMCOMMAND, vimCommandField.getText()); prefs.setProperty(ROOTDIR, rootDirField.getText()); - configDialog.dispose(); + prefs.setProperty(CONTESTDIRNAMES, String.valueOf(contestDirNamesButton.isSelected())); + JOptionPane.showMessageDialog(null, "Preferences were saved successfully."); } }); configDialog.setTitle("VimCoder Preferences"); configDialog.pack(); - configDialog.setLocationByPlatform(true); + configDialog.setLocationRelativeTo(null); // Center dialog in screen. configDialog.setModalityType(Dialog.DEFAULT_MODALITY_TYPE); configDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); configDialog.setVisible(true); @@ -354,6 +397,9 @@ public class VimCoder String dir = prefs.getProperty(ROOTDIR); if (dir != null) rootDir = new File(dir); + + String cn = prefs.getProperty(CONTESTDIRNAMES); + if (cn != null) contestDirNames = Boolean.parseBoolean(cn); } @@ -401,3 +447,4 @@ public class VimCoder } } +// vim:noet:ts=8