H key updates
[jalview.git] / src / jalview / gui / AlignmentPanel.java
index 364be5d..a4a38f9 100755 (executable)
@@ -92,11 +92,8 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
     setScrollValues(0, 0);\r
 \r
-    annotationPanel.adjustPanelHeight();\r
-    annotationSpaceFillerHolder.setPreferredSize(annotationPanel.\r
-                                                 getPreferredSize());\r
-    annotationScroller.setPreferredSize(annotationPanel.\r
-                                        getPreferredSize());\r
+    adjustAnnotationHeight();\r
+\r
     setAnnotationVisible(av.getShowAnnotation());\r
 \r
     hscroll.addAdjustmentListener(this);\r
@@ -116,8 +113,7 @@ public class AlignmentPanel extends GAlignmentPanel
         switch (evt.getKeyCode())\r
         {\r
           case 27: // escape key\r
-            av.setSelectionGroup(null);\r
-            repaint();\r
+            alignFrame.deselectAllSequenceMenuItem_actionPerformed(null);\r
 \r
             break;\r
 \r
@@ -165,7 +161,6 @@ public class AlignmentPanel extends GAlignmentPanel
             if(!av.cursorMode)\r
             {\r
               alignFrame.cut_actionPerformed(null);\r
-              seqPanel.seqCanvas.repaint();\r
             }\r
             else\r
               seqPanel.deleteGapAtCursor(evt.isControlDown() || evt.isShiftDown());\r
@@ -179,7 +174,7 @@ public class AlignmentPanel extends GAlignmentPanel
             }\r
             break;\r
           case KeyEvent.VK_C:\r
-            if(av.cursorMode)\r
+            if(av.cursorMode && !evt.isControlDown())\r
             {\r
               seqPanel.setCursorColumn();\r
             }\r
@@ -240,6 +235,38 @@ public class AlignmentPanel extends GAlignmentPanel
               ex.printStackTrace();\r
             }\r
             break;\r
+          case KeyEvent.VK_H:\r
+          {\r
+            boolean toggleSeqs = !evt.isControlDown();\r
+            boolean toggleCols = !evt.isShiftDown();\r
+\r
+            boolean hide = false;\r
+\r
+            SequenceGroup sg = av.getSelectionGroup();\r
+            if(toggleSeqs)\r
+             {\r
+               if(sg != null && sg.getSize(false) != av.alignment.getHeight())\r
+               {\r
+                 alignFrame.hideSelSequences_actionPerformed(null);\r
+                 hide = true;\r
+               }\r
+               else if (!(toggleCols && av.colSel.getSelected().size() > 0))\r
+                 alignFrame.showAllSeqs_actionPerformed(null);\r
+             }\r
+\r
+             if (toggleCols)\r
+             {\r
+               if(av.colSel.getSelected().size() > 0)\r
+               {\r
+                 alignFrame.hideSelColumns_actionPerformed(null);\r
+                 if(!toggleSeqs)\r
+                   av.selectionGroup = sg;\r
+               }\r
+               else if(!hide)\r
+                 alignFrame.showAllColumns_actionPerformed(null);\r
+             }\r
+            break;\r
+          }\r
 \r
         }\r
       }\r
@@ -418,6 +445,37 @@ public class AlignmentPanel extends GAlignmentPanel
     repaint();\r
   }\r
 \r
