Merge branch 'feature/JAL-674_dssp' into features/JAL-1264_showHideAnnotations features/JAL-1264_showHideAnnotations
authorJim Procter <j.procter@dundee.ac.uk>
Thu, 16 Oct 2014 12:41:05 +0000 (13:41 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Thu, 16 Oct 2014 12:41:05 +0000 (13:41 +0100)
1  2 
src/jalview/gui/AnnotationLabels.java
src/jalview/gui/FeatureSettings.java

   */
  package jalview.gui;
  
 -import java.util.*;
 -import java.util.regex.Pattern;
 +import jalview.datamodel.Alignment;
 +import jalview.datamodel.AlignmentAnnotation;
 +import jalview.datamodel.Annotation;
 +import jalview.datamodel.Sequence;
 +import jalview.datamodel.SequenceGroup;
 +import jalview.datamodel.SequenceI;
 +import jalview.io.FormatAdapter;
 +import jalview.util.MessageManager;
  
 -import java.awt.*;
 -import java.awt.datatransfer.*;
 -import java.awt.event.*;
 +import java.awt.Color;
 +import java.awt.Dimension;
 +import java.awt.Font;
 +import java.awt.FontMetrics;
 +import java.awt.Graphics;
 +import java.awt.Graphics2D;
 +import java.awt.Image;
 +import java.awt.MediaTracker;
 +import java.awt.RenderingHints;
 +import java.awt.Toolkit;
 +import java.awt.datatransfer.StringSelection;
 +import java.awt.event.ActionEvent;
 +import java.awt.event.ActionListener;
 +import java.awt.event.MouseEvent;
 +import java.awt.event.MouseListener;
 +import java.awt.event.MouseMotionListener;
  import java.awt.geom.AffineTransform;
 -import java.awt.image.*;
 -import javax.swing.*;
 +import java.awt.image.BufferedImage;
 +import java.util.Vector;
 +import java.util.regex.Pattern;
  
 -import jalview.datamodel.*;
 -import jalview.io.*;
 -import jalview.util.MessageManager;
 +import javax.swing.JCheckBoxMenuItem;
 +import javax.swing.JMenuItem;
 +import javax.swing.JPanel;
 +import javax.swing.JPopupMenu;
 +import javax.swing.SwingUtilities;
 +import javax.swing.ToolTipManager;
  
  /**
   * DOCUMENT ME!
@@@ -138,7 -115,7 +138,7 @@@ public class AnnotationLabels extends J
      Graphics2D g = (Graphics2D) bi.getGraphics();
      g.rotate(Math.toRadians(90));
      g.drawImage(temp, 0, -bi.getWidth(this), this);
 -    image = (Image) bi;
 +    image = bi;
  
      addMouseListener(this);
      addMouseMotionListener(this);
        aa[selectedRow].scaleColLabel = !aa[selectedRow].scaleColLabel;
      }
  
 +    refresh();
 +
 +  }
 +
 +  /**
 +   * Redraw sensibly.
 +   */
 +  protected void refresh()
 +  {
      ap.validateAnnotationDimensions(false);
      ap.addNotify();
      ap.repaint();
 -    // validate();
 -    // ap.paintAlignment(true);
    }
  
    /**
     */
    public void mouseClicked(MouseEvent evt)
    {
 -    AlignmentAnnotation[] aa = ap.av.getAlignment()
 +    final AlignmentAnnotation[] aa = ap.av.getAlignment()
              .getAlignmentAnnotation();
      if (SwingUtilities.isLeftMouseButton(evt))
      {
          }
          else if (aa[selectedRow].sequenceRef != null)
          {
-           Vector sr = new Vector();
-           sr.addElement(aa[selectedRow].sequenceRef);
            if (evt.getClickCount() == 1)
            {
-             ap.seqPanel.ap.idPanel.highlightSearchResults(sr);
+             ap.seqPanel.ap.idPanel.highlightSearchResults(Arrays
+                     .asList(new SequenceI[]
+                     { aa[selectedRow].sequenceRef }));
            }
            else if (evt.getClickCount() >= 2)
            {
              ap.seqPanel.ap.idPanel.highlightSearchResults(null);
-             SequenceGroup sg = new SequenceGroup();
-             sg.addSequence(aa[selectedRow].sequenceRef, false);
+             SequenceGroup sg = ap.av.getSelectionGroup();
+             if (sg!=null)
+             {
+               // we make a copy rather than edit the current selection if no modifiers pressed
+               // see Enhancement JAL-1557
+               if (!(evt.isControlDown() || evt.isShiftDown()))
+               {
+                 sg = new SequenceGroup(sg);
+                 sg.clear();
+                 sg.addSequence(aa[selectedRow].sequenceRef, false);
+               } else {
+                 if (evt.isControlDown())
+                 {
+                   sg.addOrRemove(aa[selectedRow].sequenceRef, true);
+                 } else {
+                   // notionally, we should also add intermediate sequences from last added sequence ?
+                   sg.addSequence(aa[selectedRow].sequenceRef, true);
+                 }
+               }
+             } else {
+               sg = new SequenceGroup();
+               sg.setStartRes(0);
+               sg.setEndRes(ap.av.getAlignment().getWidth()-1);
+               sg.addSequence(aa[selectedRow].sequenceRef, false);
+             }
              ap.av.setSelectionGroup(sg);
              ap.av.sendSelection();
              ap.paintAlignment(false);
      item = new JMenuItem(HIDE);
      item.addActionListener(this);
      pop.add(item);
 +    // JAL-1264 hide all sequence-specific annotations of this type
 +    final String label = aa[selectedRow].label;
 +    if (selectedRow < aa.length)
 +    {
 +      if (aa[selectedRow].sequenceRef != null)
 +      {
 +        JMenuItem hideType = new JMenuItem();
 +        String text = MessageManager.getString("label.hide_all") + " " + label;
 +        hideType.setText(text);
 +        hideType.addActionListener(new ActionListener()
 +        {
 +          @Override
 +          public void actionPerformed(ActionEvent e)
 +          {
 +            for (AlignmentAnnotation ann : ap.av.getAlignment()
 +                    .getAlignmentAnnotation())
 +            {
 +              if (ann.sequenceRef != null && ann.label != null
 +                      && ann.label.equals(label))
 +              {
 +                ann.visible = false;
 +              }
 +            }
 +            refresh();
 +          }
 +        });
 +        pop.add(hideType);
 +      }
 +    }
      item = new JMenuItem(DELETE);
      item.addActionListener(this);
      pop.add(item);
            pop.add(item);
          }
        }
 -      else if (aa[selectedRow].label.indexOf("Consensus") > -1)
 +      else if (label.indexOf("Consensus") > -1)
        {
          pop.addSeparator();
          // av and sequencegroup need to implement same interface for
   */
  package jalview.gui;
  
  import jalview.analysis.AlignmentSorter;
  import jalview.bin.Cache;
  import jalview.commands.OrderCommand;
 -import jalview.datamodel.*;
 -import jalview.io.*;
 +import jalview.datamodel.AlignmentI;
 +import jalview.datamodel.SequenceFeature;
 +import jalview.datamodel.SequenceGroup;
 +import jalview.datamodel.SequenceI;
 +import jalview.io.JalviewFileChooser;
  import jalview.schemes.AnnotationColourGradient;
  import jalview.schemes.GraduatedColor;
  import jalview.util.MessageManager;
  import jalview.ws.dbsources.das.api.jalviewSourceI;
  
 +import java.awt.BorderLayout;
 +import java.awt.Color;
 +import java.awt.Component;
 +import java.awt.Font;
 +import java.awt.Graphics;
 +import java.awt.GridLayout;
 +import java.awt.Rectangle;
 +import java.awt.event.ActionEvent;
 +import java.awt.event.ActionListener;
 +import java.awt.event.ItemEvent;
 +import java.awt.event.ItemListener;
 +import java.awt.event.MouseAdapter;
 +import java.awt.event.MouseEvent;
 +import java.awt.event.MouseMotionAdapter;
 +import java.beans.PropertyChangeEvent;
 +import java.beans.PropertyChangeListener;
 +import java.io.File;
 +import java.io.FileInputStream;
 +import java.io.FileOutputStream;
 +import java.io.InputStreamReader;
 +import java.io.OutputStreamWriter;
 +import java.io.PrintWriter;
 +import java.util.ArrayList;
 +import java.util.Hashtable;
 +import java.util.Iterator;
 +import java.util.List;
 +import java.util.Vector;
 +
 +import javax.swing.AbstractCellEditor;
 +import javax.swing.BorderFactory;
 +import javax.swing.Icon;
 +import javax.swing.JButton;
 +import javax.swing.JCheckBox;
 +import javax.swing.JCheckBoxMenuItem;
 +import javax.swing.JColorChooser;
 +import javax.swing.JDialog;
 +import javax.swing.JInternalFrame;
 +import javax.swing.JLabel;
 +import javax.swing.JLayeredPane;
 +import javax.swing.JMenuItem;
 +import javax.swing.JOptionPane;
 +import javax.swing.JPanel;
 +import javax.swing.JPopupMenu;
 +import javax.swing.JScrollPane;
 +import javax.swing.JSlider;
 +import javax.swing.JTabbedPane;
 +import javax.swing.JTable;
 +import javax.swing.ListSelectionModel;
 +import javax.swing.SwingConstants;
 +import javax.swing.SwingUtilities;
 +import javax.swing.event.ChangeEvent;
 +import javax.swing.event.ChangeListener;
 +import javax.swing.table.AbstractTableModel;
 +import javax.swing.table.TableCellEditor;
 +import javax.swing.table.TableCellRenderer;
 +
  public class FeatureSettings extends JPanel
  {
    DasSourceBrowser dassourceBrowser;
        public void mousePressed(MouseEvent evt)
        {
          selectedRow = table.rowAtPoint(evt.getPoint());
-         if (evt.isPopupTrigger())
+         if (SwingUtilities.isRightMouseButton(evt))
          {
            popupSort(selectedRow, (String) table.getValueAt(selectedRow, 0),
                    table.getValueAt(selectedRow, 1), fr.minmax, evt.getX(),
                    (String) table.getValueAt(selectedRow, 0));
          }
        }
 +
 +      // isPopupTrigger fires on mouseReleased on Mac
 +      @Override
 +      public void mouseReleased(MouseEvent evt)
 +      {
 +        selectedRow = table.rowAtPoint(evt.getPoint());
 +        if (evt.isPopupTrigger())
 +        {
 +          popupSort(selectedRow, (String) table.getValueAt(selectedRow, 0),
 +                  table.getValueAt(selectedRow, 1), fr.minmax, evt.getX(),
 +                  evt.getY());
 +        }
 +      }
      });
  
      table.addMouseMotionListener(new MouseMotionAdapter()
                  file), "UTF-8");
  
          jalview.schemabinding.version2.JalviewUserColours jucs = new jalview.schemabinding.version2.JalviewUserColours();
 -        jucs = (jalview.schemabinding.version2.JalviewUserColours) jucs
 +        jucs = jucs
                  .unmarshal(in);
  
          for (int i = jucs.getColourCount() - 1; i >= 0; i--)
      {
        public void stateChanged(ChangeEvent evt)
        {
 -        fr.setTransparency((float) (100 - transparency.getValue()) / 100f);
 +        fr.setTransparency((100 - transparency.getValue()) / 100f);
          af.alignPanel.paintAlignment(true);
        }
      });