Blame tests/DragAndDrop/DNDClientData.c

Packit b099d7
/* $TOG: DNDClientData.c /main/6 1997/11/20 12:42:05 csn $ */
Packit b099d7
/*
Packit b099d7
 * Motif
Packit b099d7
 *
Packit b099d7
 * Copyright (c) 1987-2012, The Open Group. All rights reserved.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are free software; you can
Packit b099d7
 * redistribute them and/or modify them under the terms of the GNU
Packit b099d7
 * Lesser General Public License as published by the Free Software
Packit b099d7
 * Foundation; either version 2 of the License, or (at your option)
Packit b099d7
 * any later version.
Packit b099d7
 *
Packit b099d7
 * These libraries and programs are distributed in the hope that
Packit b099d7
 * they will be useful, but WITHOUT ANY WARRANTY; without even the
Packit b099d7
 * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
Packit b099d7
 * PURPOSE. See the GNU Lesser General Public License for more
Packit b099d7
 * details.
Packit b099d7
 *
Packit b099d7
 * You should have received a copy of the GNU Lesser General Public
Packit b099d7
 * License along with these librararies and programs; if not, write
Packit b099d7
 * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
Packit b099d7
 * Floor, Boston, MA 02110-1301 USA
Packit b099d7
 * 
Packit b099d7
 */
Packit b099d7
/*
Packit b099d7
 * HISTORY
Packit b099d7
 */
Packit b099d7
Packit b099d7
#include <testlib.h>
Packit b099d7
#include <Xm/DragDrop.h>
Packit b099d7
#include "../Toolkit/bitmaps/gnu.bmp"
Packit b099d7
Packit b099d7
Packit b099d7
#define NUM_DROPSITES 5
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Local functions
Packit b099d7
 */
Packit b099d7
Packit b099d7
Packit b099d7
static void
Packit b099d7
HandleDrop (Widget, XtPointer, XtPointer);
Packit b099d7
Packit b099d7
static void
Packit b099d7
DropTransfer (Widget w, XtPointer closure, Atom *seltype, Atom *type, XtPointer value, unsigned long *length, int format);
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * These are the drop sites being  tested
Packit b099d7
 */
Packit b099d7
Packit b099d7
Widget DropSite[5];
Packit b099d7
Packit b099d7
Atom COMPOUND_TEXT;
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * Client data structure
Packit b099d7
 */
Packit b099d7
Packit b099d7
typedef struct {  int id;
Packit b099d7
		  XtPointer data;
Packit b099d7
	       } ClientData, *ClientDataPointer;
Packit b099d7
Packit b099d7
Packit b099d7
/*
Packit b099d7
 * dropSiteData related variables
Packit b099d7
 */
Packit b099d7
Packit b099d7
Pixmap MyPixmap;
Packit b099d7
XmString MyCompString;
Packit b099d7
char *MyChar;
Packit b099d7
int MyInt;
Packit b099d7
Pixel MyPixel;
Packit b099d7
ClientData TestData1, TestData2, TestData3, TestData4, TestData5, *cdata;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Widget RowCol1;
Packit b099d7
Widget FormD1, PushB1;
Packit b099d7
Packit b099d7
Widget xmDisplay;
Packit b099d7
Atom importList[1];
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
void
Packit b099d7
main (int argc, char **argv)
Packit b099d7
{
Packit b099d7
  	
Packit b099d7
Packit b099d7
  Arg args[10];
Packit b099d7
  	int i,n;
Packit b099d7
Packit b099d7
	CommonTestInit (argc, argv);
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	FormD1 = XmCreateFormDialog (Shell1, "FormD1", args, n);
Packit b099d7
	XtManageChild (FormD1);
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNrightAttachment, XmATTACH_FORM); n++;
Packit b099d7
	XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
Packit b099d7
	XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
Packit b099d7
	XtSetArg (args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
Packit b099d7
	PushB1 = XmCreatePushButton (FormD1, "Drag Source", args, n);
Packit b099d7
	XtManageChild (PushB1);
Packit b099d7
Packit b099d7
Packit b099d7
	
Packit b099d7
		
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); n++;
Packit b099d7
	XtSetArg (args[n], XmNnumColumns, 1); n++;
Packit b099d7
	RowCol1 = XmCreateRowColumn (Shell1, "Row", args, n);
Packit b099d7
	XtManageChild (RowCol1);
