X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFeatureRenderer.java;h=df407d6af08d4583cfafa37c43e64d07bba04655;hb=8c0db65da2a81d3cae2bb5cbde02b1af407061b8;hp=194b18fa7353f44e7756016f0e8c1f303416052b;hpb=3d0101179759ef157b088ea135423cd909512d9f;p=jalview.git diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index 194b18f..df407d6 100644 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@ -399,11 +399,14 @@ public class FeatureRenderer /* * only update default type and group if we used defaults */ - String enteredType = name.getText().trim(); + final String enteredType = name.getText().trim(); + final String enteredGroup = group.getText().trim(); + final String enteredDesc = description.getText().replace('\n', ' '); + if (dialog.accept && useLastDefaults) { lastFeatureAdded = enteredType; - lastFeatureGroupAdded = group.getText().trim(); + lastFeatureGroupAdded = enteredGroup; } if (!create) @@ -411,29 +414,36 @@ public class FeatureRenderer SequenceFeature sf = features.get(featureIndex); if (dialog.accept) { - sf.type = enteredType; - sf.featureGroup = group.getText().trim(); - if (sf.featureGroup != null && sf.featureGroup.length() < 1) - { - sf.featureGroup = null; - } - sf.description = description.getText().replace('\n', ' '); if (!colourPanel.isGcol) { // update colour - otherwise its already done. - setColour(sf.type, + setColour(enteredType, new FeatureColour(colourPanel.getBackground())); } + int newBegin = sf.begin; + int newEnd = sf.end; try { - sf.begin = Integer.parseInt(start.getText()); - sf.end = Integer.parseInt(end.getText()); + newBegin = Integer.parseInt(start.getText()); + newEnd = Integer.parseInt(end.getText()); } catch (NumberFormatException ex) { - // + // } - boolean typeOrGroupChanged = (!featureType.equals(sf.type) - || !featureGroup.equals(sf.featureGroup)); + + /* + * replace the feature by deleting it and adding a new one + * (to ensure integrity of SequenceFeatures data store) + */ + sequences.get(0).deleteFeature(sf); + SequenceFeature newSf = new SequenceFeature(sf, enteredType, + newBegin, newEnd, enteredGroup, sf.getScore()); + newSf.setDescription(enteredDesc); + ffile.parseDescriptionHTML(newSf, false); + // amend features dialog only updates one sequence at a time + sequences.get(0).addSequenceFeature(newSf); + boolean typeOrGroupChanged = (!featureType.equals(newSf.getType()) || !featureGroup + .equals(newSf.getFeatureGroup())); ffile.parseDescriptionHTML(sf, false); if (typeOrGroupChanged) @@ -457,12 +467,11 @@ public class FeatureRenderer { for (int i = 0; i < sequences.size(); i++) { - features.get(i).type = enteredType; - features.get(i).featureGroup = group.getText().trim(); - features.get(i).description = description.getText().replace('\n', - ' '); - sequences.get(i).addSequenceFeature(features.get(i)); - ffile.parseDescriptionHTML(features.get(i), false); + SequenceFeature sf = features.get(i); + SequenceFeature sf2 = new SequenceFeature(enteredType, + enteredDesc, sf.getBegin(), sf.getEnd(), enteredGroup); + ffile.parseDescriptionHTML(sf2, false); + sequences.get(i).addSequenceFeature(sf2); } Color newColour = colourPanel.getBackground(); @@ -484,7 +493,7 @@ public class FeatureRenderer } // findAllFeatures(); - ap.paintAlignment(true); + ap.paintAlignment(true, true); return true; }