+ new RunResponse(JvOptionPane.OK_OPTION)
+ {
+ public void run()
+ {
+ final String enteredType = name.getText().trim();
+ final String enteredGroup = group.getText().trim();
+ final String enteredDescription = description.getText()
+ .replaceAll("\n", " ");
+ if (enteredType.length() > 0)
+
+ {
+ /*
+ * update default values only if creating using default values
+ */
+ if (useLastDefaults)
+ {
+ lastFeatureAdded = enteredType;
+ lastFeatureGroupAdded = enteredGroup;
+ // TODO: determine if the null feature group is valid
+ if (lastFeatureGroupAdded.length() < 1)
+ {
+ lastFeatureGroupAdded = null;
+ }
+ }
+ }
+
+ if (create)
+ {
+ // NEW FEATURES ADDED
+ if (enteredType.length() > 0)
+ {
+ for (int i = 0; i < sequences.size(); i++)
+ {
+ SequenceFeature sf = features.get(i);
+ SequenceFeature sf2 = new SequenceFeature(enteredType,
+ enteredDescription, sf.getBegin(),
+ sf.getEnd(), enteredGroup);
+ new FeaturesFile().parseDescriptionHTML(sf2, false);
+ sequences.get(i).addSequenceFeature(sf2);
+ }
+
+ setColour(enteredType, fcol);
+
+ featuresAdded();
+
+ responseHandler.run();
+ }
+ } else {
+ SequenceFeature sf = features.get(featureIndex);
+ /*
+ * Feature amended - YES_OPTION corresponds to the Amend button
+ * need to refresh Feature Settings if type, group or colour changed;
+ * note we don't force the feature to be visible - the user has been
+ * warned if a hidden feature type or group was entered
+ */
+ boolean refreshSettings = (!featureType.equals(enteredType)
+ || !featureGroup.equals(enteredGroup));
+ refreshSettings |= (fcol != oldcol);
+ setColour(enteredType, fcol);
+ int newBegin = sf.begin;
+ int newEnd = sf.end;
+ try
+ {
+ newBegin = ((Integer) start.getValue()).intValue();
+ newEnd = ((Integer) end.getValue()).intValue();
+ } catch (NumberFormatException ex)
+ {
+ // JSpinner doesn't accept invalid format data :-)
+ }
+
+ /*
+ * 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(enteredDescription);
+ new FeaturesFile().parseDescriptionHTML(newSf, false);
+ // amend features dialog only updates one sequence at a time
+ sequences.get(0).addSequenceFeature(newSf);
+
+ if (refreshSettings)
+ {
+ featuresAdded();
+ }
+ }
+ alignPanel.getSeqPanel().seqCanvas.highlightSearchResults(null, false);
+ alignPanel.paintAlignment(true, true);
+ }
+ }).response(new RunResponse(JvOptionPane.NO_OPTION)
+ {
+ public void run()
+ {
+ SequenceFeature sf = features.get(featureIndex);
+ /*
+ * NO_OPTION corresponds to the Delete button
+ */
+ sequences.get(0).getDatasetSequence().deleteFeature(sf);
+ // update Feature Settings for removal of feature / group
+ featuresAdded();
+ alignPanel.getSeqPanel().seqCanvas.highlightSearchResults(null, false);
+ alignPanel.paintAlignment(true, true);
+ }
+ }).defaultResponse(new Runnable()
+ {
+ public void run()
+ {
+ alignPanel.getSeqPanel().seqCanvas.highlightSearchResults(null, false);
+ alignPanel.paintAlignment(true, true);
+ }
+ }).showInternalDialog(mainPanel, title,
+ JvOptionPane.YES_NO_CANCEL_OPTION,
+ JvOptionPane.QUESTION_MESSAGE, null, options,
+ MessageManager.getString("action.ok"));