Use textColourChooser
[jalview.git] / src / jalview / gui / AlignFrame.java
index de3e8fd..8fafb34 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!
@@ -58,9 +60,9 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
 
 
   /** DOCUMENT ME!! */
-  public String currentFileFormat = null;
+  String currentFileFormat = null;
 
-  public String fileName = null;
+  String fileName = null;
 
   private int treeCount = 0;
 
@@ -146,12 +148,17 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
 
    addKeyListener();
 
+  }
 
+  public void setFileName(String file, String format)
+  {
+     fileName = file;
+     currentFileFormat = format;
+     reload.setEnabled(true);
   }
 
   void addKeyListener()
   {
-      final AlignFrame af = this;
       addKeyListener(new KeyAdapter()
       {
         public void keyPressed(KeyEvent evt)
@@ -165,37 +172,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
 
           switch (evt.getKeyCode())
           {
-            case KeyEvent.VK_V:
-              if (!evt.isControlDown())
-              {
-                AlignmentPanel newap =
-                    new Jalview2XML().copyAlignPanel(alignPanel, true);
-
-                if(viewport.viewName==null)
-                  viewport.viewName="View 1";
-
-                newap.av.historyList = viewport.historyList;
-                newap.av.redoList = viewport.redoList;
-                newap.av.viewName = "View " +
-                    (Desktop.getViewCount(viewport.getSequenceSetId())+1);
-
-                addAlignmentPanel(newap, false);
-
-                tabbedPane.setSelectedIndex(tabbedPane.getTabCount()-1);
-
-              }
-              break;
-            case KeyEvent.VK_G:
-              Desktop.instance.gatherViews(af);
-              break;
-
-            case KeyEvent.VK_X:
-              if (!evt.isControlDown())
-              {
-                Desktop.instance.explodeViews(af);
-              }
-              break;
-
 
             case 27: // escape key
               deselectAllSequenceMenuItem_actionPerformed(null);
@@ -386,6 +362,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);
@@ -404,6 +382,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
         this.getContentPane().add(tabbedPane, BorderLayout.CENTER);
       }
 
+      expandViews.setEnabled(true);
+      gatherViews.setEnabled(true);
       tabbedPane.addTab(ap.av.viewName==null?"Original":ap.av.viewName, ap);
 
       ap.setVisible(false);
@@ -411,8 +391,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);
     }
   }
 
@@ -450,7 +432,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
       {
         // System.out.println("deregistering discoverer listener");
         Desktop.discoverer.removePropertyChangeListener(thisListener);
-        closeMenuItem_actionPerformed(null);
+        closeMenuItem_actionPerformed(true);
       }
       ;
     });
@@ -476,10 +458,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);
@@ -492,7 +476,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     showSeqFeatures.setSelected(av.showSequenceFeatures);
     hiddenMarkers.setState(av.showHiddenMarkers);
     applyToAllGroups.setState(av.colourAppliesToAllGroups);
-    smoothFont.setState(av.antiAlias);
 
     updateEditMenuBar();
   }
@@ -563,6 +546,44 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     Desktop.instance.inputLocalFileMenuItem_actionPerformed(viewport);
   }
 
+  public void reload_actionPerformed(ActionEvent e)
+  {
+    if(fileName!=null)
+    {
+      if(currentFileFormat.equals("Jalview"))
+      {
+        this.closeMenuItem_actionPerformed(true);
+      }
+      else
+      {
+        viewport.alignment.deleteAllGroups();
+        viewport.sequenceColours=null;
+        while (viewport.alignment.getHeight() > 0)
+        {
+          viewport.alignment.deleteSequence(0);
+        }
+
+        viewport.historyList.clear();
+        viewport.redoList.clear();
+        Alignment dset = viewport.alignment.getDataset();
+        while (dset.getHeight() > 0)
+        {
+          dset.deleteSequence(0);
+        }
+
+        firePropertyChange("Alignment", null, null);
+
+        updateEditMenuBar();
+      }
+
+      FileLoader loader = new FileLoader();
+      String protocol = fileName.startsWith("http:")? "URL":"File";
+      loader.LoadFile(viewport, fileName, protocol, currentFileFormat);
+
+    }
+  }
+
+
   public void addFromText_actionPerformed(ActionEvent e)
   {
     Desktop.instance.inputTextboxMenuItem_actionPerformed(viewport);
@@ -723,6 +744,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     }
 
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
+    cap.setForInput(null);
     Desktop.addInternalFrame(cap,
                              "Alignment output - " + e.getActionCommand(), 600,
                              500);
@@ -825,28 +847,45 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
    *
    * @param e DOCUMENT ME!
    */
-  public void closeMenuItem_actionPerformed(ActionEvent e)
+  public void closeMenuItem_actionPerformed(boolean closeAllTabs)
   {
+    if(alignPanels!=null && alignPanels.size()<2)
+      closeAllTabs = true;
+
     try
     {
       if(alignPanels!=null)
       {
-        for (int i = 0; i < alignPanels.size(); i++)
+        if (closeAllTabs)
+          for (int i = 0; i < alignPanels.size(); i++)
+          {
+            AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i);
+            PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
+            PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
+            PaintRefresher.RemoveComponent(ap);
+          }
+        else
         {
-          AlignmentPanel ap = (AlignmentPanel) alignPanels.elementAt(i);
-          PaintRefresher.RemoveComponent(ap.seqPanel.seqCanvas);
-          PaintRefresher.RemoveComponent(ap.idPanel.idCanvas);
-          PaintRefresher.RemoveComponent(ap);
+          int index = tabbedPane.getSelectedIndex();
+
+          tabbedPane.removeTabAt(index);
+          alignPanels.removeElement(alignPanel);
+          PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas);
+          PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas);
+          PaintRefresher.RemoveComponent(alignPanel);
+          alignPanel = null;
+          viewport = null;
+          tabbedPane.validate();
+
+          if(index==tabbedPane.getTabCount())
+            index --;
+
+          this.tabSelectionChanged(index);
         }
