right align ids
[jalview.git] / src / jalview / gui / AlignFrame.java
index e38d96d..18ebf0e 100755 (executable)
@@ -36,6 +36,8 @@ import jalview.schemes.*;
 import jalview.commands.*;
 import jalview.ws.*;
 import java.awt.dnd.*;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.ChangeEvent;
 
 /**
  * DOCUMENT ME!
@@ -372,6 +374,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
 
     alignPanels.addElement(ap);
 
+    PaintRefresher.Register(ap, ap.av.getSequenceSetId());
+
     int aSize = alignPanels.size();
 
     tabbedPane.setVisible(aSize>1 || ap.av.viewName!=null);
@@ -397,8 +401,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
 
     if(newPanel)
     {
-      ap.av.updateConsensus(ap);
+      if (ap.av.padGaps)
+        ap.av.alignment.padGaps();
       ap.av.updateConservation(ap);
+      ap.av.updateConsensus(ap);
     }
   }
 
@@ -462,10 +468,12 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
    */
   void setMenusFromViewport(AlignViewport av)
   {
+    padGapsMenuitem.setSelected(av.padGaps);
     colourTextMenuItem.setSelected(av.showColourText);
     abovePIDThreshold.setSelected(av.getAbovePIDThreshold());
     conservationMenuItem.setSelected(av.getConservationSelected());
     seqLimits.setSelected(av.getShowJVSuffix());
+    idRightAlign.setSelected(av.idsAlignRight);
     renderGapsMenuItem.setSelected(av.renderGaps);
     wrapMenuItem.setSelected(av.wrapAlignment);
     annotationPanelMenuItem.setState(av.showAnnotation);
@@ -559,6 +567,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
       else
       {
         viewport.alignment.deleteAllGroups();
+        viewport.sequenceColours=null;
         while (viewport.alignment.getHeight() > 0)
         {
           viewport.alignment.deleteSequence(0);
@@ -578,7 +587,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
       }
 
       FileLoader loader = new FileLoader();
-      loader.LoadFile(viewport, fileName, "File", currentFileFormat);
+      String protocol = fileName.startsWith("http:")? "URL":"File";
+      loader.LoadFile(viewport, fileName, protocol, currentFileFormat);
 
     }
   }
@@ -951,10 +961,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     viewport.redoList.push(command);
     command.undoCommand();
 
+
     viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
     updateEditMenuBar();
