From 4af69f727d7f2c929be2c24f129df3f263fd691e Mon Sep 17 00:00:00 2001
From: edgrif <edgrif>
Date: Tue, 10 Aug 2010 13:53:47 +0000
Subject: [PATCH] fix bug in hiding features, wrongly rebumped. Add 'Update'
 shortcut.

---
 src/zmapWindow/zmapWindow.c | 141 +++++++++++++++++++++++-------------
 1 file changed, 92 insertions(+), 49 deletions(-)

diff --git a/src/zmapWindow/zmapWindow.c b/src/zmapWindow/zmapWindow.c
index 009acf896..b9b86693b 100755
--- a/src/zmapWindow/zmapWindow.c
+++ b/src/zmapWindow/zmapWindow.c
@@ -20,21 +20,19 @@
  * and was written by
  *     Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk and,
  *          Roy Storey (Sanger Institute, UK) rds@sanger.ac.uk,
- *       Malcolm Hinsley (Sanger Institute, UK) mh17@sanger.ac.uk
+ *     Malcolm Hinsley (Sanger Institute, UK) mh17@sanger.ac.uk
  *
  * Description: Provides interface functions for controlling a data
  *              display window.
  *
  * Exported functions: See ZMap/zmapWindow.h
  * HISTORY:
- * Last edited: Jul 29 09:19 2010 (edgrif)
+ * Last edited: Aug 10 13:48 2010 (edgrif)
  * Created: Thu Jul 24 14:36:27 2003 (edgrif)
- * CVS info:   $Id: zmapWindow.c,v 1.334 2010-07-29 09:37:24 edgrif Exp $
+ * CVS info:   $Id: zmapWindow.c,v 1.335 2010-08-10 13:53:47 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
-#include <ZMap/zmap.h>
-
 #include <math.h>
 #include <string.h>
 #include <unistd.h>
@@ -42,6 +40,7 @@
 #include <gdk/gdkx.h>
 #include <gdk/gdkkeysyms.h>
 
+#include <ZMap/zmap.h>
 #include <ZMap/zmapUtils.h>
 #include <ZMap/zmapGLibUtils.h>
 #include <ZMap/zmapFASTA.h>
@@ -56,8 +55,6 @@
 #include <zmapWindow_P.h>
 
 
-ZMapFeature FEATURE_GLOBAL_G = NULL ;
-
 
 
 
@@ -91,15 +88,17 @@ typedef struct
 
 
 /* Used for showing ruler on all windows that are in a vertically locked group. */
