//$RL/src/dobuttonevent.txt 261Lines, RJL041013 //This is an extract from buttonevent.cc, callback from X11 GUI in bde/src. // It includes all except first ~150 rev. history and declarations. void dobuttonevent(Widget w, XtPointer c, XEvent *xevent, Boolean *) { /* attr contains the attributes for the event. NodeEvents should use the node field, link events should use the link field, etc. */ /* TBD: segregate/partition into Node/Link/Caption/Text-ops.cc -RJL)40918*/ // CG: All attributes have been converted to upper case and have // prefixes NA_, LA_, BA_, TA, GA_ and CA_. union { node_attributes node; link_attributes link; bpt_attributes bpt; text_attributes text; graph_attributes graph; caption_attributes caption; // Added by 94FBDE Javier / Kathy / Lon } attr; int button_op = (int)c; // warning from cxx: conversion from ptr to smaller int - RJL 011203 XButtonEvent *event = &xevent->xbutton; /* no graph operations are allowed if there is no current graph unless creating a new graph */ if (GraphIsDisplayed || ( selected.getstate() == SGrph_create ) ) { switch (selected.getstate()) { // Merged six shape cases into SNodeCreate. // Deleted case SCircle, SEllipse, SRectangle, SInput, SOutput, and SFile //add a new state SCnode to create a node by clicking one of six nodeshapes or //use default nodeshape which is rectangle - cychang & phsia //Resorted state by OOMenu class category and *ops.cc file - RJL040919 // nodeops.cc: Node Create/Delete/Resize/Move: case SCnode: node_create(event, button_op); break; case SBpt: break; case SDnode1: case SDnode2: // redefined by hcpatel & mmaliset node_delete(event, selected.getstate(), &(attr.node), button_op); break; case SResize: case SResize_node: node_resize(event, selected.getstate(), &(attr.node), button_op); break; case SMove: node_move(event, selected.getstate(), &(attr.node), button_op); break; //textops.cc: Text Create/Delete/Move: case SCtxt: case SCtxt_create: case SCtxt_isCurr: //Why BOTH states call text_create? OK if repeat switch there. text_create(event, selected.getstate(), &(attr.text), button_op); break; case SDtxt: case SDtxt_delete: text_delete(event, selected.getstate(), &(attr.text), button_op); break; case SMtxt: case SMtxt_move: text_move(event, selected.getstate(), &(attr.text), button_op); break; // graphops.cc: Graph Create/Delete/Select case SGrph_create: graph_create(event, selected.getstate(), &(attr.graph), button_op); break; case SGrph_delete: graph_delete(event, selected.getstate(), &(attr.graph), button_op); break; case SGrph_select: graph_select(event, selected.getstate(), &(attr.graph), button_op); break; //captionops.cc: case SCaptionCreate: caption_create(event, selected.getstate(), &(attr.caption), button_op); break; case SCaptionDelete: case SCaptionConfirmDelete: caption_delete(event, selected.getstate(), &(attr.caption), button_op); break; case SCaptionMove: caption_move(event, selected.getstate(), &(attr.caption), button_op); break; case SCaptionResize: case SCaptionConfirmResize: caption_resize(event, selected.getstate(), &(attr.caption), button_op); break; // end button events for caption object Added by 94FBDE Javier/Kathy/Lon // bendptops.cc: Bendpt Create/Delete/Move case SBpt1: case SBpt_create: bpt_create(event, selected.getstate(), &(attr.bpt), button_op); break; case SBpt2: case SBpt_del: bpt_delete(event, selected.getstate(), &(attr.bpt), button_op); break; case SBpt3: case SBpt_move: bpt_move(event, selected.getstate(), &(attr.bpt), button_op); break; //linkops.cc: Link Create/changeAttr?/Reverse/Delete case SArrow: link_create(event, selected.getstate(), &(attr.link), button_op); break; /* case SDirection: link_direction(event, selected.getstate(), &(attr.link), button_op); ReDraw(); break; */ case SRlink_Att1: // 96subde: fjara, ianandak case SRlink_Att2: // for link restylE link_changeAtt (event, selected.getstate(), &(attr.link), button_op); break; case SReverse: case SReverse_Arrow: reverse_arrow(event, selected.getstate(), &(attr.link), button_op); break; case SDlink1: // added by hcpatel & mmaliset case SDlink2: link_delete(event, selected.getstate(), &(attr.link), button_op); break; // Unimplemented operations: case SSelect: case SStxt: case SBpt_select: case SArrow_move: case SArrow_select: case SRestyle_node: case SRtxt: case SBpt_restyle: case SArrow_restyle: case SGrph_restyle: /* only display error message on button down not on button up */ if ( button_op == BUTTON_DOWN_EVENT ) { changeCanvasCursor( arrow ); DisplayErrorMsg( toplevel, "Current state NOT Implemented!", (void (*)()) NULL, (XtPointer) NULL ); } break; case SIdentifier: case SAttrib: case SHelp: case NState: break; } // end if GraphIsDisplayed||state == SGrph_create } // end switch(selected.getstate()) /* If a button is pressed, then it can also be released. Only want to display this error message once though */ else if ( button_op == BUTTON_DOWN_EVENT ) { /* make sure cursor is arrow. It could be pirate if last action was delete */ changeCanvasCursor( arrow ); //WHY display this in ALL cases? - RJL)40918 DisplayErrorMsg( toplevel, "A graph does not exist!", (void (*)()) NULL, (XtPointer) NULL ); } // end if ... else } // end dobuttonevent