-      //  alignPanels = null;
       }
-    //  else
-     //   System.out.println("null one here");
 
-    //  alignPanel = null;
-    //  viewport = null;
-
-      this.setClosed(true);
+      if (closeAllTabs)
+        this.setClosed(true);
     }
     catch (Exception ex)
     {
@@ -912,10 +951,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     viewport.redoList.push(command);
     command.undoCommand();
 
-    viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
+    AlignViewport originalSource = getOriginatingSource(command);
+
+    originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null;
     updateEditMenuBar();
-    viewport.firePropertyChange("alignment", null,
-                                viewport.getAlignment().getSequences());
+    originalSource.firePropertyChange("alignment", null,null);
   }
 
   /**
@@ -928,12 +968,40 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     CommandI command = (CommandI) viewport.redoList.pop();
     viewport.historyList.push(command);
     command.doCommand();
-    viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null;
+
+    AlignViewport originalSource = getOriginatingSource(command);
+    originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns()!=null;
 
     updateEditMenuBar();
-    viewport.firePropertyChange("alignment", null, viewport.getAlignment().getSequences());
+    originalSource.firePropertyChange("alignment", null, null);
   }
 
+  AlignViewport getOriginatingSource(CommandI command)
+  {
+    AlignViewport originalSource = viewport;
+    //For sequence removal and addition, we need to fire
+   //the property change event FROM the viewport where the
+   //original alignment was altered
+    if (command instanceof EditCommand)
+    {
+      EditCommand editCommand = (EditCommand) command;
+      AlignmentI al = editCommand.getAlignment();
+      Vector comps = (Vector) PaintRefresher.components
+          .get(viewport.getSequenceSetId());
+      for (int i = 0; i < comps.size(); i++)
+      {
+        if (comps.elementAt(i) instanceof AlignmentPanel)
+        {
+          if (al == ( (AlignmentPanel) comps.elementAt(i)).av.alignment)
+          {
+            originalSource = ( (AlignmentPanel) comps.elementAt(i)).av;
+            break;
+          }
+        }
+      }
+    }
+    return originalSource;
+  }
 
   /**
    * DOCUMENT ME!
@@ -1297,7 +1365,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
    *
    * @param e DOCUMENT ME!
    */
-  protected void delete_actionPerformed(ActionEvent e)
+  protected void delete_actionPerformed(ActionEvent evt)
   {
 
     SequenceGroup sg = viewport.getSelectionGroup();
@@ -1307,15 +1375,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;
     }
 
 
@@ -1369,6 +1433,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();
@@ -1413,7 +1478,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());
   }
 
   /**
@@ -1438,7 +1503,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)
@@ -1497,6 +1562,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
                                     viewport.alignment,
                                     viewport.colSel,
                                     viewport.selectionGroup);
+        viewport.setStartRes(0);
       }
      else
      {
@@ -1632,13 +1698,43 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
    */
   public void findMenuItem_actionPerformed(ActionEvent e)
   {
-    JInternalFrame frame = new JInternalFrame();
-    Finder finder = new Finder(viewport, alignPanel, frame);
-    frame.setContentPane(finder);
-    frame.setLayer(JLayeredPane.PALETTE_LAYER);
-    Desktop.addInternalFrame(frame, "Find", 340, 110);
+    new Finder();
   }
 
+  public void newView_actionPerformed(ActionEvent e)
+  {
+    AlignmentPanel newap =
+        new Jalview2XML().copyAlignPanel(alignPanel, true);
+
+    if (viewport.viewName == null)
+      viewport.viewName = "View 1";
+
+    newap.av.historyList = viewport.historyList;
+    newap.av.redoList = viewport.redoList;
+    newap.av.viewName = "View " +
+        (Desktop.getViewCount(viewport.getSequenceSetId()) + 1);
+
+    addAlignmentPanel(newap, false);
+
+    if(alignPanels.size()==2)
+    {
+      viewport.gatherViewsHere = true;
+    }
+    tabbedPane.setSelectedIndex(tabbedPane.getTabCount() - 1);
+  }
+
+  public void expandViews_actionPerformed(ActionEvent e)
+  {
+        Desktop.instance.explodeViews(this);
+  }
+
+  public void gatherViews_actionPerformed(ActionEvent e)
+  {
+    Desktop.instance.gatherViews(this);
+  }
+
+
+
   /**
    * DOCUMENT ME!
    *
@@ -1649,13 +1745,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     new FontChooser(alignPanel);
   }
 
-  public void smoothFont_actionPerformed(ActionEvent e)
-  {
-    viewport.antiAlias = smoothFont.isSelected();
-    alignPanel.annotationPanel.image = null;
-    alignPanel.repaint();
-  }
-
 
   /**
    * DOCUMENT ME!
@@ -1670,6 +1759,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     alignPanel.repaint();
   }
 
+  public void idRightAlign_actionPerformed(ActionEvent e)
+  {
+    viewport.idsAlignRight = idRightAlign.isSelected();
+    alignPanel.repaint();
+  }
+
+
 
   /**
    * DOCUMENT ME!
@@ -1861,6 +1957,11 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener
     alignPanel.setOverviewPanel(overview);
   }
 
+  public void textColour_actionPerformed(ActionEvent e)
+  {
+    new TextColourChooser().chooseColour(alignPanel, null);
+  }
+
   /**
    * DOCUMENT ME!
    *