X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFeatureRenderer.java;h=5f5e8e0c42abd6069ff5b9d6ce22a844e44a83d5;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=3c2715f28bb715abdaed3176ade207245f1eb59b;hpb=fe654aee9b43fb9c9307830c277f1e63576826ae;p=jalview.git diff --git a/src/jalview/appletgui/FeatureRenderer.java b/src/jalview/appletgui/FeatureRenderer.java index 3c2715f..5f5e8e0 100644 --- a/src/jalview/appletgui/FeatureRenderer.java +++ b/src/jalview/appletgui/FeatureRenderer.java @@ -61,8 +61,8 @@ import java.util.List; * @author $author$ * @version $Revision$ */ -public class FeatureRenderer extends - jalview.renderer.seqfeatures.FeatureRenderer +public class FeatureRenderer + extends jalview.renderer.seqfeatures.FeatureRenderer { /* * creating a new feature defaults to the type and group as @@ -269,8 +269,8 @@ public class FeatureRenderer extends FeatureColourI col = getFeatureStyle(name.getText()); if (col == null) { - Color generatedColour = ColorUtils.createColourFromName(name - .getText()); + Color generatedColour = ColorUtils + .createColourFromName(name.getText()); col = new FeatureColour(generatedColour); } @@ -285,17 +285,20 @@ public class FeatureRenderer extends tmp = new Panel(); panel.add(tmp); - tmp.add(new Label(MessageManager.getString("label.name:"), Label.RIGHT)); + tmp.add(new Label(MessageManager.getString("label.name:"), + Label.RIGHT)); tmp.add(name); tmp = new Panel(); panel.add(tmp); - tmp.add(new Label(MessageManager.getString("label.group:"), Label.RIGHT)); + tmp.add(new Label(MessageManager.getString("label.group:"), + Label.RIGHT)); tmp.add(group); tmp = new Panel(); panel.add(tmp); - tmp.add(new Label(MessageManager.getString("label.colour"), Label.RIGHT)); + tmp.add(new Label(MessageManager.getString("label.colour"), + Label.RIGHT)); tmp.add(colourPanel); bigPanel.add(panel, BorderLayout.NORTH); @@ -330,15 +333,16 @@ public class FeatureRenderer extends */ SequenceFeature firstFeature = features.get(0); boolean useLastDefaults = firstFeature.getType() == null; - String featureType = useLastDefaults ? lastFeatureAdded : firstFeature - .getType(); + String featureType = useLastDefaults ? lastFeatureAdded + : firstFeature.getType(); String featureGroup = useLastDefaults ? lastFeatureGroupAdded : firstFeature.getFeatureGroup(); - String title = create ? MessageManager - .getString("label.create_new_sequence_features") + String title = create + ? MessageManager.getString("label.create_new_sequence_features") : MessageManager.formatMessage("label.amend_delete_features", - new String[] { sequences.get(0).getName() }); + new String[] + { sequences.get(0).getName() }); final JVDialog dialog = new JVDialog(ap.alignFrame, title, true, 385, 240); @@ -395,11 +399,14 @@ public class FeatureRenderer extends /* * 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) @@ -407,28 +414,36 @@ public class FeatureRenderer extends 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, new FeatureColour(colourPanel.getBackground())); + 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) @@ -452,12 +467,11 @@ public class FeatureRenderer extends { 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(); @@ -479,7 +493,7 @@ public class FeatureRenderer extends } // findAllFeatures(); - ap.paintAlignment(true); + ap.paintAlignment(true, true); return true; }