From 0bc5d04b67a63df706accb9b476d523063e06920 Mon Sep 17 00:00:00 2001
From: edgrif <edgrif>
Date: Mon, 18 May 2009 14:55:05 +0000
Subject: [PATCH] add assembly path colours to style.

---
 src/include/ZMap/zmapStyle.h       |   8 +-
 src/zmapFeature/zmapFeatureTypes.c |  10 ++-
 src/zmapFeature/zmapStyle.c        | 131 ++++++++++++++++++++++++++++-
 src/zmapFeature/zmapStyleUtils.c   |  13 ++-
 src/zmapFeature/zmapStyle_I.h      |  22 ++++-
 5 files changed, 172 insertions(+), 12 deletions(-)

diff --git a/src/include/ZMap/zmapStyle.h b/src/include/ZMap/zmapStyle.h
index 9c2403009..8b51f071e 100755
--- a/src/include/ZMap/zmapStyle.h
+++ b/src/include/ZMap/zmapStyle.h
@@ -26,9 +26,9 @@
  * Description: Style and Style set handling functions.
  *
  * HISTORY:
- * Last edited: May 15 11:29 2009 (edgrif)
+ * Last edited: May 18 15:17 2009 (edgrif)
  * Created: Mon Feb 26 09:28:26 2007 (edgrif)
- * CVS info:   $Id: zmapStyle.h,v 1.38 2009-05-15 15:28:06 edgrif Exp $
+ * CVS info:   $Id: zmapStyle.h,v 1.39 2009-05-18 14:55:05 edgrif Exp $
  *-------------------------------------------------------------------
  */
 #ifndef ZMAP_STYLE_H
@@ -109,6 +109,9 @@
 /* Text properties */
 #define ZMAPSTYLE_PROPERTY_TEXT_FONT "text-font"
 
