Mercurial > hg > camir-aes2014
diff toolboxes/graph_visualisation/include/graphviz/gvcjob.h @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/graph_visualisation/include/graphviz/gvcjob.h Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,374 @@ +/* $Id: gvcjob.h,v 1.82 2009/07/08 15:14:20 ellson Exp $ $Revision: 1.82 $ */ +/* vim:set shiftwidth=4 ts=8: */ + +/********************************************************** +* This software is part of the graphviz package * +* http://www.graphviz.org/ * +* * +* Copyright (c) 1994-2004 AT&T Corp. * +* and is licensed under the * +* Common Public License, Version 1.0 * +* by AT&T Corp. * +* * +* Information and Software Systems Research * +* AT&T Research, Florham Park NJ * +**********************************************************/ + +/* Common header used by both clients and plugins */ + +#ifndef GVCJOB_H +#define GVCJOB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "gvcommon.h" +#include "color.h" + +#define ARRAY_SIZE(A) (sizeof(A)/sizeof(A[0])) + + typedef struct gvdevice_engine_s gvdevice_engine_t; + typedef struct gvformatter_engine_s gvformatter_engine_t; + typedef struct gvrender_engine_s gvrender_engine_t; + typedef struct gvlayout_engine_s gvlayout_engine_t; + typedef struct gvtextlayout_engine_s gvtextlayout_engine_t; + typedef struct gvloadimage_engine_s gvloadimage_engine_t; + + typedef enum { PEN_NONE, PEN_DASHED, PEN_DOTTED, PEN_SOLID } pen_type; + typedef enum { FILL_NONE, FILL_SOLID } fill_type; + typedef enum { FONT_REGULAR, FONT_BOLD, FONT_ITALIC } font_type; + typedef enum { LABEL_PLAIN, LABEL_HTML } label_type; + +#define PENWIDTH_NORMAL 1. +#define PENWIDTH_BOLD 2. + typedef enum { GVATTR_STRING, GVATTR_BOOL, GVATTR_COLOR } gvattr_t; + +/* The -T output formats listed below are examples only, they are not definitive or inclusive, + other outputs may use the flags now, or in the future + + Default emit order is breadth first graph walk order + EMIT_SORTED emits nodes before edges + EMIT_COLORS emits colors before nodes or edge -Tfig + EMIT_CLUSTERS_LAST emits cluster after nodes and edges + EMIT_PREORDER emit in preorder traversal ??? + EMIT_EDGE_SORTED emits edges before nodes + + GVDEVICE_DOES_PAGES provides pagination support -Tps + GVDEVICE_DOES_LAYERS provides support for layers -Tps + GVDEVICE_EVENTS supports mouse events -Tgtk, -Txlib + GVDEVICE_DOES_TRUECOLOR supports alpha channel -Tpng, -Tgtk, -Txlib + GVDEVICE_BINARY_FORMAT Suppresses \r\n substitution for linends + GVDEVICE_COMPRESSED_FORMAT controls libz compression + GVDEVICE_NO_WRITER used when gvdevice is not used because device uses its own writer, -Tming, devil outputs (FIXME seems to overlap OUTPUT_NOT_REQUIRED) + + GVRENDER_Y_GOES_DOWN device origin top left, y goes down, otherwise + device origin lower left, y goes up + GVRENDER_DOES_TRANSFORM device uses scale, translate, rotate to do its own + coordinate transformations, otherwise coordinates + are pre-transformed + GVRENDER_DOES_ARROWS renderer has its own idea of arrow shapes (deprecated) + GVRENDER_DOES_LABELS basically, maps don't need labels + GVRENDER_DOES_MAPS renderer encodes mapping information for mouse events -Tcmapx -Tsvg + GVRENDER_DOES_MAP_RECTANGLE supports a 2 coord rectngle optimization + GVRENDER_DOES_MAP_CIRCLE supports a 1 coord + radius circle optimization + GVRENDER_DOES_MAP_POLYGON supports polygons (basically, -Tsvg uses anchors, so doesn't need to support any map shapes) + GVRENDER_DOES_MAP_ELLIPSE supports a 2 coord ellipse optimization + GVRENDER_DOES_MAP_BSPLINE supports mapping of splines + GVRENDER_DOES_TOOLTIPS can represent tooltip info -Tcmapx, -Tsvg + GVRENDER_DOES_TARGETS can represent target info (open link in a new tab or window) + GVRENDER_DOES_Z render support 2.5D representation -Tvrml + GVRENDER_NO_WHITE_BG don't paint white background, assumes white paper -Tps + LAYOUT_NOT_REQUIRED don't perform layout -Tcanon + OUTPUT_NOT_REQUIRED don't use gvdevice for output (basically when agwrite() used instead) -Tcanon, -Txdot + */ + + +#define EMIT_SORTED (1<<0) +#define EMIT_COLORS (1<<1) +#define EMIT_CLUSTERS_LAST (1<<2) +#define EMIT_PREORDER (1<<3) +#define EMIT_EDGE_SORTED (1<<4) +#define GVDEVICE_DOES_PAGES (1<<5) +#define GVDEVICE_DOES_LAYERS (1<<6) +#define GVDEVICE_EVENTS (1<<7) +#define GVDEVICE_DOES_TRUECOLOR (1<<8) +#define GVDEVICE_BINARY_FORMAT (1<<9) +#define GVDEVICE_COMPRESSED_FORMAT (1<<10) +#define GVDEVICE_NO_WRITER (1<<11) +#define GVRENDER_Y_GOES_DOWN (1<<12) +#define GVRENDER_DOES_TRANSFORM (1<<13) +#define GVRENDER_DOES_ARROWS (1<<14) +#define GVRENDER_DOES_LABELS (1<<15) +#define GVRENDER_DOES_MAPS (1<<16) +#define GVRENDER_DOES_MAP_RECTANGLE (1<<17) +#define GVRENDER_DOES_MAP_CIRCLE (1<<18) +#define GVRENDER_DOES_MAP_POLYGON (1<<19) +#define GVRENDER_DOES_MAP_ELLIPSE (1<<20) +#define GVRENDER_DOES_MAP_BSPLINE (1<<21) +#define GVRENDER_DOES_TOOLTIPS (1<<22) +#define GVRENDER_DOES_TARGETS (1<<23) +#define GVRENDER_DOES_Z (1<<24) +#define GVRENDER_NO_WHITE_BG (1<<25) +#define LAYOUT_NOT_REQUIRED (1<<26) +#define OUTPUT_NOT_REQUIRED (1<<27) + + typedef struct { + int flags; + double default_pad; /* graph units */ + char **knowncolors; + int sz_knowncolors; + color_type_t color_type; + } gvrender_features_t; + + typedef struct { + int flags; + pointf default_margin; /* left/right, top/bottom - points */ + pointf default_pagesize;/* default page width, height - points */ + pointf default_dpi; + } gvdevice_features_t; + +#define LAYOUT_USES_RANKDIR (1<<0) + + typedef struct gvplugin_active_device_s { + gvdevice_engine_t *engine; + int id; + gvdevice_features_t *features; + const char *type; + } gvplugin_active_device_t; + + typedef struct gvplugin_active_render_s { + gvrender_engine_t *engine; + int id; + gvrender_features_t *features; + const char *type; + } gvplugin_active_render_t; + + typedef struct gvplugin_active_loadimage_t { + gvloadimage_engine_t *engine; + int id; + const char *type; + } gvplugin_active_loadimage_t; + + typedef struct gv_argvlist_s { + char **argv; + int argc; + int alloc; + } gv_argvlist_t; + + typedef struct gvdevice_callbacks_s { + void (*refresh) (GVJ_t * job); + void (*button_press) (GVJ_t * job, int button, pointf pointer); + void (*button_release) (GVJ_t * job, int button, pointf pointer); + void (*motion) (GVJ_t * job, pointf pointer); + void (*modify) (GVJ_t * job, const char *name, const char *value); + void (*del) (GVJ_t * job); /* can't use "delete" 'cos C++ stole it */ + void (*read) (GVJ_t * job, const char *filename, const char *layout); + void (*layout) (GVJ_t * job, const char *layout); + void (*render) (GVJ_t * job, const char *format, const char *filename); + } gvdevice_callbacks_t; + + typedef int (*gvevent_key_callback_t) (GVJ_t * job); + + typedef struct gvevent_key_binding_s { + char *keystring; + gvevent_key_callback_t callback; + } gvevent_key_binding_t; + + typedef enum {MAP_RECTANGLE, MAP_CIRCLE, MAP_POLYGON, } map_shape_t; + + typedef enum {ROOTGRAPH_OBJTYPE, CLUSTER_OBJTYPE, NODE_OBJTYPE, EDGE_OBJTYPE} obj_type; + + /* See comment in gvrender_core_dot.c */ + typedef enum { + EMIT_GDRAW, EMIT_CDRAW, EMIT_TDRAW, EMIT_HDRAW, + EMIT_GLABEL, EMIT_CLABEL, EMIT_TLABEL, EMIT_HLABEL, + EMIT_NDRAW, EMIT_EDRAW, EMIT_NLABEL, EMIT_ELABEL, + } emit_state_t; + + typedef struct obj_state_s obj_state_t; + + struct obj_state_s { + obj_state_t *parent; + + obj_type type; + union { + graph_t *g; + graph_t *sg; + node_t *n; + edge_t *e; + } u; + + emit_state_t emit_state; + + gvcolor_t pencolor, fillcolor; + pen_type pen; + fill_type fill; + double penwidth; + char **rawstyle; + + double z, tail_z, head_z; /* z depths for 2.5D renderers such as vrml */ + + /* fully substituted text strings */ + char *label; + char *taillabel; + char *headlabel; + + char *url; /* if GVRENDER_DOES_MAPS */ + char *id; + char *labelurl; + char *tailurl; + char *headurl; + + char *tooltip; /* if GVRENDER_DOES_TOOLTIPS */ + char *labeltooltip; + char *tailtooltip; + char *headtooltip; + + char *target; /* if GVRENDER_DOES_TARGETS */ + char *labeltarget; + char *tailtarget; + char *headtarget; + + int explicit_tooltip:1; + int explicit_tailtooltip:1; + int explicit_headtooltip:1; + int explicit_labeltooltip:1; + int explicit_tailtarget:1; + int explicit_headtarget:1; + int explicit_edgetarget:1; + int explicit_tailurl:1; + int explicit_headurl:1; + + /* primary mapped region - node shape, edge labels */ + map_shape_t url_map_shape; + int url_map_n; /* number of points for url map if GVRENDER_DOES_MAPS */ + pointf *url_map_p; + + /* additonal mapped regions for edges */ + int url_bsplinemap_poly_n; /* number of polygons in url bspline map + if GVRENDER_DOES_MAPS && GVRENDER_DOES_MAP_BSPLINES */ + int *url_bsplinemap_n; /* array of url_bsplinemap_poly_n ints + of number of points in each polygon */ + pointf *url_bsplinemap_p; /* all the polygon points */ + + int tailendurl_map_n; /* tail end intersection with node */ + pointf *tailendurl_map_p; + + int headendurl_map_n; /* head end intersection with node */ + pointf *headendurl_map_p; + }; + +/* Note on units: + * points - a physical distance (1/72 inch) unaffected by zoom or dpi. + * graph units - related to physical distance by zoom. Equals points at zoom=1 + * device units - related to physical distance in points by dpi/72 + */ + + struct GVJ_s { + GVC_t *gvc; /* parent gvc */ + GVJ_t *next; /* linked list of jobs */ + GVJ_t *next_active; /* linked list of active jobs (e.g. multiple windows) */ + + GVCOMMON_t *common; + + obj_state_t *obj; /* objects can be nested (at least clusters can) + so keep object state on a stack */ + char *input_filename; + int graph_index; + + const char *layout_type; + + const char *output_filename; + FILE *output_file; + char *output_data; + unsigned int output_data_allocated; + unsigned int output_data_position; + + const char *output_langname; + int output_lang; + + gvplugin_active_render_t render; + gvplugin_active_device_t device; + gvplugin_active_loadimage_t loadimage; + gvdevice_callbacks_t *callbacks; + pointf device_dpi; + boolean device_sets_dpi; + + void *display; + int screen; + + void *context; /* gd or cairo surface */ + boolean external_context; /* context belongs to caller */ + char *imagedata; /* location of imagedata */ + + int flags; /* emit_graph flags */ + + int numLayers; /* number of layers */ + int layerNum; /* current layer - 1 based*/ + + point pagesArraySize; /* 2D size of page array */ + point pagesArrayFirst;/* 2D starting corner in */ + point pagesArrayMajor;/* 2D major increment */ + point pagesArrayMinor;/* 2D minor increment */ + point pagesArrayElem; /* 2D coord of current page - 0,0 based */ + int numPages; /* number of pages */ + + boxf bb; /* graph bb with padding - graph units */ + pointf pad; /* padding around bb - graph units */ + boxf clip; /* clip region in graph units */ + boxf pageBox; /* current page in graph units */ + pointf pageSize; /* page size in graph units */ + pointf focus; /* viewport focus - graph units */ + + double zoom; /* viewport zoom factor (points per graph unit) */ + int rotation; /* viewport rotation (degrees) 0=portrait, 90=landscape */ + + pointf view; /* viewport size - points */ + boxf canvasBox; /* viewport area - points */ + pointf margin; /* job-specific margin - points */ + + pointf dpi; /* device resolution device-units-per-inch */ + + unsigned int width; /* device width - device units */ + unsigned int height; /* device height - device units */ + box pageBoundingBox;/* rotated boundingBox - device units */ + box boundingBox; /* cumulative boundingBox over all pages - device units */ + + pointf scale; /* composite device to graph units (zoom and dpi) */ + pointf translation; /* composite translation */ + pointf devscale; /* composite device to points: dpi, y_goes_down */ + + boolean fit_mode, + needs_refresh, + click, + has_grown, + has_been_rendered; + + unsigned char button; /* active button */ + pointf pointer; /* pointer position in device units */ + pointf oldpointer; /* old pointer position in device units */ + + void *current_obj; /* graph object that pointer is in currently */ + + void *selected_obj; /* graph object that has been selected */ + /* (e.g. button 1 clicked on current obj) */ + char *active_tooltip; /* tooltip of active object - or NULL */ + char *selected_href; /* href of selected object - or NULL */ + gv_argvlist_t selected_obj_type_name; /* (e.g. "edge" "node3" "e" "->" "node5" "") */ + gv_argvlist_t selected_obj_attributes; /* attribute triplets: name, value, type */ + /* e.g. "color", "red", GVATTR_COLOR, + "style", "filled", GVATTR_BOOL, */ + + void *window; /* display-specific data for gvrender plugin */ + + /* keybindings for keyboard events */ + gvevent_key_binding_t *keybindings; + int numkeys; + void *keycodes; + }; + +#ifdef __cplusplus +} +#endif +#endif /* GVCJOB_H */