/* * * created: Wed Aug 3 2004 * * This file is part of Artemis * * Copyright(C) 2000 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. * */ package uk.ac.sanger.artemis.editor; import javax.swing.*; import java.awt.*; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import uk.ac.sanger.artemis.Feature; import uk.ac.sanger.artemis.components.ViewMenu; import uk.ac.sanger.artemis.util.Document; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.util.Hashtable; import java.util.Vector; import java.util.StringTokenizer; import java.util.Enumeration; import java.io.File; import java.io.BufferedReader; import java.io.StringReader; import java.io.IOException; public class DataViewInternalFrame extends JInternalFrame { /** */ private static final long serialVersionUID = 1L; protected static int dataDividerLocation = 250; protected static int annotationDividerLocation = 150; private JTabbedPane tabPane = new JTabbedPane(); private Annotation ann; private Box evidenceBox; private Vector fastaCollection = new Vector(); private JSplitPane split; public DataViewInternalFrame(Hashtable dataFile, JDesktopPane desktop, final JScrollPane scrollEvidence, int wid, int hgt, String qualifier_txt, final Feature edit_feature) { super("Document " , true, //resizable true, //closable true, //maximizable true);//iconifiable // graphical evidence display JInternalFrame evidence = new JInternalFrame("Evidence", true, true, true, true); //JPanel evidencePanel = (JPanel)evidence.getContentPane(); evidenceBox = Box.createVerticalBox(); // ann = new Annotation(desktop); StringBuffer annFormat = new StringBuffer(); annFormat.append(htmlBreaks(qualifier_txt.trim())); int icount = 0; Enumeration enumPrograms = dataFile.keys(); while(enumPrograms.hasMoreElements()) { String programName = (String) enumPrograms.nextElement(); Vector files = (Vector) dataFile.get(programName); for(int i = 0; i < files.size(); i++) { String fileName = (String) files.get(i); Document document = null; try { String thisFileName = fileName; int ind = fileName.indexOf(programName + File.separatorChar); if(ind > -1) thisFileName = fileName.substring (ind + programName.length () + 1); document = ViewMenu.getSearchDocument(edit_feature, programName, thisFileName); } catch (IOException e) { e.printStackTrace(); } if(document == null) { JOptionPane.showMessageDialog(desktop, "Results file: \n" + fileName + "\ndoes not exist!", "File Not Found", JOptionPane.WARNING_MESSAGE); continue; } String tabName = (String) fileName; int ind = tabName.lastIndexOf("/"); if(ind > -1) { String go = ""; if(tabName.indexOf("blastp+go") > -1) go = ":: GO :: "; tabName = go + tabName.substring(ind + 1); } // add fasta results internal frame FastaTextPane fastaPane = new FastaTextPane(document); if(fastaPane.getFormat() != null) fastaCollection.add(fastaPane); else continue; /* if(qualifier_txt.indexOf("/" + fastaPane.getFormat() + "_file=\"") == -1) { if(icount > 0) annFormat.append("\n
"); annFormat.append("/" + fastaPane.getFormat() + "_file=\"" + fileName + "\""); } */ // graphical view final JScrollPane dbviewScroll = new JScrollPane(); final DBViewer dbview = new DBViewer(fastaPane, dbviewScroll); dbviewScroll.setViewportView(dbview); final Dimension d = new Dimension((int) dbviewScroll.getPreferredSize() .getWidth(), hgt / 3); final Box yBox = Box.createVerticalBox(); final Box xBox = Box.createHorizontalBox(); final MouseOverButton hide = new MouseOverButton("X"); hide.setForeground(Color.blue); hide.setBackground(Color.white); hide.setFont(BigPane.font); hide.setMargin(new Insets(0, 0, 0, 0)); hide.setBorderPainted(false); hide.setActionCommand("HIDE"); final Box bacross = Box.createHorizontalBox(); bacross.add(dbviewScroll); hide.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { if(hide.getActionCommand().equals("HIDE")) { bacross.remove(dbviewScroll); bacross.add(yBox); hide.setText("+"); scrollEvidence.setViewportView(evidenceBox); hide.setActionCommand("SHOW"); } else { bacross.remove(yBox); dbviewScroll.setColumnHeaderView(yBox); bacross.add(dbviewScroll); hide.setText("X"); scrollEvidence.setViewportView(evidenceBox); hide.setActionCommand("HIDE"); } } }); xBox.add(hide); JLabel tabLabel = new JLabel(fastaPane.getFormat() + " " + tabName); tabLabel.setFont(BigPane.font); tabLabel.setOpaque(true); xBox.add(tabLabel); xBox.add(Box.createHorizontalGlue()); yBox.add(xBox); yBox.add(dbview.getRuler()); dbviewScroll.setPreferredSize(d); dbviewScroll.setColumnHeaderView(yBox); fastaPane.addFastaListener(dbview); evidenceBox.add(bacross); // add data pane DataCollectionPane dataPane = new DataCollectionPane(fastaPane, ann, desktop, this); fastaPane.addFastaListener(dataPane); ActiveJSplitPane split = new ActiveJSplitPane( JSplitPane.VERTICAL_SPLIT, fastaPane, dataPane); split.setLabel(tabLabel); split.setDividerLocation(DataViewInternalFrame.dataDividerLocation); split.setOneTouchExpandable(true); if(icount == 0) split.setActive(true); tabPane.add(fastaPane.getFormat() + " " + tabName, split); icount++; } } // evidenceBox.add(Box.createVerticalGlue()); // add tab pane listener tabPane.addChangeListener(new TabChangeListener()); // add setActive annotator text pane ann.setAnnotation(annFormat.toString().trim()); JScrollPane annotationScroll = new JScrollPane(ann); annotationScroll.setPreferredSize(new Dimension(500,150)); split = new JSplitPane(JSplitPane.VERTICAL_SPLIT, annotationScroll,tabPane); split.setDividerLocation(annotationDividerLocation); getContentPane().add(split); setVisible(true); evidence.setVisible(true); desktop.add(evidence); } protected Box getEvidenceBox() { return evidenceBox; } protected String getFeatureText() { return ann.getFeatureText(); } protected void reReadSelectedResults() { ActiveJSplitPane split = (ActiveJSplitPane)tabPane.getSelectedComponent(); Component comps[] = split.getComponents(); for(int i=0; i -1) t = t.substring(0,ind) + "
" + t.substring(ind); return t; } public class TabChangeListener implements ChangeListener { ActiveJSplitPane lastSelected = (ActiveJSplitPane)tabPane.getSelectedComponent(); public void stateChanged(ChangeEvent e) { ActiveJSplitPane split = (ActiveJSplitPane)tabPane.getSelectedComponent(); lastSelected.setActive(false); split.setActive(true); lastSelected = split; } } protected void setDataDividerLocation() { ActiveJSplitPane lastSelected = (ActiveJSplitPane)tabPane.getSelectedComponent(); if(lastSelected != null) dataDividerLocation = lastSelected.getDividerLocation(); } protected void setAnnotationDividerLocation() { annotationDividerLocation = split.getDividerLocation(); } public class ActiveJSplitPane extends JSplitPane { /** */ private static final long serialVersionUID = 1L; private JLabel tabLabel; private Color bg; public ActiveJSplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent) { super(newOrientation,newLeftComponent,newRightComponent); } public void setLabel(JLabel tabLabel) { this.tabLabel = tabLabel; this.bg = tabLabel.getBackground(); } public void setActive(boolean active) { if(active) tabLabel.setBackground(Color.yellow); else tabLabel.setBackground(bg); } } }