+/* Assembly path properties */
+#define ZMAPSTYLE_PROPERTY_ASSEMBLY_PATH_NON_COLOURS "non-assembly-colours"
+
 /* 
  * The following are a series of enums that define various properties of a style.
  * NOTE that it is imperative that each enum type has as it's first member
@@ -229,6 +232,7 @@ _(ZMAPSTYLE_COLOURTARGET_FRAME0, , "frame0", "Frame 1 colour ", "")          \
 _(ZMAPSTYLE_COLOURTARGET_FRAME1, , "frame1", "Frame 2 colour ", "")          \
 _(ZMAPSTYLE_COLOURTARGET_FRAME2, , "frame2", "Frame 3 colour ", "")          \
 _(ZMAPSTYLE_COLOURTARGET_CDS, , "cds", "Colour to apply to CDS ", "")  \
+_(ZMAPSTYLE_COLOURTARGET_NON_ASSEMBLY_PATH, , "non-assembly_path", "Colour to non-path sections of assembly ", "")  \
 _(ZMAPSTYLE_COLOURTARGET_STRAND, , "strand", "Colour to apply to Strand ", "")
 
 ZMAP_DEFINE_ENUM(ZMapStyleColourTarget, ZMAP_STYLE_COLOUR_TARGET_LIST) ;
diff --git a/src/zmapFeature/zmapFeatureTypes.c b/src/zmapFeature/zmapFeatureTypes.c
index ede790a28..282d20bbe 100755
--- a/src/zmapFeature/zmapFeatureTypes.c
+++ b/src/zmapFeature/zmapFeatureTypes.c
@@ -27,9 +27,9 @@
  *              
  * Exported functions: See ZMap/zmapFeature.h
  * HISTORY:
- * Last edited: Apr 28 14:24 2009 (edgrif)
+ * Last edited: May 18 13:11 2009 (edgrif)
  * Created: Tue Dec 14 13:15:11 2004 (edgrif)
- * CVS info:   $Id: zmapFeatureTypes.c,v 1.80 2009-04-28 14:29:49 edgrif Exp $
+ * CVS info:   $Id: zmapFeatureTypes.c,v 1.81 2009-05-18 14:55:05 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -1206,10 +1206,11 @@ GData *zMapStyleGetAllPredefined(void)
   curr = zMapStyleCreate(ZMAP_FIXED_STYLE_ASSEMBLY_PATH_NAME, 
 			 ZMAP_FIXED_STYLE_ASSEMBLY_PATH_TEXT) ;
   {
-    char *colours = "normal fill blue ; normal draw black ; selected fill red ; selected draw black" ;
+    char *colours = "normal fill blue ; normal border black ; selected fill red ; selected border black" ;
+    char *non_path_colours = "normal fill yellow ; normal border black ; selected fill red ; selected border black" ;
 
     g_object_set(G_OBJECT(curr),
-		 ZMAPSTYLE_PROPERTY_MODE,                 ZMAPSTYLE_MODE_BASIC,
+		 ZMAPSTYLE_PROPERTY_MODE,                 ZMAPSTYLE_MODE_ASSEMBLY_PATH,
 		 ZMAPSTYLE_PROPERTY_DISPLAYABLE,          TRUE,
 		 ZMAPSTYLE_PROPERTY_DISPLAY_MODE,         ZMAPSTYLE_COLDISPLAY_SHOW,
 		 ZMAPSTYLE_PROPERTY_WIDTH,                10.0,
@@ -1217,6 +1218,7 @@ GData *zMapStyleGetAllPredefined(void)
 		 ZMAPSTYLE_PROPERTY_DEFAULT_BUMP_MODE,    ZMAPBUMP_ALTERNATING,
 		 ZMAPSTYLE_PROPERTY_BUMP_FIXED,           TRUE,
 		 ZMAPSTYLE_PROPERTY_COLOURS,              colours,
+		 ZMAPSTYLE_PROPERTY_ASSEMBLY_PATH_NON_COLOURS, non_path_colours,
 		 NULL);
   }
   g_datalist_id_set_data(&style_list, curr->unique_id, curr);
diff --git a/src/zmapFeature/zmapStyle.c b/src/zmapFeature/zmapStyle.c
index 41532bbba..87df5a357 100755
--- a/src/zmapFeature/zmapStyle.c
+++ b/src/zmapFeature/zmapStyle.c
@@ -28,9 +28,9 @@
  *
  * Exported functions: See ZMap/zmapStyle.h
  * HISTORY:
- * Last edited: May  8 14:59 2009 (rds)
+ * Last edited: May 18 15:17 2009 (edgrif)
  * Created: Mon Feb 26 09:12:18 2007 (edgrif)
- * CVS info:   $Id: zmapStyle.c,v 1.32 2009-05-08 14:21:15 rds Exp $
+ * CVS info:   $Id: zmapStyle.c,v 1.33 2009-05-18 14:55:05 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -39,6 +39,20 @@
 #include <zmapStyle_P.h>
 
 
+/* 
+ * PLEASE READ THIS......
+ * 
+ * The g_object/paramspec stuff all needs redoing so that it's table driven
+ * otherwise we will all go mad.....it is way too error prone......
+ * 
+ * but it needs to be done carefully, we need the "set" flags to support
+ * inheritance....and they g_object copy/set/get code in glib all expects
+ * paramspecs etc so it's not straight forward...
+ * 
+ */
+
+
+
 
 enum
   {
@@ -107,6 +121,9 @@ enum
     STYLE_PROP_ALIGNMENT_NONCOLINEAR_COLOURS,
 
     STYLE_PROP_TRANSCRIPT_CDS_COLOURS,
+
+    STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS,
+
     STYLE_PROP_TEXT_FONT,
   };
 
@@ -645,6 +662,12 @@ gboolean zMapStyleIsPropertySet(ZMapFeatureTypeStyle style, char *property_name,
 
 	    break;
 	  }
