/* * Copyright (C) 2008 Genome Research Limited * * This program 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. * * 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. * * @author: Tim Carver */ package uk.ac.sanger.artemis.circular; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextField; import uk.ac.sanger.artemis.Entry; import uk.ac.sanger.artemis.Feature; import uk.ac.sanger.artemis.FeatureKeyPredicate; import uk.ac.sanger.artemis.FeatureKeyQualifierPredicate; import uk.ac.sanger.artemis.FeaturePredicate; import uk.ac.sanger.artemis.FeaturePredicateConjunction; import uk.ac.sanger.artemis.FeaturePredicateVector; import uk.ac.sanger.artemis.FeatureVector; import uk.ac.sanger.artemis.components.KeyChoice; import uk.ac.sanger.artemis.components.QualifierChoice; import uk.ac.sanger.artemis.components.StickyFileChooser; import uk.ac.sanger.artemis.io.Key; import uk.ac.sanger.artemis.io.Range; import uk.ac.sanger.artemis.io.RangeVector; public class TrackManager extends JFrame { private static final long serialVersionUID = 1L; private DNADraw dnaDraw; private KeyChoice keyChoice[]; private QualifierChoice qualifierChoice[]; private JTextField qualifierValue[]; private JCheckBox notQualifier[]; private JCheckBox showForward[]; private JCheckBox showReverse[]; private JCheckBox showAny[]; private TextFieldFloat trackSize[]; private TextFieldFloat trackPosition[]; public TrackManager(final DNADraw dnaDraw) { super("Track Manager"); this.dnaDraw = dnaDraw; setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); createMenu(); JScrollPane jsp = new JScrollPane(getPanelComponents()); getContentPane().add(jsp); pack(); } /** * Create a menu for the track manager. */ private void createMenu() { final JMenu menuFile = new JMenu("File"); final JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); menuBar.add(menuFile); menuFile.add(getExportTrackTemplateMenuItem(this, dnaDraw)); menuFile.add(getImportTrackTemplateMenuItem(this)); final JMenuItem closeMenu = new JMenuItem("Close"); closeMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { TrackManager.this.setVisible(false); } }); menuFile.add(closeMenu); } protected JMenuItem getImportTrackTemplateMenuItem(final JFrame f) { final JMenuItem readTemplate = new JMenuItem("Import Track Template..."); readTemplate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { StickyFileChooser fileDialog = new StickyFileChooser(); int status = fileDialog.showOpenDialog(f); if(status == JFileChooser.CANCEL_OPTION) return; final File fileRead = fileDialog.getSelectedFile(); if(!fileRead.exists()) { JOptionPane.showMessageDialog(f, fileRead.getName()+" not found.", "Problem Reading File", JOptionPane.WARNING_MESSAGE); return; } try { final FileReader reader = new FileReader(fileRead); BufferedReader inputStream = new BufferedReader(reader); String inLine = null; Track[] tracks = Wizard.getTracks(); int trackCount = 0; while ((inLine = inputStream.readLine()) != null) { if(inLine.startsWith("#") || inLine.trim().equals("")) continue; if(trackCount >= tracks.length) { addTrack(); tracks = Wizard.getTracks(); } tracks[trackCount].setPropertiesFromTemplate(inLine); trackCount++; } inputStream.close(); reader.close(); refresh(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }); return readTemplate; } /** * Menu Item with associated ActionListener for exporting the properties * of this track. * @param f * @return */ protected static JMenuItem getExportTrackTemplateMenuItem(final JFrame f, final DNADraw dnaDraw) { final JMenuItem saveTemplate = new JMenuItem("Export Track Template..."); saveTemplate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { StickyFileChooser fileDialog = new StickyFileChooser(); int status = fileDialog.showSaveDialog(f); if(status == JFileChooser.CANCEL_OPTION) return; final File fileWrite = fileDialog.getSelectedFile(); if(fileWrite.exists()) { status = JOptionPane.showConfirmDialog(f, fileWrite.getName()+ " exists. Overwrite?", "Selected File Exists", JOptionPane.OK_CANCEL_OPTION); if(status == JFileChooser.CANCEL_OPTION) return; } final Track[] tracks = Wizard.getTracks(); try { final Writer writer = new FileWriter(fileWrite); Track.writeHeader(writer, dnaDraw); for(int i=0; i 0) entry = Wizard.getTracks()[0].getEntry(); else entry = dnaDraw.getArtemisEntryGroup().elementAt(0); Wizard.addTrack( entry ); refresh(); setVisible(true); } /** * Update the tracks based on the Track Manager settings * @param tracks */ public void update(final Track[] tracks) { // update tracks for(int i=0; i