diff --git a/src/zmapFeature/zmapStyleUtils.c b/src/zmapFeature/zmapStyleUtils.c new file mode 100755 index 0000000000000000000000000000000000000000..909fc14b2d9daffb1c5b02795fdd735d93f16c84 --- /dev/null +++ b/src/zmapFeature/zmapStyleUtils.c @@ -0,0 +1,241 @@ +/* File: zmapStyleUtils.c + * Author: Ed Griffiths (edgrif@sanger.ac.uk) + * Copyright (c) 2008: Genome Research Ltd. + *------------------------------------------------------------------- + * ZMap is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * or see the on-line version at http://www.gnu.org/copyleft/gpl.txt + *------------------------------------------------------------------- + * This file is part of the ZMap genome database package + * originally written by: + * + * Ed Griffiths (Sanger Institute, UK) edgrif@sanger.ac.uk, + * Roy Storey (Sanger Institute, UK) rds@sanger.ac.uk + * + * Description: + * + * Exported functions: See ZMap/zmapStyle.h + * + * HISTORY: + * Last edited: Nov 13 09:37 2008 (edgrif) + * Created: Thu Oct 30 10:24:35 2008 (edgrif) + * CVS info: $Id: zmapStyleUtils.c,v 1.1 2008-11-13 10:02:52 edgrif Exp $ + *------------------------------------------------------------------- + */ + +#include <string.h> +#include <ZMap/zmapUtils.h> +#include <ZMap/zmapEnum.h> +#include <ZMap/zmapConfigLoader.h> +#include <zmapStyle_P.h> + + + +/*! @addtogroup zmapstyles + * @{ + * */ + + +/* Enum -> String functions, these functions convert the enums to strings given by the XXX_LIST macros. + * + * The functions all have the form + * const char *zMapStyleXXXXMode2Str(ZMapStyleXXXXXMode mode) + * { + * code... + * } + * + * */ +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2Mode, ZMapStyleMode, ZMAPSTYLE_MODE_INVALID, ZMAP_STYLE_MODE_LIST) ; +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2ColDisplayState, ZMapStyleColumnDisplayState, ZMAPSTYLE_COLDISPLAY_INVALID, ZMAP_STYLE_COLUMN_DISPLAY_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr23FrameMode, ZMapStyle3FrameMode, ZMAPSTYLE_3_FRAME_INVALID, ZMAP_STYLE_3_FRAME_LIST) ; +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2GraphMode, ZMapStyleGraphMode, ZMAPSTYLE_GRAPH_INVALID, ZMAP_STYLE_GRAPH_MODE_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2GlyphMode, ZMapStyleGlyphMode, ZMAPSTYLE_GLYPH_INVALID, ZMAP_STYLE_GLYPH_MODE_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2DrawContext, ZMapStyleDrawContext, ZMAPSTYLE_DRAW_INVALID, ZMAP_STYLE_DRAW_CONTEXT_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2ColourType, ZMapStyleColourType, ZMAPSTYLE_COLOURTYPE_INVALID, ZMAP_STYLE_COLOUR_TYPE_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2ColourTarget, ZMapStyleColourTarget, ZMAPSTYLE_COLOURTARGET_INVALID, ZMAP_STYLE_COLOUR_TARGET_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2ScoreMode, ZMapStyleScoreMode, ZMAPSCORE_INVALID, ZMAP_STYLE_SCORE_MODE_LIST); +ZMAP_ENUM_FROM_STRING_FUNC(zMapStyleStr2OverlapMode, ZMapStyleOverlapMode, ZMAPOVERLAP_INVALID, ZMAP_STYLE_OVERLAP_MODE_LIST); + + + + +/* Enum -> String functions, these functions convert the enums _directly_ to strings. + * + * The functions all have the form + * const char *zMapStyleXXXXMode2ExactStr(ZMapStyleXXXXXMode mode) + * { + * code... + * } + * + * */ +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zMapStyleMode2ExactStr, ZMapStyleMode, ZMAP_STYLE_MODE_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleColDisplayState2ExactStr, ZMapStyleColumnDisplayState, ZMAP_STYLE_COLUMN_DISPLAY_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyle3FrameMode2ExactStr, ZMapStyle3FrameMode, ZMAP_STYLE_3_FRAME_LIST) ; +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleGraphMode2ExactStr, ZMapStyleGraphMode, ZMAP_STYLE_GRAPH_MODE_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleGlyphMode2ExactStr, ZMapStyleGlyphMode, ZMAP_STYLE_GLYPH_MODE_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleDrawContext2ExactStr, ZMapStyleDrawContext, ZMAP_STYLE_DRAW_CONTEXT_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleColourType2ExactStr, ZMapStyleColourType, ZMAP_STYLE_COLOUR_TYPE_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleColourTarget2ExactStr, ZMapStyleColourTarget, ZMAP_STYLE_COLOUR_TARGET_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleScoreMode2ExactStr, ZMapStyleScoreMode, ZMAP_STYLE_SCORE_MODE_LIST); +ZMAP_ENUM_AS_EXACT_STRING_FUNC(zmapStyleOverlapMode2ExactStr, ZMapStyleOverlapMode, ZMAP_STYLE_OVERLAP_MODE_LIST); + + + + + + + + +GData *zMapFeatureTypeGetFromFile(char *styles_list, char *styles_file_name) +{ + GData *styles = NULL ; + ZMapConfigIniContext context ; + GList *settings_list = NULL, *free_this_list = NULL; + + + if ((context = zMapConfigIniContextProvideNamed(ZMAPSTANZA_STYLE_CONFIG))) + { + zMapConfigIniContextIncludeBuffer(context, NULL) ; + + settings_list = zMapConfigIniContextGetNamed(context, ZMAPSTANZA_STYLE_CONFIG) ; + + zMapConfigIniContextDestroy(context) ; + context = NULL; + } + + if (settings_list) + { + free_this_list = settings_list ; + + g_datalist_init(&styles) ; + + do + { + ZMapKeyValue curr_config_style ; + ZMapFeatureTypeStyle new_style ; + GParameter params[100] ; /* TMP....make dynamic.... */ + guint num_params ; + GParameter *curr_param ; + + /* Reset params memory.... */ + memset(¶ms, 0, sizeof(params)) ; + curr_param = params ; + num_params = 0 ; + curr_config_style = (ZMapKeyValue)(settings_list->data) ; + + + /* The first item is special, the "name" field is the name of the style and + * is derived from the name of the stanza and so must be treated specially. */ + zMapAssert(curr_config_style->name && *(curr_config_style->name)) ; + g_value_init(&(curr_param->value), G_TYPE_STRING) ; + curr_param->name = curr_config_style->name ; + g_value_set_string(&(curr_param->value), curr_config_style->data.str) ; + num_params++ ; + curr_param++ ; + curr_config_style++ ; + + while (curr_config_style->name) + { + if (curr_config_style->has_value) + { + curr_param->name = curr_config_style->name ; + + switch (curr_config_style->type) + { + case ZMAPCONF_STR_ARRAY: + { + if (curr_config_style->conv_type == ZMAPCONV_STR2COLOUR) + { + g_value_init(&(curr_param->value), G_TYPE_STRING) ; + g_value_set_string(&(curr_param->value), curr_config_style->data.str) ; + } + break ; + } + case ZMAPCONF_STR: + { + if (curr_config_style->conv_type == ZMAPCONV_STR2ENUM) + { + int enum_value ; + + enum_value = (curr_config_style->conv_func.str2enum)(curr_config_style->data.str) ; + + g_value_init(&(curr_param->value), G_TYPE_INT) ; + g_value_set_int(&(curr_param->value), enum_value) ; + } + else + { + g_value_init(&(curr_param->value), G_TYPE_STRING) ; + g_value_set_string(&(curr_param->value), curr_config_style->data.str) ; + } + + break ; + } + case ZMAPCONF_DOUBLE: + { + g_value_init(&(curr_param->value), G_TYPE_DOUBLE) ; + g_value_set_double(&(curr_param->value), curr_config_style->data.d) ; + break ; + } + case ZMAPCONF_INT: + { + g_value_init(&(curr_param->value), G_TYPE_INT) ; + g_value_set_int(&(curr_param->value), curr_config_style->data.i) ; + break ; + } + case ZMAPCONF_BOOLEAN: + { + g_value_init(&(curr_param->value), G_TYPE_BOOLEAN) ; + g_value_set_boolean(&(curr_param->value), curr_config_style->data.b) ; + break ; + } + default: + { + zMapAssertNotReached() ; + break ; + } + } + num_params++ ; + curr_param++ ; + } + curr_config_style++ ; + } + + + if ((new_style = zMapStyleCreateV(num_params, params))) + { + if (!zMapStyleSetAdd(&styles, new_style)) + { + /* Free style, report error and move on. */ + zMapStyleDestroy(new_style) ; + + zMapLogWarning("Styles file \"%s\", stanza %s could not be added.", + styles_file_name, curr_config_style->name) ; + } + } + + } while((settings_list = g_list_next(settings_list))); + + } + + zMapConfigStylesFreeList(free_this_list) ; + + return styles ; +} + + + + + + +/*! @} end of zmapstyles docs. */