/*********************************************************************** * * TITLE: menu_calls.c * * AUTHOR: Cassie Mulnix * * DESCRIPTION: This module is part of the OPPS editor, xopps. It contains * the menu definitions and handlers. * * CHANGE HISTORY * * $Log: menu_calls.c,v $ * Revision 1.57 1994/06/16 16:56:35 clm * updated to new gr_ routines using GR_ for font names * * Revision 1.56 1994/05/20 23:31:43 clm * updated with HP, SGI changes * * Revision 1.55 1994/05/04 23:34:36 clm * ported to ANSI C * * Revision 1.54 1993/10/19 14:40:50 clm * updated all oellib stuff * * Revision 1.53 1993/05/18 20:58:30 clm * added new message.c function * took out assignment of st_flag * * Revision 1.52 1993/02/22 21:34:32 clm * fixed refresh of plines in evt2slp * * Revision 1.51 1993/02/20 00:09:33 clm * fixed evt2slp to copy precedence lines if they exist * * Revision 1.50 1993/02/08 16:10:15 clm * added event to slip to menu * added beware to all delete options * * Revision 1.49 1992/12/11 21:30:16 clm * made RSRC_FONT and RSRC_POINT global * * Revision 1.48 1992/12/10 21:45:40 clm * fixed new_index so chart is always object 0 * * Revision 1.47 1992/12/01 16:49:32 clm * added vertical positioning to sequence * * Revision 1.46 1992/11/24 21:15:40 clm * added find_pline to delete_pline since pline is on menu if co * really belongs to an object * * Revision 1.45 1992/11/12 18:57:03 clm * added display date options to slip and event calls * * Revision 1.44 1992/11/09 16:30:02 clm * added precedence lines * * Revision 1.43 1992/10/19 14:28:57 clm * added all dates to be updated in copy_it * * Revision 1.42 1992/10/12 20:31:51 clm * changed object calls to reflect addition of all_id_disp toggle * * Revision 1.41 1992/10/02 20:25:14 clm * housekeeping * * Revision 1.40 1992/09/29 23:27:26 clm * added id text and toggle to all dated objects * * Revision 1.39 1992/09/22 17:46:23 clm * added copy function for objects * * Revision 1.38 1992/09/22 17:18:52 clm * added activity object * * Revision 1.37 1992/09/17 15:12:45 clm * added disp option to chart date object * * Revision 1.36 1992/09/15 15:59:22 clm * added text and text positioning to add_slip call * * Revision 1.35 1992/09/14 19:52:36 clm * added hpos and vpos to simple activity * * Revision 1.34 1992/09/14 18:46:59 clm * added draw layer to all objects * * Revision 1.33 1992/09/08 22:50:11 clm * added sequence.c * * Revision 1.32 1992/09/01 17:45:30 clm * added color to add calls for all objects * * Revision 1.31 1992/08/31 17:19:09 clm * took out clock and box objects * * Revision 1.30 1992/08/25 20:07:56 clm * added boolean values for modified * * Revision 1.29 1992/08/25 16:23:57 clm * fixed switch statement in edit_it object types * * Revision 1.28 1992/08/25 15:51:36 clm * added xlnary and ylnary objects to edit options * alphabetized menu * * Revision 1.27 1992/08/20 15:16:27 clm * fixed font value in call to add_chdate * * Revision 1.26 1992/08/14 21:05:12 clm * added color to add_sact * * Revision 1.25 1992/08/13 18:10:20 clm * fixed call for add_chdate * * Revision 1.24 1992/08/10 17:42:23 clm * changed default level of status and level objects * * Revision 1.23 1992/08/03 21:34:32 clm * added slip, status, page, chart date, symbols, and levels to menu * * Revision 1.22 1992/07/15 19:43:00 clm * changed current_date to issue_date * * Revision 1.21 1992/07/08 17:20:30 clm * changed issue_date to current_date call * * Revision 1.20 1992/07/06 17:49:03 clm * added line display and number display toggles * to horizontal line menu * * Revision 1.19 1992/06/24 17:14:15 clm * added functions for horizontal line callbacks * * Revision 1.17 1992/05/21 21:33:51 clm * incorporated rectangle routines * * Revision 1.15 1992/05/20 19:50:57 clm * cleaned up file and help format * * Revision 1.14 1992/05/11 22:39:22 kevin * renamed project include file to xopps.h * * Revision 1.2 90/11/28 07:33:58 ana * First cut of popup menus using motif. * * Revision 1.1 90/11/13 10:08:29 ana * Initial revision * *********************************************************************** * * WARNINGS: * * EXTERNAL CALLABLE COMPONENTS (PUBLIC): * * GLOBALS: * * WAIVERS: * * NOTES: * * MANPAGE: * ***********************************************************************/ #ifndef lint static char rcsid[] = "$Id: menu_calls.c,v 1.57 1994/06/16 16:56:35 clm OEL $"; #endif #include #include #include #include #include #include #include #include #include "xopps.h" #define BEWARE "The delete function is irreversible. \n Do you wish to continue?" static void edit_it(Widget, struct cdata *, XtPointer); static void delete_it(Widget, struct cdata *, XtPointer); static void delete_pline(Widget, struct cdata *, XtPointer); static void undo_it(Widget, struct cdata *, XtPointer); static void edit_hln(Widget, struct cdata *, XtPointer); static void delete_hln(Widget, struct cdata *, XtPointer); static void insert_hln(Widget, struct cdata *, XtPointer); static void copy_it(Widget, struct cdata *, XtPointer); static void call_image(Widget, struct cdata *, XtPointer); static void call_text(Widget, struct cdata *, XtPointer); static void call_sact(Widget, struct cdata *, XtPointer); static void call_act(Widget, struct cdata *, XtPointer); static void call_event(Widget, struct cdata *, XtPointer); static void call_slip(Widget, struct cdata *, XtPointer); static void call_status(Widget, struct cdata *, XtPointer); static void call_page(Widget, struct cdata *, XtPointer); static void call_chdate(Widget, struct cdata *, XtPointer); static void call_symbol(Widget, struct cdata *, XtPointer); static void call_level(Widget, struct cdata *, XtPointer); static void call_sequence(Widget, struct cdata *, XtPointer); static void tog_line(Widget, struct cdata *, XtPointer); static void tog_number(Widget, struct cdata *, XtPointer); static void evt2slp(Widget, struct cdata *, XtPointer); static Widget submenu; /* mouse submenu */ static Widget actmenu; /* activity menu */ /*********************************************************************** * * FUNCTION: * init_menu() * * INPUTS: * parent (Widget) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * initializes the drawing area popup menu */ void init_menu(Widget parent) { Arg args[10]; XmString xmtemp; Cardinal n; /* * Create the menu with a label and separator bar */ menu = XmCreatePopupMenu( parent, "menu", NULL, 0); xmtemp = XmStringCreateSimple("Operations"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; XtCreateManagedWidget( "operations", xmLabelWidgetClass, menu, args, n); XmStringFree(xmtemp); XtCreateManagedWidget( "separator", xmSeparatorWidgetClass, menu, NULL, 0); /* * Create the buttons to go in the menu */ xmtemp = XmStringCreateSimple("Undo"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) UNDO]=XtCreateManagedWidget("undo",xmPushButtonWidgetClass, menu, args, n); XtAddCallback(menu_item[(int) UNDO], XmNactivateCallback, (XtCallbackProc)undo_it, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Copy"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)COPY] = XtCreateManagedWidget("copy", xmPushButtonWidgetClass, menu, args, n); XtAddCallback(menu_item[(int)COPY], XmNactivateCallback, (XtCallbackProc)copy_it, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Event to Slip"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)EVT2SLP] = XtCreateManagedWidget("ect2slp", xmPushButtonWidgetClass, menu, args, n); XtAddCallback(menu_item[(int)EVT2SLP], XmNactivateCallback, (XtCallbackProc)evt2slp, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Edit"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) EDIT] = XtCreateManagedWidget("edit", xmPushButtonWidgetClass, menu, args, n); XtAddCallback(menu_item[(int) EDIT], XmNactivateCallback, (XtCallbackProc)edit_it, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Delete"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) DELETE] = XtCreateManagedWidget("delete", xmPushButtonWidgetClass, menu, args, n); XtAddCallback(menu_item[(int) DELETE],XmNactivateCallback, (XtCallbackProc)delete_it, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Delete Pline"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) DELETE_PLINE] = XtCreateManagedWidget("delete_pline", xmPushButtonWidgetClass, menu, args, n); XtAddCallback(menu_item[(int) DELETE_PLINE],XmNactivateCallback, (XtCallbackProc)delete_pline, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Add"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD] = XtCreateManagedWidget("add", xmCascadeButtonWidgetClass, menu, args, n); XmStringFree(xmtemp); submenu = XmCreatePulldownMenu( menu, "addmenu", NULL, 0); XtSetArg(args[0], XmNsubMenuId, submenu); XtSetValues (menu_item[(int) ADD], args, 1); xmtemp = XmStringCreateSimple("Activity"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_ACT] = XtCreateManagedWidget("add", xmCascadeButtonWidgetClass, submenu, args, n); XmStringFree(xmtemp); actmenu = XmCreatePulldownMenu(submenu, "actmenu", NULL, 0); XtSetArg(args[0], XmNsubMenuId, actmenu); XtSetValues(menu_item[(int)ADD_ACT], args, 1); xmtemp = XmStringCreateSimple("Simple"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_SACT] = XtCreateManagedWidget("sactivity", xmPushButtonWidgetClass, actmenu, args, n); XtAddCallback(menu_item[(int) ADD_SACT], XmNactivateCallback, (XtCallbackProc)call_sact, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Complex"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) NORMAL_ACT] = XtCreateManagedWidget("normal", xmPushButtonWidgetClass, actmenu, args, n); XtAddCallback(menu_item[(int) NORMAL_ACT], XmNactivateCallback, (XtCallbackProc)call_act, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Chart Date"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)ADD_CHDATE] = XtCreateManagedWidget("chdate", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int)ADD_CHDATE], XmNactivateCallback, (XtCallbackProc)call_chdate, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Event"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_EVENT] = XtCreateManagedWidget("event", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int) ADD_EVENT], XmNactivateCallback, (XtCallbackProc)call_event, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Level"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)ADD_LEVEL] = XtCreateManagedWidget("level", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int)ADD_LEVEL], XmNactivateCallback, (XtCallbackProc)call_level, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Image"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_IMAGE] = XtCreateManagedWidget("image", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int) ADD_IMAGE], XmNactivateCallback, (XtCallbackProc)call_image, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Page"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)ADD_PAGE] = XtCreateManagedWidget("page", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int)ADD_PAGE], XmNactivateCallback, (XtCallbackProc)call_page, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Sequence"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_SEQ] = XtCreateManagedWidget("sequence", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int) ADD_SEQ], XmNactivateCallback, (XtCallbackProc)call_sequence, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Slip"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_SLIP] = XtCreateManagedWidget("slip", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int) ADD_SLIP], XmNactivateCallback, (XtCallbackProc)call_slip, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Status"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)ADD_STATUS] = XtCreateManagedWidget("status", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int)ADD_STATUS], XmNactivateCallback, (XtCallbackProc)call_status, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Symbol"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int)ADD_SYM] = XtCreateManagedWidget("symbol", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int)ADD_SYM], XmNactivateCallback, (XtCallbackProc)call_symbol, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Text"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; menu_item[(int) ADD_TEXT] = XtCreateManagedWidget("text", xmPushButtonWidgetClass, submenu, args, n); XtAddCallback(menu_item[(int) ADD_TEXT], XmNactivateCallback, (XtCallbackProc)call_text, &data); XmStringFree(xmtemp); } /*********************************************************************** * * FUNCTION: * init_hln_menu() * * INPUTS: * parent (Widget) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * initializes the horizontal line popup menu */ void init_hln_menu(Widget parent) { Arg args[10]; XmString xmtemp; Cardinal n; /* * Create the menu with a label and separator bar */ hln_menu = XmCreatePopupMenu( parent, "hln_menu", NULL, 0); xmtemp = XmStringCreateSimple("Operations"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; XtCreateManagedWidget( "operations", xmLabelWidgetClass, hln_menu, args, n); XmStringFree(xmtemp); XtCreateManagedWidget( "separator",xmSeparatorWidgetClass,hln_menu,NULL,0); /* * Create the buttons to go in the menu */ xmtemp = XmStringCreateSimple("Edit HLine"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; hln_item[(int)HEDIT] = XtCreateManagedWidget("edit",xmPushButtonWidgetClass, hln_menu, args, n); XtAddCallback(hln_item[(int)HEDIT], XmNactivateCallback, (XtCallbackProc)edit_hln, &data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Delete HLine"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; hln_item[(int)HDELETE] = XtCreateManagedWidget("delete", xmPushButtonWidgetClass, hln_menu, args, n); XtAddCallback(hln_item[(int)HDELETE],XmNhelpCallback, (XtCallbackProc)ShowHelp,"delete_hln"); XtAddCallback(hln_item[(int)HDELETE],XmNactivateCallback, (XtCallbackProc)delete_hln,&data); XmStringFree(xmtemp); xmtemp = XmStringCreateSimple("Insert New Line"); n = 0; XtSetArg(args[n], XmNlabelString, xmtemp); n++; hln_item[(int)HINSERT] = XtCreateManagedWidget("insert", xmPushButtonWidgetClass, hln_menu, args, n); XtAddCallback(hln_item[(int)HINSERT],XmNactivateCallback, (XtCallbackProc)insert_hln, &data); XtAddCallback(hln_item[(int)HINSERT],XmNhelpCallback, (XtCallbackProc)ShowHelp,"insert_hln"); XmStringFree(xmtemp); n = 0; xmtemp = XmStringCreateSimple("Line Display "); XtSetArg(args[n], XmNlabelString, xmtemp); n++; hln_item[(int)HLINE] = XtCreateManagedWidget("line", xmPushButtonWidgetClass, hln_menu, args, n); XtAddCallback(hln_item[(int)HLINE], XmNactivateCallback, (XtCallbackProc)tog_line, &data); XtAddCallback(hln_item[(int)HLINE],XmNhelpCallback, (XtCallbackProc)ShowHelp,"tog_line"); XmStringFree(xmtemp); n = 0; xmtemp = XmStringCreateSimple("Number Display "); XtSetArg(args[n], XmNlabelString, xmtemp); n++; hln_item[(int)HNUMBER] = XtCreateManagedWidget("number", xmPushButtonWidgetClass, hln_menu, args, n); XtAddCallback(hln_item[(int)HNUMBER],XmNactivateCallback, (XtCallbackProc)tog_number,&data); XtAddCallback(hln_item[(int)HNUMBER],XmNhelpCallback, (XtCallbackProc)ShowHelp,"tog_number"); XmStringFree(xmtemp); } /*********************************************************************** * * FUNCTION: * undo_it() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * undo previous operation */ static void undo_it(Widget w, struct cdata *client_data, XtPointer call_data) { switch (sbck) { case BACK_EDIT: Message("Undo last edit"); break; case BACK_MOVE: Message("Undo last move"); break; case BACK_DEL: Message("Undo last delete"); break; case BACK_ADD: Message("Undo last add"); break; case BACK_NONE: break; } recall_object(); } /*********************************************************************** * * FUNCTION: * copy_it() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * copies the current object and adds one week so that they can * be distinguished on the page */ static void copy_it(Widget w, struct cdata *client_data, XtPointer call_data) { int i, co; int time_to_add; co = client_data->co; if (co == 0) { i = new_index(TRUE); } else { i = new_index(FALSE); } if ((objary[0].z.chtptr->end_date - objary[0].z.chtptr->start_date) <= (UTC_ONE_DAY * 120)) { time_to_add = UTC_ONE_DAY; } else { time_to_add = UTC_ONE_DAY * 7; } (*(objary[co].opsptr->cpy))(&objary[i], &objary[co]); switch(objary[co].type) { case OBJ_EVT: objary[i].z.evtptr->edate += time_to_add; break; case OBJ_SACT: objary[i].z.sactptr->strtdate += time_to_add; objary[i].z.sactptr->endate += time_to_add; objary[i].z.sactptr->pctdate += time_to_add; break; case OBJ_ACT: objary[i].z.actptr->strtdate += time_to_add; objary[i].z.actptr->endate += time_to_add; objary[i].z.actptr->update += time_to_add; objary[i].z.actptr->dwndate += time_to_add; objary[i].z.actptr->b_strtdate += time_to_add; objary[i].z.actptr->b_endate += time_to_add; objary[i].z.actptr->pctdate += time_to_add; break; case OBJ_SLP: objary[i].z.slpptr->strtdate += time_to_add; objary[i].z.slpptr->endate += time_to_add; break; case OBJ_SEQ: objary[i].z.seqptr->strtdate += time_to_add; objary[i].z.seqptr->endate += time_to_add; break; default: break; } (*(objary[i].opsptr->loc))(i, OBJECT); exposeRectList(0, objary[0].rlist); } /*********************************************************************** * * FUNCTION: * evt2slp() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * copies the current event object to a slip object */ static void evt2slp(Widget w, struct cdata *client_data, XtPointer call_data) { int i, co; /* temp object indices */ char *text; /* temp text buffer */ int hpos, vpos, idhpos; /* new text positions */ struct evt *evtptr; /* pointer to event object */ RectList *temprlist; /* temporary rect list */ int cnt, p; /* loop counter and pline index */ int obj1, obj2; /* index of pline objects */ int tempco; /* non-edited object of pline */ int size = 0; /* size of precptr for loop */ XRectangle r; /* refresh if plines changed */ co = client_data->co; Message("Event object converted to Slip object"); /* * expose event and save the rlist so it can be reexposed */ exposeRectList(1, objary[co].rlist); temprlist = objary[co].rlist; /* * the text and positions must be transferred to temp variables * the positions are declared in different order for events and * slips so the value must be corrected */ evtptr = objary[co].z.evtptr; if (strcmp(evtptr->text, "") != 0) { text = XtNewString(evtptr->text); hpos = evtptr->hpos1; vpos = evtptr->vpos1; } else if (strcmp(evtptr->text2, "") != 0) { Message("Text 2 used for slip text"); text = XtNewString(evtptr->text2); hpos = evtptr->hpos2; vpos = evtptr->vpos2; } else { text = XtNewString(""); hpos = 0; vpos = 0; } if (hpos == 1) { hpos = 2; } else if (hpos == 2) { hpos = 1; } else { hpos = 0; } if (evtptr->idhpos == 1) { idhpos = 2; } else if (evtptr->idhpos == 2) { idhpos = 1; } else { idhpos = 0; } /* * add the new slip object */ i = add_slip(evtptr->edate, evtptr->edate, evtptr->line, evtptr->sym, evtptr->sym, evtptr->s_char, evtptr->s_char, 0, evtptr->color, evtptr->font, evtptr->point, text, hpos, vpos, objary[co].layer, evtptr->disp, evtptr->idtext, evtptr->idtog, idhpos, evtptr->idvpos); (*(objary[i].opsptr->loc))(i, OBJECT); (*(objary[i].opsptr->edt))(i, TRUE); /* * if the event object had precedence lines copy them */ if (objary[co].precptr != NULL) { size = sizeof_dynarray(objary[co].precptr); for (cnt = 0; cnt < size; cnt++) { if (plnary[elemof_dynarray(objary[co].precptr, cnt)].obj1 == co) { obj1 = i; obj2 = plnary[elemof_dynarray(objary[co].precptr, cnt)].obj2; tempco = obj2; } else { obj1 = plnary[elemof_dynarray(objary[co].precptr, cnt)].obj1; obj2 = i; tempco = obj1; } p = new_pline(); if (p != -1) { add_pline(p, obj1, obj2); if (objary[i].precptr == NULL) { objary[i].precptr = new_dynarray(); } append_dynarray(objary[i].precptr, p); append_dynarray(objary[tempco].precptr, p); } else { /* * have to add precedence lines before deleting event * precedence lines, so may not have enough plines */ Message("Cannot copy precedence line %d to %d", obj1, obj2); Message("you will have to readd it"); } } } for (cnt = 0; cnt < npln; cnt++) { loc_pline(cnt, OBJECT); } /* * if the slip object was not cancelled, remove the event object * and reexpose where the event object was */ if (objary[i].type != OBJ_NUL) { (*(objary[co].opsptr->rem))(co, OBJECT); exposeRectList(0, temprlist); if (size > 0) { /* * have to refresh the screen so that plines are correct * if plines existed */ r.x = 0; r.y = 0; r.width = page_width; r.height = page_height; AddExposeEvent(0, &r); } } issue_date(); modified = TRUE; } /*********************************************************************** * * FUNCTION: * edit_it() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * edits the current object */ static void edit_it(Widget w, struct cdata *client_data, XtPointer call_data) { Message("Edit object"); (*(objary[client_data->co].opsptr->edt))(client_data->co, FALSE); } /*********************************************************************** * * FUNCTION: * edit_hln() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * edits the current horizontal line */ static void edit_hln(Widget w, struct cdata *client_data, XtPointer call_data) { Message("Edit Horizontal Line"); (*(Hobjary[client_data->co].opsptr->edt))(client_data->co, FALSE); } /*********************************************************************** * * FUNCTION: * delete_it() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * deletes the current object */ static void delete_it(Widget w, struct cdata *client_data, XtPointer call_data) { if (Beware(BEWARE)) { Message("Delete object"); store_object(client_data->co, BACK_DEL, OBJECT); (*(objary[client_data->co].opsptr->rem))(client_data->co, OBJECT); issue_date(); exposeRectList(0, objary[0].rlist); modified = TRUE; } } /*********************************************************************** * * FUNCTION: * delete_pline() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * deletes the current precedence line */ static void delete_pline(Widget w, struct cdata *client_data, XtPointer call_data) { int tempco; if (Beware(BEWARE)) { tempco = find_pline(client_data->x, client_data->y); msg_pline(tempco, OBJECT); rem_pline(tempco, OBJECT); issue_date(); exposeRectList(0, objary[0].rlist); modified = TRUE; } } /*********************************************************************** * * FUNCTION: * delete_hln() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * deletes the current Horizontal line object */ static void delete_hln(Widget w, struct cdata *client_data, XtPointer call_data) { if (Beware(BEWARE)) { Message("Delete Horizontal Line"); (*(Hobjary[client_data->co].opsptr->rem))(client_data->co, OBJECT); issue_date(); modified = TRUE; } } /*********************************************************************** * * FUNCTION: * call_text() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds text to the drawing area */ static void call_text(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add text object"); co = add_text(client_data->x, client_data->y, 0, RSRC_FONT, RSRC_POINT, 0, 0, 1, ""); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_sact() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a sactivity object to the drawing area */ static void call_sact(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object */ int line; /* line of sactivity */ utc_val utc_time; /* time of sactivity */ Message ("Add Simple Activity Object "); x_to_utc(client_data->x, &utc_time); line = ((client_data->y + 1 - y_act_bottom) / y_gap) + page_begin; co = add_sactivity(utc_time, utc_time, line, 0, 0, utc_time, 0, 1, 1, 0, 0, 0, RSRC_FONT, RSRC_POINT, 0, "", "", (int)all_id_disp, 0, 2); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_act() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a activity object to the drawing area */ static void call_act(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object */ int line; /* line of activity */ utc_val utc_time; /* time of activity */ Message ("Add Activity Object "); x_to_utc(client_data->x, &utc_time); line = ((client_data->y + 1 - y_act_bottom) / y_gap) + page_begin; co = add_activity(utc_time, utc_time, utc_time, utc_time, line, 0, 0, utc_time, 0, utc_time, utc_time, 1, 1, 0, 0, 0, RSRC_FONT, RSRC_POINT, 0, "", "", (int)all_id_disp, 0, 2); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_event() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds an event object to the drawing area */ static void call_event(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object */ int line; /* line of event */ utc_val utc_time; /* time of event */ Message("Add event object"); x_to_utc(client_data->x, &utc_time); line = ((client_data->y + 1 - y_act_bottom) / y_gap) + page_begin; co = add_event(utc_time, line, 0, "", 0, "", "", RSRC_FONT, RSRC_POINT, 2, 2, 0, 1, 1, 0, 0, "", (int)all_id_disp, 0, 2); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_image() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds an image object to the drawing area */ static void call_image(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add image object"); co = add_image(client_data->x, client_data->y, 1, 0, 0, ""); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_slip() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a slip object to the drawing area */ static void call_slip(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ int line; /* line of event */ utc_val utc_time; /* time of event */ Message("Add slip object"); x_to_utc(client_data->x, &utc_time); line = ((client_data->y + 1 - y_act_bottom) / y_gap) + page_begin; co = add_slip(utc_time, utc_time, line, 0, 0, "", "", 0, 0, RSRC_FONT, RSRC_POINT, "", 0, 2, 1, 0, "", (int)all_id_disp, 0, 2); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_status() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a status object to the drawing area */ static void call_status(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add Status object"); co = add_status(client_data->x, client_data->y, RSRC_FONT, RSRC_POINT, 0,0); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_page() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a page object to the drawing area */ static void call_page(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add Page object"); co = add_page(client_data->x, client_data->y, RSRC_FONT, RSRC_POINT, 0, 0); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_chdate() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a chdate object to the drawing area */ static void call_chdate(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add Chart Date object"); co = add_chdate(client_data->x, client_data->y, GR_COURIER_BOLD, 12, 0, 0, 1); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_symbol() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a symbol object to the drawing area */ static void call_symbol(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add Symbol"); co = add_symbol(client_data->x, client_data->y, 0, 1, 0, 0, 0); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_level() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a level object to the drawing area */ static void call_level(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ Message("Add Level"); co = add_level(client_data->x, client_data->y, "", RSRC_FONT, RSRC_POINT, 20, 1, 0, 0); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * call_sequence() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * adds a sequence object to the drawing area */ static void call_sequence(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object index */ int line; /* line of sequence */ utc_val utc_time; /* time of sequence */ Message("Add Sequence"); x_to_utc(client_data->x, &utc_time); line = ((client_data->y + 1 - y_act_bottom) / y_gap) + page_begin; co = add_sequence(utc_time, utc_time, 0, 0, 0, 0, line, RSRC_FONT, RSRC_POINT, 1, 0, "", 0, "", (int)all_id_disp, 0, 2); (*(objary[co].opsptr->edt))(co, TRUE); } /*********************************************************************** * * FUNCTION: * insert_hln() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * inserts a horizontal line object to the drawing area */ static void insert_hln(Widget w, struct cdata *client_data, XtPointer call_data) { Message("Insert Horizontal Line"); ins_hline(client_data->co); modified = TRUE; } /*********************************************************************** * * FUNCTION: * tog_line() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * toggles the line display on/off */ static void tog_line(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object */ co = find_H_object(client_data->x, client_data->y); tog_hline(co); modified = TRUE; } /*********************************************************************** * * FUNCTION: * tog_number() * * INPUTS: * w (Widget) * client_data (struct cdata *) * call_data (XtPointer) * * OUTPUTS: * * RETURNS: * * EXTERNALLY READ: * * EXTERNALLY MODIFIED: * * DESCRIPTION: * toggles the number display on/off */ static void tog_number(Widget w, struct cdata *client_data, XtPointer call_data) { int co; /* current object */ co = find_H_object(client_data->x, client_data->y); tog_hnum(co); modified = TRUE; }