package views;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
import application.Application;
import model.Model;
public class Gui extends JFrame implements PropertyChangeListener {
//--------------------------------------------------------------------
// Members
private Model model;
public String regExFilePath = null;
public String textFilePath = null;
private FileManager fileManager = null;
private ResultPanel resultPanel;
private CreationPanel creationPanel;
private RegExTextPanel regExTextPanel;
private TextPanel textPanel;
private RegExTreePanel regExTreePanel;
private ExportPanel exportPanel;
private JTabbedPane jTabbedPane = null;
private JSplitPane jSplitPane = null;
private JSplitPane jSplitPaneText = null;
private JPanel jPanel = null;
private JMenuBar jMenuBar = null;
private JMenu jMenuFile = null;
private JMenu jMenuRegEx = null;
private JMenu jMenuHelp = null;
private JMenu jMenuView = null;
private JMenuItem jAbout = null;
private JMenuItem jHelpItem = null;
private JMenuItem jOpenRegEx = null;
private JMenuItem jSaveRegEx = null;
private JMenuItem jOpenText = null;
private JMenuItem jSaveText = null;
private JMenuItem jExit = null;
private JMenuItem jOptions = null;
private JMenuItem jApplyRegEx = null;
private JMenuItem jUndo = null;
private JMenuItem jRedo = null;
private JRadioButtonMenuItem jGenerate = null;
private JRadioButtonMenuItem jLearn = null;
private JRadioButtonMenuItem jResult = null;
private JRadioButtonMenuItem jExport = null;
public Model getModel()
{
return model;
}
// --------------------------------------------------------------------
// Construction methods
public Gui() {
// first generate the model
model = new Model(Application.settings.getUndoLevel());
model.addPropertyChangeListener(this);
//then add these views to this Frame
fileManager = new FileManager(model,Application.settings.getLastPath());
initialize();
}
private void initialize() {
this.setSize(new java.awt.Dimension(800,600));
this.setIconImage(new ImageIcon(this.getClass().getClassLoader().getResource("images/logo_gtl.png")).getImage());
this.setJMenuBar(getjMenuBar());
this.setContentPane(getJSplitPane());
this.setDefaultCloseOperation(javax.swing.JFrame.DO_NOTHING_ON_CLOSE);
this.setTitle("GTLRegEx");
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
onExit();
}
});
this.initFrameSize();
}
private void initFrameSize() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int xwin = getSize().width;
int ywin = getSize().height;
setBounds((screenSize.width-xwin)/2,(screenSize.height-ywin)/2,xwin,ywin);
}
/**
* Method called on exit to perform the last operations
* Allows user to cancel the exit process
*/
public void onExit() {
if (!askToSave() && Application.settings.hidePanel()) {
if(this.fileManager.getDefaultPath()!= null)
Application.settings.setLastPath(this.fileManager.getDefaultPath());
Application.settings.save();
Application.exit();
}
}
/**
* This method checks whehther or not files have been saved
* and allow the user to cancel its choice of exiting
* @return boolean to abort
*/
private boolean askToSave() {
if(Application.settings.getAskForSave()) {
boolean abort = false;
if (model.isRegExModified()) {
fileManager.setFileType("rgx");
abort = fileManager.askToSave();
}
if (model.isTextModified() && !abort) {
fileManager.setFileType("txt");
abort = fileManager.askToSave();
}
return abort;
}
return false;
}
//--------------------------------------------------------------------
// Menus
/**
* This method initializes jSplitPane
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPane() {
if (jSplitPane == null) {
jSplitPane = new JSplitPane();
jSplitPane.setDividerSize(5);
jSplitPane.setContinuousLayout(true);
jSplitPane.setOneTouchExpandable(true);
jSplitPane.setLeftComponent(getJPanel());
jSplitPane.setRightComponent(getJTabbedPane());
}
return jSplitPane;
}
/**
* This method initializes jMenuBar
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getjMenuBar() {
if (jMenuBar == null) {
jMenuBar = new JMenuBar();
jMenuBar.add(getJMenuFile());
jMenuBar.add(getJMenuRegEx());
jMenuBar.add(getJMenuView());
jMenuBar.add(getJMenuHelp());
}
return jMenuBar;
}
/**
* This method initializes jMenuFile
*
* @return javax.swing.JMenu
*/
private JMenu getJMenuFile() {
if (jMenuFile == null) {
jMenuFile = new JMenu();
jMenuFile.setText(Application.messages.getString("MENU_FILE"));
jMenuFile.add(getJOpenRegEx());
jMenuFile.add(getJSaveRegEx());
jMenuFile.addSeparator();
jMenuFile.add(getJOpenText());
jMenuFile.add(getJSaveText());
jMenuFile.addSeparator();
jMenuFile.add(getJOptions());
jMenuFile.addSeparator();
jMenuFile.add(getJExit());
}
return jMenuFile;
}
/**
* This method initializes jOpenRegEx
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJOpenRegEx() {
if (jOpenRegEx == null) {
jOpenRegEx = new JMenuItem();
jOpenRegEx.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/folder_open.png")));
jOpenRegEx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK));
jOpenRegEx.setText(Application.messages.getString("MENU_OPEN_REGEX"));
jOpenRegEx.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
openFile(".rgx");
}
});
}
return jOpenRegEx;
}
/**
* This method initializes jSaveRegEx
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJSaveRegEx() {
if (jSaveRegEx == null) {
jSaveRegEx = new JMenuItem();
jSaveRegEx.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/save.png")));
jSaveRegEx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK));
jSaveRegEx.setText(Application.messages.getString("MENU_SAVE_REGEX"));
jSaveRegEx.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
saveFile(".rgx");
}
});
}
return jSaveRegEx;
}
/**
* This method initializes jOpenText
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJOpenText() {
if (jOpenText == null) {
jOpenText = new JMenuItem();
jOpenText.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/folder_open.png")));
jOpenText.setText(Application.messages.getString("MENU_OPEN_TEXT"));
jOpenText.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, KeyEvent.CTRL_MASK|KeyEvent.SHIFT_MASK));
jOpenText.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
openFile(".txt");
}
});
}
return jOpenText;
}
/**
* This method initializes jSaveText
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJSaveText() {
if (jSaveText == null) {
jSaveText = new JMenuItem();
jSaveText.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/save.png")));
jSaveText.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.CTRL_MASK|KeyEvent.SHIFT_MASK));
jSaveText.setText(Application.messages.getString("MENU_SAVE_TEXT"));
jSaveText.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
saveFile(".txt");
}
});
}
return jSaveText;
}
/**
* This method initializes jExit
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJOptions() {
if (jOptions == null) {
jOptions = new JMenuItem();
jOptions.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/options.png")));
jOptions.setText(Application.messages.getString("MENU_OPTIONS"));
jOptions.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_MASK));
jOptions.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
onShowOptions();
}
});
}
return jOptions;
}
private JMenuItem getJExit() {
if (jExit == null) {
jExit = new JMenuItem();
jExit.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/exit.png")));
jExit.setText(Application.messages.getString("MENU_EXIT"));
jExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK));
jExit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
onExit();
}
});
}
return jExit;
}
/**
* This method initializes jMenuRegEx
*
* @return javax.swing.JMenu
*/
private JMenu getJMenuRegEx() {
if (jMenuRegEx == null) {
jMenuRegEx = new JMenu();
jMenuRegEx.setText(Application.messages.getString("MENU_REGEX"));
jMenuRegEx.add(getJUndo());
jMenuRegEx.add(getJRedo());
jMenuRegEx.addSeparator();
jMenuRegEx.add(getJApplyRegEx());
}
return jMenuRegEx;
}
/**
* This method initializes jMenuAbout
*
* @return javax.swing.JMenu
*/
private JMenu getJMenuHelp() {
if (jMenuHelp == null) {
jMenuHelp = new JMenu();
jMenuHelp.setText(Application.messages.getString("MENU_HELP"));
jMenuHelp.add(getJHelpItem());
jMenuHelp.addSeparator();
jMenuHelp.add(getJAbout());
}
return jMenuHelp;
}
/**
* This method initializes jMenuItem
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJAbout() {
if (jAbout == null) {
jAbout = new JMenuItem();
jAbout.setText(Application.messages.getString("MENU_ABOUT"));
jAbout.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
onAbout();
}
});
}
return jAbout;
}
private JMenuItem getJHelpItem() {
if (jHelpItem == null) {
jHelpItem = new JMenuItem();
jHelpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
jHelpItem.setText(Application.messages.getString("MENU_HELP_ITEM"));
jHelpItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
onHelp();
}
});
}
return jHelpItem;
}
/**
* This method initializes jApplyRegEx
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJApplyRegEx() {
if (jApplyRegEx == null) {
jApplyRegEx = new JMenuItem();
jApplyRegEx.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/apply.png")));
jApplyRegEx.setText(Application.messages.getString("MENU_APPLY"));
jApplyRegEx.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.CTRL_MASK));
jApplyRegEx.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
model.applyRegEx();
}
});
}
return jApplyRegEx;
}
/**
* This method initializes jUndo
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJUndo() {
if (jUndo == null) {
jUndo = new JMenuItem();
jUndo.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/undo.png")));
jUndo.setText("Undo");
jUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, KeyEvent.CTRL_MASK));
jUndo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
model.unDo();
}
});
}
return jUndo;
}
/**
* This method initializes Redo
*
* @return javax.swing.JMenuItem
*/
private JMenuItem getJRedo() {
if (jRedo == null) {
jRedo = new JMenuItem();
jRedo.setIcon(new ImageIcon(this.getClass().getClassLoader().getResource("images/redo.png")));
jRedo.setText("Redo");
jRedo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Y, KeyEvent.CTRL_MASK));
jRedo.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
model.reDo();
}
});
}
return jRedo;
}
/**
* This method initializes jMenuView
*
* @return javax.swing.JMenu
*/
private JMenu getJMenuView() {
if (jMenuView == null) {
jMenuView = new JMenu();
jMenuView.setText(Application.messages.getString("MENU_VIEW"));
ButtonGroup group = new ButtonGroup();
group.add(getJGenerate());
group.add(getJLearn());
group.add(getJResult());
group.add(getJExport());
jMenuView.add(getJGenerate());
jMenuView.add(getJLearn());
jMenuView.add(getJResult());
jMenuView.add(getJExport());
}
return jMenuView;
}
/**
* This method initializes jGenerate
*
* @return javax.swing.JRadioButtonMenuItem
*/
private JRadioButtonMenuItem getJGenerate() {
if (jGenerate == null) {
jGenerate = new JRadioButtonMenuItem();
jGenerate.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
jGenerate.setText(Application.messages.getString("MENU_VIEW_GENERATE"));
jGenerate.setSelected(true);
jGenerate.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getStateChange() == java.awt.event.ItemEvent.SELECTED)
getJTabbedPane().setSelectedIndex(0);
}
});
}
return jGenerate;
}
/**
* This method initializes jLearn
*
* @return javax.swing.JRadioButtonMenuItem
*/
private JRadioButtonMenuItem getJLearn() {
if (jLearn == null) {
jLearn = new JRadioButtonMenuItem();
jLearn.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0));
jLearn.setText(Application.messages.getString("MENU_VIEW_LEARN"));
jLearn.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getStateChange() == java.awt.event.ItemEvent.SELECTED)
getJTabbedPane().setSelectedIndex(1);
}
});
}
return jLearn;
}
/**
* This method initializes jResult
*
* @return javax.swing.JRadioButtonMenuItem
*/
private JRadioButtonMenuItem getJResult() {
if (jResult == null) {
jResult = new JRadioButtonMenuItem();
jResult.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, 0));
jResult.setText(Application.messages.getString("MENU_VIEW_RESULT"));
jResult.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getStateChange() == java.awt.event.ItemEvent.SELECTED)
getJTabbedPane().setSelectedIndex(2);
}
});
}
return jResult;
}
/**
* This method initializes jExport
*
* @return javax.swing.JRadioButtonMenuItem
*/
private JRadioButtonMenuItem getJExport() {
if (jExport == null) {
jExport = new JRadioButtonMenuItem();
jExport.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0));
jExport.setText(Application.messages.getString("MENU_VIEW_EXPORT"));
jExport.addItemListener(new java.awt.event.ItemListener() {
public void itemStateChanged(java.awt.event.ItemEvent e) {
if(e.getStateChange() == java.awt.event.ItemEvent.SELECTED)
getJTabbedPane().setSelectedIndex(3);
}
});
}
return jExport;
}
//--------------------------------------------------------------------
// Content
/**
* This method initializes jSplitPaneText
*
* @return javax.swing.JSplitPane
*/
private JSplitPane getJSplitPaneText() {
if (jSplitPaneText == null) {
jSplitPaneText = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
jSplitPaneText.setDividerSize(5);
jSplitPaneText.setContinuousLayout(true);
jSplitPaneText.setOneTouchExpandable(false);
jSplitPaneText.setLeftComponent(getRegExTextPanel());
jSplitPaneText.setRightComponent(getTextPanel());
}
return jSplitPaneText;
}
/**
* This method initializes jTabbedPane
*
* @return javax.swing.JTabbedPane
*/
private JTabbedPane getJTabbedPane() {
if (jTabbedPane == null) {
jTabbedPane = new JTabbedPane();
jTabbedPane.addTab(Application.messages.getString("TAB_GENERATE"), null, getCreationPanel(), null);
jTabbedPane.addTab(Application.messages.getString("TAB_LEARN"), null, getRegExTreePanel(), null);
jTabbedPane.addTab(Application.messages.getString("TAB_RESULTS"), null, getResultPanel(), null);
jTabbedPane.addTab(Application.messages.getString("TAB_EXPORT"), null, getExportPanel(), null);
jTabbedPane.setSize(400,200);
jTabbedPane.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
onTabedPaneChange();
}
});
}
return jTabbedPane;
}
private void onTabedPaneChange()
{
int selectedIndex = this.jTabbedPane.getSelectedIndex();
switch (selectedIndex) {
case 0:
getJGenerate().setSelected(true);
break;
case 1:
getJLearn().setSelected(true);
break;
case 2:
getJResult().setSelected(true);
break;
case 3:
getJExport().setSelected(true);
break;
default:
break;
}
}
/**
* This method initializes jPanel1
*
* @return javax.swing.JPanel
*/
private JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(new BorderLayout());
jPanel.add(getJSplitPaneText(), null);
}
return jPanel;
}
private ResultPanel getResultPanel() {
if (resultPanel == null) {
resultPanel = new ResultPanel(model);
}
return resultPanel;
}
private CreationPanel getCreationPanel() {
if (creationPanel == null) {
creationPanel = new CreationPanel(model);
}
return creationPanel;
}
private ExportPanel getExportPanel() {
if (exportPanel == null) {
exportPanel = new ExportPanel(model);
}
return exportPanel;
}
private RegExTextPanel getRegExTextPanel() {
if (regExTextPanel == null) {
regExTextPanel = new RegExTextPanel(model);
}
return regExTextPanel;
}
private TextPanel getTextPanel() {
if (textPanel == null) {
textPanel = new TextPanel(model);
}
return textPanel;
}
private RegExTreePanel getRegExTreePanel() {
if (regExTreePanel == null) {
regExTreePanel = new RegExTreePanel(model);
}
return regExTreePanel;
}
/**
* This method gets the RegEx or Text file
*/
public void openFile(String ext) {
if (ext.equalsIgnoreCase(".rgx"))
this.model.openRegExFile();
if (ext.equalsIgnoreCase(".txt"))
this.model.openTextFile();
}
/**
* This method saves the RegEx or Text
*/
public void saveFile(String ext) {
if (ext.equalsIgnoreCase(".rgx"))
this.model.saveRegExFile();
if (ext.equalsIgnoreCase(".txt"))
this.model.saveTextFile();
}
public void onShowOptions() {
Application.settings.showPanel();
}
private void onAbout() {
JOptionPane.showMessageDialog(null,
Application.messages.getString("ABOUT_TEXT"),
Application.messages.getString("ABOUT_TITLE"),
JOptionPane.INFORMATION_MESSAGE,
new ImageIcon(this.getClass().getClassLoader().getResource("images/about.png")));
}
private void onHelp() {
String url = "http://gtlregex.sourceforge.net/?p=4";
try {
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
}
catch (IOException e) {
System.out.println("unable to launch the following link : http://gtlregex.sourceforge.net/?p=4");
}
// JOptionPane.showMessageDialog(null,
// Application.messages.getString("HELP_TEXT"),
// Application.messages.getString("HELP_TITLE"),
// JOptionPane.INFORMATION_MESSAGE,
// new ImageIcon("images/about.png"));
}
public void propertyChange(PropertyChangeEvent arg0) {
if (arg0.getPropertyName() == "regEx") {
jApplyRegEx.setEnabled(false);
}
if (arg0.getPropertyName() == "valid" && arg0.getNewValue() == null) {
jApplyRegEx.setEnabled(true);
}
}
}