#ifndef XCDDRAW_H #define XCDDRAW_H #include "lex.h" #include "global.h" #include typedef enum draw_kind { NONE, CONS_VERTEX, ALT_VERTEX, REP_VERTEX,TERM_VERTEX, EXT_VERTEX, PARAM_VERTEX, REQ_EDGE, OPT_EDGE, ALT_EDGE, REQ_C_EDGE, OPT_C_EDGE, REQ_R_EDGE, OPT_R_EDGE, INH_EDGE, PAR_EDGE, PAR_INST_EDGE } draw_kind; typedef enum rwflag_t { READONLY, READWRITE }; typedef enum primary_flag_t { PRIMARY, /* draw with * */ PRIMARY_OF, /* has nonprimary ones in its family */ NONPRIMARY, UNCLASSICFIED, UNKNOWN }; typedef enum selectflag_t { SELECT_EDGE_START_POINT, SELECT_EDGE_END_POINT, SELECT_EDGE_INNER_POINT, SELECT_EDGE_LABEL, SELECT_EDGE, SELECT_VERTEX_NAME, SELECT_VERTEX, NOT_SELECTED }; extern char message[]; extern void xm_print_message(char *m); extern int moving_flag; extern Widget draw_area; extern Pixmap drawing_pixmap; extern Widget xcddraw_helplabel; extern Widget xcddraw_filelabelcontent; extern Widget cddraw_framework; extern int pix_hoffset, pix_voffset, view_width, view_height, sw_hoffset, sw_voffset; extern Widget draw_vsb,draw_hsb; extern XtAppContext app; extern GC zoom_gc; extern GC xorgc; extern GC class_gc; extern GC label_gc; extern GC p_v_gc; extern GC up_v_gc; extern GC par_p_v_gc; extern GC par_up_v_gc; extern GC reversed_class_gc; extern GC reversed_label_gc; extern GC reversed_p_v_gc; extern GC reversed_up_v_gc; extern GC re_gc; extern GC oe_gc; extern GC ae_bgc; extern GC ae_fgc; extern GC ie_bgc; extern GC ie_fgc; extern GC pe_gc; extern GC pie_gc; extern GC trash_gc; extern GC xor_class_gc; extern GC xor_label_gc; extern GC xor_p_v_gc; extern GC xor_up_v_gc; extern GC xor_par_p_v_gc; extern GC xor_par_up_v_gc; extern GC xor_re_gc; extern GC xor_oe_gc; extern GC xor_ae_bgc; extern GC xor_ae_fgc; extern GC xor_ie_bgc; extern GC xor_ie_fgc; extern GC xor_pe_gc; extern GC xor_pie_gc; extern XFontStruct *class_font; extern XFontStruct *label_font; extern int draw_area_width; extern int draw_area_height; extern int box_height; extern int box_width; #include "obj-store.h" extern GraphicsObject *selected_object; extern VertexObject *drawing_vertex; extern EdgeObject *drawing_edge; typedef struct drawing_choices_t { int cv; /* construction vertex */ int av; /* alternation vertex */ int rv; /* repetition vertex */ int tv; /* terminal vertex */ int ev; /* external vertex (C type, external class type)*/ int pv; /* parameter class */ int re; /* reqiured edge (construction and repetition) */ int oe; /* optional edge (construiction and repetition */ int ae; /* alternation edge */ int ie; /* inheritance edge */ int pe; /* parameter edge */ int pie; /* parameter class instantiation edge */ int trash; int sel; } drawing_choices_t; extern drawing_choices_t drawing_choices; typedef struct graphics_data { int start_x, start_y, last_x, last_y; int next_pos; GC gc; GC xorgc; int background, foreground; drawing_choices_t *choice; enum draw_kind last_action; } graphics_data; typedef struct control_data { drawing_choices_t *d_choices; int *cur_value; pixmap_data *p_data; pixmap_data *all_p_data; Widget *choices; } control_data; #define max(a,b) ((int)(a)>(int)(b)?(int)(a):(int)(b)) #define min(a,b) ((int)(a)<(int)(b)?(int)(a):(int)(b)) #define abs(a) ((int)(a)<0?(int)(-(a)):(int)(a)) class ObjectStore; class VertexStore; extern VertexStore *vertex_store; extern ObjectStore *consedge_store; extern ObjectStore *repedge_store; extern ObjectStore *altedge_store; extern ObjectStore *inhedge_store; extern ObjectStore *paredge_store; extern ObjectStore *parinstedge_store; extern void press_draw(Widget, graphics_data*,XEvent*); extern void track_draw(Widget, graphics_data*,XEvent*); void move_objects(Widget w,graphics_data* data,XEvent* e); extern void release_draw(Widget, graphics_data*,XEvent*); extern void redraw(); extern void check_update_flag(); void draw_zoom_view(); void create_zoom_view(Widget w, XtPointer unused1, XtPointer unsed2); #endif /* XCDDRAW_H */