+  public void adjustAnnotationHeight()\r
+  {\r
+    javax.swing.SwingUtilities.invokeLater(new Runnable()\r
+    {\r
+      public void run()\r
+      {\r
+          while(alignFrame.getHeight()==0)\r
+          {\r
+            Thread.yield();\r
+          }\r
+\r
+        int height = annotationPanel.adjustPanelHeight();\r
+\r
+        if (height > alignFrame.getHeight() / 2)\r
+        {\r
+          height = alignFrame.getHeight() / 2;\r
+        }\r
+\r
+        annotationScroller.setPreferredSize(\r
+            new Dimension(annotationScroller.getWidth(),\r
+                          height));\r
+\r
+        annotationSpaceFillerHolder.setPreferredSize(new Dimension(\r
+            annotationSpaceFillerHolder.getWidth(),\r
+            height));\r
+\r
+        annotationPanel.repaint();\r
+      }\r
+    });\r
+  }\r
+\r
   /**\r
    * DOCUMENT ME!\r
    *\r
@@ -571,6 +629,7 @@ public class AlignmentPanel extends GAlignmentPanel
    */\r
   public void adjustmentValueChanged(AdjustmentEvent evt)\r
   {\r
+\r
     int oldX = av.getStartRes();\r
     int oldY = av.getStartSeq();\r
 \r
@@ -588,10 +647,26 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
       if (av.getWrapAlignment())\r
       {\r
-        int rowSize = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.\r
-            seqCanvas.getWidth());\r
-        av.setStartRes(vscroll.getValue() * rowSize);\r
-        av.setEndRes( (vscroll.getValue() + 1) * rowSize);\r
+        if(offy>-1)\r
+        {\r
+          int rowSize = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.\r
+              seqCanvas.getWidth());\r
+          av.setStartRes(offy * rowSize);\r
+          av.setEndRes( (offy + 1) * rowSize);\r
+        }\r
+        else\r
+        {\r
+          //This is only called if file loaded is a jar file that\r
+          //was wrapped when saved and user has wrap alignment true\r
+          //as preference setting\r
+          SwingUtilities.invokeLater(new Runnable()\r
+              {\r
+                public void run()\r
+                {\r
+                  setScrollValues(av.getStartRes(), av.getStartSeq());\r
+                }\r
+              });\r
+        }\r
       }\r
       else\r
       {\r
@@ -653,8 +728,14 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
     if (av.getWrapAlignment())\r
     {\r
-      int max = av.alignment.getWidth() /\r
-          seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +1;\r
+      int maxwidth = av.alignment.getWidth();\r
+\r
+      if (av.hasHiddenColumns)\r
+        maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+      int max = maxwidth /\r
+          seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getWidth()) +\r
+          1;\r
 \r
 \r
       vscroll.setMaximum(max);\r
@@ -794,7 +875,7 @@ public class AlignmentPanel extends GAlignmentPanel
     for (int i = startSeq; i < endSeq; i++)\r
     {\r
       if ( (av.getSelectionGroup() != null) &&\r
-          av.getSelectionGroup().sequences.contains(\r
+          av.getSelectionGroup().getSequences(false).contains(\r
               av.getAlignment().getSequenceAt(i)))\r
       {\r
         currentColor = Color.gray;\r
@@ -873,10 +954,15 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
     int idWidth = calculateIdWidth().width + 4;\r
 \r
+    int maxwidth = av.alignment.getWidth();\r
+    if (av.hasHiddenColumns)\r
+      maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+\r
     int resWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(pwidth -\r
         idWidth);\r
 \r
-    int totalHeight = cHeight * (av.alignment.getWidth() / resWidth + 1);\r
+    int totalHeight = cHeight * (maxwidth / resWidth + 1);\r
 \r
     pg.setColor(Color.white);\r
     pg.fillRect(0, 0, pwidth, pheight);\r
@@ -941,9 +1027,12 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
   void makeAlignmentImage(int type, File file)\r
   {\r
-    int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30;\r
-    int width = idPanel.getWidth() + (av.alignment.getWidth() * av.charWidth);\r
+    int maxwidth = av.alignment.getWidth();\r
+    if (av.hasHiddenColumns)\r
+      maxwidth = av.getColumnSelection().findColumnPosition(maxwidth);\r
 \r
+    int height = ( (av.alignment.getHeight() + 1) * av.charHeight) + 30;\r
+    int width = idPanel.getWidth() + (maxwidth * av.charWidth);\r
     if (idPanel.getWidth() == 0)\r
     {\r
       width += calculateIdWidth().getWidth() + 4;\r
@@ -952,7 +1041,14 @@ public class AlignmentPanel extends GAlignmentPanel
     if (av.getWrapAlignment())\r
     {\r
       height = getWrappedHeight();\r
-      width = seqPanel.getWidth() + idPanel.getWidth();\r
+      if (System.getProperty("java.awt.headless") != null\r
+          && System.getProperty("java.awt.headless").equals("true"))\r
+      {\r
+        width = alignFrame.getWidth() - 22;\r
+      }\r
+      else\r
+        width = seqPanel.getWidth() + idPanel.getWidth();\r
+\r
     }\r
     else if (av.getShowAnnotation())\r
     {\r
@@ -1125,9 +1221,9 @@ public class AlignmentPanel extends GAlignmentPanel
                       if (features[f].getDescription() != null && !features[f].getType().equals(features[f].getDescription()))\r
                         text.append(" " + features[f].getDescription());\r
 \r
-                      if (features[f].getStatus() != null && features[f].getStatus().length()>0)\r
+                      if (features[f].getValue("status") != null )\r
                       {\r
-                        text.append(" (" + features[f].getStatus() + ")");\r
+                        text.append(" (" + features[f].getValue("status") + ")");\r
                       }\r
                     }\r
                   }\r
@@ -1155,9 +1251,19 @@ public class AlignmentPanel extends GAlignmentPanel
 \r
   int getWrappedHeight()\r
   {\r
+    int seqPanelWidth = seqPanel.seqCanvas.getWidth();\r
+\r
+    //If headless, seqPanel will have 0 width\r
+    if (System.getProperty("java.awt.headless") != null\r
+              && System.getProperty("java.awt.headless").equals("true"))\r
+    {\r
+      int idWidth = calculateIdWidth().width + 4;\r
+      seqPanelWidth = alignFrame.getWidth() - idWidth;\r
+    }\r
 \r
     int chunkWidth = seqPanel.seqCanvas.getWrappedCanvasWidth(\r
-        seqPanel.seqCanvas.getWidth());\r
+        seqPanelWidth\r
+          );\r
 \r
     int hgap = av.charHeight;\r
     if (av.scaleAboveWrapped)\r
@@ -1173,7 +1279,12 @@ public class AlignmentPanel extends GAlignmentPanel
         + hgap\r
         + annotationHeight;\r
 \r
-    int height = ( (av.alignment.getWidth() / chunkWidth) + 1) * cHeight;\r
+    int maxwidth = av.alignment.getWidth();\r
+    if (av.hasHiddenColumns)\r
+      maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+\r
+\r
+    int height = ( (maxwidth / chunkWidth) + 1) * cHeight;\r
 \r
     return height;\r
   }\r