diff --git a/prism/src/userinterface/GUIPlugin.java b/prism/src/userinterface/GUIPlugin.java index 656e0496..d38c6bad 100644 --- a/prism/src/userinterface/GUIPlugin.java +++ b/prism/src/userinterface/GUIPlugin.java @@ -27,11 +27,26 @@ package userinterface; -import javax.swing.*; -import java.awt.*; -import prism.*; -import java.io.*; -import userinterface.util.*; +import java.awt.Dimension; +import java.io.File; +import java.util.Collection; +import java.util.Collections; + +import javax.swing.Action; +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JToolBar; +import javax.swing.filechooser.FileFilter; + +import prism.Prism; +import prism.PrismSettingsListener; +import userinterface.util.GUIEvent; +import userinterface.util.GUIEventHandler; +import userinterface.util.GUIEventListener; +import userinterface.util.GUILogEvent; +import userinterface.util.GUIUndoManager; /** This abstract class should be overridden to implement a component to be plugged * in to the PRISM GUI. It extends JPanel so that it can be directly added to the @@ -331,36 +346,62 @@ public abstract class GUIPlugin extends JPanel implements GUIEventListener, Pris return JOptionPane.showOptionDialog(gui, message, title, buttonType, messageType, null, choices, defa); } - /** A utility method to show a file opening dialog with the given file filter as a - * default. - * @param ffs The list of file filters to be used within the filechooser. - * @param ff The file filter to be used as the default within the filechooser. + /** + * A utility method to show a file opening dialog with a specified file filter + * + * @param fileFilter The file filter to be used within the file chooser. + * @return An integer which is one of the JFileChooser selection constants. + */ + public int showOpenFileDialog(FileFilter fileFilter) + { + return showOpenFileDialog(Collections.singletonList(fileFilter), fileFilter); + } + + /** + * A utility method to show a file opening dialog with a selection of file filters and one as the default. + * + * @param fileFilters The file filters to be used within the file chooser. + * @param defaultFilter The file filter to be used as the default within the filechooser. * @return An integer which is one of the JFileChooser selection constants. */ - public int showOpenFileDialog(GUIPrismFileFilter ffs[], GUIPrismFileFilter ff) + public int showOpenFileDialog(Collection fileFilters, FileFilter defaultFilter) { JFileChooser choose = gui.getChooser(); choose.resetChoosableFileFilters(); - for(int j = 0; j < ffs.length; j++) - choose.addChoosableFileFilter(ffs[j]); - choose.setFileFilter(ff); + for (FileFilter ff : fileFilters) { + choose.addChoosableFileFilter(ff); + } + choose.setFileFilter(defaultFilter); choose.setSelectedFile(new File("")); return choose.showOpenDialog(gui); } - /** A utility method to show a file saving dialog with the given file filter as a - * default. - * @param ffs The list of file filters to be used within the filechooser. - * @param ff The file filter to be used as the default within the filechooser. + /** + * A utility method to show a file saving dialog with a specified file filter + * + * @param fileFilter The file filter to be used within the file chooser. * @return An integer which is one of the JFileChooser selection constants. */ - public int showSaveFileDialog(GUIPrismFileFilter ffs[], GUIPrismFileFilter ff) + public int showSaveFileDialog(FileFilter fileFilter) + { + return showSaveFileDialog(Collections.singletonList(fileFilter), fileFilter); + } + + /** + * A utility method to show a file saving dialog with a selection of file filters and one as the default. + * + * @param fileFilters The file filters to be used within the file chooser. + * @param defaultFilter The file filter to be used as the default within the filechooser. + * @return An integer which is one of the JFileChooser selection constants. + */ + public int showSaveFileDialog(Collection fileFilters, FileFilter defaultFilter) { JFileChooser choose = gui.getChooser(); choose.resetChoosableFileFilters(); - for(int j = 0; j < ffs.length; j++) - choose.addChoosableFileFilter(ffs[j]); - choose.setFileFilter(ff); + for (FileFilter ff : fileFilters) { + choose.addChoosableFileFilter(ff); + } + choose.setFileFilter(defaultFilter); choose.setSelectedFile(new File("")); int res = choose.showSaveDialog(gui); if (res != JFileChooser.APPROVE_OPTION) return res; @@ -371,7 +412,7 @@ public abstract class GUIPlugin extends JPanel implements GUIEventListener, Pris return JFileChooser.CANCEL_OPTION; } // check for file overwrite - if(file.exists()) { + if (file.exists()) { int selectionNo = JOptionPane.CANCEL_OPTION; selectionNo = optionPane("File \""+file.getPath()+"\" exists. Overwrite?", "Confirm Overwrite", JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null); if (selectionNo != JOptionPane.OK_OPTION) return JFileChooser.CANCEL_OPTION; diff --git a/prism/src/userinterface/log/GUILog.java b/prism/src/userinterface/log/GUILog.java index 4d0cce36..9e4121fe 100644 --- a/prism/src/userinterface/log/GUILog.java +++ b/prism/src/userinterface/log/GUILog.java @@ -27,15 +27,38 @@ package userinterface.log; -import java.io.*; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.JTextArea; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; -import userinterface.*; import prism.PrismLog; -import userinterface.util.*; -import prism.*; +import prism.PrismSettings; +import prism.PrismSettingsListener; +import userinterface.GUIClipboardEvent; +import userinterface.GUIPlugin; +import userinterface.GUIPrism; +import userinterface.OptionsPanel; +import userinterface.util.GUIEvent; +import userinterface.util.GUILogEvent; @SuppressWarnings("serial") public class GUILog extends GUIPlugin implements MouseListener, PrismSettingsListener @@ -44,9 +67,7 @@ public class GUILog extends GUIPlugin implements MouseListener, PrismSettingsLis private JTextArea text; private JPopupMenu popupMenu; private JMenu logMenu; - - //private GUILogOptions options; - private GUIPrismFileFilter textFilter[]; + private FileFilter logFilter; private Action clearAction, saveAction; /** Creates a new instance of GUILog */ @@ -200,8 +221,7 @@ public class GUILog extends GUIPlugin implements MouseListener, PrismSettingsLis { public void actionPerformed(ActionEvent e) { - if (showSaveFileDialog(textFilter, textFilter[0]) == JFileChooser.APPROVE_OPTION) - { + if (showSaveFileDialog(logFilter) == JFileChooser.APPROVE_OPTION) { File file = getChooserFile(); // do save... try @@ -233,15 +253,12 @@ public class GUILog extends GUIPlugin implements MouseListener, PrismSettingsLis popupMenu.add(new JSeparator()); popupMenu.add(GUIPrism.getClipboardPlugin().getSelectAllAction()); - logMenu.setMnemonic('L'); logMenu.add(saveAction); logMenu.add(new JSeparator()); logMenu.add(clearAction); - textFilter = new GUIPrismFileFilter[1]; - textFilter[0] = new GUIPrismFileFilter("Plain text files (*.txt)"); - textFilter[0].addExtension("txt"); + logFilter = new FileNameExtensionFilter("Plain text files (*.txt)", "txt"); } private void initComponentsAsVisualLog(GUIVisualLogModel log) diff --git a/prism/src/userinterface/model/GUIMultiModel.java b/prism/src/userinterface/model/GUIMultiModel.java index 0d8b7bf0..8655448c 100644 --- a/prism/src/userinterface/model/GUIMultiModel.java +++ b/prism/src/userinterface/model/GUIMultiModel.java @@ -34,6 +34,8 @@ import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.io.File; +import java.util.HashMap; +import java.util.Map; import javax.swing.AbstractAction; import javax.swing.Action; @@ -48,6 +50,8 @@ import javax.swing.JSeparator; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.KeyStroke; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; import prism.ModelType; import prism.Prism; @@ -60,7 +64,6 @@ import userinterface.OptionsPanel; import userinterface.util.GUIComputationEvent; import userinterface.util.GUIEvent; import userinterface.util.GUIExitEvent; -import userinterface.util.GUIPrismFileFilter; import userinterface.util.GUIUndoManager; @SuppressWarnings("serial") @@ -85,10 +88,13 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener private JPopupMenu popup; //Contents private GUIMultiModelHandler handler; - private GUIPrismFileFilter modelFilters[]; - private GUIPrismFileFilter textFilter[]; - private GUIPrismFileFilter matlabFilter[]; - private GUIPrismFileFilter dotFilter[]; + private Map modelFilters; + private Map staFilters; + private Map traFilters; + private Map labFilters; + private FileFilter textFilter; + private FileFilter matlabFilter; + private FileFilter dotFilter; //State private boolean computing = false; private boolean initialised = false; @@ -272,15 +278,15 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener { int cont = doModificationCheck(); if (cont == CONTINUE) { - int filterIndex; + String filterName; switch (handler.getModelMode()) { case GUIMultiModelHandler.PEPA_MODE: - filterIndex = FILTER_PEPA_MODEL; + filterName = "pepa"; break; default: - filterIndex = FILTER_PRISM_MODEL; + filterName = "prism"; } - if (showOpenFileDialog(modelFilters, modelFilters[filterIndex]) == JFileChooser.APPROVE_OPTION) { + if (showOpenFileDialog(modelFilters.values(), modelFilters.get(filterName)) == JFileChooser.APPROVE_OPTION) { File file = getChooserFile(); if (file == null) { error("No file selected"); @@ -313,16 +319,15 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener protected int a_saveModelAs() { - int mode = handler.getModelMode(); - int filterIndex; - switch (mode) { + String filterName; + switch (handler.getModelMode()) { case GUIMultiModelHandler.PEPA_MODE: - filterIndex = FILTER_PEPA_MODEL; + filterName = "pepa"; break; default: - filterIndex = FILTER_PRISM_MODEL; + filterName = "prism"; } - if (showSaveFileDialog(modelFilters, modelFilters[filterIndex]) != JFileChooser.APPROVE_OPTION) { + if (showSaveFileDialog(modelFilters.values(), modelFilters.get(filterName)) != JFileChooser.APPROVE_OPTION) { return CANCEL; } // do save @@ -349,24 +354,27 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener // pop up dialog to select file switch (exportType) { case Prism.EXPORT_DOT: - res = showSaveFileDialog(dotFilter, dotFilter[0]); + res = showSaveFileDialog(dotFilter); break; case Prism.EXPORT_DOT_STATES: - res = showSaveFileDialog(dotFilter, dotFilter[0]); + res = showSaveFileDialog(dotFilter); break; case Prism.EXPORT_MATLAB: - res = showSaveFileDialog(matlabFilter, matlabFilter[0]); + res = showSaveFileDialog(matlabFilter); break; default: switch (exportEntity) { case GUIMultiModelHandler.STATES_EXPORT: - res = showSaveFileDialog(textFilter, textFilter[1]); + res = showSaveFileDialog(staFilters.values(), staFilters.get("sta")); + break; case GUIMultiModelHandler.TRANS_EXPORT: - res = showSaveFileDialog(textFilter, textFilter[2]); + res = showSaveFileDialog(traFilters.values(), traFilters.get("tra")); + break; case GUIMultiModelHandler.LABELS_EXPORT: - res = showSaveFileDialog(textFilter, textFilter[3]); + res = showSaveFileDialog(labFilters.values(), labFilters.get("lab")); + break; default: - res = showSaveFileDialog(textFilter, textFilter[0]); + res = showSaveFileDialog(textFilter); } break; } @@ -402,11 +410,11 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener int res = JFileChooser.CANCEL_OPTION; switch (exportType) { case Prism.EXPORT_MATLAB: - res = showSaveFileDialog(matlabFilter, matlabFilter[0]); + res = showSaveFileDialog(matlabFilter); break; case Prism.EXPORT_PLAIN: default: - res = showSaveFileDialog(textFilter, textFilter[0]); + res = showSaveFileDialog(textFilter); break; } if (res != JFileChooser.APPROVE_OPTION) @@ -435,11 +443,11 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener int res = JFileChooser.CANCEL_OPTION; switch (exportType) { case Prism.EXPORT_MATLAB: - res = showSaveFileDialog(matlabFilter, matlabFilter[0]); + res = showSaveFileDialog(matlabFilter); break; case Prism.EXPORT_PLAIN: default: - res = showSaveFileDialog(textFilter, textFilter[0]); + res = showSaveFileDialog(textFilter); break; } if (res != JFileChooser.APPROVE_OPTION) @@ -1170,29 +1178,21 @@ public class GUIMultiModel extends GUIPlugin implements PrismSettingsListener popup.add(viewPrismCode); } - modelFilters = new GUIPrismFileFilter[2]; - modelFilters[FILTER_PRISM_MODEL] = new GUIPrismFileFilter("PRISM models (*.prism, *.pm, *.nm, *.sm)"); - modelFilters[FILTER_PRISM_MODEL].addExtension("prism"); - modelFilters[FILTER_PRISM_MODEL].addExtension("pm"); - modelFilters[FILTER_PRISM_MODEL].addExtension("nm"); - modelFilters[FILTER_PRISM_MODEL].addExtension("sm"); - modelFilters[FILTER_PEPA_MODEL] = new GUIPrismFileFilter("PEPA models (*.pepa)"); - modelFilters[FILTER_PEPA_MODEL].addExtension("pepa"); - textFilter = new GUIPrismFileFilter[4]; - textFilter[0] = new GUIPrismFileFilter("Plain text files (*.txt)"); - textFilter[0].addExtension("txt"); - textFilter[1] = new GUIPrismFileFilter("State list files (*.sta)"); - textFilter[1].addExtension("sta"); - textFilter[2] = new GUIPrismFileFilter("Transition matrix files (*.tra)"); - textFilter[2].addExtension("tra"); - textFilter[3] = new GUIPrismFileFilter("Label files (*.lab)"); - textFilter[3].addExtension("lab"); - matlabFilter = new GUIPrismFileFilter[1]; - matlabFilter[0] = new GUIPrismFileFilter("Matlab files (*.m)"); - matlabFilter[0].addExtension("m"); - dotFilter = new GUIPrismFileFilter[1]; - dotFilter[0] = new GUIPrismFileFilter("Dot files (*.dot)"); - dotFilter[0].addExtension("dot"); + modelFilters = new HashMap(); + modelFilters.put("prism", new FileNameExtensionFilter("PRISM models (*.prism, *.pm, *.nm, *.sm)", "prism", "pm", "nm", "sm")); + modelFilters.put("pepa", new FileNameExtensionFilter("PEPA models (*.pepa)", "pepa")); + staFilters = new HashMap(); + staFilters.put("sta", new FileNameExtensionFilter("State list files (*.sta)", "sta")); + staFilters.put("txt", new FileNameExtensionFilter("Plain text files (*.txt)", "txt")); + traFilters = new HashMap(); + traFilters.put("tra", new FileNameExtensionFilter("Transition matrix files (*.tra)", "tra")); + traFilters.put("txt", new FileNameExtensionFilter("Plain text files (*.txt)", "txt")); + labFilters = new HashMap(); + labFilters.put("lab", new FileNameExtensionFilter("Label files (*.lab)", "lab")); + labFilters.put("txt", new FileNameExtensionFilter("Plain text files (*.txt)", "txt")); + textFilter = new FileNameExtensionFilter("Plain text files (*.txt)", "txt"); + matlabFilter = new FileNameExtensionFilter("Matlab files (*.m)", "m"); + dotFilter = new FileNameExtensionFilter("Dot files (*.dot)", "dot"); setLayout(new BorderLayout()); add(topPanel, BorderLayout.CENTER); diff --git a/prism/src/userinterface/model/GUIMultiModelHandler.java b/prism/src/userinterface/model/GUIMultiModelHandler.java index 3a5fb74d..90129321 100644 --- a/prism/src/userinterface/model/GUIMultiModelHandler.java +++ b/prism/src/userinterface/model/GUIMultiModelHandler.java @@ -65,8 +65,6 @@ import userinterface.model.computation.LoadPRISMModelThread; import userinterface.model.computation.ParseModelThread; import userinterface.model.pepaModel.GUIPepaModelEditor; import userinterface.util.GUIUndoManager; -import userinterface.util.PropertyTable; -import userinterface.util.PropertyTableModel; @SuppressWarnings("serial") public class GUIMultiModelHandler extends JPanel implements PrismModelListener diff --git a/prism/src/userinterface/model/GUITextModelEditor.java b/prism/src/userinterface/model/GUITextModelEditor.java index ac8ef8eb..10649e40 100644 --- a/prism/src/userinterface/model/GUITextModelEditor.java +++ b/prism/src/userinterface/model/GUITextModelEditor.java @@ -30,20 +30,47 @@ package userinterface.model; -import java.io.*; -import java.util.*; -import javax.swing.*; -import javax.swing.text.*; -import javax.swing.undo.CannotRedoException; -import javax.swing.undo.CannotUndoException; -import java.awt.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; -import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.awt.datatransfer.Clipboard; -import javax.swing.event.*; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JEditorPane; +import javax.swing.JMenu; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.KeyStroke; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.text.BadLocationException; +import javax.swing.text.DefaultHighlighter; +import javax.swing.text.Element; +import javax.swing.text.PlainDocument; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.undo.CannotRedoException; +import javax.swing.undo.CannotUndoException; import prism.PrismLangException; import prism.PrismSettings; @@ -57,6 +84,7 @@ import userinterface.util.GUIUndoManager; * model files. Currently supports Prism and Pepa models. It also tells * the GUIPrism, of which it is a member, about modified events. */ +@SuppressWarnings("serial") public class GUITextModelEditor extends GUIModelEditor implements DocumentListener, MouseListener { private GUIMultiModelHandler handler; diff --git a/prism/src/userinterface/properties/GUIGraphHandler.java b/prism/src/userinterface/properties/GUIGraphHandler.java index 7d42ec50..d98565bd 100644 --- a/prism/src/userinterface/properties/GUIGraphHandler.java +++ b/prism/src/userinterface/properties/GUIGraphHandler.java @@ -30,27 +30,23 @@ package userinterface.properties; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; -import java.awt.MouseInfo; -import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.io.File; import java.io.IOException; import java.util.ArrayList; -import javax.print.attribute.HashPrintRequestAttributeSet; -import javax.print.attribute.PrintRequestAttributeSet; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JFileChooser; import javax.swing.JFrame; -import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JTabbedPane; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; import prism.PrismException; import userinterface.GUIPlugin; @@ -59,11 +55,10 @@ import userinterface.graph.GUIImageExportDialog; import userinterface.graph.Graph; import userinterface.graph.GraphException; import userinterface.graph.GraphOptions; -import userinterface.util.GUIPrismFileFilter; +@SuppressWarnings("serial") public class GUIGraphHandler extends JPanel implements MouseListener { - private boolean canDelete; private JTabbedPane theTabs; @@ -78,15 +73,11 @@ public class GUIGraphHandler extends JPanel implements MouseListener private Action printGraph, deleteGraph; private Action exportImageJPG, exportImagePNG, exportImageEPS, exportXML, exportMatlab; - private Action exportOpenDocumentChart, exportOpenDocumentSpreadsheet; - private Action exportCSV, exportGNUPlot, importXML; + private Action importXML; private JMenu zoomMenu, exportMenu, importMenu; - private GUIPrismFileFilter imagesFilter[], xmlFilter[], matlabFilter[], OpenDocumentChartFilter[], OpenDocumentSpreadsheetFilter[], CSVFilter[], - GNUFilter[], DATFilter[]; - - private PrintRequestAttributeSet attributes; + private FileFilter pngFilter, jpgFilter, epsFilter, graFilter, matlabFilter; public GUIGraphHandler(JFrame parent, GUIPlugin plug, boolean canDelete) { @@ -98,43 +89,11 @@ public class GUIGraphHandler extends JPanel implements MouseListener initComponents(); - imagesFilter = new GUIPrismFileFilter[3]; - imagesFilter[0] = new GUIPrismFileFilter("PNG files (*.png)"); - imagesFilter[0].addExtension("png"); - imagesFilter[1] = new GUIPrismFileFilter("JPEG files (*.jpg, *.jpeg)"); - imagesFilter[1].addExtension("jpg"); - imagesFilter[2] = new GUIPrismFileFilter("Encapsulated PostScript files (*.eps)"); - imagesFilter[2].addExtension("eps"); - - xmlFilter = new GUIPrismFileFilter[1]; - xmlFilter[0] = new GUIPrismFileFilter("PRISM graph files (*.gra)"); - xmlFilter[0].addExtension("gra"); - - matlabFilter = new GUIPrismFileFilter[1]; - matlabFilter[0] = new GUIPrismFileFilter("Matlab files (*.m)"); - matlabFilter[0].addExtension("m"); - - OpenDocumentChartFilter = new GUIPrismFileFilter[1]; - OpenDocumentChartFilter[0] = new GUIPrismFileFilter("OpenDocument Chart files (*.odc)"); - OpenDocumentChartFilter[0].addExtension("odc"); - - OpenDocumentSpreadsheetFilter = new GUIPrismFileFilter[1]; - OpenDocumentSpreadsheetFilter[0] = new GUIPrismFileFilter("OpenDocument Spreadsheet files (*.ods)"); - OpenDocumentSpreadsheetFilter[0].addExtension("ods"); - - CSVFilter = new GUIPrismFileFilter[1]; - CSVFilter[0] = new GUIPrismFileFilter("CSV files (*.csv)"); - CSVFilter[0].addExtension("csv"); - - GNUFilter = new GUIPrismFileFilter[1]; - GNUFilter[0] = new GUIPrismFileFilter("GNUPlot files (*.gnu)"); - GNUFilter[0].addExtension("gnu"); - - DATFilter = new GUIPrismFileFilter[1]; - DATFilter[0] = new GUIPrismFileFilter("GNUPlot data files (*.dat)"); - DATFilter[0].addExtension("dat"); - - attributes = new HashPrintRequestAttributeSet(); + pngFilter = new FileNameExtensionFilter("PNG files (*.png)", "png"); + jpgFilter = new FileNameExtensionFilter("JPEG files (*.jpg, *.jpeg)", "jpg", "jpeg"); + epsFilter = new FileNameExtensionFilter("Encapsulated PostScript files (*.eps)", "eps"); + graFilter = new FileNameExtensionFilter("PRISM graph files (*.gra, *.xml)", "gra", "xml"); + matlabFilter = new FileNameExtensionFilter("Matlab files (*.m)", "m"); models = new ArrayList(); options = new ArrayList(); @@ -147,26 +106,7 @@ public class GUIGraphHandler extends JPanel implements MouseListener setLayout(new BorderLayout()); add(theTabs, BorderLayout.CENTER); - /* - importXMLBack = new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - if (plug.showOpenFileDialog(xmlFilter, xmlFilter[0]) != JFileChooser.APPROVE_OPTION) - return; - try { - Graph mgm = Graph.load(plug.getChooserFile()); - addGraph(mgm); - } catch(ChartException ex) { - plug.error("Could not import PRISM graph file:\n"+ex.getMessage()); - } - } - }; - importXMLBack.putValue(Action.NAME, "Import PRISM graph"); - importXMLBack.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_I)); - importXMLBack.putValue(Action.SMALL_ICON, GUIPrism.getIconFromImage("smallImport.png")); - importXMLBack.putValue(Action.LONG_DESCRIPTION, "Imports a saved PRISM graph from a file."); - */ + graphOptions = new AbstractAction() { public void actionPerformed(ActionEvent e) @@ -227,7 +167,7 @@ public class GUIGraphHandler extends JPanel implements MouseListener { public void actionPerformed(ActionEvent e) { - if (plug.showOpenFileDialog(xmlFilter, xmlFilter[0]) != JFileChooser.APPROVE_OPTION) + if (plug.showOpenFileDialog(graFilter) != JFileChooser.APPROVE_OPTION) return; try { Graph mgm = Graph.load(plug.getChooserFile()); @@ -246,7 +186,7 @@ public class GUIGraphHandler extends JPanel implements MouseListener { public void actionPerformed(ActionEvent e) { - if (plug.showSaveFileDialog(xmlFilter, xmlFilter[0]) != JFileChooser.APPROVE_OPTION) + if (plug.showSaveFileDialog(graFilter) != JFileChooser.APPROVE_OPTION) return; Graph mgm = models.get(theTabs.getSelectedIndex()); try { @@ -307,7 +247,7 @@ public class GUIGraphHandler extends JPanel implements MouseListener { public void actionPerformed(ActionEvent e) { - if (plug.showSaveFileDialog(matlabFilter, matlabFilter[0]) != JFileChooser.APPROVE_OPTION) + if (plug.showSaveFileDialog(matlabFilter) != JFileChooser.APPROVE_OPTION) return; Graph mgm = models.get(theTabs.getSelectedIndex()); @@ -323,95 +263,6 @@ public class GUIGraphHandler extends JPanel implements MouseListener exportMatlab.putValue(Action.SMALL_ICON, GUIPrism.getIconFromImage("smallFileMatlab.png")); exportMatlab.putValue(Action.LONG_DESCRIPTION, "Export graph as a Matlab file."); - exportOpenDocumentChart = new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - /* if (plug.showSaveFileDialog(OpenDocumentChartFilter, OpenDocumentChartFilter[0]) != JFileChooser.APPROVE_OPTION) - return; - GraphView mgv = (GraphView)views.get( - theTabs.getSelectedIndex() - ); - try { - mgv.doExportToOpenDocumentChart(plug.getChooserFile()); - } catch(ChartException ex) { - plug.error("Could not export OpenDocument Chart file:\n" + ex.getMessage()); - }*/ - } - }; - exportOpenDocumentChart.putValue(Action.NAME, "OpenDocument Chart"); - exportOpenDocumentChart.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_O)); - exportOpenDocumentChart.putValue(Action.SMALL_ICON, GUIPrism.getIconFromImage("smallExport.png")); - exportOpenDocumentChart.putValue(Action.LONG_DESCRIPTION, "Export graph as a OpenDocument Chart file."); - - exportOpenDocumentSpreadsheet = new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - /*if (plug.showSaveFileDialog(OpenDocumentSpreadsheetFilter, OpenDocumentSpreadsheetFilter[0]) != JFileChooser.APPROVE_OPTION) - return; - GraphView mgv = (GraphView)views.get( - theTabs.getSelectedIndex() - ); - try { - mgv.doExportToOpenDocumentSpreadsheet(plug.getChooserFile()); - } catch(ChartException ex) { - plug.error("Could not export OpenDocument Spreadsheet file:\n" + ex.getMessage()); - }*/ - } - }; - exportOpenDocumentSpreadsheet.putValue(Action.NAME, "OpenDocument Spreadsheet"); - exportOpenDocumentSpreadsheet.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_S)); - exportOpenDocumentSpreadsheet.putValue(Action.SMALL_ICON, GUIPrism.getIconFromImage("smallExport.png")); - exportOpenDocumentSpreadsheet.putValue(Action.LONG_DESCRIPTION, "Export graph as a OpenDocument Spreadsheet file."); - - exportCSV = new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - /*if (plug.showSaveFileDialog(CSVFilter, CSVFilter[0]) != JFileChooser.APPROVE_OPTION) - return; - GraphModel mgm = models.get( - theTabs.getSelectedIndex() - ); - try { - mgm.exportToCSV(plug.getChooserFile()); - } catch(ChartException ex) { - plug.error("Could not export CSV file:\n"+ex.getMessage()); - }*/ - } - }; - exportCSV.putValue(Action.NAME, "CSV file"); - exportCSV.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_C)); - exportCSV.putValue(Action.SMALL_ICON, GUIPrism.getIconFromImage("smallExport.png")); - exportCSV.putValue(Action.LONG_DESCRIPTION, "Export graph as a CSV file."); - - exportGNUPlot = new AbstractAction() - { - public void actionPerformed(ActionEvent e) - { - Graph mgm = models.get(theTabs.getSelectedIndex()); - - if (plug.showSaveFileDialog(GNUFilter, GNUFilter[0]) != JFileChooser.APPROVE_OPTION) - return; - File file1 = plug.getChooserFile(); - - if (plug.showSaveFileDialog(DATFilter, DATFilter[0]) != JFileChooser.APPROVE_OPTION) - return; - File file2 = plug.getChooserFile(); - - /*y { - //mgm.exportToGNUPlot(file1,file2); - } catch(ChartException ex) { - plug.error("Could not export GNU file:\n" + ex.getMessage()); - }*/ - } - }; - exportGNUPlot.putValue(Action.NAME, "GNUPlot file"); - exportGNUPlot.putValue(Action.MNEMONIC_KEY, new Integer(KeyEvent.VK_G)); - exportGNUPlot.putValue(Action.SMALL_ICON, GUIPrism.getIconFromImage("smallExport.png")); - exportGNUPlot.putValue(Action.LONG_DESCRIPTION, "Export graph as GNUPlot files."); - printGraph = new AbstractAction() { public void actionPerformed(ActionEvent e) @@ -499,9 +350,8 @@ public class GUIGraphHandler extends JPanel implements MouseListener } if (imageDialog.getImageType() == GUIImageExportDialog.JPEG) { - if (plug.showSaveFileDialog(imagesFilter, imagesFilter[1]) != JFileChooser.APPROVE_OPTION) + if (plug.showSaveFileDialog(jpgFilter) != JFileChooser.APPROVE_OPTION) return; - try { graph.exportToJPEG(plug.getChooserFile(), imageDialog.getExportWidth(), imageDialog.getExportHeight()); } catch (GraphException ex) { @@ -510,9 +360,8 @@ public class GUIGraphHandler extends JPanel implements MouseListener plug.error("Could not export JPEG file:\n" + ex.getMessage()); } } else if (imageDialog.getImageType() == GUIImageExportDialog.PNG) { - if (plug.showSaveFileDialog(imagesFilter, imagesFilter[0]) != JFileChooser.APPROVE_OPTION) + if (plug.showSaveFileDialog(pngFilter) != JFileChooser.APPROVE_OPTION) return; - try { graph.exportToPNG(plug.getChooserFile(), imageDialog.getExportWidth(), imageDialog.getExportHeight(), imageDialog.getAlpha()); } catch (GraphException ex) { @@ -521,9 +370,8 @@ public class GUIGraphHandler extends JPanel implements MouseListener plug.error("Could not export PNG file:\n" + ex.getMessage()); } } else if (imageDialog.getImageType() == GUIImageExportDialog.EPS) { - if (plug.showSaveFileDialog(imagesFilter, imagesFilter[2]) != JFileChooser.APPROVE_OPTION) + if (plug.showSaveFileDialog(epsFilter) != JFileChooser.APPROVE_OPTION) return; - try { graph.exportToEPS(plug.getChooserFile(), imageDialog.getExportWidth(), imageDialog.getExportHeight()); } catch (GraphException ex) { @@ -535,34 +383,6 @@ public class GUIGraphHandler extends JPanel implements MouseListener } } - /* We can't keep using the same menu because Swing won't allow - * two components on screen with the same reference. Since one - * instance of GUIGraphHandler contains N graphs, it needs N - * import/export menus. - */ - public JMenu getExportMenu() - { - JMenu menu = new JMenu("Import/Export.."); - menu.setIcon(GUIPrism.getIconFromImage("Export.png")); - menu.setMnemonic('I'); - - menu.add(new JLabel("Import")); - menu.add(importXML); - menu.addSeparator(); - menu.add(new JLabel("Export")); - menu.add(exportXML); - menu.add(exportImagePNG); - menu.add(exportImageEPS); - menu.add(exportImageJPG); - menu.add(exportMatlab); - menu.add(exportOpenDocumentChart); - menu.add(exportOpenDocumentSpreadsheet); - menu.add(exportCSV); - menu.add(exportGNUPlot); - - return menu; - } - public Action getPrintGraph() { return printGraph; diff --git a/prism/src/userinterface/properties/GUIMultiProperties.java b/prism/src/userinterface/properties/GUIMultiProperties.java index 4579fe0d..50ee64d2 100644 --- a/prism/src/userinterface/properties/GUIMultiProperties.java +++ b/prism/src/userinterface/properties/GUIMultiProperties.java @@ -54,9 +54,11 @@ import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.List; -import java.util.Comparator; import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.swing.AbstractAction; import javax.swing.Action; @@ -76,12 +78,11 @@ import javax.swing.KeyStroke; import javax.swing.border.TitledBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; import org.jfree.data.xy.XYDataItem; -import param.BigRational; -import param.Function; -import param.RegionValues; import parser.Values; import parser.ast.Expression; import parser.ast.ModulesFile; @@ -117,7 +118,6 @@ import userinterface.simulator.GUISimulator; import userinterface.util.GUIComputationEvent; import userinterface.util.GUIEvent; import userinterface.util.GUIExitEvent; -import userinterface.util.GUIPrismFileFilter; /** * Properties tab of the PRISM GUI. @@ -152,10 +152,11 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List private File exportFile = null; // GUI - private GUIPrismFileFilter propsFilter[]; - private GUIPrismFileFilter resultsFilter[]; - private GUIPrismFileFilter textFilter[]; - private GUIPrismFileFilter matlabFilter[]; + private FileFilter propsFilter; + private Map labFilters; + private FileFilter textFilter; + private FileFilter csvFilter; + private FileFilter matlabFilter; private JMenu propMenu; private JPopupMenu propertiesPopup, constantsPopup, labelsPopup, experimentPopup; private GUIExperimentTable experiments; @@ -735,7 +736,7 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List if (doModificationCheck() != CONTINUE) return; - if (showOpenFileDialog(propsFilter, propsFilter[0]) == JFileChooser.APPROVE_OPTION) { + if (showOpenFileDialog(propsFilter) == JFileChooser.APPROVE_OPTION) { File file = getChooserFile(); if (file == null) { error("No file selected"); @@ -797,7 +798,7 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List message("Cannot save properties list: some constants are invalid"); return CANCEL; } - if (showSaveFileDialog(propsFilter, propsFilter[0]) == JFileChooser.APPROVE_OPTION) { + if (showSaveFileDialog(propsFilter) == JFileChooser.APPROVE_OPTION) { File file = getChooserFile(); // do save try { @@ -820,7 +821,7 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List public void a_insert() { - if (showOpenFileDialog(propsFilter, propsFilter[0]) == JFileChooser.APPROVE_OPTION) { + if (showOpenFileDialog(propsFilter) == JFileChooser.APPROVE_OPTION) { File file = getChooserFile(); if (file == null) { error("No file selected"); @@ -1090,10 +1091,10 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List // pop up dialog to select file switch (exportType) { case Prism.EXPORT_MATLAB: - res = showSaveFileDialog(matlabFilter, matlabFilter[0]); + res = showSaveFileDialog(matlabFilter); break; default: - res = showSaveFileDialog(textFilter, textFilter[1]); + res = showSaveFileDialog(labFilters.values(), labFilters.get("lab")); break; } if (res != JFileChooser.APPROVE_OPTION) @@ -1219,7 +1220,7 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List for (i = 0; i < n; i++) exps[i] = experiments.getExperiment(inds[i]); // get filename to save - if (showSaveFileDialog(resultsFilter, sep.equals(", ") ? resultsFilter[1] : resultsFilter[0]) == JFileChooser.APPROVE_OPTION) { + if (showSaveFileDialog(sep.equals(", ") ? csvFilter : textFilter) == JFileChooser.APPROVE_OPTION) { File file = getChooserFile(); Thread t = new ExportResultsThread(this, exps, file, exportMatrix, sep); t.setPriority(Thread.NORM_PRIORITY); @@ -1781,24 +1782,13 @@ public class GUIMultiProperties extends GUIPlugin implements MouseListener, List } createPopups(); //file filters - propsFilter = new GUIPrismFileFilter[1]; - propsFilter[0] = new GUIPrismFileFilter("PRISM properties (*.props, *.pctl, *.csl)"); - propsFilter[0].addExtension("props"); - propsFilter[0].addExtension("pctl"); - propsFilter[0].addExtension("csl"); - resultsFilter = new GUIPrismFileFilter[2]; - resultsFilter[0] = new GUIPrismFileFilter("Plain text files (*.txt)"); - resultsFilter[0].addExtension("txt"); - resultsFilter[1] = new GUIPrismFileFilter("Comma-separated values (*.csv)"); - resultsFilter[1].addExtension("csv"); - textFilter = new GUIPrismFileFilter[2]; - textFilter[0] = new GUIPrismFileFilter("Plain text files (*.txt)"); - textFilter[0].addExtension("txt"); - textFilter[1] = new GUIPrismFileFilter("Label files (*.lab)"); - textFilter[1].addExtension("lab"); - matlabFilter = new GUIPrismFileFilter[1]; - matlabFilter[0] = new GUIPrismFileFilter("Matlab files (*.m)"); - matlabFilter[0].addExtension("m"); + propsFilter = new FileNameExtensionFilter("PRISM properties (*.props, *.pctl, *.csl)", "props", "pctl", "csl"); + labFilters = new HashMap(); + labFilters.put("lab", new FileNameExtensionFilter("Label files (*.lab)", "lab")); + labFilters.put("txt", new FileNameExtensionFilter("Plain text files (*.txt)", "txt")); + textFilter = new FileNameExtensionFilter("Plain text files (*.txt)", "txt"); + csvFilter = new FileNameExtensionFilter("Comma-separated values (*.csv)", "csv"); + matlabFilter = new FileNameExtensionFilter("Matlab files (*.m)", "m"); } private void createPopups() diff --git a/prism/src/userinterface/simulator/GUISimulator.java b/prism/src/userinterface/simulator/GUISimulator.java index 544048a2..be1e8e01 100644 --- a/prism/src/userinterface/simulator/GUISimulator.java +++ b/prism/src/userinterface/simulator/GUISimulator.java @@ -34,6 +34,8 @@ import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; import javax.swing.event.*; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; import simulator.*; import simulator.networking.*; @@ -56,7 +58,7 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect private GUIMultiProperties guiProp; //reference to the properties information private GUIMultiModel guiMultiModel; //reference to the model plugin private SimulatorEngine engine; - private GUIPrismFileFilter[] txtFilter; + private FileFilter textFilter; private JMenu simulatorMenu; private JPopupMenu pathPopupMenu; @@ -179,9 +181,7 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect totalTimeLabel.setText(formatDouble(0.0)); pathLengthLabel.setText("0"); - txtFilter = new GUIPrismFileFilter[1]; - txtFilter[0] = new GUIPrismFileFilter("Text files (*.txt)"); - txtFilter[0].addExtension("txt"); + textFilter = new FileNameExtensionFilter("Plain text files (*.txt)", "txt"); displayStyleFast = true; displayPathLoops = true; @@ -682,7 +682,7 @@ public class GUISimulator extends GUIPlugin implements MouseListener, ListSelect public void a_exportPath() { try { - if (showSaveFileDialog(txtFilter, txtFilter[0]) != JFileChooser.APPROVE_OPTION) + if (showSaveFileDialog(textFilter) != JFileChooser.APPROVE_OPTION) return; setComputing(true); engine.exportPath(getChooserFile()); diff --git a/prism/src/userinterface/simulator/networking/GUINetworkEditor.java b/prism/src/userinterface/simulator/networking/GUINetworkEditor.java index 5c99bb5e..9a54aff8 100644 --- a/prism/src/userinterface/simulator/networking/GUINetworkEditor.java +++ b/prism/src/userinterface/simulator/networking/GUINetworkEditor.java @@ -26,19 +26,45 @@ package userinterface.simulator.networking; -import javax.swing.*; -import javax.swing.tree.*; -import javax.swing.event.*; -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import java.io.*; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Frame; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.util.ArrayList; +import java.util.Observable; +import java.util.Observer; -import simulator.networking.*; -import settings.*; -import prism.*; -import userinterface.*; -import userinterface.util.*; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.ImageIcon; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; +import javax.swing.JTree; +import javax.swing.KeyStroke; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeNode; +import javax.swing.tree.TreePath; + +import prism.PrismException; +import settings.FileSelector; +import settings.SettingTable; +import simulator.networking.FileSystem; +import simulator.networking.SSHHost; +import simulator.networking.SimulatorNetworkHandler; +import userinterface.GUIPrism; public class GUINetworkEditor extends JDialog implements TreeSelectionListener, MouseListener, Observer, FileSelector { @@ -63,7 +89,7 @@ public class GUINetworkEditor extends JDialog implements TreeSelectionListener, private boolean modified = false; private File activeFile = null; - private GUIPrismFileFilter[] netFilters; + private FileNameExtensionFilter netFilter; /** Creates new form GUINetworkEditor */ @@ -92,9 +118,7 @@ public class GUINetworkEditor extends JDialog implements TreeSelectionListener, networkTree.addTreeSelectionListener(this); networkTree.addMouseListener(this); - netFilters = new GUIPrismFileFilter[1]; - netFilters[0] = new GUIPrismFileFilter("PRISM networks (*.xml)"); - netFilters[0].addExtension("xml"); + netFilter = new FileNameExtensionFilter("PRISM networks (*.xml)", "xml"); } public int doModificationCheck() @@ -166,7 +190,7 @@ public class GUINetworkEditor extends JDialog implements TreeSelectionListener, int cont = doModificationCheck(); if(cont == CONTINUE) { - if (showOpenFileDialog(netFilters, netFilters[0]) == JFileChooser.APPROVE_OPTION) + if (showOpenFileDialog(netFilter) == JFileChooser.APPROVE_OPTION) { File file = GUIPrism.getGUI().getChooser().getSelectedFile(); if (file == null) @@ -222,7 +246,7 @@ public class GUINetworkEditor extends JDialog implements TreeSelectionListener, public int a_saveAs() { - if (showSaveFileDialog(netFilters, netFilters[0]) != JFileChooser.APPROVE_OPTION) + if (showSaveFileDialog(netFilter) != JFileChooser.APPROVE_OPTION) { return CANCEL; } @@ -896,12 +920,11 @@ public class GUINetworkEditor extends JDialog implements TreeSelectionListener, * @param ff The file filter to be used as the default within the filechooser. * @return An integer which is one of the JFileChooser selection constants. */ - public int showOpenFileDialog(GUIPrismFileFilter ffs[], GUIPrismFileFilter ff) + public int showOpenFileDialog(FileFilter ff) { JFileChooser choose = GUIPrism.getGUI().getChooser(); choose.resetChoosableFileFilters(); - for(int j = 0; j < ffs.length; j++) - choose.addChoosableFileFilter(ffs[j]); + choose.addChoosableFileFilter(ff); choose.setFileFilter(ff); choose.setSelectedFile(new File("")); return choose.showOpenDialog(this); @@ -913,12 +936,11 @@ public class GUINetworkEditor extends JDialog implements TreeSelectionListener, * @param ff The file filter to be used as the default within the filechooser. * @return An integer which is one of the JFileChooser selection constants. */ - public int showSaveFileDialog(GUIPrismFileFilter ffs[], GUIPrismFileFilter ff) + public int showSaveFileDialog(FileFilter ff) { JFileChooser choose = GUIPrism.getGUI().getChooser(); choose.resetChoosableFileFilters(); - for(int j = 0; j < ffs.length; j++) - choose.addChoosableFileFilter(ffs[j]); + choose.addChoosableFileFilter(ff); choose.setFileFilter(ff); choose.setSelectedFile(new File("")); int res = choose.showSaveDialog(this); diff --git a/prism/src/userinterface/util/GUIPrismFileFilter.java b/prism/src/userinterface/util/GUIPrismFileFilter.java deleted file mode 100644 index ab225a4f..00000000 --- a/prism/src/userinterface/util/GUIPrismFileFilter.java +++ /dev/null @@ -1,95 +0,0 @@ -//============================================================================== -// -// Copyright (c) 2002- -// Authors: -// * Andrew Hinton (University of Birmingham) -// * Dave Parker (University of Oxford, formerly University of Birmingham) -// -//------------------------------------------------------------------------------ -// -// This file is part of PRISM. -// -// PRISM is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2 of the License, or -// (at your option) any later version. -// -// PRISM is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with PRISM; if not, write to the Free Software Foundation, -// Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -//============================================================================== - -package userinterface.util; - -import java.util.Vector; -import java.io.File; -import javax.swing.filechooser.*; - -public class GUIPrismFileFilter extends FileFilter -{ - private String name; - private Vector exts; - - public GUIPrismFileFilter() - { - name = ""; - exts = new Vector(); - } - - public GUIPrismFileFilter(String s) - { - name = s; - exts = new Vector(); - } - - public void setName(String s) - { - name = s; - } - - public void addExtension(String s) - { - exts.add(s); - } - - public boolean accept(File f) - { - String ext; - - if (f.isDirectory()) { - return true; - } - - ext = getFileExtension(f); - if (ext != null) { - return exts.contains(ext); - } - - return false; - } - - public String getDescription() { - return name; - } - - public static String getFileExtension(File f) - { - String ext = null; - String s = f.getName(); - int i = s.lastIndexOf('.'); - - if (i > 0 && i < s.length() - 1) { - ext = s.substring(i+1).toLowerCase(); - } - - return ext; - } -} - -//------------------------------------------------------------------------------