+	case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+	  {
+	    is_set = isColourSet(style, pspec->param_id, property_subpart) ;
+
+	    break;
+	  }
 	default:
 	  {
 	    G_OBJECT_WARN_INVALID_PROPERTY_ID(style, pspec->param_id, pspec);
@@ -780,6 +803,7 @@ gboolean zMapStyleIsTrueFeature(ZMapFeatureTypeStyle style)
     case ZMAPSTYLE_MODE_ALIGNMENT:
     case ZMAPSTYLE_MODE_RAW_SEQUENCE:
     case ZMAPSTYLE_MODE_PEP_SEQUENCE:
+    case ZMAPSTYLE_MODE_ASSEMBLY_PATH:
       {
 	valid = TRUE ;
 	break ;
@@ -845,6 +869,7 @@ gboolean zMapStyleIsDrawable(ZMapFeatureTypeStyle style, GError **error)
 	case ZMAPSTYLE_MODE_BASIC:
 	case ZMAPSTYLE_MODE_TRANSCRIPT:
 	case ZMAPSTYLE_MODE_ALIGNMENT:
+	case ZMAPSTYLE_MODE_ASSEMBLY_PATH:
 	case ZMAPSTYLE_MODE_RAW_SEQUENCE:
 	case ZMAPSTYLE_MODE_PEP_SEQUENCE:
 	  {
@@ -902,6 +927,7 @@ gboolean zMapStyleIsDrawable(ZMapFeatureTypeStyle style, GError **error)
 	case ZMAPSTYLE_MODE_BASIC:
 	case ZMAPSTYLE_MODE_TRANSCRIPT:
 	case ZMAPSTYLE_MODE_ALIGNMENT:
+	case ZMAPSTYLE_MODE_ASSEMBLY_PATH:
 	  {
 	    if (!(style->colours.normal.fields_set.fill) && !(style->colours.normal.fields_set.border))
 	      {
@@ -1049,6 +1075,7 @@ gboolean zMapStyleMakeDrawable(ZMapFeatureTypeStyle style)
 
       switch (style->mode)
 	{
+	case ZMAPSTYLE_MODE_ASSEMBLY_PATH:
 	case ZMAPSTYLE_MODE_PEP_SEQUENCE:
 	case ZMAPSTYLE_MODE_RAW_SEQUENCE:
 	case ZMAPSTYLE_MODE_TEXT:
@@ -1203,6 +1230,9 @@ gboolean zMapStyleSetColours(ZMapFeatureTypeStyle style, ZMapStyleColourTarget t
     case ZMAPSTYLE_COLOURTARGET_CDS:
       full_colour = &(style->mode_data.transcript.CDS_colours) ;
       break ;
+    case ZMAPSTYLE_COLOURTARGET_NON_ASSEMBLY_PATH:
+      full_colour = &(style->mode_data.assembly_path.non_path_colours) ;
+      break ;
     case ZMAPSTYLE_COLOURTARGET_STRAND:
       full_colour = &(style->strand_rev_colours);
       break;
@@ -1265,6 +1295,9 @@ gboolean zMapStyleGetColours(ZMapFeatureTypeStyle style, ZMapStyleColourTarget t
     case ZMAPSTYLE_COLOURTARGET_CDS:
       full_colour = &(style->mode_data.transcript.CDS_colours) ;
       break ;
+    case ZMAPSTYLE_COLOURTARGET_NON_ASSEMBLY_PATH:
+      full_colour = &(style->mode_data.assembly_path.non_path_colours) ;
+      break ;
     case ZMAPSTYLE_COLOURTARGET_STRAND:
       full_colour = &(style->strand_rev_colours) ;
       break ;
@@ -1997,6 +2030,10 @@ static void set_implied_mode(ZMapFeatureTypeStyle style, guint param_id)
       if(style->implied_mode == ZMAPSTYLE_MODE_INVALID)
 	style->implied_mode = ZMAPSTYLE_MODE_TRANSCRIPT;
       break;
+    case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+      if(style->implied_mode == ZMAPSTYLE_MODE_INVALID)
+	style->implied_mode = ZMAPSTYLE_MODE_ASSEMBLY_PATH;
+      break;
     default:
       break;
     }
@@ -2371,6 +2408,13 @@ static void zmap_feature_type_style_class_init(ZMapFeatureTypeStyleClass style_c
 						     "Colour used to CDS section of a transcript.",
 						      "", ZMAP_PARAM_STATIC_RW));
 
+  /* Assembly path colours. */
+  g_object_class_install_property(gobject_class,
+				  STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS,
+				  g_param_spec_string(ZMAPSTYLE_PROPERTY_ASSEMBLY_PATH_NON_COLOURS, "non-path colours",
+						     "Colour used for unused part of an assembly path sequence.",
+						      "", ZMAP_PARAM_STATIC_RW));
+
   /* Text Font. */
   g_object_class_install_property(gobject_class,
 				  STYLE_PROP_TEXT_FONT,
@@ -2934,6 +2978,38 @@ static void zmap_feature_type_style_set_property(GObject *gobject,
       }	/* case STYLE_PROP_ALIGNMENT_PARSE_GAPS..STYLE_PROP_ALIGNMENT_NONCOLINEAR_COLOURS */
 
 
+    case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+      {
+	/* Handle all assembly path specific options. */
+
+	if (style->implied_mode != ZMAPSTYLE_MODE_ASSEMBLY_PATH)
+	  {
+	    if (!copy_style)
+	      {
+		badPropertyForMode(style, ZMAPSTYLE_MODE_ASSEMBLY_PATH, "set", pspec) ;
+		result = FALSE ;
+	      }
+	  }
+	else
+	  {
+	    switch(param_id)
+	      {
+	      case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+		result = parseColours(style, copy_style, param_id, (GValue *)value) ;
+
+		break ;
+
+	      default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, param_id, pspec);
+		result = FALSE ;
+		
+		break;
+	      }
+	  }
+
+	break;
+      }
+
     case STYLE_PROP_TRANSCRIPT_CDS_COLOURS:
       {
 	/* Handle all transcript specific options. */
@@ -3633,6 +3709,52 @@ static void zmap_feature_type_style_get_property(GObject *gobject,
 	  }
 	break;
       }
+
+      /* assembly path mode_data access */
+    case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+      {
+	/* Handle all assembly path specific options. */
+
+	if (style->implied_mode != ZMAPSTYLE_MODE_ASSEMBLY_PATH)
+	  {
+	    if (!copy)
+	      {
+		badPropertyForMode(style, ZMAPSTYLE_MODE_ASSEMBLY_PATH, "get", pspec) ;
+		result = FALSE ;
+	      }
+	  }
+	else
+	  {
+	    /* We allocate memory here to hold the colour string, it's g_object_get caller's 
+	     * responsibility to g_free the string... */
+	    ZMapStyleFullColour this_colour = NULL ;
+	    GString *colour_string = NULL ;
+	    
+	    colour_string = g_string_sized_new(500) ;
+	    
+	    switch(param_id)
+	      {
+	      case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+		this_colour = &(style->mode_data.assembly_path.non_path_colours) ;
+		break;
+	      default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, param_id, pspec);
+		break;
+	      }
+	    
+	    formatColours(colour_string, "normal", &(this_colour->normal)) ;
+	    formatColours(colour_string, "selected", &(this_colour->selected)) ;
+	    
+	    if (colour_string->len)
+	      g_value_set_string(value, g_string_free(colour_string, FALSE)) ;
+	    else
+	      {
+		g_string_free(colour_string, TRUE) ;
+		result = FALSE ;
+	      }
+	  }
+	break;
+      }
     case STYLE_PROP_TEXT_FONT:
       {
 	/* Handle all text specific options. */
@@ -3810,6 +3932,11 @@ static gboolean parseColours(ZMapFeatureTypeStyle style, ZMapFeatureTypeStyle co
 		  if (copy_style)
 		    copy_full_colour = &(copy_style->mode_data.transcript.CDS_colours) ;
 		  break;
+		case STYLE_PROP_ASSEMBLY_PATH_NON_COLOURS:
+		  full_colour = &(style->mode_data.assembly_path.non_path_colours) ;
+		  if (copy_style)
+		    copy_full_colour = &(copy_style->mode_data.assembly_path.non_path_colours) ;
+		  break;
 		default:
 		  zMapAssertNotReached() ;
 		  break;
diff --git a/src/zmapFeature/zmapStyleUtils.c b/src/zmapFeature/zmapStyleUtils.c
index cfb42c111..16d94e18d 100755
--- a/src/zmapFeature/zmapStyleUtils.c
+++ b/src/zmapFeature/zmapStyleUtils.c
@@ -28,9 +28,9 @@
  * Exported functions: See ZMap/zmapStyle.h
  *              
  * HISTORY:
- * Last edited: Apr 27 14:10 2009 (edgrif)
+ * Last edited: May 18 14:53 2009 (edgrif)
  * Created: Thu Oct 30 10:24:35 2008 (edgrif)
- * CVS info:   $Id: zmapStyleUtils.c,v 1.4 2009-04-28 14:29:49 edgrif Exp $
+ * CVS info:   $Id: zmapStyleUtils.c,v 1.5 2009-05-18 14:55:05 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -491,6 +491,15 @@ void zMapStylePrint(ZMapIOOut dest, ZMapFeatureTypeStyle style, char *prefix, gb
 	indent = "\t\t" ;
 	PRINTFULLCOLOUR(dest, mode_data.transcript.CDS_colours, "CDS") ;
 
+	break ;
+      }
+    case ZMAPSTYLE_MODE_ASSEMBLY_PATH:
+      {
+	zMapOutWriteFormat(dest, "%sAssembly_path Mode -\n", indent) ;
+
+	indent = "\t\t" ;
+	PRINTFULLCOLOUR(dest, mode_data.assembly_path.non_path_colours, "Non-assembly") ;
+
 	break ;
       }
     default:
diff --git a/src/zmapFeature/zmapStyle_I.h b/src/zmapFeature/zmapStyle_I.h
index f44e40a88..f95d9f0a7 100755
--- a/src/zmapFeature/zmapStyle_I.h
+++ b/src/zmapFeature/zmapStyle_I.h
@@ -26,9 +26,9 @@
  * Description: Private header for style.
  *
  * HISTORY:
- * Last edited: Apr 27 14:30 2009 (edgrif)
+ * Last edited: May 18 14:48 2009 (edgrif)
  * Created: Mon Feb 26 09:13:30 2007 (edgrif)
- * CVS info:   $Id: zmapStyle_I.h,v 1.10 2009-04-28 14:29:49 edgrif Exp $
+ * CVS info:   $Id: zmapStyle_I.h,v 1.11 2009-05-18 14:55:05 edgrif Exp $
  *-------------------------------------------------------------------
  */
 
@@ -253,6 +253,23 @@ typedef struct
 } ZMapStyleTranscriptStruct, *ZMapStyleTranscript ;
 
 
+/*! @struct ZMapStyleAssemblyPath zmapStyle_P.h
+ *  @brief AssemblyPath feature
+ *
+ * Draws an assembly path as a series of boxes placed alternately to form a tiling path. */
+typedef struct
+{
+  struct
+  {
+    unsigned int unused : 1 ;
+  } fields_set ;					    /*!< Fields set.  */
+
+
+  ZMapStyleFullColourStruct non_path_colours ;		    /*!< Colour for non-assembly part of feature. */
+
+} ZMapStyleAssemblyPathStruct, *ZMapStyleAssemblyPath ;
+
+
 /* THIS STRUCT NEEDS A MAGIC PTR, ONCE IT HAS ONE THEN ADD A TEST TO zmapStyleIsValid() FOR IT.... */
 
 /*! @struct ZMapFeatureTypeStyle zmapStyle_P.h
@@ -414,6 +431,7 @@ typedef struct _zmapFeatureTypeStyleStruct
     ZMapStyleSequenceStruct sequence ;
     ZMapStyleTextStruct text ;
     ZMapStyleTranscriptStruct transcript ;
+    ZMapStyleAssemblyPathStruct assembly_path ;
     ZMapStyleAlignmentStruct alignment ;
     ZMapStyleGraphStruct graph ;
     ZMapStyleGlyphStruct glyph ;
-- 
GitLab