From ce23b7810e0a9fea03e3f46a14319e1012d4eabf Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Fri, 3 Feb 2006 17:41:43 +0000 Subject: [PATCH] Reading features files readded as ref to FeatureRenderer is required --- src/jalview/gui/AlignFrame.java | 113 ++++++++++++++++++++++++++++++++++----- 1 file changed, 99 insertions(+), 14 deletions(-) diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index 5685e42..de2d3d1 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -770,6 +770,8 @@ public class AlignFrame } catch (Exception ex) { + ex.printStackTrace(); + System.out.println("Exception whilst pasting: "+ex); // could be anything being pasted in here } @@ -1123,6 +1125,8 @@ public class AlignFrame if(alignPanel.overviewPanel!=null) alignPanel.overviewPanel.updateOverviewImage(); + viewport.alignment.adjustSequenceAnnotations(); + alignPanel.repaint(); } @@ -2533,17 +2537,73 @@ public void showTranslation_actionPerformed(ActionEvent e) */ public boolean parseGroupsFile(String file) { - AnnotationReader ar = new AnnotationReader(); + try + { + BufferedReader in = new BufferedReader(new FileReader(file)); + SequenceI seq = null; + String line, type, desc, token; + + int index, start, end; + StringTokenizer st; + SequenceFeature sf; + int lineNo = 0; + while ( (line = in.readLine()) != null) + { + lineNo++; + st = new StringTokenizer(line, "\t"); + if (st.countTokens() == 2) + { + type = st.nextToken(); + UserColourScheme ucs = new UserColourScheme(st.nextToken()); + alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(type, ucs.findColour("A")); + continue; + } + + while (st.hasMoreElements()) + { + desc = st.nextToken(); + token = st.nextToken(); + if (!token.equals("ID_NOT_SPECIFIED")) + { + index = viewport.alignment.findIndex(viewport.alignment.findName(token)); + st.nextToken(); + } + else + { + index = Integer.parseInt(st.nextToken()); + } + + start = Integer.parseInt(st.nextToken()); + end = Integer.parseInt(st.nextToken()); + + seq = viewport.alignment.getSequenceAt(index); + start = seq.findIndex(start) - 1; + end = seq.findIndex(end) - 1; + + type = st.nextToken(); + + if (alignPanel.seqPanel.seqCanvas.getFeatureRenderer().getColour(type) == null) + { + // Probably the old style groups file + UserColourScheme ucs = new UserColourScheme(type); + alignPanel.seqPanel.seqCanvas.getFeatureRenderer().setColour(type, ucs.findColour("A")); + } + + sf = new SequenceFeature(type, desc, "", start, end); + + seq.getDatasetSequence().addSequenceFeature(sf); + } + } + } + catch (Exception ex) + { + System.out.println("Error parsing groups file: " + ex); + return false; + } - if (ar.readGroupsFile(alignPanel.seqPanel.seqCanvas.getFeatureRenderer(), - viewport.alignment, file)) - { viewport.showSequenceFeatures = true; alignPanel.repaint(); return true; - } - else - return false; } public void dragEnter(DropTargetDragEvent evt) @@ -2603,23 +2663,48 @@ public void drop(DropTargetDropEvent evt) if (files != null) { - AnnotationReader ar = new AnnotationReader(); try { + boolean isAnnotation = false; + for (int i = 0; i < files.size(); i++) { String file = files.get(i).toString(); - if(! ar.readAnnotationFile(viewport.alignment, file) ) - parseGroupsFile(file); - else + + isAnnotation = new AnnotationReader().readAnnotationFile(viewport.alignment, file); + + if( !isAnnotation ) { + boolean isGroupsFile = parseGroupsFile(file); + if (!isGroupsFile) + { + String protocol = "File"; + String format = jalview.io.IdentifyFile.Identify(file, protocol); + SequenceI[] sequences = new FormatAdapter().readFile(file, protocol, format); + FastaFile ff = new FastaFile(); + Clipboard c = Toolkit.getDefaultToolkit().getSystemClipboard(); + c.setContents(new StringSelection(ff.print(sequences)), this); + + this.paste(false); + + } } } - alignPanel.annotationPanel.adjustPanelHeight(); - alignPanel.annotationScroller.validate(); - alignPanel.repaint(); + if(isAnnotation) + { + int height = alignPanel.annotationPanel.adjustPanelHeight(); + alignPanel.annotationScroller.setPreferredSize( + new Dimension(alignPanel.annotationScroller.getWidth(), + height)); + + alignPanel.annotationSpaceFillerHolder.setPreferredSize(new Dimension( + alignPanel.annotationSpaceFillerHolder.getWidth(), + height)); + + alignPanel.addNotify(); + } } catch (Exception ex) { -- 1.7.10.2