-typedef enum {
-  ZMAP_LOCKED_RULER_SETUP,
-  ZMAP_LOCKED_RULER_MOVING,
-  ZMAP_LOCKED_RULER_REMOVE,
-
-  ZMAP_LOCKED_MARK_GUIDE_SETUP,
-  ZMAP_LOCKED_MARK_GUIDE_MOVING,
-  ZMAP_LOCKED_MARK_GUIDE_REMOVE,
-} ZMapWindowLockRulerActionType ;
+typedef enum
+  {
+    ZMAP_LOCKED_RULER_SETUP,
+    ZMAP_LOCKED_RULER_MOVING,
+    ZMAP_LOCKED_RULER_REMOVE,
+    
+    ZMAP_LOCKED_MARK_GUIDE_SETUP,
+    ZMAP_LOCKED_MARK_GUIDE_MOVING,
+    ZMAP_LOCKED_MARK_GUIDE_REMOVE,
+  } ZMapWindowLockRulerActionType ;
+
 typedef struct
 {
   ZMapWindowLockRulerActionType action ;
@@ -279,6 +278,8 @@ static gboolean recenter_scroll_window(ZMapWindow window, double *event_y_in_out
 
 
 
+/* WHAT'S THIS !!! */
+ZMapFeature FEATURE_GLOBAL_G = NULL ;
 
 
 /* Callbacks we make back to the level above us. This structure is static
@@ -4227,6 +4228,8 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
     case GDK_Delete:
     case GDK_BackSpace:					    /* Good for Macs which have no delete key. */
       {
+	/* Hide/Show features, Delete will hide any highlighted features, shift-delete shows them
+	 * again. */
         FooCanvasGroup *focus_column ;
 
 	if ((focus_column = zmapWindowFocusGetHotColumn(window->focus)))
@@ -4252,21 +4255,19 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 
 		zmapWindowFocusHideFocusItems(window->focus, &hidden_items) ;
 
-		zmapWindowContainerFeatureSetPushHiddenStack(focus_container, hidden_items) ;
+		/* NOTE that this does not delete any lines joining homols etc...that
+		 * would require a callback into the alignment object code I think... */
 
-		/* This all feels really clumsy...we have the focus/highlight stuff the wrong way
-		   round, we should be dealing with focus, not with highlight at this level... */
-//		zMapWindowUnHighlightFocusItems(window) ;                   // done by hide function
-//		zmapWindowFocusSetHotColumn(window->focus, focus_column) ;  //not needed
-//		zmapWindowFocusHighlightHotColumn(window->focus) ;          // done by sethotcol
+		zmapWindowContainerFeatureSetPushHiddenStack(focus_container, hidden_items) ;
 	      }
 
-	    curr_bump_mode = zmapWindowContainerFeatureSetGetBumpMode(focus_container) ;
-
-	    zmapWindowColumnBump(FOO_CANVAS_ITEM(focus_column), curr_bump_mode) ;
+	    /* We don't bump here because user may be deleting a series of features so it
+	     * be irritating to keep bumping. */
 
+	    /* Make sure selected features are shown or hidden. */
 	    zmapWindowFullReposition(window) ;
 	  }
+
 	event_handled = TRUE ;
 
 	break ;
@@ -4327,6 +4328,8 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
     case GDK_b:
     case GDK_B:
       {
+	/* Toggle bumping for selected column, if column is unbumped it will be 
+	 * bumped in default mode for column. */
 	FooCanvasGroup *focus_column ;
 
 	if ((focus_column = zmapWindowFocusGetHotColumn(window->focus)))
@@ -4365,43 +4368,48 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 	break ;
       }
 
-      case GDK_c:
-      case GDK_C:
-	{
-	  FooCanvasGroup *focus_column ;
+    case GDK_c:
+    case GDK_C:
+      {
+	/* Compress visible columns so that any not showing features are hidden. */
+	FooCanvasGroup *focus_column ;
 
-	  if ((focus_column = zmapWindowFocusGetHotColumn(window->focus)))
-	    {
-	      ZMapWindowCompressMode compress_mode ;
+	if ((focus_column = zmapWindowFocusGetHotColumn(window->focus)))
+	  {
+	    ZMapWindowCompressMode compress_mode ;
 
-	      if (key_event->keyval == GDK_C)
-		compress_mode = ZMAPWINDOW_COMPRESS_VISIBLE ;
-	      else
-		{
-		  if (zmapWindowMarkIsSet(window->mark))
-		    compress_mode = ZMAPWINDOW_COMPRESS_MARK ;
-		  else
-		    compress_mode = ZMAPWINDOW_COMPRESS_ALL ;
-		}
+	    if (key_event->keyval == GDK_C)
+	      compress_mode = ZMAPWINDOW_COMPRESS_VISIBLE ;
+	    else
+	      {
+		if (zmapWindowMarkIsSet(window->mark))
+		  compress_mode = ZMAPWINDOW_COMPRESS_MARK ;
+		else
+		  compress_mode = ZMAPWINDOW_COMPRESS_ALL ;
+	      }
 
-	      zmapWindowColumnsCompress(FOO_CANVAS_ITEM(focus_column), window, compress_mode) ;
-	    }
+	    zmapWindowColumnsCompress(FOO_CANVAS_ITEM(focus_column), window, compress_mode) ;
+	  }
 
-	  event_handled = TRUE ;
+	event_handled = TRUE ;
+
+	break ;
+      }
 
-	  break ;
-	}
 
 #ifdef ED_G_NEVER_INCLUDE_THIS_CODE
     case GDK_d:
       /*  need implementing...can work on a window basis... .... */
-#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
     case GDK_d:
     case GDK_D:
 //      { extern int mh_debug; mh_debug = 1; }
       break;
+#endif /* ED_G_NEVER_INCLUDE_THIS_CODE */
+
 
     case GDK_e:
+
       if(zmap_development_G)
         {
             // this is test code to exercise the focus functions
@@ -4477,6 +4485,7 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 	zmapWindowToggleMark(window, key_event->keyval);
       }
       break;
+
     case GDK_o:
     case GDK_O:
       {
@@ -4497,7 +4506,7 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
     case GDK_p:
     case GDK_P:
       {
-	/* Use the current focus item */
+	/* Use the current focus item and display translation of it. */
 	FooCanvasItem *focus_item ;
 
 	/* If there is a focus item use that.  */
@@ -4538,13 +4547,16 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 
     case GDK_r:
       {
+	/* Reverse complement. */
 	revCompRequest(window) ;
 
 	break ;
       }
+
     case GDK_t:
     case GDK_T:
       {
+	/* Show translation of an item. */
 	FooCanvasItem *focus_item ;
 
 	/* If there is a focus item use that.  */
@@ -4555,8 +4567,38 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 	    else
 	      zmapWindowItemShowTranslationRemove(window, focus_item);
 	  }
+
+	break;
       }
-      break;
+
+
+    case GDK_u:
+    case GDK_U:
+      {
+	/* 'u' for update....rebumps a column. */
+        FooCanvasGroup *focus_column ;
+
+	if ((focus_column = zmapWindowFocusGetHotColumn(window->focus)))
+	  {
+	    ZMapWindowContainerFeatureSet focus_container;
+	    ZMapStyleBumpMode curr_bump_mode ;
+
+	    focus_container = (ZMapWindowContainerFeatureSet)focus_column;
+
+	    curr_bump_mode = zmapWindowContainerFeatureSetGetBumpMode(focus_container) ;
+
+	    zmapWindowColumnBump(FOO_CANVAS_ITEM(focus_column), ZMAPBUMP_UNBUMP) ;
+
+	    zmapWindowColumnBump(FOO_CANVAS_ITEM(focus_column), curr_bump_mode) ;
+
+	    zmapWindowFullReposition(window) ;
+	  }
+
+	event_handled = TRUE ;
+
+	break ;
+      }
+
     case GDK_w:
     case GDK_W:
       {
@@ -4572,6 +4614,7 @@ static gboolean keyboardEvent(ZMapWindow window, GdkEventKey *key_event)
 	event_handled = TRUE ;
 	break ;
       }
+
     case GDK_Z:
     case GDK_z:
       {
-- 
GitLab