Update of /cvsroot/marathonman/marathon/src/net/sourceforge/marathon/display/menu In directory sc8-pr-cvs1:/tmp/cvs-serv17285/src/net/sourceforge/marathon/display/menu Added Files: ContextMenu.java DataContextMenu.java DirectoryContextMenu.java EditableContextMenu.java TestContextMenu.java Log Message: updated the way the tree context menus are created --- NEW FILE: ContextMenu.java --- package net.sourceforge.marathon.display.menu; import net.sourceforge.marathon.configuration.Configuration; import net.sourceforge.marathon.display.Display; import javax.swing.*; import java.io.File; import java.text.MessageFormat; public abstract class ContextMenu { private MessageFormat extensions = new MessageFormat("/properties/component[@name=\"General\"]/file[@type=\"{0}\"]/@extension"); protected Display display; protected JTree tree; public ContextMenu(Display display, JTree tree) { this.display = display; this.tree = tree; } public void populate(File file, JPopupMenu menu){ if (shouldPopulateMenu(file)) addMenuItems(file, menu); } protected abstract boolean shouldPopulateMenu(File file); protected abstract void addMenuItems(File file, JPopupMenu menu); protected boolean isOfType(String fileType, File file) { Configuration config = display.getConfiguration(); String[] extensions = config.getPropertyValues(this.extensions.format(new Object[]{fileType})); for (int extensionIndex = 0; extensionIndex < extensions.length; extensionIndex++) { if (file.getName().endsWith(extensions[extensionIndex])) return true; } return false; } } --- NEW FILE: DataContextMenu.java --- package net.sourceforge.marathon.display.menu; import net.sourceforge.marathon.display.Display; import net.sourceforge.marathon.display.State; import net.sourceforge.marathon.util.FileUtilities; import javax.swing.*; import java.io.File; import java.awt.event.ActionEvent; public class DataContextMenu extends EditableContextMenu{ public DataContextMenu(Display display, JTree tree) { super(display, tree); } public void addMenuItems(final File file, JPopupMenu menu) { super.addMenuItems(file, menu); if (display.getState()==State.RECORDING){ menu.add(new JMenuItem(new AbstractAction("Insert Load"){ public void actionPerformed(ActionEvent e) { String scriptDirectory = display.getConfiguration().getPropertyValue("/properties/component[@name=\"General\"]/@scriptdirectory"); String filePath = file.getAbsolutePath(); String relativePath = FileUtilities.calculateRelativePath(scriptDirectory, filePath); display.insertLoadData(relativePath); } })); } } protected boolean shouldPopulateMenu(File file) { return isDataFile(file) && super.shouldPopulateMenu(file) && display.getState()!=State.PLAYING; } } --- NEW FILE: DirectoryContextMenu.java --- package net.sourceforge.marathon.display.menu; import net.sourceforge.marathon.display.Display; import net.sourceforge.marathon.display.State; import javax.swing.*; import java.io.File; import java.awt.event.ActionEvent; public class DirectoryContextMenu extends ContextMenu{ public DirectoryContextMenu(Display display, JTree tree) { super(display, tree); } public void addMenuItems(final File file, JPopupMenu menu) { menu.add(new JMenuItem(new AbstractAction("New Test"){ public void actionPerformed(ActionEvent e) { display.newFile(queryForFile(file)); tree.treeDidChange(); } })); menu.add(new JMenuItem(new AbstractAction("New Test From Template"){ public void actionPerformed(ActionEvent e) { display.newFileFromTemplate(queryForFile(file)); tree.treeDidChange(); } })); } protected boolean shouldPopulateMenu(File file) { return file.isDirectory() && display.getState()!=State.PLAYING && display.getState()!=State.RECORDING; } private File queryForFile(File file) { String name = JOptionPane.showInputDialog("Enter Test Name"); File testName = new File(file, name + ".py"); return testName; } } --- NEW FILE: EditableContextMenu.java --- package net.sourceforge.marathon.display.menu; import net.sourceforge.marathon.display.Display; import net.sourceforge.marathon.display.State; import javax.swing.*; import java.io.File; import java.awt.event.ActionEvent; public class EditableContextMenu extends ContextMenu{ public EditableContextMenu(Display display, JTree tree) { super(display, tree); } protected void addMenuItems(final File file, JPopupMenu menu) { menu.add(new JMenuItem(new AbstractAction("Edit"){ public void actionPerformed(ActionEvent e) { display.openFile(file); } })); } protected boolean shouldPopulateMenu(File file) { return (isDataFile(file) || isTestFile(file)) && display.getState()!=State.PLAYING; } boolean isTestFile(File file) { return isOfType("TEST", file); } boolean isDataFile(File file) { return isOfType("DATA", file); } } --- NEW FILE: TestContextMenu.java --- package net.sourceforge.marathon.display.menu; import net.sourceforge.marathon.display.Display; import net.sourceforge.marathon.display.State; import javax.swing.*; import java.io.File; import java.awt.event.ActionEvent; public class TestContextMenu extends EditableContextMenu{ public TestContextMenu(Display display, JTree tree) { super(display, tree); } protected void addMenuItems(final File file, final JPopupMenu menu) { super.addMenuItems(file, menu); menu.add(new JMenuItem(new AbstractAction("Run"){ public void actionPerformed(ActionEvent e) { menu.setVisible(false); display.openFile(file); display.play(); } })); } protected boolean shouldPopulateMenu(File file) { return isTestFile(file) && super.shouldPopulateMenu(file) && display.getState()!=State.PLAYING && display.getState()!=State.RECORDING; } } |