blob: 7ac19505c672b9d4015cb68c74239f755e7cca2a [file] [log] [blame]
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.4.3 *
* Copyright (C) 1998-2009 Gerwin Klein <lsf@jflex.de> *
* All rights reserved. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License. See the file *
* COPYRIGHT for more information. *
* *
* This program 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 this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package JFlex.gui;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import JFlex.GeneratorException;
import JFlex.Options;
import JFlex.Skeleton;
/**
* A dialog for setting JFlex options
*
* @author Gerwin Klein
* @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $
*/
public class OptionsDialog extends Dialog {
private Frame owner;
private Button skelBrowse;
private TextField skelFile;
private Button ok;
private Button defaults;
private Checkbox dump;
private Checkbox verbose;
private Checkbox jlex;
private Checkbox no_minimize;
private Checkbox no_backup;
private Checkbox time;
private Checkbox dot;
private Checkbox tableG;
private Checkbox switchG;
private Checkbox packG;
/**
* Create a new options dialog
*
* @param owner
*/
public OptionsDialog(Frame owner) {
super(owner, "Options");
this.owner = owner;
setup();
pack();
addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
close();
}
});
}
public void setup() {
// create components
ok = new Button("Ok");
defaults = new Button("Defaults");
skelBrowse = new Button(" Browse");
skelFile = new TextField();
skelFile.setEditable(false);
dump = new Checkbox(" dump");
verbose = new Checkbox(" verbose");
jlex = new Checkbox(" JLex compatibility");
no_minimize = new Checkbox(" skip minimization");
no_backup = new Checkbox(" no backup file");
time = new Checkbox(" time statistics");
dot = new Checkbox(" dot graph files");
CheckboxGroup codeG = new CheckboxGroup();
tableG = new Checkbox(" table",Options.gen_method == Options.TABLE, codeG);
switchG = new Checkbox(" switch",Options.gen_method == Options.SWITCH, codeG);
packG = new Checkbox(" pack",Options.gen_method == Options.PACK, codeG);
// setup interaction
ok.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
close();
}
} );
defaults.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
setDefaults();
}
} );
skelBrowse.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
skelBrowse();
}
} );
tableG.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
setGenMethod();
}
} );
verbose.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.verbose = verbose.getState();
}
} );
dump.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.dump = dump.getState();
}
} );
jlex.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.jlex = jlex.getState();
}
} );
no_minimize.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.no_minimize = no_minimize.getState();
}
} );
no_backup.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.no_backup = no_backup.getState();
}
} );
dot.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.dot = dot.getState();
}
} );
time.addItemListener( new ItemListener() {
public void itemStateChanged(ItemEvent e) {
Options.time = time.getState();
}
} );
// setup layout
GridPanel panel = new GridPanel(4,7,10,10);
panel.setInsets( new Insets(10,5,5,10) );
panel.add(3,0,ok);
panel.add(3,1,defaults);
panel.add(0,0,2,1,Handles.BOTTOM,new Label("skeleton file:"));
panel.add(0,1,2,1,skelFile);
panel.add(2,1,1,1,Handles.TOP, skelBrowse);
panel.add(0,2,1,1,Handles.BOTTOM,new Label("code:"));
panel.add(0,3,1,1,tableG);
panel.add(0,4,1,1,switchG);
panel.add(0,5,1,1,packG);
panel.add(1,3,1,1,dump);
panel.add(1,4,1,1,verbose);
panel.add(1,5,1,1,time);
panel.add(2,3,1,1,no_minimize);
panel.add(2,4,1,1,no_backup);
panel.add(3,3,1,1,jlex);
panel.add(3,4,1,1,dot);
add("Center",panel);
updateState();
}
private void skelBrowse() {
FileDialog d = new FileDialog(owner , "Choose file", FileDialog.LOAD);
d.show();
if (d.getFile() != null) {
File skel = new File(d.getDirectory()+d.getFile());
try {
Skeleton.readSkelFile(skel);
skelFile.setText(skel.toString());
}
catch (GeneratorException e) {
// do nothing
}
}
}
private void setGenMethod() {
if ( tableG.getState() ) {
Options.gen_method = Options.TABLE;
return;
}
if ( switchG.getState() ) {
Options.gen_method = Options.SWITCH;
return;
}
if ( packG.getState() ) {
Options.gen_method = Options.PACK;
return;
}
}
private void updateState() {
dump.setState(Options.dump);
verbose.setState(Options.verbose);
jlex.setState(Options.jlex);
no_minimize.setState(Options.no_minimize);
no_backup.setState(Options.no_backup);
time.setState(Options.time);
dot.setState(Options.dot);
tableG.setState(Options.gen_method == Options.TABLE);
switchG.setState(Options.gen_method == Options.SWITCH);
packG.setState(Options.gen_method == Options.PACK);
}
private void setDefaults() {
Options.setDefaults();
Skeleton.readDefault();
skelFile.setText("");
updateState();
}
public void close() {
hide();
}
}