Packit b099d7
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	DropSite[0] = XmCreateToggleButton(RowCol1, "ToggleBtn1", args, n);
Packit b099d7
	XtManageChild (DropSite[0]);
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	DropSite[1] = XmCreateLabel(RowCol1, "Label1", args, n);
Packit b099d7
	XtManageChild (DropSite[1]);
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	DropSite[2] = XmCreateList(RowCol1, "List1", args, n);
Packit b099d7
	XtManageChild (DropSite[2]);
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNshowValue, True); n++;
Packit b099d7
	XtSetArg (args[n], XmNorientation, XmHORIZONTAL); n++;
Packit b099d7
	DropSite[3] = XmCreateScale(RowCol1, "Scale1", args, n);
Packit b099d7
	XtManageChild (DropSite[3]);
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	DropSite[4] = XmCreatePushButton(RowCol1, "PushBtn1", args, n);
Packit b099d7
	XtManageChild (DropSite[4]);
Packit b099d7
Packit b099d7
   
Packit b099d7
	
Packit b099d7
	/*
Packit b099d7
	 * Create the drop site
Packit b099d7
	 */
Packit b099d7
Packit b099d7
	COMPOUND_TEXT = XmInternAtom (display, "COMPOUND_TEXT",
Packit b099d7
				      False);
Packit b099d7
        importList[0] = COMPOUND_TEXT;
Packit b099d7
	
Packit b099d7
        /*
Packit b099d7
         * Create dropsites
Packit b099d7
         */
Packit b099d7
Packit b099d7
	for (i=0; i < NUM_DROPSITES; i++)
Packit b099d7
	  {
Packit b099d7
	    n=0;
Packit b099d7
	    XtSetArg (args[n], XmNimportTargets, importList); n++;
Packit b099d7
	    XtSetArg (args[n], XmNnumImportTargets,1); n++;
Packit b099d7
	    XtSetArg (args[n], XmNdropProc, HandleDrop); n++;
Packit b099d7
	    XtSetArg (args[n], XmNdropSiteOperations, XmDROP_COPY); n++;
Packit b099d7
	    XmDropSiteRegister (DropSite[i], args, n);
Packit b099d7
	    
Packit b099d7
	  }
Packit b099d7
Packit b099d7
Packit b099d7
   	/*
Packit b099d7
    	 * Initialize client data structure
Packit b099d7
    	 */
Packit b099d7
	
Packit b099d7
	/*
Packit b099d7
	 * First
Packit b099d7
	 */
Packit b099d7
Packit b099d7
	MyPixel = CommonGetColor ("Red");
Packit b099d7
	TestData1.id = 1;
Packit b099d7
	TestData1.data = (XtPointer)&MyPixel;
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNclientData, (XtPointer)&TestData1);  n++;
Packit b099d7
	XmDropSiteUpdate (DropSite[0],args,n);
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
	/*
Packit b099d7
	 * Second
Packit b099d7
	 */
Packit b099d7
Packit b099d7
	
Packit b099d7
Packit b099d7
	MyPixmap =  XCreatePixmapFromBitmapData(display,
Packit b099d7
                                DefaultRootWindow(display),
Packit b099d7
                                gnu_bits, gnu_width, gnu_height,
Packit b099d7
                                WhitePixel(display,DefaultScreen(display)),
Packit b099d7
                                BlackPixel(display,DefaultScreen(display)),
Packit b099d7
                                DefaultDepth(display,DefaultScreen(display)));
Packit b099d7
Packit b099d7
Packit b099d7
	TestData2.id = 2;
Packit b099d7
	TestData2.data = (XtPointer)&MyPixmap;
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNclientData, (XtPointer)&TestData2);  n++; 
Packit b099d7
	XmDropSiteUpdate (DropSite[1],args,n);
Packit b099d7
Packit b099d7
	
Packit b099d7
Packit b099d7
	/*
Packit b099d7
	 * Third
Packit b099d7
	 */
Packit b099d7
Packit b099d7
Packit b099d7
	MyCompString = XmStringCreate ("ListItem", 
Packit b099d7
					XmSTRING_DEFAULT_CHARSET);
Packit b099d7
Packit b099d7
	TestData3.id = 3;
Packit b099d7
	TestData3.data = (XtPointer)&MyCompString;
Packit b099d7
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNclientData, (XtPointer)&TestData3);  n++;
Packit b099d7
	XmDropSiteUpdate (DropSite[2],args,n);
Packit b099d7
Packit b099d7
	
Packit b099d7
Packit b099d7
	/*
Packit b099d7
	 * Fourth
Packit b099d7
	 */
Packit b099d7
Packit b099d7
	MyInt = 2;
Packit b099d7
	TestData4.id = 4;
Packit b099d7
	TestData4.data = (XtPointer)&MyInt;
