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