-    viewport.firePropertyChange("alignment", null,
-                                viewport.getAlignment().getSequences());
+    viewport.firePropertyChange("alignment", null,null);
   }
 
   /**
@@ -970,7 +980,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null;
 
     updateEditMenuBar();
-    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
+    viewport.firePropertyChange("alignment", null, null);
   }
 
 
@@ -1346,15 +1356,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     }
 
     Vector seqs = new Vector();
-    int cutLength = sg.getEndRes()-sg.getStartRes()+1;
-    boolean seqsCut = false;
     SequenceI seq;
     for (int i = 0; i < sg.getSize(false); i++)
     {
       seq = sg.getSequenceAt(i);
       seqs.addElement(seq);
-      if(seq.getLength()<=cutLength)
-        seqsCut = true;
     }
 
 
@@ -1408,6 +1414,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
   protected void deleteGroups_actionPerformed(ActionEvent e)
   {
     viewport.alignment.deleteAllGroups();
+    viewport.sequenceColours.clear();
     viewport.setSelectionGroup(null);
     PaintRefresher.Refresh(this, viewport.getSequenceSetId());
     alignPanel.repaint();
@@ -1452,7 +1459,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     alignPanel.seqPanel.seqCanvas.highlightSearchResults(null);
     alignPanel.idPanel.idCanvas.searchResults = null;
     alignPanel.repaint();
-    PaintRefresher.Refresh(this, viewport.getSequenceSetId());
+    PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
   }
 
   /**
@@ -1477,7 +1484,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
       sg.addOrRemove(viewport.getAlignment().getSequenceAt(i), false);
     }
 
-    PaintRefresher.Refresh(this, viewport.getSequenceSetId());
+    PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId());
   }
 
   public void invertColSel_actionPerformed(ActionEvent e)
@@ -1536,6 +1543,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
                                     viewport.alignment,
                                     viewport.colSel,
                                     viewport.selectionGroup);
+        viewport.setStartRes(0);
       }
      else
      {
@@ -1695,7 +1703,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
 
     if(alignPanels.size()==2)
     {
-      System.out.println("set gather once2");
       viewport.gatherViewsHere = true;
     }
     tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
@@ -1726,6 +1733,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     alignPanel.repaint();
   }
 
+  public void idRightAlign_actionPerformed(ActionEvent e)
+  {
+    viewport.idsAlignRight = idRightAlign.isSelected();
+    alignPanel.repaint();
+  }
+
+
 
   /**
    * DOCUMENT ME!
@@ -1917,6 +1931,114 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     alignPanel.setOverviewPanel(overview);
   }
 
+  public void textColour_actionPerformed(ActionEvent e)
+  {
+    int original1 = viewport.textColour.getRGB();
+    int original2 = viewport.textColour2.getRGB();
+    int thresh = viewport.thresholdTextColour;
+    final JSlider slider = new JSlider(0, 750, viewport.thresholdTextColour);
+    final JButton col1 = new JButton("DARK");
+    col1.setBackground(viewport.textColour);
+    col1.setForeground(viewport.textColour);
+    final JButton col2 = new JButton("LIGHT");
+    col2.setBackground(viewport.textColour2);
+    col2.setForeground(viewport.textColour2);
+    final JPanel bigpanel = new JPanel(new BorderLayout());
+    JPanel panel = new JPanel();
+    bigpanel.add(panel, BorderLayout.CENTER);
+    bigpanel.add(new JLabel(
+      "<html><i>Select a dark and light text colour, then set the threshold to"
+     +"<br>switch between colours, based on background colour</i></html>"),
+                 BorderLayout.NORTH);
+    panel.add(col1);
+    panel.add(slider);
+    panel.add(col2);
+
+    col1.addActionListener(new ActionListener()
+        {
+          public void actionPerformed(ActionEvent e)
+          {
+            Color col = JColorChooser.showDialog(bigpanel,
+                                                 "Select Colour for Text",
+                                                 viewport.textColour);
+            if (col != null)
+            {
+              viewport.textColour = col;
+              col1.setBackground(col);
+              col1.setForeground(col);
+              if(viewport.colourAppliesToAllGroups)
+                setGroupTextColour();
+            }
+            alignPanel.repaint();
+          }
+        });
+
+    col2.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        Color col = JColorChooser.showDialog(bigpanel,
+                                             "Select Colour for Text",
+                                             viewport.textColour);
+        if (col != null)
+        {
+          viewport.textColour2 = col;
+          col2.setBackground(col);
+          col2.setForeground(col);
+          if(viewport.colourAppliesToAllGroups)
+                setGroupTextColour();
+        }
+        alignPanel.repaint();
+      }
+    });
+
+
+    slider.addChangeListener(new ChangeListener()
+    {
+      public void stateChanged(ChangeEvent evt)
+      {
+        viewport.thresholdTextColour = slider.getValue();
+        if(viewport.colourAppliesToAllGroups)
+                setGroupTextColour();
+        alignPanel.repaint();
+      }
+    });
+
+    int reply = JOptionPane.showInternalOptionDialog(this,
+                                                 bigpanel,
+                                                 "Adjust Foreground Text Colour Threshold",
+                                                 JOptionPane.OK_CANCEL_OPTION,
+                                                 JOptionPane.QUESTION_MESSAGE,
+                                                 null,
+                                                 null, null);
+
+    if(reply==JOptionPane.CANCEL_OPTION)
+    {
+      viewport.textColour = new Color(original1);
+      viewport.textColour2 = new Color(original2);
+      viewport.thresholdTextColour = thresh;
+    }
+  }
+
+  void setGroupTextColour()
+  {
+    if(viewport.alignment.getGroups()==null)
+      return;
+
+    Vector groups = viewport.alignment.getGroups();
+
+    for(int i=0; i<groups.size(); i++)
+    {
+      SequenceGroup sg = (SequenceGroup)groups.elementAt(i);
+      sg.textColour = viewport.textColour;
+      sg.textColour2 = viewport.textColour2;
+      sg.thresholdTextColour = viewport.thresholdTextColour;
+    }
+
+
+  }
+
+
   /**
    * DOCUMENT ME!
    *