Packit b099d7
	
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNclientData, (XtPointer)&TestData4);  n++;
Packit b099d7
	XmDropSiteUpdate (DropSite[3],args,n);
Packit b099d7
Packit b099d7
	/*
Packit b099d7
	 * Fifth
Packit b099d7
         */
Packit b099d7
Packit b099d7
	MyChar = "Another Label";
Packit b099d7
	TestData5.id = 5;
Packit b099d7
	TestData5.data = (XtPointer)&MyChar;
Packit b099d7
	
Packit b099d7
	n=0;
Packit b099d7
	XtSetArg (args[n], XmNclientData, (XtPointer)&TestData5);  n++;
Packit b099d7
	XmDropSiteUpdate (DropSite[4],args,n); 
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
	XtRealizeWidget (Shell1);
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
	CommonPause();
Packit b099d7
Packit b099d7
	XtAppMainLoop(app_context);
Packit b099d7
  
Packit b099d7
      }
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
static void
Packit b099d7
HandleDrop (Widget w, XtPointer client_data, XtPointer call_data)	
Packit b099d7
{
Packit b099d7
	XmDropProcCallback DropProc;
Packit b099d7
        Widget dc;
Packit b099d7
        XmDropTransferEntryRec transferEntries[2];
Packit b099d7
        XmDropTransferEntry transferList;
Packit b099d7
        Atom *importTargets;
Packit b099d7
        Arg args[MAX_ARGS];
Packit b099d7
        int n;
Packit b099d7
        Arg cargs[MAX_ARGS];
Packit b099d7
        int cn;
Packit b099d7
        ClientData *cdata;        
Packit b099d7
Packit b099d7
	int which_widget;
Packit b099d7
	XmString tcs, ListItems[1];
Packit b099d7
Packit b099d7
	DropProc = (XmDropProcCallback)call_data;
Packit b099d7
        dc = DropProc->dragContext;
Packit b099d7
        
Packit b099d7
	n=0;
Packit b099d7
	if ((DropProc->dropAction != XmDROP) || 
Packit b099d7
	    (DropProc->operation != XmDROP_COPY))
Packit b099d7
	  {
Packit b099d7
	      XtSetArg(args[n], XmNtransferStatus, XmTRANSFER_FAILURE); n++;
Packit b099d7
	  } 
Packit b099d7
Packit b099d7
	cn=0;
Packit b099d7
	XtSetArg (cargs[n], XmNclientData, &cdata);  cn++;
Packit b099d7
	XmDropSiteRetrieve (w, cargs, cn);
Packit b099d7
Packit b099d7
	which_widget = cdata->id;
Packit b099d7
	
Packit b099d7
	cn = 0;
Packit b099d7
	switch (which_widget)
Packit b099d7
	  {
Packit b099d7
	   case 1:
Packit b099d7
	     XtSetArg(cargs[cn], XmNbackground, *((Pixel *)cdata->data)); cn++;
Packit b099d7
	     break;
Packit b099d7
Packit b099d7
	   case 2:
Packit b099d7
	     XtSetArg(cargs[cn], XmNlabelType, XmPIXMAP); cn++;
Packit b099d7
  	     XtSetArg(cargs[cn], XmNlabelPixmap,*((Pixmap *)cdata->data));cn++; 
Packit b099d7
	     break;
Packit b099d7
Packit b099d7
	   case 3:
Packit b099d7
	     ListItems[0] = *((XmString *)cdata->data);
Packit b099d7
	     XmListAddItem (w, ListItems[0], 1);
Packit b099d7
	     break;
Packit b099d7
Packit b099d7
	   case 4:
Packit b099d7
	     XtSetArg(cargs[cn], XmNvalue,*((int *)cdata->data)); cn++; 
Packit b099d7
	     break;
Packit b099d7
Packit b099d7
	   case 5:
Packit b099d7
	     tcs = XmStringCreate (*((char **)cdata->data),
Packit b099d7
                   XmFONTLIST_DEFAULT_TAG); cn++;
Packit b099d7
	     XtSetArg(cargs[cn], XmNlabelString, tcs); cn++;
Packit b099d7
	     break;
Packit b099d7
	
Packit b099d7
	   default:
Packit b099d7
	     break;
Packit b099d7
	     }
Packit b099d7
Packit b099d7
	if (cn > 0)
Packit b099d7
	  XtSetValues (w,cargs,cn);
Packit b099d7
Packit b099d7
	XmDropTransferStart(dc,args,n); 
Packit b099d7
      }
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7
Packit b099d7