X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignFrame.java;h=fe6f4cf9eed7610eaf88a1a30d02fa06fd67ede1;hb=52c2c3879d5dc5e7b4ba7916f1ea964f83551f95;hp=2d391082f83ee5299c771d6b6c9d90c4eec7c786;hpb=998f8c437ca6ea5f76e261ef544e90ebee632f78;p=jalview.git diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 2d39108..fe6f4cf 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -48,13 +48,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener, FeatureListener { /** DOCUMENT ME!! */ - public static final int NEW_WINDOW_WIDTH = 700; + public static final int DEFAULT_WIDTH = 700; /** DOCUMENT ME!! */ - public static final int NEW_WINDOW_HEIGHT = 500; - AlignmentPanel alignPanel; + public static final int DEFAULT_HEIGHT = 500; + public AlignmentPanel alignPanel; AlignViewport viewport; + + Vector alignPanels = new Vector(); + + /** DOCUMENT ME!! */ public String currentFileFormat = null; Stack historyList = new Stack(); @@ -62,17 +66,56 @@ public class AlignFrame private int treeCount = 0; /** + * Creates a new AlignFrame object. + * + * @param al DOCUMENT ME! + */ + public AlignFrame(AlignmentI al, int width, int height) + { + this(al, null, width, height); + } + + + /** * new alignment window with hidden columns * @param al AlignmentI * @param hiddenColumns ColumnSelection or null */ - public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns) { - + public AlignFrame(AlignmentI al, ColumnSelection hiddenColumns, + int width, int height) + { + this.setSize(width, height); viewport = new AlignViewport(al, hiddenColumns); + alignPanel = new AlignmentPanel(this, viewport); + + if(al.getDataset()==null) + { + al.setDataset(null); + } + + addAlignmentPanel(alignPanel); + init(); + } + + /** + * Make a new AlignFrame from exisiting alignmentPanels + * @param ap AlignmentPanel + * @param av AlignViewport + */ + public AlignFrame(AlignmentPanel ap) + { + viewport = ap.av; + alignPanel = ap; + addAlignmentPanel(ap); + init(); + } + + void init() + { this.setDropTarget(new java.awt.dnd.DropTarget(this, this)); - if(viewport.vconsensus==null) + if (viewport.hconsensus == null) { //Out of memory calculating consensus. BLOSUM62Colour.setEnabled(false); @@ -83,73 +126,315 @@ public class AlignFrame modifyPID.setEnabled(false); } - alignPanel = new AlignmentPanel(this, viewport); - String sortby = jalview.bin.Cache.getDefault("SORT_ALIGNMENT", "No sort"); - if(sortby.equals("Id")) + if (sortby.equals("Id")) sortIDMenuItem_actionPerformed(null); - else if(sortby.equals("Pairwise Identity")) + else if (sortby.equals("Pairwise Identity")) sortPairwiseMenuItem_actionPerformed(null); - // remove(tabbedPane); - getContentPane().add(alignPanel, BorderLayout.CENTER); + if (Desktop.desktop != null) + { + addServiceListeners(); + setGUINucleotide(viewport.alignment.isNucleotide()); + } + + if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false)) + { + wrapMenuItem.setSelected(true); + wrapMenuItem_actionPerformed(null); + } + addKeyListener(); + } + void addKeyListener() + { + final AlignFrame af = this; + addKeyListener(new KeyAdapter() + { + public void keyPressed(KeyEvent evt) + { + if (viewport.cursorMode + && evt.getKeyCode() >= KeyEvent.VK_0 + && evt.getKeyCode() <= KeyEvent.VK_9) + { + alignPanel.seqPanel.numberPressed(evt.getKeyChar()); + } + + switch (evt.getKeyCode()) + { + case KeyEvent.VK_V: + if (!evt.isControlDown()) + { + AlignmentI al; + if(viewport.hasHiddenRows) + { + al = viewport.alignment.getHiddenSequences().getFullAlignment(); + } + else + al = new Alignment(viewport.alignment.getSequencesArray()); - // tabbedPane.add(al.isNucleotide() ? "DNA":"Protein", alignPanel); + AlignViewport newview = new AlignViewport(al); - ///Dataset tab - ///////////////////////// - if(al.getDataset()==null) + AlignmentPanel copy = new AlignmentPanel(af, newview); + + if(viewport.viewName==null) + viewport.viewName="View 1"; + + copy.av.sequenceSetID = viewport.getSequenceSetId(); + copy.av.viewName = "View " + + (Desktop.getViewCount(viewport.getSequenceSetId())+1); + + + addAlignmentPanel(copy); + PaintRefresher.Register(copy, viewport.getSequenceSetId()); + PaintRefresher.Register(alignPanel, + viewport.getSequenceSetId()); + + } + break; + case KeyEvent.VK_G: + Desktop.instance.gatherViews(af); + break; + + case KeyEvent.VK_X: + if (!evt.isControlDown()) + { + Desktop.instance.explodeViews(af); + } + break; + + + case 27: // escape key + deselectAllSequenceMenuItem_actionPerformed(null); + + break; + + case KeyEvent.VK_DOWN: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(0, 1); + } + else + moveSelectedSequences(false); + break; + + case KeyEvent.VK_UP: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(0, -1); + } + else + moveSelectedSequences(true); + break; + + case KeyEvent.VK_LEFT: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor( -1, 0); + } + break; + + case KeyEvent.VK_RIGHT: + if (viewport.cursorMode) + { + alignPanel.seqPanel.moveCursor(1, 0); + } + break; + + case KeyEvent.VK_SPACE: + if (viewport.cursorMode) + { + alignPanel.seqPanel.insertGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown()); + } + break; + + case KeyEvent.VK_DELETE: + case KeyEvent.VK_BACK_SPACE: + if (!viewport.cursorMode) + { + cut_actionPerformed(null); + } + else + alignPanel.seqPanel.deleteGapAtCursor(evt.isControlDown() + || evt.isShiftDown() + || evt.isAltDown()); + + break; + + case KeyEvent.VK_S: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRow(); + } + break; + case KeyEvent.VK_C: + if (viewport.cursorMode && !evt.isControlDown()) + { + alignPanel.seqPanel.setCursorColumn(); + } + break; + case KeyEvent.VK_P: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorPosition(); + } + break; + + case KeyEvent.VK_ENTER: + case KeyEvent.VK_COMMA: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setCursorRowAndColumn(); + } + break; + + case KeyEvent.VK_Q: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setSelectionAreaAtCursor(true); + } + break; + case KeyEvent.VK_M: + if (viewport.cursorMode) + { + alignPanel.seqPanel.setSelectionAreaAtCursor(false); + } + break; + + case KeyEvent.VK_F2: + viewport.cursorMode = !viewport.cursorMode; + statusBar.setText("Keyboard editing mode is " + + (viewport.cursorMode ? "on" : "off")); + if (viewport.cursorMode) + { + alignPanel.seqPanel.seqCanvas.cursorX = viewport.startRes; + alignPanel.seqPanel.seqCanvas.cursorY = viewport.startSeq; + } + alignPanel.seqPanel.seqCanvas.repaint(); + break; + + case KeyEvent.VK_F1: + try + { + ClassLoader cl = jalview.gui.Desktop.class.getClassLoader(); + java.net.URL url = javax.help.HelpSet.findHelpSet(cl, "help/help"); + javax.help.HelpSet hs = new javax.help.HelpSet(cl, url); + + javax.help.HelpBroker hb = hs.createHelpBroker(); + hb.setCurrentID("home"); + hb.setDisplayed(true); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + break + ; + case KeyEvent.VK_H: + { + boolean toggleSeqs = !evt.isControlDown(); + boolean toggleCols = !evt.isShiftDown(); + + boolean hide = false; + + SequenceGroup sg = viewport.getSelectionGroup(); + if (toggleSeqs) + { + if (sg != null && sg.getSize(false) != viewport.alignment.getHeight()) + { + hideSelSequences_actionPerformed(null); + hide = true; + } + else if (! (toggleCols && viewport.colSel.getSelected().size() > 0)) + showAllSeqs_actionPerformed(null); + } + + if (toggleCols) + { + if (viewport.colSel.getSelected().size() > 0) + { + hideSelColumns_actionPerformed(null); + if (!toggleSeqs) + viewport.selectionGroup = sg; + } + else if (!hide) + showAllColumns_actionPerformed(null); + } + break; + } + case KeyEvent.VK_PAGE_UP: + if (viewport.wrapAlignment) + alignPanel.scrollUp(true); + else + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + - viewport.endSeq + viewport.startSeq); + break; + case KeyEvent.VK_PAGE_DOWN: + if (viewport.wrapAlignment) + alignPanel.scrollUp(false); + else + alignPanel.setScrollValues(viewport.startRes, + viewport.startSeq + + viewport.endSeq - viewport.startSeq); + break; + + + } + } + }); + } + + + public void addAlignmentPanel(final AlignmentPanel ap) + { + alignPanels.addElement(ap); + + int aSize = alignPanels.size(); + + tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null); + + if (aSize == 1 && ap.av.viewName==null) { - al.setDataset(null); + this.getContentPane().add(ap, BorderLayout.CENTER); } - // AlignViewport ds = new AlignViewport(al.getDataset(), true); - // AlignmentPanel dap = new AlignmentPanel(this, ds); - // tabbedPane.add("Dataset", dap); - // viewports.add(ds); - // alignPanels.add(dap); - ///////////////////////// + else + { + if (aSize == 2) + { + AlignmentPanel first = (AlignmentPanel) alignPanels.firstElement(); + tabbedPane.addTab(first.av.viewName==null?"Original":first.av.viewName,first); + this.getContentPane().add(tabbedPane, BorderLayout.CENTER); + } + + tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap); + } - viewport.addPropertyChangeListener(new PropertyChangeListener() + ap.av.updateConsensus(ap); + ap.av.updateConservation(ap); + + + ap.av.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals("alignment")) { + PaintRefresher.Refresh(ap, ap.av.getSequenceSetId()); alignmentChanged(); } } }); - - if (Desktop.desktop != null) - { - addServiceListeners(); - setGUINucleotide(al.isNucleotide()); - } - - - if (jalview.bin.Cache.getDefault("WRAP_ALIGNMENT", false)) - { - wrapMenuItem.setSelected(true); - wrapMenuItem_actionPerformed(null); - } - } - /** - * Creates a new AlignFrame object. - * - * @param al DOCUMENT ME! - */ - public AlignFrame(AlignmentI al) - { - this(al, null); - } + public AlignViewport getViewport() { @@ -175,6 +460,7 @@ public class AlignFrame } } }); + addInternalFrameListener(new javax.swing.event. InternalFrameAdapter() { @@ -518,6 +804,7 @@ public class AlignFrame } + /** * DOCUMENT ME! * @@ -527,7 +814,14 @@ public class AlignFrame { try { - PaintRefresher.components.remove(viewport.alignment); + for(int i=0; i 0) + /* if (historyList.size() > 0) { undoMenuItem.setEnabled(true); @@ -564,7 +859,7 @@ public class AlignFrame { redoMenuItem.setEnabled(false); redoMenuItem.setText("Redo"); - } + }*/ } /** @@ -604,7 +899,7 @@ public class AlignFrame { HistoryItem nh,hi = (HistoryItem) redoList.pop(); historyList.push(nh=new HistoryItem(hi.getDescription(), viewport.alignment, - HistoryItem.HIDE)); + HistoryItem.HIDE)); if (hi.alColumnChanges!=null) nh.alColumnChanges=hi.alColumnChanges.getInverse(); restoreHistoryItem(hi); @@ -695,6 +990,7 @@ public class AlignFrame */ protected void copy_actionPerformed(ActionEvent e) { + System.gc(); if (viewport.getSelectionGroup() == null) { return; @@ -713,9 +1009,36 @@ public class AlignFrame seqs, omitHidden); + StringSelection ss = new StringSelection(output); + + try + { + //Its really worth setting the clipboard contents + //to empty before setting the large StringSelection!! + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(new StringSelection(""), null); + + Toolkit.getDefaultToolkit().getSystemClipboard() + .setContents(ss, Desktop.instance); + } + catch (OutOfMemoryError er) + { + er.printStackTrace(); + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Out of memory copying region!!" + + + "\nSee help files for increasing Java Virtual Machine memory." + , "Out of memory", + javax.swing.JOptionPane.WARNING_MESSAGE); + } + }); - Toolkit.getDefaultToolkit().getSystemClipboard() - .setContents(new StringSelection(output), Desktop.instance); + return; + } Vector hiddenColumns = null; if(viewport.hasHiddenColumns) @@ -732,9 +1055,12 @@ public class AlignFrame } } + + Desktop.jalviewClipboard = new Object[]{ seqs, viewport.alignment.getDataset(), hiddenColumns}; + statusBar.setText("Copied "+seqs.length+" sequences to clipboard."); } /** @@ -776,11 +1102,35 @@ public class AlignFrame return; } - String str = (String) contents.getTransferData(DataFlavor.stringFlavor); - if(str.length()<1) + String str, format; + try + { + str = (String) contents.getTransferData(DataFlavor.stringFlavor); + if (str.length() < 1) + return; + + format = new IdentifyFile().Identify(str, "Paste"); + + } + catch (OutOfMemoryError er) + { + er.printStackTrace(); + javax.swing.SwingUtilities.invokeLater(new Runnable() + { + public void run() + { + javax.swing.JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Out of memory pasting sequences!!" + + + "\nSee help files for increasing Java Virtual Machine memory." + , "Out of memory", + javax.swing.JOptionPane.WARNING_MESSAGE); + } + }); + return; + } - String format = new IdentifyFile().Identify(str, "Paste"); SequenceI[] sequences; @@ -799,13 +1149,12 @@ public class AlignFrame if (newAlignment) { - alignment = new Alignment(sequences); - - if(Desktop.jalviewClipboard!=null) - alignment.setDataset( (Alignment)Desktop.jalviewClipboard[1] ); - else - alignment.setDataset( null ); + alignment = new Alignment(sequences); + if (Desktop.jalviewClipboard != null) + alignment.setDataset( (Alignment) Desktop.jalviewClipboard[1]); + else + alignment.setDataset(null); } else { @@ -819,6 +1168,9 @@ public class AlignFrame sequences[i].getEnd()); alignment.addSequence(newseq); + PaintRefresher.Refresh(alignPanel, + alignPanel.av.getSequenceSetId(), + null,newseq); } @@ -829,8 +1181,6 @@ public class AlignFrame - - // Add any annotations attached to sequences for (int i = 0; i < sequences.length; i++) { @@ -862,7 +1212,7 @@ public class AlignFrame if(newAlignment) { - AlignFrame af = new AlignFrame(alignment); + AlignFrame af = new AlignFrame(alignment, DEFAULT_WIDTH, DEFAULT_HEIGHT); String newtitle = new String("Copied sequences"); if(Desktop.jalviewClipboard!=null && Desktop.jalviewClipboard[2]!=null) @@ -890,8 +1240,8 @@ public class AlignFrame newtitle = newtitle.concat("- from " + title); } - Desktop.addInternalFrame(af, newtitle, NEW_WINDOW_WIDTH, - NEW_WINDOW_HEIGHT); + Desktop.addInternalFrame(af, newtitle, DEFAULT_WIDTH, + DEFAULT_HEIGHT); } @@ -935,33 +1285,6 @@ public class AlignFrame SequenceGroup sg = viewport.getSelectionGroup(); - - //Jalview no longer allows deletion of residues. - //Check here whether any residues are in selection area - /* if( sg.getEndRes()-sg.getStartRes() < viewport.alignment.getWidth()-1) - { - for (int i = 0; i < sg.sequences.size(); i++) - { - SequenceI seq = sg.getSequenceAt(i); - int j = sg.getStartRes(); - do - { - if (!jalview.util.Comparison.isGap(seq.getCharAt(j))) - { - JOptionPane.showInternalMessageDialog( - Desktop.desktop, "Cannot delete residues from alignment!\n" - + "Try hiding columns instead.", - "Deletion of residues not permitted", - JOptionPane.WARNING_MESSAGE); - - return; - } - j++; - }while(j<=sg.getEndRes()); - } - }*/ - - addHistoryItem(new HistoryItem("Delete Sequences", viewport.alignment, HistoryItem.HIDE)); @@ -969,8 +1292,6 @@ public class AlignFrame for (int i = 0; i < sg.getSize(false); i++) { SequenceI seq = sg.getSequenceAt(i); - int index = viewport.getAlignment().findIndex(seq); - seq.deleteChars(sg.getStartRes(), sg.getEndRes() + 1); // If the cut affects all sequences, remove highlighted columns @@ -983,10 +1304,7 @@ public class AlignFrame if (seq.getSequence().length() < 1) { viewport.getAlignment().deleteSequence(seq); - } - else - { - viewport.getAlignment().getSequences().setElementAt(seq, index); + PaintRefresher.Refresh(alignPanel,alignPanel.av.getSequenceSetId(),seq,null); } } @@ -1019,6 +1337,7 @@ public class AlignFrame { viewport.alignment.deleteAllGroups(); viewport.setSelectionGroup(null); + PaintRefresher.Refresh(this, viewport.getSequenceSetId()); alignPanel.repaint(); } @@ -1039,7 +1358,8 @@ public class AlignFrame sg.setEndRes(viewport.alignment.getWidth() - 1); viewport.setSelectionGroup(sg); - PaintRefresher.Refresh(null, viewport.alignment); + alignPanel.repaint(); + PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); } /** @@ -1060,7 +1380,7 @@ public class AlignFrame alignPanel.seqPanel.seqCanvas.highlightSearchResults(null); alignPanel.idPanel.idCanvas.searchResults = null; alignPanel.repaint(); - PaintRefresher.Refresh(null, viewport.alignment); + PaintRefresher.Refresh(this, viewport.getSequenceSetId()); } /** @@ -1085,7 +1405,7 @@ public class AlignFrame sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false); } - PaintRefresher.Refresh(null, viewport.alignment); + PaintRefresher.Refresh(this, viewport.getSequenceSetId()); } public void invertColSel_actionPerformed(ActionEvent e) @@ -1192,10 +1512,11 @@ public class AlignFrame ShiftList shifts; viewport.getAlignment().removeGaps(shifts=new ShiftList()); edit.alColumnChanges=shifts.getInverse(); - if (viewport.hasHiddenColumns) + if (viewport.hasHiddenColumns) viewport.getColumnSelection().compensateForEdits(shifts); viewport.setStartRes(seq.findIndex(startRes)-1); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + } /** @@ -1217,7 +1538,6 @@ public class AlignFrame SequenceI current; - int jSize; Vector seqs = null; @@ -1247,13 +1567,13 @@ public class AlignFrame current = (SequenceI) seqs.elementAt(i); //dr[i]= current.removeGaps(start, end); - /*if (d0) { // record shift for history. editgaps.addShift(start, diff); @@ -1266,38 +1586,47 @@ public class AlignFrame current = (SequenceI) seqs.elementAt(i); if (dr[i]-diff>0) { String sq = current.getSequence(); - current.setSequence(sq.substring(0, hcend-dr[i])+gaps.substring(0, dr[i]-diff)+sq.substring()); + current.setSequence(sq.substring(0, hcend-dr[i])+gaps.substring(0, dr[i]-diff)+sq.substring()); } } - } + } }*/ viewport.setStartRes(seq.findIndex(startRes)-1); viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences()); + } public void alignmentChanged() { - if(viewport.padGaps) - viewport.getAlignment().padGaps(); + AlignViewport av; + AlignmentPanel ap; - if(viewport.vconsensus!=null && viewport.autoCalculateConsensus) + for(int i=0; i 3)) - { + if (viewport.getSelectionGroup() != null) { + if (viewport.getSelectionGroup().getSize(false) < 3) { + JOptionPane.showMessageDialog(Desktop.desktop, + "You need to have more than two sequences selected to build a tree!", + "Not enough sequences", + JOptionPane.WARNING_MESSAGE); + return; + } + int s = 0; SequenceGroup sg = viewport.getSelectionGroup(); @@ -2190,7 +2529,7 @@ public class AlignFrame } title = title + " on region"; - tp = new TreePanel(viewport, type, pwType); + tp = new TreePanel(alignPanel, type, pwType); } else { @@ -2210,7 +2549,7 @@ public class AlignFrame if(viewport.alignment.getHeight()<2) return; - tp = new TreePanel(viewport, type, pwType); + tp = new TreePanel(alignPanel, type, pwType); } addTreeMenuItem(tp, title); @@ -2406,16 +2745,26 @@ public class AlignFrame { return ShowNewickTree(nf,title,600,500,4,5); } + public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input) + { + return ShowNewickTree(nf,title, input, 600,500,4,5); + } + public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y) { + return ShowNewickTree(nf, title, null, w, h, x, y); + } /** - * DOCUMENT ME! - * - * @param nf DOCUMENT ME! - * @param title DOCUMENT ME! + * Add a treeviewer for the tree extracted from a newick file object to the current alignment view * - * @return DOCUMENT ME! + * @param nf the tree + * @param title tree viewer title + * @param input Associated alignment input data (or null) + * @param w width + * @param h height + * @param x position + * @param y position + * @return TreePanel handle */ - public TreePanel ShowNewickTree(NewickFile nf, String title, int w,int h,int x, int y) - { + public TreePanel ShowNewickTree(NewickFile nf, String title, AlignmentView input, int w,int h,int x, int y) { TreePanel tp = null; try @@ -2424,10 +2773,10 @@ public class AlignFrame if (nf.getTree() != null) { - tp = new TreePanel(viewport, + tp = new TreePanel(alignPanel, "FromFile", title, - nf); + nf, input); tp.setSize(w,h); @@ -2543,7 +2892,7 @@ public class AlignFrame if (msa.getSequences().length == 1) { // Single Sequence prediction - new jalview.ws.JPredClient(sh, title, false, msa, af); + new jalview.ws.JPredClient(sh, title, false, msa, af, true); } else { @@ -2551,7 +2900,7 @@ public class AlignFrame { // Sequence profile based prediction new jalview.ws.JPredClient(sh, - title, true, msa, af); + title, true, msa, af, true); } } } @@ -2678,39 +3027,16 @@ public void showTranslation_actionPerformed(ActionEvent e) } } - AlignFrame af = new AlignFrame(al); + AlignFrame af = new AlignFrame(al, DEFAULT_WIDTH, DEFAULT_HEIGHT); Desktop.addInternalFrame(af, "Translation of "+this.getTitle(), - NEW_WINDOW_WIDTH, - NEW_WINDOW_HEIGHT); - + DEFAULT_WIDTH, + DEFAULT_HEIGHT); - // AlignViewport newViewport = new AlignViewport(al); - // AlignmentPanel ap = new AlignmentPanel(this, newViewport); - // tabbedPane.add("Protein", ap); - // viewports.add(newViewport); - // alignPanels.add(ap); - ///Dataset tab - ///////////////////////// - - // AlignViewport ds = new AlignViewport(al.getDataset()); - // ds.setDataset(true); - // AlignmentPanel dap = new AlignmentPanel(this, ds); - // tabbedPane.add("Dataset", dap); - // viewports.add(ds); - // alignPanels.add(dap); - ///////////////////////// } -/*public void tabSelected() - { - int index = tabbedPane.getSelectedIndex(); - viewport = (AlignViewport)viewports.elementAt(index); - alignPanel = (AlignmentPanel)alignPanels.elementAt(index); - }*/ - /** * DOCUMENT ME! * @@ -2818,17 +3144,35 @@ public void drop(DropTargetDropEvent evt) public void loadJalviewDataFile(String file) { try{ + String protocol = "File"; + + if (file.indexOf("http:") > -1 || file.indexOf("file:") > -1) + { + protocol = "URL"; + } + boolean isAnnotation = new AnnotationFile().readAnnotationFile(viewport. alignment, file); if (!isAnnotation) { - boolean isGroupsFile = parseFeaturesFile(file, - AppletFormatAdapter.FILE); + boolean isGroupsFile = parseFeaturesFile(file,protocol); if (!isGroupsFile) { - String format = new IdentifyFile().Identify(file, FormatAdapter.FILE); - new FileLoader().LoadFile(viewport, file, FormatAdapter.FILE, format); + String format = new IdentifyFile().Identify(file, protocol); + + if(format.equalsIgnoreCase("JnetFile")) + { + jalview.io.JPredFile predictions = new jalview.io.JPredFile( + file, protocol); + new JnetAnnotationMaker().add_annotation(predictions, + viewport.getAlignment(), + 0, false); + alignPanel.adjustAnnotationHeight(); + alignPanel.repaint(); + } + else + new FileLoader().LoadFile(viewport, file, protocol, format); } } else @@ -2842,4 +3186,36 @@ public void drop(DropTargetDropEvent evt) ex.printStackTrace(); } } + + public void tabSelectionChanged(int index) + { + if (index > -1) + { + alignPanel = (AlignmentPanel) alignPanels.elementAt(index); + viewport = alignPanel.av; + } + } + + public void tabbedPane_mousePressed(MouseEvent e) + { + if(SwingUtilities.isRightMouseButton(e)) + { + String reply = JOptionPane.showInternalInputDialog(this, + "Enter View Name", + "Edit View Name", + JOptionPane.QUESTION_MESSAGE); + + if (reply != null) + { + viewport.viewName = reply; + tabbedPane.setTitleAt( tabbedPane.getSelectedIndex() ,reply); + } + } + } + + + public AlignViewport getCurrentView() + { + return viewport; + } }