diff --git a/uk/ac/sanger/artemis/components/SelectMenu.java b/uk/ac/sanger/artemis/components/SelectMenu.java index ebf15fb3f62107491c1634f6f7b2f34ac1224c88..5801b6c72500d8c20aaaaafe3fda55838c2a67b2 100644 --- a/uk/ac/sanger/artemis/components/SelectMenu.java +++ b/uk/ac/sanger/artemis/components/SelectMenu.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/SelectMenu.java,v 1.6 2005-04-11 10:26:22 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/SelectMenu.java,v 1.7 2005-06-06 18:48:55 tjc Exp $ **/ package uk.ac.sanger.artemis.components; @@ -50,7 +50,7 @@ import javax.swing.*; * "Select by key". * * @author Kim Rutherford - * @version $Id: SelectMenu.java,v 1.6 2005-04-11 10:26:22 tjc Exp $ + * @version $Id: SelectMenu.java,v 1.7 2005-06-06 18:48:55 tjc Exp $ **/ public class SelectMenu extends SelectionMenu @@ -205,6 +205,16 @@ public class SelectMenu extends SelectionMenu { public void actionPerformed(ActionEvent event) { + final JCheckBox cbox_strict = new JCheckBox("Strictly no overlapping regions",true); + + int n = JOptionPane.showConfirmDialog(null, cbox_strict, + "Selecting Features in Non-matching Regions", + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.QUESTION_MESSAGE); + + if(n == JOptionPane.CANCEL_OPTION) + return; + frame.setCursor(cbusy); Vector diffs = null; if(alignQueryViewer == null || alignSubjectViewer == null) @@ -222,7 +232,7 @@ public class SelectMenu extends SelectionMenu } if(diffs != null) - selectAllFeatures(diffs); + selectAllFeatures(diffs,cbox_strict.isSelected()); frame.setCursor(cdone); } }); @@ -451,10 +461,11 @@ public class SelectMenu extends SelectionMenu /** * * Select all features in a given collection of regions. - * @param regions Vector of coordinates. + * @param regions Vector of coordinates of non-matching region. + * @param isStrict true if not allowing any overlap with matching region. * */ - private void selectAllFeatures(final Vector regions) + private void selectAllFeatures(final Vector regions, final boolean isStrict) { final FeaturePredicate predicate = new FeaturePredicate() @@ -481,10 +492,14 @@ public class SelectMenu extends SelectionMenu diff_start = coords[0].intValue(); diff_end = coords[1].intValue(); - if( (feat_start >= diff_start && feat_start <= diff_end) || - (feat_end >= diff_start && feat_end <= diff_end) || - (diff_start >= feat_start && diff_start <= feat_end) || - (diff_end >= feat_start && diff_end <= feat_end ) ) + if( isStrict && feat_start >= diff_start && feat_start <= diff_end && + feat_end >= diff_start && feat_end <= diff_end ) + return true; + else if( !isStrict && + ((feat_start >= diff_start && feat_start <= diff_end) || + (feat_end >= diff_start && feat_end <= diff_end) || + (diff_start >= feat_start && diff_start <= feat_end) || + (diff_end >= feat_start && diff_end <= feat_end )) ) return true; else if(diff_start > feat_end) return false;