From: Mark G. <mg...@us...> - 2003-06-30 21:13:07
|
Update of /cvsroot/gmod/apollo/src/java/apollo/gui In directory sc8-pr-cvs1:/tmp/cvs-serv6792/gui Modified Files: DetailInfo.java EvidencePanel.java Selection.java SelectionManager.java Log Message: Fixed null pointer exception on EvidencePanel repaint after a Transcript delete. The evidence panel was still displaying the deleted transcript which threw a null pointer since it has a null gene, and it needs to get its biotype from its gene. So I added in some null checks to Transcript and DetailInfo. But I went a step further than that. It seemed problematic to me that the deleted transcript was still being displayed in the evidence panel. And if you clicked on it you got exceptions (which has always been true, unlike the exception i introduced above). So I changed evidence panel to clear out anything deleted. I did this actually at the Selection level. The SelectionManager now listens for annotationChangeEvents and if a deleted item is in the selection, it removes it from the selection, and sends out the modified selection in a selection event. This means that it could be sending out an empty selection, which needs to mean clear out the selection. Evidence panel was ignoring empty selections so i changed that as well. But this has had the effect that if you click on blank space which deselects anything selected, the evidence panel goes blank. I think its better that way as its more accurately reflecting the state of selection, but if people dont like it its easy enough to change. (though i think moving the red sliders should not deselect feats - which shouldnt be hard to change - on the todo) Index: DetailInfo.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/gui/DetailInfo.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** DetailInfo.java 19 May 2003 15:45:11 -0000 1.26 --- DetailInfo.java 30 Jun 2003 21:13:04 -0000 1.27 *************** *** 374,379 **** is a String - rename this getVisualType? */ public static String getPropertyType(SeqFeatureI feature) { apollo.gui.schemes.FeatureProperty property = ! Config.getPropertyScheme().getFeatureProperty(feature.getBioType()); //Config.getPropertyScheme().getFeatureProperty(feature.getType()); String type = property.getDisplayType(); --- 374,381 ---- is a String - rename this getVisualType? */ public static String getPropertyType(SeqFeatureI feature) { + String biotype = feature.getBioType(); + if (biotype==null) return null; // ""? apollo.gui.schemes.FeatureProperty property = ! Config.getPropertyScheme().getFeatureProperty(biotype); //Config.getPropertyScheme().getFeatureProperty(feature.getType()); String type = property.getDisplayType(); Index: EvidencePanel.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/gui/EvidencePanel.java,v retrieving revision 1.71 retrieving revision 1.72 diff -C2 -d -r1.71 -r1.72 *** EvidencePanel.java 27 May 2003 17:53:13 -0000 1.71 --- EvidencePanel.java 30 Jun 2003 21:13:04 -0000 1.72 *************** *** 72,75 **** --- 72,76 ---- } + /** Clear out the tables */ public void reset() { model.setData(new Vector(0)); *************** *** 79,84 **** protected void populateTable(Vector feature_list) { ! if (feature_list.size() == 0) return; Vector columns = ((haveScore (feature_list)) ? --- 80,87 ---- protected void populateTable(Vector feature_list) { ! if (feature_list.size() == 0) { ! reset(); // this clears out the table return; + } Vector columns = ((haveScore (feature_list)) ? Index: Selection.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/gui/Selection.java,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** Selection.java 25 May 2003 21:14:14 -0000 1.33 --- Selection.java 30 Jun 2003 21:13:04 -0000 1.34 *************** *** 103,106 **** --- 103,114 ---- } + void removeFeature(SeqFeatureI feat) { + int index = selectedData.indexOf(feat); // -1 if not found + if (index >= 0) { + selected.removeElementAt(index); + selectedData.removeElementAt(index); + } + } + public Vector getSelected() { return selected; *************** *** 188,191 **** --- 196,205 ---- return sources; } + + /** Returns true if there is a SelectionItem in Selection with sf */ + boolean containsFeature(SeqFeatureI sf) { + return getSelectedData().contains(sf); + } + /** Returns vector of data from SelectionItems(SeqFeatures) that are in * ViewI v Index: SelectionManager.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/gui/SelectionManager.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** SelectionManager.java 12 Mar 2003 23:33:50 -0000 1.9 --- SelectionManager.java 30 Jun 2003 21:13:05 -0000 1.10 *************** *** 7,10 **** --- 7,13 ---- import apollo.gui.genomemap.SiteView; import apollo.gui.event.FeatureSelectionEvent; + import apollo.gui.event.AnnotationChangeEvent; + import apollo.gui.event.AnnotationChangeListener; + import apollo.gui.event.FeatureChangeEvent; /** *************** *** 176,179 **** --- 179,184 ---- public void setController(Controller c) { controller = c; + // to listen for annotation deletions + controller.addListener(new SelectionAnnotationChangeListener()); } *************** *** 210,212 **** --- 215,239 ---- controller.handleFeatureSelectionEvent(e); } + + + /** Listens for annotation deletions. If something in current selection is + deleted, takes deleted feat out of selection and sends out a selection + event with the modified selection. what will happen with empty selections? + Should empty selection be synonomous with deselect? or should there be an + explicit deselectAll? No- empty selections should be synonomous with deselectAll + */ + private class SelectionAnnotationChangeListener implements AnnotationChangeListener { + public boolean handleAnnotationChangeEvent(AnnotationChangeEvent evt) { + // The feature deleted is the "second feature" of the evt + SeqFeatureI changedAnnot = evt.getSecondFeature(); + // Only care about deletions + if ( ! (evt.getType() == FeatureChangeEvent.DELETE) ) return false; + // Only care if deletion affects selection + if (!currentlySelected.containsFeature(changedAnnot)) return false; + currentlySelected.removeFeature(changedAnnot); + fireFeatureSelectionEvent(currentlySelected,evt.getSource(),true); + return true; + } + } + } |