001 /*
002 * NeoBio.java
003 *
004 * Copyright 2003 Sergio Anibal de Carvalho Junior
005 *
006 * This file is part of NeoBio.
007 *
008 * NeoBio is free software; you can redistribute it and/or modify it under the terms of
009 * the GNU General Public License as published by the Free Software Foundation; either
010 * version 2 of the License, or (at your option) any later version.
011 *
012 * NeoBio is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
013 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
014 * PURPOSE. See the GNU General Public License for more details.
015 *
016 * You should have received a copy of the GNU General Public License along with NeoBio;
017 * if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
018 * Boston, MA 02111-1307, USA.
019 *
020 * Proper attribution of the author as the source of the software would be appreciated.
021 *
022 * Sergio Anibal de Carvalho Junior mailto:sergioanibaljr@users.sourceforge.net
023 * Department of Computer Science http://www.dcs.kcl.ac.uk
024 * King's College London, UK http://www.kcl.ac.uk
025 *
026 * Please visit http://neobio.sourceforge.net
027 *
028 * This project was supervised by Professor Maxime Crochemore.
029 *
030 */
031
032 package neobio.gui;
033
034 import java.io.*;
035 import java.awt.*;
036 import java.awt.event.*;
037 import javax.swing.*;
038 import javax.swing.border.*;
039 import java.applet.*;
040 import java.util.*;
041 import java.net.URL;
042 import java.beans.PropertyVetoException;
043
044 /**
045 * This class is a simple GUI utility for computing pairwise sequence alignments using one
046 * of the the algorithms provided in the {@link neobio.alignment} package.
047 *
048 * @author Sergio A. de Carvalho Jr.
049 */
050 public class NeoBio extends JFrame
051 {
052 private JMenu file_menu, help_menu;
053 private JMenuBar menu_bar;
054 private JMenuItem new_alignment_item, exit_menuitem, about_menuitem;
055 private JSeparator mid_separator;
056 private JToolBar file_toolbar;
057 private JPanel toolbar_panel;
058 private JButton alignment_button;
059
060 private JDesktopPane desktop_pane;
061
062 /**
063 * Creates a new instance of a graphical interface.
064 */
065 public NeoBio()
066 {
067 super();
068
069 setTitle("NeoBio");
070 setDefaultCloseOperation (WindowConstants.DISPOSE_ON_CLOSE);
071 initComponents();
072
073 show();
074
075 // always open pairwise alignment internal frame
076 pairwiseAlignment();
077 }
078
079 private void initComponents()
080 {
081 URL icon;
082
083 // window closing event
084 addWindowListener(new WindowAdapter()
085 {
086 public void windowClosing(WindowEvent e)
087 {
088 exitForm();
089 }
090 });
091
092 Container content_pane = getContentPane();
093
094 desktop_pane = new JDesktopPane();
095
096 content_pane.add (desktop_pane, BorderLayout.CENTER);
097
098 new_alignment_item = new JMenuItem("Pairwise Alignment");
099 new_alignment_item.setMnemonic('p');
100 new_alignment_item.addActionListener(new ActionListener()
101 {
102 public void actionPerformed(ActionEvent e)
103 {
104 newAlignmentActionPerformed(e);
105 }
106 });
107 icon = getClass().getResource("icons/alignment.gif");
108 if (icon != null) new_alignment_item.setIcon(new ImageIcon(icon));
109
110 mid_separator = new JSeparator();
111
112 exit_menuitem = new JMenuItem("Exit");
113 exit_menuitem.setMnemonic('x');
114 exit_menuitem.addActionListener(new ActionListener()
115 {
116 public void actionPerformed(ActionEvent e)
117 {
118 exitMenuItemActionPerformed(e);
119 }
120 });
121
122 file_menu = new JMenu("File");
123 file_menu.setMnemonic('f');
124 file_menu.add(new_alignment_item);
125 file_menu.add(mid_separator);
126 file_menu.add(exit_menuitem);
127
128 about_menuitem = new JMenuItem("About");
129 about_menuitem.addActionListener(new ActionListener()
130 {
131 public void actionPerformed(ActionEvent e)
132 {
133 aboutMenuItemActionPerformed(e);
134 }
135 });
136 icon = getClass().getResource("icons/help.gif");
137 if (icon != null) about_menuitem.setIcon(new ImageIcon(icon));
138
139 help_menu = new JMenu("Help");
140 help_menu.add(about_menuitem);
141
142 menu_bar = new JMenuBar();
143 //menu_bar.setFont(getFont());
144 menu_bar.add(file_menu);
145 menu_bar.add(help_menu);
146
147 setJMenuBar(menu_bar);
148
149 alignment_button = new JButton();
150 alignment_button.setMnemonic('p');
151 alignment_button.setToolTipText("Pairwise Alignment...");
152 alignment_button.addActionListener(new ActionListener()
153 {
154 public void actionPerformed(ActionEvent e)
155 {
156 newAlignmentActionPerformed(e);
157 }
158 });
159 icon = getClass().getResource("icons/alignment.gif");
160 if (icon != null) alignment_button.setIcon(new ImageIcon(icon));
161
162 file_toolbar = new JToolBar();
163 file_toolbar.setRollover(true);
164 file_toolbar.add(alignment_button);
165
166 toolbar_panel = new JPanel();
167 toolbar_panel.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
168 toolbar_panel.setBorder(new EtchedBorder());
169 toolbar_panel.add(file_toolbar);
170
171 content_pane.add(toolbar_panel, BorderLayout.NORTH);
172
173 // set frame size
174 Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
175 setSize((screen.width * 2) / 3, (screen.height * 7) / 8);
176 setLocation(screen.width / 6, screen.height / 16);
177 }
178
179 private void aboutMenuItemActionPerformed (ActionEvent e)
180 {
181 (new AboutDialog(this)).show();
182 }
183
184 private void exitMenuItemActionPerformed (ActionEvent e)
185 {
186 exitForm();
187 }
188
189 private void exitForm ()
190 {
191 System.exit(0);
192 }
193
194 private void newAlignmentActionPerformed (ActionEvent e)
195 {
196 pairwiseAlignment();
197 }
198
199 private void pairwiseAlignment ()
200 {
201 PairwiseAlignmentFrame alignment_frame = new PairwiseAlignmentFrame (this);
202
203 desktop_pane.add (alignment_frame);
204
205 alignment_frame.setBounds(0, 0, 500, 500);
206 alignment_frame.show();
207 alignment_frame.toFront();
208
209 try
210 {
211 alignment_frame.setMaximum (true);
212 }
213 catch (PropertyVetoException e) {}
214 }
215
216 /**
217 * Create and run a new interface. The main method takes no parameter from the
218 * command line.
219 *
220 * @param args command line arguments
221 */
222 public static void main(String args[])
223 {
224 new NeoBio();
225 }
226 }