X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FFeatureEditor.java;h=71175083a264e31a6241111f6178a14d72dcc4b8;hb=155a17a423e980849fd4dc5f857da1a72b0010b9;hp=00ea668cfada59632923f522b6ec5bf0661c56ed;hpb=f13c8f13408308b89e271ee9f4f11bd0493c1973;p=jalview.git
diff --git a/src/jalview/gui/FeatureEditor.java b/src/jalview/gui/FeatureEditor.java
index 00ea668..7117508 100644
--- a/src/jalview/gui/FeatureEditor.java
+++ b/src/jalview/gui/FeatureEditor.java
@@ -1,17 +1,25 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.gui;
-import jalview.api.FeatureColourI;
-import jalview.datamodel.SearchResults;
-import jalview.datamodel.SearchResultsI;
-import jalview.datamodel.SequenceFeature;
-import jalview.datamodel.SequenceI;
-import jalview.gui.JalviewColourChooser.ColourChooserListener;
-import jalview.io.FeaturesFile;
-import jalview.schemes.FeatureColour;
-import jalview.util.ColorUtils;
-import jalview.util.MessageManager;
-import jalview.util.dialogrunner.RunResponse;
-
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
@@ -33,10 +41,24 @@ import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTextArea;
import javax.swing.JTextField;
+import javax.swing.SpinnerNumberModel;
import javax.swing.SwingConstants;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
+import jalview.api.FeatureColourI;
+import jalview.datamodel.SearchResults;
+import jalview.datamodel.SearchResultsI;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
+import jalview.io.FeaturesFile;
+import jalview.schemes.FeatureColour;
+import jalview.util.ColorUtils;
+import jalview.util.MessageManager;
+
/**
* Provides a dialog allowing the user to add new features, or amend or delete
* existing features
@@ -80,8 +102,6 @@ public class FeatureEditor
AlignmentPanel ap;
- Object[] options;
-
JTextField name;
JTextField group;
@@ -170,10 +190,34 @@ public class FeatureEditor
});
description = new JTextArea(3, 25);
+
start = new JSpinner();
end = new JSpinner();
start.setPreferredSize(new Dimension(80, 20));
end.setPreferredSize(new Dimension(80, 20));
+
+ /*
+ * ensure that start can never be more than end
+ */
+ start.addChangeListener(new ChangeListener()
+ {
+ @Override
+ public void stateChanged(ChangeEvent e)
+ {
+ Integer startVal = (Integer) start.getValue();
+ ((SpinnerNumberModel) end.getModel()).setMinimum(startVal);
+ }
+ });
+ end.addChangeListener(new ChangeListener()
+ {
+ @Override
+ public void stateChanged(ChangeEvent e)
+ {
+ Integer endVal = (Integer) end.getValue();
+ ((SpinnerNumberModel) start.getModel()).setMaximum(endVal);
+ }
+ });
+
final JLabel colour = new JLabel();
colour.setOpaque(true);
colour.setMaximumSize(new Dimension(30, 16));
@@ -268,6 +312,8 @@ public class FeatureEditor
group.setText(sf.getFeatureGroup());
start.setValue(new Integer(sf.getBegin()));
end.setValue(new Integer(sf.getEnd()));
+ ((SpinnerNumberModel) start.getModel()).setMaximum(sf.getEnd());
+ ((SpinnerNumberModel) end.getModel()).setMinimum(sf.getBegin());
SearchResultsI highlight = new SearchResults();
highlight.addResult(sequences.get(0), sf.getBegin(),
@@ -355,29 +401,24 @@ public class FeatureEditor
start.setValue(new Integer(firstFeature.getBegin()));
end.setValue(new Integer(firstFeature.getEnd()));
+ ((SpinnerNumberModel) start.getModel())
+ .setMaximum(firstFeature.getEnd());
+ ((SpinnerNumberModel) end.getModel())
+ .setMinimum(firstFeature.getBegin());
+
description.setText(firstFeature.getDescription());
featureColour = fr.getFeatureStyle(featureType);
oldColour = featureColour;
updateColourButton(mainPanel, colour, oldColour);
- if (forCreate)
- {
- options = new Object[] { MessageManager.getString("action.ok"),
- MessageManager.getString("action.cancel") };
- }
- else
- {
- options = new Object[] { MessageManager.getString("label.amend"),
- MessageManager.getString("action.delete"),
- MessageManager.getString("action.cancel") };
- }
}
/**
* Presents a dialog allowing the user to add new features, or amend or delete
* an existing feature. Currently this can be on
*
- * - double-click on a sequence - Amend/Delete features at position
- * - Create sequence feature from pop-up menu on selected region
+ * - double-click on a sequence - Amend/Delete a selected feature at the
+ * position
+ * - Create sequence feature(s) from pop-up menu on selected region
* - Create features for pattern matches from Find
*
* If the supplied feature type is null, show (and update on confirm) the type
@@ -386,22 +427,43 @@ public class FeatureEditor
*/
public void showDialog()
{
- RunResponse okAction = forCreate ? getCreateAction() : getAmendAction();
- RunResponse deleteAction = getDeleteAction();
+ Runnable okAction = forCreate ? getCreateAction() : getAmendAction();
Runnable cancelAction = getCancelAction();
- String title = forCreate
- ? MessageManager.getString("label.create_new_sequence_features")
- : MessageManager.formatMessage("label.amend_delete_features",
- new String[]
- { sequences.get(0).getName() });
-
- JvOptionPane.newOptionDialog(Desktop.desktop).response(okAction)
- .response(deleteAction).defaultResponse(cancelAction)
- .showInternalDialog(mainPanel, title,
- JvOptionPane.YES_NO_CANCEL_OPTION,
- JvOptionPane.QUESTION_MESSAGE, null, options,
- MessageManager.getString("action.ok"));
+ /*
+ * set dialog action handlers for OK (create/Amend) and Cancel options
+ * also for Delete if applicable (when amending features)
+ */
+ JvOptionPane dialog = JvOptionPane.newOptionDialog(ap.alignFrame)
+ .setResponseHandler(0, okAction)
+ .setResponseHandler(2, cancelAction);
+ if (!forCreate)
+ {
+ dialog.setResponseHandler(1, getDeleteAction());
+ }
+
+ String title = null;
+ Object[] options = null;
+ if (forCreate)
+ {
+ title = MessageManager
+ .getString("label.create_new_sequence_features");
+ options = new Object[] { MessageManager.getString("action.ok"),
+ MessageManager.getString("action.cancel") };
+ }
+ else
+ {
+ title = MessageManager.formatMessage("label.amend_delete_features",
+ new String[]
+ { sequences.get(0).getName() });
+ options = new Object[] { MessageManager.getString("label.amend"),
+ MessageManager.getString("action.delete"),
+ MessageManager.getString("action.cancel") };
+ }
+
+ dialog.showInternalDialog(mainPanel, title,
+ JvOptionPane.YES_NO_CANCEL_OPTION, JvOptionPane.PLAIN_MESSAGE,
+ null, options, MessageManager.getString("action.ok"));
}
/**
@@ -414,15 +476,11 @@ public class FeatureEditor
*/
protected Runnable getCancelAction()
{
- Runnable defaultResponse = new Runnable()
- {
- public void run()
- {
- ap.highlightSearchResults(null);
- ap.paintAlignment(false, false);
- }
+ Runnable okAction = () -> {
+ ap.highlightSearchResults(null);
+ ap.paintAlignment(false, false);
};
- return defaultResponse;
+ return okAction;
}
/**
@@ -435,12 +493,13 @@ public class FeatureEditor
*
* @return
*/
- protected RunResponse getCreateAction()
+ protected Runnable getCreateAction()
{
- RunResponse okAction = new RunResponse(JvOptionPane.OK_OPTION)
+ Runnable okAction = new Runnable()
{
boolean useLastDefaults = features.get(0).getType() == null;
+ @Override
public void run()
{
final String enteredType = name.getText().trim();
@@ -493,18 +552,14 @@ public class FeatureEditor
*
* @return
*/
- protected RunResponse getDeleteAction()
+ protected Runnable getDeleteAction()
{
- RunResponse deleteAction = new RunResponse(JvOptionPane.NO_OPTION)
- {
- public void run()
- {
- SequenceFeature sf = features.get(featureIndex);
- sequences.get(0).getDatasetSequence().deleteFeature(sf);
- fr.featuresAdded();
- ap.getSeqPanel().seqCanvas.highlightSearchResults(null);
- ap.paintAlignment(true, true);
- }
+ Runnable deleteAction = () -> {
+ SequenceFeature sf = features.get(featureIndex);
+ sequences.get(0).getDatasetSequence().deleteFeature(sf);
+ fr.featuresAdded();
+ ap.getSeqPanel().seqCanvas.highlightSearchResults(null);
+ ap.paintAlignment(true, true);
};
return deleteAction;
}
@@ -595,16 +650,17 @@ public class FeatureEditor
*
* @return
*/
- protected RunResponse getAmendAction()
+ protected Runnable getAmendAction()
{
- RunResponse okAction = new RunResponse(JvOptionPane.OK_OPTION)
+ Runnable okAction = new Runnable()
{
boolean useLastDefaults = features.get(0).getType() == null;
-
+
String featureType = name.getText();
-
+
String featureGroup = group.getText();
-
+
+ @Override
public void run()
{
final String enteredType = name.getText().trim();