
#include "movewidgetP.h"
#include "movewidget.h"

void StartMoving(widget, event, myWidgetInfo, num_myWidgetTypes)
     Widget widget;
     XEvent *event;
     String *myWidgetInfo;       /* array of strings, like "button", etc    */
     Cardinal num_myWidgetTypes; /* number of strings in myWidgetType array */
 {
   XButtonEvent *buttonevent;
   Position rootx, rooty;     /* Origin of parent, in root coordinates. */
   Position org_x_w, org_y_w; /* Origin of widget, in root coorditates. */
   int parent_widget_ID;
   int i;
   Arg arg_list[20];


   /* Query some basic info from widget */
   /* --------------------------------- */
   i = 0;
   XtSetArg(arg_list[i], XtNborderWidth, (XtArgVal) &resz_border_width); i++;
   XtSetArg(arg_list[i], XtNwidth, (XtArgVal) &resz_width); i++;
   XtSetArg(arg_list[i], XtNheight, (XtArgVal) &resz_height); i++;
   XtSetArg(arg_list[i], NULL, (XtArgVal) NULL);
   XtGetValues(widget, arg_list, i);

   /* Use x,y of button press event */
   /* ----------------------------- */
   buttonevent = (XButtonEvent *) event;

   /* Translate origin of widget into root coordinates. */
   /* ------------------------------------------------- */
   XtTranslateCoords(widget, (Position) 0, (Position) 0,
		     &org_x_w, &org_y_w);

   /* Translate origin of parent into root coordinates. */
   /* ------------------------------------------------- */
   sscanf(myWidgetInfo[0], "%d", &parent_widget_ID);
   XtTranslateCoords((Widget) parent_widget_ID, (Position) 0, (Position) 0,
		     &rootx, &rooty);

   /* Save initial offsets for later use in WidgetMover */
   /* ------------------------------------------------- */
   start_rootx = org_x_w - buttonevent->x_root - rootx;
   start_rooty = org_y_w - buttonevent->y_root - rooty;

   /* Set the correct initial state of a widget, to be moved within a form */
   /* -------------------------------------------------------------------- */
   i = 0;
   XtSetArg(arg_list[i], XtNhorizDistance,
                        (XtArgVal) (buttonevent->x_root + start_rootx)); i++;
   XtSetArg(arg_list[i], XtNvertDistance,
	                (XtArgVal) (buttonevent->y_root + start_rooty)); i++;
   XtSetArg(arg_list[i], XtNtop, (XtArgVal) XtChainTop); i++;
   XtSetArg(arg_list[i], XtNleft, (XtArgVal) XtChainLeft); i++;
   XtSetArg(arg_list[i], XtNright, (XtArgVal) XtRubber); i++;
   XtSetArg(arg_list[i], XtNbottom, (XtArgVal) XtRubber); i++;
   XtSetArg(arg_list[i], XtNresizable, (XtArgVal) TRUE); i++;
   XtSetArg(arg_list[i], XtNwidth, (XtArgVal) resz_width); i++;
   XtSetArg(arg_list[i], XtNheight, (XtArgVal) resz_height); i++;
   XtSetArg(arg_list[i], NULL, (XtArgVal) NULL);
   XtSetValues(widget, arg_list, i);

 };         /* end of StartMoving() */

/****************************************************************/

void WidgetMover(widget, event, myWidgetInfo, num_myWidgetTypes)
     Widget widget;
     XEvent *event;
     String *myWidgetInfo;       /* array of strings, like "button", etc    */
     Cardinal num_myWidgetTypes; /* number of strings in myWidgetType array */
 {
   XButtonEvent *buttonevent;
   Position rootx, rooty;
   int parent_widget_ID;
   Arg arg_list[10];

   sscanf(myWidgetInfo[0], "%d", &parent_widget_ID);

   /* Store x,y of button press relative to root window */
   /* ------------------------------------------------- */
   buttonevent = (XButtonEvent *) event;
/*   XtTranslateCoords((Widget) parent_widget_ID, (Position) 0, (Position) 0,
		     &rootx, &rooty);
*/
   /* Change the position of the popup about to reveal itself */
   /* ------------------------------------------------------- */
   XtMoveWidget(widget,
               (buttonevent->x_root + start_rootx),
               (buttonevent->y_root + start_rooty));

 };         /* end of WidgetMover() */

/****************************************************************/

void DoneMoving(widget, event, myWidgetInfo, num_myWidgetTypes)
     Widget widget;
     XEvent *event;
     String *myWidgetInfo;       /* array of strings, like "button", etc    */
     Cardinal num_myWidgetTypes; /* number of strings in myWidgetType array */
 {
   XButtonEvent *buttonevent;
   Position rootx, rooty;
   int parent_widget_ID;
   Arg arg_list[20];
   /* XtEventReturnCode XtSendEvent(); */
   /* XtWidgetProc Resize; */

   sscanf(myWidgetInfo[0], "%d", &parent_widget_ID);
   XtUnmanageChild(widget);

   /* Store x,y of button press relative to root window */
   /* ------------------------------------------------- */

   buttonevent = (XButtonEvent *) event;
/*   XtMoveWidget(widget,
               (buttonevent->x_root + start_rootx - 1),
               (buttonevent->y_root + start_rooty - 1));
*/
   XtSetArg(arg_list[0], XtNhorizDistance,
                        (XtArgVal) (buttonevent->x_root + start_rootx));
   XtSetArg(arg_list[1], XtNvertDistance,
	                (XtArgVal) (buttonevent->y_root + start_rooty));
   XtSetArg(arg_list[2], XtNtop, (XtArgVal) XtChainTop);
   XtSetArg(arg_list[3], XtNleft, (XtArgVal) XtChainLeft);
   XtSetArg(arg_list[4], XtNright, (XtArgVal) XtRubber);
   XtSetArg(arg_list[5], XtNbottom, (XtArgVal) XtRubber);
   XtSetArg(arg_list[6], XtNresizable, (XtArgVal) TRUE);
   XtSetArg(arg_list[7], XtNx,
                        (XtArgVal) (buttonevent->x_root + start_rootx));
   XtSetArg(arg_list[8], XtNy,
	                (XtArgVal) (buttonevent->y_root + start_rooty));
   XtSetArg(arg_list[9], XtNwidth, (XtArgVal) resz_width);
   XtSetArg(arg_list[10], XtNheight, (XtArgVal) resz_height);
   XtSetArg(arg_list[11], NULL, (XtArgVal) NULL);
   XtSetValues(widget, arg_list, 11);

   XtManageChild(widget);

/*    XtUnmapWidget((Widget) parent_widget_ID);
      XtMapWidget((Widget) parent_widget_ID);  */

 };         /* end of DoneMoving() */

/****************************************************************/
