package org.seqcode.projects.seqview.components;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import org.seqcode.gseutils.NotFoundException;
import org.seqcode.projects.seqview.SeqView;
import org.seqcode.projects.seqview.SeqViewOptions;
/**
* Options frame that is driven by the SeqView class (rather than being the driver class itself).
* @author mahony
*
*/
public class SeqViewOptionsFrame extends JFrame implements ActionListener {
private SeqView parent;
private SeqViewOptionsPane pane;
private JButton ok, cancel;
//variables for menus
private JMenuBar menuBar;
private JMenu fileMenu;
private JMenuItem openSessionItem;
private JMenuItem saveSessionItem;
private JMenuItem exitItem;
private JMenu toolsMenu;
private JMenuItem optionsItem;
private boolean closed=false;
public SeqViewOptionsFrame(SeqViewOptionsPane optpane, SeqView parent) throws NotFoundException {
super();
this.parent = parent;
setTitle("SeqView");
pane = optpane;
init();
}
private void init() {
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridBagLayout());
Dimension buttonSize = new Dimension(30,20);
ok = new JButton("OK");
cancel = new JButton("Cancel");
ok.setMaximumSize(buttonSize);
cancel.setMaximumSize(buttonSize);
ok.addActionListener(this);
cancel.addActionListener(this);
buttonPanel.add(ok);
buttonPanel.add(cancel);
Container content = getContentPane();
content.setLayout(new BorderLayout());
content.add(buttonPanel,BorderLayout.SOUTH);
content.add(pane,BorderLayout.CENTER);
SeqViewOptions options = pane.parseOptions();
this.setSize(options.getPreferredWindowWidth(), options.getPreferredWindowHeight());
if (options.isWindowCentered()) {
this.setLocationRelativeTo(null);
}
else {
this.setLocation(options.getPreferredTopLeftX(), options.getPreferredTopLeftY());
}
this.createMenu();
setVisible(true);
}
/**
* Create a JMenuBar for this GUI
*/
private void createMenu() {
menuBar = new JMenuBar();
//build the file menu
fileMenu = new JMenu("File");
fileMenu.setMnemonic(KeyEvent.VK_F);
menuBar.add(fileMenu);
openSessionItem = new JMenuItem("Open Session", KeyEvent.VK_O);
openSessionItem.setToolTipText("Open a saved SeqView session");
openSessionItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openSession_actionPerformed(e);
}
});
saveSessionItem = new JMenuItem("Save Session", KeyEvent.VK_S);
saveSessionItem.setToolTipText("Save this SeqView session");
saveSessionItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
saveSession_actionPerformed(e);
}
});
exitItem = new JMenuItem("Exit", KeyEvent.VK_X);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
exit_actionPerformed(e);
}
});
//TODO: delete these lines once the functionality for these buttons is
//implemented
openSessionItem.setEnabled(false);
saveSessionItem.setEnabled(false);
fileMenu.add(openSessionItem);
fileMenu.add(saveSessionItem);
fileMenu.addSeparator();
fileMenu.add(exitItem);
//end building file menu
//build the tools menu
toolsMenu = new JMenu("Tools");
toolsMenu.setMnemonic(KeyEvent.VK_T);
menuBar.add(toolsMenu);
optionsItem = new JMenuItem("Options...", KeyEvent.VK_O);
optionsItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
options_actionPerformed(e);
}
});
toolsMenu.add(optionsItem);
//end building edit menu
this.setJMenuBar(menuBar);
}
public void actionPerformed (ActionEvent e) {
if (e.getSource() == ok) {
SeqViewOptions opts = pane.parseOptions();
parent.updateOptions(opts);
close();
} else if (e.getSource() == cancel) {
close();
}
}
/**
*
* @param e
*/
void openSession_actionPerformed(ActionEvent e) {
//TODO Implement this method
}
/**
*
* @param e
*/
void saveSession_actionPerformed(ActionEvent e) {
//TODO Implement this method
}
/**
* Exit the program
* @param e
*/
void exit_actionPerformed(ActionEvent e) {
//TODO Check if any data is being viewed, if so prompt for confirmation
//but if only the SeqViewOptionFrame is open then just exit
boolean dataWindowsOpen = true;
if (dataWindowsOpen) {
int confirmResult =
JOptionPane.showConfirmDialog(this, "Are you sure you want to exit SeqView?",
"Confirm Exit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if (confirmResult == JOptionPane.NO_OPTION) {
return;
}
}
close();
}
/**
* Open the dialog to set preferences
* @param e
*/
void options_actionPerformed(ActionEvent e) {
// new SeqViewOptionsDialog(this, this, pane.parseOptions());
}
/**
* Configure log4j
*/
public static void configureLogging() {
ClassLoader loader = SeqViewOptionsFrame.class.getClassLoader();
//PropertyConfigurator.configure(loader.getResource("org/seqcode/gseutils/properties/log4j.properties"));
}
public boolean isClosed() { return closed; }
/**
* Close the options window
*/
public void close(){
if(!pane.isClosed())
pane.close();
this.dispose();
closed=true;
}
}