From: Stalkern 2 Reply-To: stalkern2 at tin.it To: lablgtk at kaba.or.jp Subject: Problem in using an image as DnD source Date: Fri, 9 Jan 2004 13:07:00 +0100 MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="Boundary-00=_klp//BK978XcUA+" Message-Id: <200401091307.00138.stalkern2 at tin.it> --Boundary-00=_klp//BK978XcUA+ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Hello to everybody and a happy new year to you all (Best Widgets :-)))) I'm working out the Drag and Drop example in the lablgtk-2.2.0 distribution, and I have apparently a little problem when using a GMisc.image as DnD source, instead of a button. Below is my code and the pixmaps that come with: thank you for any idea about this matter. Bye! Ernesto --Boundary-00=_klp//BK978XcUA+ Content-Type: image/x-xpm; name="draggeditem.xpm" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="draggeditem.xpm" /* XPM */ static char * draggeditem_xpm[] = { "25 25 287 2", " c None", ". c #04565D", "+ c #005E54", "@ c #006F3D", "# c #BF0B00", "$ c #4C8B04", "% c #05D904", "& c #00E001", "* c #00D800", "= c #00CC01", "- c #01B800", "; c #03A500", "> c #C42100", ", c #15E200", "' c #00FA00", ") c #00F900", "! c #00F400", "~ c #00EA00", "{ c #00D900", "] c #00BE00", "^ c #019700", "/ c #E60400", "( c #926700", "_ c #02FD00", ": c #00FF00", "< c #00FE00", "[ c #00D100", "} c #00AA00", "| c #E10000", "1 c #E11600", "2 c #49B600", "3 c #00DE00", "4 c #009700", "5 c #ED0000", "6 c #FA0100", "7 c #986700", "8 c #0BF500", "9 c #00FB00", "0 c #00EB00", "a c #00CF00", "b c #00A900", "c c #008900", "d c #EC0005", "e c #F30007", "f c #F30208", "g c #C23A04", "h c #29D600", "i c #01FF01", "j c #02FF02", "k c #00DB00", "l c #00BC00", "m c #009A00", "n c #007B00", "o c #690090", "p c #72008A", "q c #7A0085", "r c #71008F", "s c #630C92", "t c #208E56", "u c #01F50B", "v c #14FF15", "w c #1CFF1C", "x c #0CFF0D", "y c #01FF02", "z c #00E600", "A c #00CD00", "B c #00B300", "C c #009000", "D c #007A00", "E c #0C00ED", "F c #0700F7", "G c #0300FC", "H c #0200FD", "I c #0202FC", "J c #001DE5", "K c #077E90", "L c #2BBB78", "M c #5ACD95", "N c #3FCB77", "O c #13D244", "P c #03F310", "Q c #00EC00", "R c #00C200", "S c #00A800", "T c #008F00", "U c #007600", "V c #0000FB", "W c #0000FF", "X c #0404FF", "Y c #2424FE", "Z c #4F50FD", "` c #4444FF", " . c #1E23FA", ".. c #0723E6", "+. c #016A97", "@. c #00DD22", "#. c #00ED00", "$. c #00DC00", "%. c #00CA00", "&. c #009F00", "*. c #008600", "=. c #006E00", "-. c #0000FC", ";. c #0101FF", ">. c #0C0CFF", ",. c #1C1CFF", "'. c #1A19FF", "). c #0A0AFF", "!. c #0303FF", "~. c #0001FE", "{. c #0035C9", "]. c #00E516", "^. c #00E900", "/. c #00DA00", "(. c #00CB00", "_. c #00B700", ":. c #00A400", "<. c #008D00", "[. c #007300", "}. c #0606FF", "|. c #0000FE", "1. c #0003F9", "2. c #008471", "3. c #00E805", "4. c #00E300", "5. c #00D600", "6. c #00C800", "7. c #00B500", "8. c #00A300", "9. c #008B00", "0. c #0000FA", "a. c #0000FD", "b. c #0000F9", "c. c #0000F4", "d. c #002AC2", "e. c #00C61E", "f. c #00AF00", "g. c #009D00", "h. c #007100", "i. c #006B00", "j. c #0000F8", "k. c #0000F2", "l. c #0000EB", "m. c #0105DE", "n. c #167A4D", "o. c #16BE00", "p. c #07C000", "q. c #0CAD00", "r. c #1A8E00", "s. c #237200", "t. c #314E00", "u. c #3F2F00", "v. c #0000E9", "w. c #0000F7", "x. c #0000F1", "y. c #0000E3", "z. c #0900D2", "A. c #631C56", "B. c #804B00", "C. c #754A00", "D. c #803200", "E. c #891600", "F. c #860700", "G. c #770000", "H. c #6C0000", "I. c #0000D7", "J. c #0000EF", "K. c #0000EE", "L. c #0000E7", "M. c #0000E0", "N. c #0000DA", "O. c #2600AC", "P. c #A20029", "Q. c #C10000", "R. c #B40000", "S. c #A60000", "T. c #940000", "U. c #810000", "V. c #700000", "W. c #6B0000", "X. c #0000C7", "Y. c #0000DF", "Z. c #0000ED", "`. c #0000E5", " + c #0000DE", ".+ c #0000D8", "++ c #0000D1", "@+ c #520076", "#+ c #B2000E", "$+ c #B60000", "%+ c #A90000", "&+ c #9B0000", "*+ c #880000", "=+ c #760000", "-+ c #690000", ";+ c #0000C9", ">+ c #0000E4", ",+ c #0000EA", "'+ c #0000EC", ")+ c #0000E6", "!+ c #0000DB", "~+ c #0000D4", "{+ c #0000CD", "]+ c #0400C2", "^+ c #840039", "/+ c #B20002", "(+ c #8D0000", "_+ c #7A0000", ":+ c #6D0000", "<+ c #650000", "[+ c #0000AF", "}+ c #0000C4", "|+ c #0000D0", "1+ c #0000DC", "2+ c #0000D3", "3+ c #0000CE", "4+ c #0000C8", "5+ c #0000C0", "6+ c #1C009D", "7+ c #A5000A", "8+ c #9A0000", "9+ c #8C0000", "0+ c #7D0000", "a+ c #6E0000", "b+ c #000095", "c+ c #0000A9", "d+ c #0000BA", "e+ c #0000CA", "f+ c #0000BF", "g+ c #0100B1", "h+ c #470064", "i+ c #A00000", "j+ c #970000", "k+ c #8A0000", "l+ c #7C0000", "m+ c #6F0000", "n+ c #680000", "o+ c #610000", "p+ c #00008B", "q+ c #000099", "r+ c #0000A8", "s+ c #0000B3", "t+ c #0000B4", "u+ c #0000B0", "v+ c #0000AB", "w+ c #0000A6", "x+ c #0B0094", "y+ c #6C002B", "z+ c #820000", "A+ c #750000", "B+ c #6A0000", "C+ c #660000", "D+ c #630000", "E+ c #00007D", "F+ c #00008A", "G+ c #00009B", "H+ c #00009D", "I+ c #000097", "J+ c #000092", "K+ c #1B0070", "L+ c #76000D", "M+ c #790000", "N+ c #670000", "O+ c #5E0000", "P+ c #00006D", "Q+ c #000073", "R+ c #00007B", "S+ c #000080", "T+ c #000082", "U+ c #000081", "V+ c #00007E", "W+ c #000079", "X+ c #300042", "Y+ c #6B0001", "Z+ c #640000", "`+ c #5B0000", " @ c #580000", ".@ c #00005D", "+@ c #000062", "@@ c #000063", "#@ c #01005F", "$@ c #450018", "%@ c #590000", "&@ c #540000", "*@ c #00004F", "=@ c #0A0045", "-@ c #450009", " . + @ ", " # $ % & * = - ; ", " > , ' ) ! ~ { ] ^ ", " / ( _ : < < ) ~ [ } ", " | 1 2 : : : : < ! 3 ] 4 ", " 5 6 7 8 : : : : : 9 0 a b c ", " d e f g h : i j i : : < ! k l m n ", " o p q r s t u j v w x y : : ) z A B C D ", " E F G G H I J K L M N O P : : ' Q * R S T U ", " V W W W W W X Y Z ` ...+.@.< ) #.$.%.B &.*.=. ", " -.W W W W ;.>.,.'.).!.W ~.{.].! ^./.(._.:.<.[. ", " -.W W W W W X }.X ;.W W |.1.2.3.4.5.6.7.8.9.[. ", " 0.W W W W W W W W W W a.b.c.d.e.$.a R f.g.*.h.i.", " c.W W W W W W W W W -.j.k.l.m.n.o.p.q.r.s.t.u. ", " v.-.W W W W W W |.-.w.x.v.y.z.A.B.C.D.E.F.G.H. ", " I.J.0.|.W W |.|.0.c.K.L.M.N.O.P.Q.R.S.T.U.V.W. ", " X.Y.Z.c.b.0.b.w.k.l.`. +.+++@+#+$+%+&+*+=+H.-+ ", " ;+N.>+,+Z.'+v.)+M.!+~+{+]+^+/+%+&+(+_+:+-+<+ ", " [+}+|+I.!+1+N..+2+3+4+5+6+7+S.8+9+0+a+-+<+ ", " b+c+d+}+4+e+e+4+}+f+d+g+h+i+j+k+l+m+n+<+o+ ", " p+q+r+[+s+t+s+u+v+w+x+y+(+z+A+B+C+D+o+ ", " E+F+b+G+H+H+G+I+J+K+L+M+m+N+D+o+O+ ", " P+Q+R+S+T+U+V+W+X+Y+Z+o+O+`+ @ ", " .@+@+@@@+@#@$@`+%@ @&@ ", " *@=@-@ "}; --Boundary-00=_klp//BK978XcUA+ Content-Type: image/x-xpm; name="draggableitem.xpm" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="draggableitem.xpm" /* XPM */ static char * draggableitem_xpm[] = { "25 25 301 2", " c None", ". c #02595D", "+ c #005E54", "@ c #006F3D", "# c #DA0000", "$ c #CB1B00", "% c #766F00", "& c #17CF02", "* c #01E203", "= c #00E001", "- c #00D800", "; c #00CC01", "> c #01B900", ", c #01AF00", "' c #039500", ") c #EA0000", "! c #F20000", "~ c #D32700", "{ c #46B700", "] c #02FC00", "^ c #00FE00", "/ c #00FD00", "( c #00FA00", "_ c #00F400", ": c #00EA00", "< c #00DC00", "[ c #00CD00", "} c #00B900", "| c #009E00", "1 c #008A00", "2 c #FA0100", "3 c #C63A00", "4 c #2ED200", "5 c #02FD00", "6 c #00FF00", "7 c #00EE00", "8 c #00E100", "9 c #00D000", "0 c #00BC00", "a c #00A400", "b c #F50000", "c c #FD0000", "d c #D22F00", "e c #34CD00", "f c #00F900", "g c #00ED00", "h c #00DD00", "i c #00CB00", "j c #00B800", "k c #009A00", "l c #008200", "m c #F40000", "n c #EF0010", "o c #B8004A", "p c #2E9E3B", "q c #00FD03", "r c #00F500", "s c #00E700", "t c #00D600", "u c #00C500", "v c #00AD00", "w c #009100", "x c #007200", "y c #B90044", "z c #4B00B6", "A c #1200EE", "B c #0027DC", "C c #00B156", "D c #00FA06", "E c #01FF01", "F c #02FF03", "G c #03FF03", "H c #00EC00", "I c #00B500", "J c #009D00", "K c #007B00", "L c #1700E8", "M c #0000FF", "N c #0011F2", "O c #02907B", "P c #0BF716", "Q c #16FF17", "R c #15FF16", "S c #0AFF0A", "T c #02FF02", "U c #00FB00", "V c #00DF00", "W c #00CF00", "X c #00BA00", "Y c #00A500", "Z c #008700", "` c #006C00", " . c #0600F5", ".. c #0101FF", "+. c #0A13F8", "@. c #2B80B5", "#. c #49EC66", "$. c #3FFF40", "%. c #1DFF1D", "&. c #06FF06", "*. c #00A800", "=. c #008E00", "-. c #0000FB", ";. c #0202FF", ">. c #1313FF", ",. c #4546FE", "'. c #6E91E6", "). c #58ED78", "!. c #27FF28", "~. c #08FF08", "{. c #00DE00", "]. c #00A900", "^. c #009000", "/. c #007400", "(. c #0000FC", "_. c #1111FF", ":. c #3836FF", "<. c #5351FF", "[. c #3E53F0", "}. c #1AA97B", "|. c #05FA0B", "1. c #00F600", "2. c #00E900", "3. c #00DB00", "4. c #00CC00", "5. c #00A700", "6. c #008F00", "7. c #0807FF", "8. c #1918FF", "9. c #2423FF", "0. c #0A1BF0", "a. c #01887D", "b. c #00F10F", "c. c #00F100", "d. c #00E400", "e. c #00C800", "f. c #00A300", "g. c #008C00", "h. c #007300", "i. c #0000FA", "j. c #0505FF", "k. c #0706FF", "l. c #0404FF", "m. c #0003FC", "n. c #006E93", "o. c #00E815", "p. c #00C200", "q. c #00AF00", "r. c #008600", "s. c #007100", "t. c #006B00", "u. c #0000F4", "v. c #0006F7", "w. c #0053A4", "x. c #00DE0F", "y. c #00E200", "z. c #03C500", "A. c #0CAE00", "B. c #1A8E00", "C. c #237200", "D. c #314E00", "E. c #3F2F00", "F. c #0000E9", "G. c #0000FD", "H. c #0000F7", "I. c #0001ED", "J. c #03657C", "K. c #24AB0B", "L. c #517D00", "M. c #6F5000", "N. c #803200", "O. c #891600", "P. c #860700", "Q. c #770000", "R. c #6C0000", "S. c #0000D7", "T. c #0000EF", "U. c #0000FE", "V. c #0000F9", "W. c #0000F3", "X. c #0000EB", "Y. c #0000E3", "Z. c #2E00AA", "`. c #B80016", " + c #C20000", ".+ c #B40000", "++ c #A60000", "@+ c #940000", "#+ c #810000", "$+ c #700000", "%+ c #6B0000", "&+ c #0000C7", "*+ c #0000DF", "=+ c #0000ED", "-+ c #0000EE", ";+ c #0000E7", ">+ c #0000E0", ",+ c #0000D8", "'+ c #5B0072", ")+ c #BF0004", "!+ c #B70000", "~+ c #A90000", "{+ c #9B0000", "]+ c #880000", "^+ c #760000", "/+ c #690000", "(+ c #0000C9", "_+ c #0000DA", ":+ c #0000E4", "<+ c #0000EA", "[+ c #0000EC", "}+ c #0000E5", "|+ c #0000D2", "1+ c #0200C8", "2+ c #91002E", "3+ c #B50000", "4+ c #8D0000", "5+ c #7A0000", "6+ c #6D0000", "7+ c #650000", "8+ c #0000AF", "9+ c #0000C4", "0+ c #0000D0", "a+ c #0000DB", "b+ c #0000DC", "c+ c #0000D9", "d+ c #0000D5", "e+ c #0000D1", "f+ c #0000CA", "g+ c #0000C3", "h+ c #1A00A1", "i+ c #AC0004", "j+ c #9A0000", "k+ c #8C0000", "l+ c #7D0000", "m+ c #6E0000", "n+ c #000095", "o+ c #0000A9", "p+ c #0000BA", "q+ c #0000C8", "r+ c #0000C5", "s+ c #0000C1", "t+ c #0000BB", "u+ c #0100B3", "v+ c #480064", "w+ c #A10000", "x+ c #970000", "y+ c #8A0000", "z+ c #7C0000", "A+ c #6F0000", "B+ c #680000", "C+ c #610000", "D+ c #00008B", "E+ c #000099", "F+ c #0000A8", "G+ c #0000B3", "H+ c #0000B4", "I+ c #0000B0", "J+ c #0000AB", "K+ c #0000A6", "L+ c #0B0094", "M+ c #6C002B", "N+ c #820000", "O+ c #750000", "P+ c #6A0000", "Q+ c #660000", "R+ c #630000", "S+ c #00007D", "T+ c #00008A", "U+ c #00009B", "V+ c #00009D", "W+ c #000097", "X+ c #000092", "Y+ c #1B0070", "Z+ c #76000D", "`+ c #790000", " @ c #670000", ".@ c #5E0000", "+@ c #00006D", "@@ c #000073", "#@ c #00007B", "$@ c #000080", "%@ c #000082", "&@ c #000081", "*@ c #00007E", "=@ c #000079", "-@ c #300042", ";@ c #6B0001", ">@ c #640000", ",@ c #5B0000", "'@ c #580000", ")@ c #00005D", "!@ c #000062", "~@ c #000063", "{@ c #01005F", "]@ c #450018", "^@ c #590000", "/@ c #540000", "(@ c #00004F", "_@ c #0A0045", ":@ c #450009", " . + @ ", " # $ % & * = - ; > , ' ", " ) ! ~ { ] ^ / ( _ : < [ } | 1 ", " ! 2 3 4 5 6 6 6 6 ^ ( 7 8 9 0 a 1 ", " b c d e 6 6 6 6 6 6 6 6 f g h i j k l ", " m n o p q 6 6 6 6 6 6 6 6 ^ r s t u v w x ", " y z A B C D E F G E 6 6 6 6 f H < i I J K ", " L M M M N O P Q R S T 6 6 6 U 7 V W X Y Z ` ", " .M M M M ..+.@.#.$.%.&.6 6 6 U 7 V 9 0 *.=.x ", " -.M M M M ;.>.,.'.).!.~.6 6 6 f g {.W 0 ].^./. ", " (.M M M M ;._.:.<.[.}.|.6 6 ^ 1.2.3.4.X 5.6./. ", " (.M M M M ..7.8.9.8.0.a.b.6 U c.d.t e.I f.g.h. ", " i.M M M M M ..j.k.l...m.n.o.r : {.9 p.q.J r.s.t.", " u.M M M M M M M M M M M v.w.x.y.t z.A.B.C.D.E. ", " F.(.M M M M M M M M M G.H.I.J.K.L.M.N.O.P.Q.R. ", " S.T.i.U.M M M M U.G.V.W.X.Y.Z.`. +.+++@+#+$+%+ ", " &+*+=+u.V.-.-.i.H.W.-+;+>+,+'+)+!+~+{+]+^+R./+ ", " (+_+:+<+=+=+[+F.}+>+_+|+1+2+3+~+{+4+5+6+/+7+ ", " 8+9+0+S.a+b+a+c+d+e+f+g+h+i+++j+k+l+m+/+7+ ", " n+o+p+9+q+f+f+(+r+s+t+u+v+w+x+y+z+A+B+7+C+ ", " D+E+F+8+G+H+G+I+J+K+L+M+4+N+O+P+Q+R+C+ ", " S+T+n+U+V+V+U+W+X+Y+Z+`+A+ @R+C+.@ ", " +@@@#@$@%@&@*@=@-@;@>@C+.@,@'@ ", " )@!@!@~@!@{@]@,@^@'@/@ ", " (@_@:@ "}; --Boundary-00=_klp//BK978XcUA+ Content-Type: text/ocaml-src; charset="us-ascii"; name="lablgtk2DnDTest_1.ml" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="lablgtk2DnDTest_1.ml" (* Variations on Jacques Garrigue's lablgtk2 example testdnd.ml*) (* this is a translation in Caml of the gtk+ example testdnd.c *) (* http://www.gtk.org/tutorial/ch-dragangdrop.html#SEC-DRAGANDDROPOVERVIEW a typical drag-and-drop cycle would look as follows: 1 Drag begins. 2 Drag data request (when a drop occurs). 3 Drop data received (may be on same or different application). 4 Drag data delete (if the drag was a move). 5 Drag-and-drop procedure done. *) open Gaux open Gtk open GObj open GMain (*.............................................................*) let dragIconPixmap = (GDraw.pixmap_from_xpm ~file:"./draggableitem.xpm" ());; let draggedIconPixmap = (GDraw.pixmap_from_xpm ~file:"./draggeditem.xpm" ());; let openTrashcanIconPxm = (GDraw.pixmap_from_xpm ~file:"./trashcan_open.xpm" ());; let closedTrashcanIconPxm = (GDraw.pixmap_from_xpm ~file:"./trashcan_closed.xpm" ());; let motionIndicatorArray = [|"/";"\\";"_"|];; let motionIndicatorArrayLen = Array.length motionIndicatorArray;; let motionIndicatorRefCounter = ref 0;; (*.............................................................*) let window1 = GWindow.window ~title:"DnD Sources Plus One Receiver" ~width:300 ~height:150 ();; let _ = window1#misc#realize ();; let window2 = GWindow.window ~title:"DnD Receiver" ~height:150 ();; let _ = window2#misc#realize ();; (*.............................................................*) (* "You will need to set up your destination widgets to receive certain drag * and drop types by specifing a name and/or number. It would be more reliable * to use a name since another application may just happen to use the same * number for for an entirely different meaning." *) let (dndTargets:(Gtk.target_entry) list) = [ { target = "A_STRING"; flags = []; info = 0 }; { target = "A_STRING_OF_FLOAT"; flags = []; info = 1} ];; (*.............................................................*) (*let's start with a new, clean handler*) class neutralDragHandler = object method private beginning (_ : drag_context) = () method private data_delete (_ : drag_context) = () method private data_get (_ : drag_context) (_ : selection_context) ~info:(_ : int) ~(time: int32) = () method private data_received (_ : drag_context) ~(x: int) ~(y: int) (_ : selection_data) ~(info:int) ~(time: int32) = () method private drop (_ : drag_context) ~(x: int) ~(y: int) ~(time: int32) = false method private ending (_ : drag_context) = () method private leave (_ : drag_context) ~(time: int32) = () method private motion (_ : drag_context) ~(x: int) ~(y: int) ~(time: int32) = false end;; (*.............................................................*) class trashcanTargetForDrag ?packing ?show () = let (thrashcanPixmap:GMisc.image) = GMisc.pixmap closedTrashcanIconPxm ?packing ?show () in object (self) inherit widget (thrashcanPixmap#as_widget) inherit neutralDragHandler val mutable have_drag = false method leave _ ~time = print_endline "Item leaving thrashcan area"; flush stdout; have_drag <- false; thrashcanPixmap#set_pixmap closedTrashcanIconPxm method motion (context:GObj.drag_context) ~(x:int) ~(y:int) ~(time:int32) = let () = GtkBase.DnD.highlight (thrashcanPixmap#as_widget) in (*can't see this working*) let () = if (not have_drag) then (*our target should receive _one_ drag at a time*) ( have_drag <- true; thrashcanPixmap#set_pixmap openTrashcanIconPxm ) else () in let () = let () = (Printf.printf "%s" motionIndicatorArray.((!motionIndicatorRefCounter mod motionIndicatorArrayLen )); flush stdout) in incr motionIndicatorRefCounter in let () = context#status [context#suggested_action] ~time (* ??? *) in true method data_received aContext ~x ~y (receivedData:GObj.selection_data) ~info ~time = if (receivedData#format) = 8 then (* "The unit length of the data in bits (e.g. 8 for a string or 32 of an integer)"*) ( let () = let sourceTypeName (* what widget is the drag_source ? *) = try aContext#source_widget#misc#get_type with Gpointer.Null -> "unknown" in (Printf.printf "Trashcan received \"%s\" from a %s\n" receivedData#data sourceTypeName ; flush stdout) in (aContext#finish ~success:true ~del:false ~time ) ) else (aContext#finish ~success:false ~del:false ~time); method drop aContext ~x ~y ~time = (* this method contains a data_request to the source and is connected later on to the drag_drop signal *) let () = (prerr_endline "Dropping on trashcan"; flush stdout) in let () = (*free the flag*) have_drag <- false in let () = thrashcanPixmap#set_pixmap closedTrashcanIconPxm in false initializer (* GTK+ 2.0 Tutorial says: "A GDK_ACTION_COPY would be a typical drag-and-drop * without the source data being deleted * while GDK_ACTION_MOVE would be just like GDK_ACTION_COPY * but the source data will be 'suggested' to be deleted after * the received signal handler is called"*) thrashcanPixmap#drag#dest_set [(List.find (fun tgt -> (tgt.target = "A_STRING") ) dndTargets)] ~actions:[`COPY ]; thrashcanPixmap#drag#connect#leave ~callback:self#leave; thrashcanPixmap#drag#connect#motion ~callback:self#motion; thrashcanPixmap#drag#connect#drop ~callback:self#drop; thrashcanPixmap#drag#connect#data_received ~callback:self#data_received; () end;; (*.............................................................*) class areaTargetForDrag ?packing ?show () = let refDataAccum = ref [] in let targetAreaLabel = GMisc.label ~text:"Drop Here\n" ?packing ?show () in object (self) inherit widget targetAreaLabel#as_widget inherit neutralDragHandler method drop aContext ~x ~y ~time = (* this method contains a data_request to the source and is connected later on to the drag_drop signal *) let () = (prerr_endline "Dropping on target area"; flush stdout) in false; method data_received aContext ~x ~y receivedData ~info ~time = ( ( if (receivedData#format = 8) then ( let () = (Printf.printf "Target area received \"%s\"\n" receivedData#data; flush stdout ) in let () = refDataAccum := ((float_of_string receivedData#data)::!refDataAccum) in let meanValNow = ((List.fold_left (+.) 0. !refDataAccum) /. (float (List.length !refDataAccum)) ) in let droppedItemsStr = (List.fold_left (fun a b -> (a^";"^(string_of_float b))) "" (List.rev !refDataAccum) ) in let () = targetAreaLabel#set_text ("You Have Just\nDropped "^ (receivedData#data)^ "\n\n So The Overall Dropped Items List is \n ["^ droppedItemsStr^ "] \n\nAverage Is Now "^ (string_of_float meanValNow)) in (aContext#finish ~success:true ~del:false ~time ) ) else (aContext#finish ~success:true ~del:false ~time ) ) ) initializer targetAreaLabel#drag#dest_set [(List.find (fun tgt -> (tgt.target = "A_STRING_OF_FLOAT") ) dndTargets)] ~actions:[`COPY ]; targetAreaLabel#drag#connect#drop ~callback:self#drop; targetAreaLabel#drag#connect#data_received ~callback:self#data_received; () end (*.............................................................*) class buttonSourceOfDrag ?packing ?show () = let aButton = GButton.button ?packing ?show () in let vbox = GPack.vbox ~border_width:2 ~packing:(aButton#add) ~show:true () in let buttonPxm = GMisc.pixmap dragIconPixmap ~packing:(vbox#pack ~padding:3 ~expand:true ~fill:true) () in let buttonLabel = GMisc.label ~text:"Drag me\n" ~packing:(vbox#pack ~padding:3) () in let contentUpdateCounter = ref 0 in object (self) inherit widget (aButton#as_widget) inherit neutralDragHandler method beginning aContext = print_endline "Item dragged!"; flush stdout; method data_get _ sel ~info ~time = match info with | 0 -> sel#return "Oh! Here I land." | 1 -> let () = (incr contentUpdateCounter) in sel#return ~format:8 (string_of_float ((float !contentUpdateCounter) *. 3.)) | _ -> () method data_delete _ = print_endline "Delete the data!"; flush stdout initializer (aButton#drag#source_set dndTargets ~modi:[`BUTTON1] ~actions:[`COPY ]; aButton#drag#source_set_icon draggedIconPixmap; aButton#drag#connect#beginning ~callback:self#beginning; aButton#drag#connect#data_get ~callback:self#data_get; aButton#drag#connect#data_delete ~callback:self#data_delete; () ) end (*.............................................................*) class imageSourceOfDrag ?packing ?show () = let (aImage:GMisc.image) = (GMisc.pixmap dragIconPixmap ?packing ?show ()) in let contentUpdateCounter = ref 0 in object (self) inherit widget (aImage#as_widget) inherit neutralDragHandler method beginning aContext = print_endline "Item dragged!"; flush stdout; method data_get _ sel ~info ~time = match info with | 0 -> sel#return "Oh! Here I land." | 1 -> let () = (incr contentUpdateCounter) in sel#return ~format:8 (string_of_float ((float !contentUpdateCounter) *. 3.)) | _ -> () method data_delete _ = print_endline "Delete the data!"; flush stdout initializer ( aImage#drag#source_set dndTargets ~modi:[`BUTTON1] ~actions:[`COPY ]; aImage#drag#source_set_icon draggedIconPixmap; aImage#drag#connect#beginning ~callback:self#beginning; aImage#drag#connect#data_get ~callback:self#data_get; aImage#drag#connect#data_delete ~callback:self#data_delete; () ) end (*.............................................................*) let main () = let hbox = GPack.hbox ~border_width:2 ~packing:(window1#add) ~show:true () in let aDnDSource = new buttonSourceOfDrag ~packing:(hbox #add) () in let imageSourceVbox = GPack.vbox ~border_width:2 ~packing:(hbox#add) ~show:true () in let anotherDnDSource = new imageSourceOfDrag ~packing:(imageSourceVbox #pack ~expand:true ~fill:true) () in let aDnDSourceLabel = GMisc.label ~text:"Can you\ndrag me too?\n"~packing:(imageSourceVbox #add) () in let aDnDTarget = new trashcanTargetForDrag ~packing:(hbox #add) () in let anotherDnDTarget = new areaTargetForDrag ~packing:(window2#add) () in let () = ( window1#connect#destroy ~callback: Main.quit; window1#show (); window2#connect#destroy ~callback: Main.quit; window2#show () ) in Main.main () ;; (*.............................................................*) let _ = main () ;; (*.............................................................*) --Boundary-00=_klp//BK978XcUA+ Content-Type: image/x-xpm; name="trashcan_open.xpm" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="trashcan_open.xpm" /* XPM */ static char * trashcan_open_xpm[] = { "25 25 243 2", " c None", ". c #C9C9DD", "+ c #E5E5EF", "@ c #F5F5F9", "# c #FAFAFB", "$ c #EFEFF4", "% c #BABAD0", "& c #E3E3EB", "* c #F1F1F6", "= c #F8F8FB", "- c #FAFAFC", "; c #FCFCFD", "> c #FEFDFE", ", c #E5E8F3", "' c #B3B3CC", ") c #E5E5EE", "! c #EEEEF4", "~ c #F8F8FA", "{ c #FBFBFD", "] c #C1CDE9", "^ c #C0C0D6", "/ c #DEDEEA", "( c #E6E6EF", "_ c #EAEAF1", ": c #F2F2F7", "< c #FFFFFF", "[ c #E8EDF7", "} c #A5D4F4", "| c #75BCF2", "1 c #8E8EB4", "2 c #C3C3D8", "3 c #D9D9E7", "4 c #DBDBE8", "5 c #E1E1EC", "6 c #EAEAF2", "7 c #EFEFF5", "8 c #F6F6FA", "9 c #FDFDFE", "0 c #DDE5F2", "a c #BADEF3", "b c #C6EFFD", "c c #ACDCF9", "d c #BCBCD2", "e c #CECEE0", "f c #D1D1E2", "g c #D6D6E5", "h c #DCDCE9", "i c #E1E1ED", "j c #E7E7F0", "k c #EBEBF3", "l c #F9F9FB", "m c #F7F8FB", "n c #D1D9ED", "o c #D8ECFA", "p c #CBF1FD", "q c #D2F1FD", "r c #A1A1C4", "s c #C7C7DB", "t c #CBCBDF", "u c #CCCCDF", "v c #D0D0E2", "w c #D7D7E6", "x c #DDDDEA", "y c #E2E2ED", "z c #F3F3F7", "A c #FEFEFF", "B c #FEFEFE", "C c #F4F5F9", "D c #F7F8FC", "E c #F8FAFD", "F c #E1F2FC", "G c #DCF6FD", "H c #6BA6F3", "I c #B7B7D1", "J c #CDCDDF", "K c #CACADF", "L c #FCFCFE", "M c #FBFBFE", "N c #F4F7FC", "O c #F0F4FA", "P c #D4EDF9", "Q c #4E9CF4", "R c #B8B8D2", "S c #C7C7DD", "T c #F6F6F9", "U c #F8F9FD", "V c #FAFAFE", "W c #F9FBFE", "X c #A8DBFA", "Y c #1486F1", "Z c #B2B2CE", "` c #CCCCDE", " . c #FEFFFF", ".. c #FDFCFE", "+. c #F1F8FE", "@. c #B9E4FD", "#. c #3FB3F8", "$. c #0480F1", "%. c #BABDD5", "&. c #EEEFF6", "*. c #FDFEFF", "=. c #FDFEFE", "-. c #FAFEFF", ";. c #EBF8FE", ">. c #C5E9FD", ",. c #9BD8FC", "'. c #82CEFB", "). c #4FBAFA", "!. c #32AEF7", "~. c #0782F1", "{. c #B5BCDC", "]. c #DDF1FA", "^. c #F0F9FC", "/. c #FAFEFE", "(. c #FDFFFF", "_. c #FCFEFF", ":. c #F6FEFF", "<. c #DFF7FF", "[. c #B2E5FD", "}. c #76CBFB", "|. c #54BCF9", "1. c #58BEFA", "2. c #58BDFA", "3. c #35AFF7", "4. c #C3EBFB", "5. c #EBFBFD", "6. c #F3FBFE", "7. c #FAFDFE", "8. c #FBFEFF", "9. c #F3FDFF", "0. c #D8F5FE", "a. c #A7E1FD", "b. c #6FC8FA", "c. c #5DBFFA", "d. c #5DC0FA", "e. c #59BEFA", "f. c #34AFF7", "g. c #C2EAFB", "h. c #E8FCFF", "i. c #EDFCFF", "j. c #F9FDFE", "k. c #FCFFFF", "l. c #F5FEFF", "m. c #DCF7FF", "n. c #ADE4FD", "o. c #76CCFB", "p. c #63C3FA", "q. c #5FC1FA", "r. c #E9FCFF", "s. c #F4FEFF", "t. c #DBF7FF", "u. c #ACE3FD", "v. c #75CBFA", "w. c #C0E9FB", "x. c #EBFDFF", "y. c #F3FDFE", "z. c #FCFEFE", "A. c #F3FEFF", "B. c #D7F5FE", "C. c #70C8FA", "D. c #60C1FA", "E. c #5ABFFA", "F. c #31AEF7", "G. c #0882F1", "H. c #C4EAFB", "I. c #F0FCFF", "J. c #D1F2FD", "K. c #9DDBFB", "L. c #62C0F8", "M. c #4EB6F6", "N. c #47B2F5", "O. c #41B0F5", "P. c #2CAAF5", "Q. c #0B85F1", "R. c #DAF1FD", "S. c #F7FDFE", "T. c #FBFDFE", "U. c #EFFCFF", "V. c #D1F2FE", "W. c #9DDCFB", "X. c #65C2F8", "Y. c #55B9F7", "Z. c #3EAFF5", "`. c #30AAF4", " + c #2B92F0", ".+ c #E2F2FC", "++ c #F7FCFE", "@+ c #F5FCFE", "#+ c #D2F2FE", "$+ c #9EDDFC", "%+ c #68C4F9", "&+ c #5CBFF9", "*+ c #56BCF9", "=+ c #4AB6F8", "-+ c #6ABCF1", ";+ c #7EB6F1", ">+ c #D7E8F8", ",+ c #F0FDFF", "'+ c #D0F2FE", ")+ c #9ADBFC", "!+ c #62C2F9", "~+ c #5EC0F9", "{+ c #6AC3F9", "]+ c #87CAF6", "^+ c #DFEBF5", "/+ c #ACD0F9", "(+ c #C6E1F7", "_+ c #F8FEFF", ":+ c #E7F9FF", "<+ c #CDEEFE", "[+ c #B0E0FC", "}+ c #B9E1FB", "|+ c #E2EFFA", "1+ c #F4F6FA", "2+ c #F9F8FB", "3+ c #92BFF6", "4+ c #A4D4F8", "5+ c #E8F1FA", "6+ c #FBFBFC", "7+ c #FCFDFE", "8+ c #E7E9F4", "9+ c #95B3E5", "0+ c #89C5F4", "a+ c #C8E0F8", "b+ c #EBF2FB", "c+ c #F7F9FD", "d+ c #E6E6F0", "e+ c #E2E2EC", "f+ c #F7F7FB", "g+ c #D3D3E3", "h+ c #5FA8EE", "i+ c #C2D9F4", "j+ c #C9DCF7", "k+ c #CBDEF9", "l+ c #CCDEF9", "m+ c #DCE3F4", "n+ c #BEC0D9", "o+ c #DDDDE9", "p+ c #ECECF3", "q+ c #CDCDE0", "r+ c #CDCFE0", "s+ c #E2E2EA", "t+ c #E1E1EA", " . + @ # $ ", " % & * = - ; > , ", " ' ) ! * @ ~ - ; { ] ", " ^ / ( _ ! : @ = { < [ } | ", " 1 2 3 4 5 ( 6 7 : 8 9 < 0 a b c ", " d e f g h i j k 7 l < m n o p q ", " r s t u v w x y ( z A B C D E F G H ", " I J t K t f w 5 : B < L M E N O P Q ", " R u . S S J j T < A 9 { { U V W X Y ", " Z ` w x + z L .A > ....9 L +.@.#.$. ", " %.&.A .9 *.=. . .-.;.>.,.'.).!.~. ", " {. ].^./.(._.:.<.[.}.|.1.2.3.~. ", " 4.5.6.7.8.9.0.a.b.c.d.e.f.~. ", " g.h.i.j.k.l.m.n.o.p.q.e.f.~. ", " g.r.i.j._.s.t.u.v.p.q.e.f.~. ", " w.x.y.z.8.A.B.a.C.D.E.|.F.G. ", " H.:.8.z.7.I.J.K.L.M.N.O.P.Q. ", " R./.S.T.j.U.V.W.X.Y.M.Z.`. + ", " .+++@+8.-.I.#+$+%+&+*+=+-+;+ ", " >+T.-._.8.,+'+)+!+~+{+]+^+/+ ", " (+l ..B (._+:+<+[+}+|+1+2+3+ ", " 4+5+l 6+9 9 B A A 7+- T 8+9+ ", " 0+a+b+c+; B B 7+d+e+7 f+g+ ", " h+i+j+k+l+m+n+o+p+7 q+ ", " r+s+t+ "}; --Boundary-00=_klp//BK978XcUA+ Content-Type: image/x-xpm; name="trashcan_closed.xpm" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="trashcan_closed.xpm" /* XPM */ static char * trashcan_closed_xpm[] = { "17 25 262 2", " c None", ". c #7373A2", "+ c #8686AE", "@ c #8E8EB4", "# c #8B8BB2", "$ c #7878A5", "% c #AFAFCC", "& c #BFBFD4", "* c #C9C9DC", "= c #D2D2E2", "- c #DADAE7", "; c #E0E0EB", "> c #E6E6EF", ", c #E8E8EF", "' c #E3E3EC", ") c #C6C6DC", "! c #9E9EC2", "~ c #C0C0D7", "{ c #CCCCDF", "] c #CBCBDF", "^ c #CECEE0", "/ c #D6D6E5", "( c #DDDDEA", "_ c #E5E5EE", ": c #EBEBF2", "< c #F0F0F5", "[ c #F5F5F8", "} c #F8F8FB", "| c #F3F3F7", "1 c #B9B9D3", "2 c #CDCDDF", "3 c #CDCDE0", "4 c #DEDEEA", "5 c #F4F4F8", "6 c #FCFCFD", "7 c #FAFAFC", "8 c #C9C9DD", "9 c #C1C1D7", "0 c #CACADE", "a c #D6D6E6", "b c #E4E4EE", "c c #EAEAF3", "d c #F0F0F6", "e c #F5F5F9", "f c #FBFBFD", "g c #FEFEFE", "h c #F1F1F5", "i c #CFD1E3", "j c #E4E4EF", "k c #C7C7DD", "l c #E5E5EF", "m c #EBEBF3", "n c #FBFBFC", "o c #FDFDFE", "p c #DADEEC", "q c #C7CCE4", "r c #FEFEFF", "s c #F6F6FA", "t c #DCDCE9", "u c #D7D7E6", "v c #DBDBE8", "w c #DEDEEB", "x c #E3E3EE", "y c #E9E9F2", "z c #EFEFF5", "A c #F9F9FB", "B c #BEC8E5", "C c #98A8D7", "D c #FFFFFF", "E c #F6F6F9", "F c #FCFCFE", "G c #A4AFD8", "H c #8BAEE2", "I c #BCC4DB", "J c #DBDCE9", "K c #F9FAFD", "L c #BBC6E2", "M c #4A7CD5", "N c #A3CBF3", "O c #D6E8F3", "P c #DAE8F1", "Q c #D4D8E8", "R c #D5D7E9", "S c #E5EAF4", "T c #F1F4FA", "U c #F6F8FB", "V c #F6F7FB", "W c #EFF3F9", "X c #DFE7F4", "Y c #A9BFE3", "Z c #709BD7", "` c #2D95E8", " . c #0776EC", ".. c #A2CBF3", "+. c #E0F4FB", "@. c #E6FBFE", "#. c #F5FAFD", "$. c #F5F8FB", "%. c #E5EEF6", "&. c #CCDEEE", "*. c #B0CAE7", "=. c #8BB5E2", "-. c #5B9CDE", ";. c #4399E4", ">. c #2A9DEE", ",. c #179EF3", "'. c #109DF5", "). c #0679EF", "!. c #A2CAF3", "~. c #E5FBFF", "{. c #F7FDFF", "]. c #FAFEFF", "^. c #F4FCFF", "/. c #DEF8FE", "(. c #AEE5FB", "_. c #63C4F8", ":. c #2EAAF5", "<. c #25A6F4", "[. c #21A4F4", "}. c #19A1F4", "|. c #129EF5", "1. c #0779EF", "2. c #F9FDFF", "3. c #DDF8FE", "4. c #AEE4FB", "5. c #65C3F7", "6. c #30AAF4", "7. c #29A7F4", "8. c #22A5F4", "9. c #1BA1F4", "0. c #A1CAF3", "a. c #F3FCFF", "b. c #DDF7FE", "c. c #ADE4FB", "d. c #63C2F7", "e. c #30A9F4", "f. c #27A6F4", "g. c #1AA1F4", "h. c #98C3F2", "i. c #DFF4FB", "j. c #F8FDFF", "k. c #FAFDFE", "l. c #F5FCFE", "m. c #E2F8FD", "n. c #B7E7FB", "o. c #74C8F7", "p. c #42AFF4", "q. c #32A9F3", "r. c #26A5F4", "s. c #087AEF", "t. c #94C0F1", "u. c #E1F4FB", "v. c #EFFCFF", "w. c #FBFEFE", "x. c #FCFEFF", "y. c #F8FEFF", "z. c #E5FAFE", "A. c #BCE9FB", "B. c #7DCCF8", "C. c #52B6F5", "D. c #47B1F4", "E. c #3AACF3", "F. c #28A5F3", "G. c #159EF5", "H. c #087BEF", "I. c #A5CCF4", "J. c #EDF8FC", "K. c #F9FEFF", "L. c #FCFDFE", "M. c #F6FDFE", "N. c #E4F9FE", "O. c #BBE9FC", "P. c #7FCDF9", "Q. c #54B9F6", "R. c #46B2F4", "S. c #40AEF3", "T. c #22A3F4", "U. c #0D7DEF", "V. c #B7D4F7", "W. c #F6FBFE", "X. c #F5FDFE", "Y. c #FBFDFE", "Z. c #F6FCFF", "`. c #BDEAFD", " + c #81CFFA", ".+ c #5BBDF8", "++ c #55BAF7", "@+ c #4CB6F6", "#+ c #39AEF4", "$+ c #37A9F2", "%+ c #3B92EE", "&+ c #C1D7F7", "*+ c #F2FBFD", "=+ c #FAFDFF", "-+ c #E4F9FF", ";+ c #BEEBFD", ">+ c #82D0FA", ",+ c #5FC0F9", "'+ c #59BEF9", ")+ c #50BBF9", "!+ c #4DB6F6", "~+ c #95C8EE", "{+ c #7EB1F2", "]+ c #BED3F5", "^+ c #F4F5FB", "/+ c #FBFEFF", "(+ c #FDFEFF", "_+ c #F7FEFF", ":+ c #E3F9FF", "<+ c #B9EAFD", "[+ c #7ACDFA", "}+ c #55BDF9", "|+ c #69C3F9", "1+ c #81CAF7", "2+ c #B4D9F3", "3+ c #F3F7FA", "4+ c #8FBEF7", "5+ c #B3CDF2", "6+ c #E7ECF8", "7+ c #FEFFFF", "8+ c #FCFFFF", "9+ c #F4FDFF", "0+ c #E3F6FF", "a+ c #C9EBFD", "b+ c #B9E3FC", "c+ c #CFEAFB", "d+ c #ECF2F9", "e+ c #EFF0F5", "f+ c #E3E7F4", "g+ c #75ABF0", "h+ c #B9D0F3", "i+ c #F5F6FB", "j+ c #FEFDFE", "k+ c #F9F9FC", "l+ c #E2E3EE", "m+ c #E2E1EC", "n+ c #F0EFF5", "o+ c #BCC6E4", "p+ c #4988E5", "q+ c #88B1ED", "r+ c #D9E4F8", "s+ c #ECF2FB", "t+ c #FAFBFD", "u+ c #D0D1E3", "v+ c #D4D4E4", "w+ c #F1F2F7", "x+ c #B2B2CD", "y+ c #3B81E6", "z+ c #7FAAEA", "A+ c #D1DDF5", "B+ c #C8D9F7", "C+ c #CDDFFA", "D+ c #BBCBED", "E+ c #939AC9", "F+ c #CECFE1", "G+ c #E8E8F0", "H+ c #E9E9F1", "I+ c #E1E1EC", "J+ c #ACACC9", "K+ c #ADADCD", "L+ c #C1C1D8", "M+ c #C3C3D7", " . + @ # $ ", " % & * = - ; > , ' ) ", " ! ~ { ] ^ / ( _ : < [ } | _ ", " 1 2 ] ] 3 / 4 _ : < 5 } 6 7 8 ", " 9 { 8 0 3 a 4 b c d e } f g h ", " i j 3 k { / 4 l m d e } n o p ", " q r s t u v w x y z e A 6 o B ", " C d D D f E | | e A 6 r D F G ", " H I J 6 r D D D D D D g K L M ", " N O P Q R S T U V W X Y Z ` . ", " ..+.@.#.$.%.&.*.=.-.;.>.,.'.). ", " !.+.~.{.].^./.(._.:.<.[.}.|.1. ", " !.+.~.{.2.^.3.4.5.6.7.8.9.|.1. ", " 0.+.~.{.2.a.b.c.d.e.f.[.g.|.1. ", " h.i.~.j.k.l.m.n.o.p.q.r.g.|.s. ", " t.u.v.w.x.y.z.A.B.C.D.E.F.G.H. ", " I.J.K.x.L.M.N.O.P.Q.R.S.E.T.U. ", " V.W.X.k.Y.Z.N.`. +.+++@+#+$+%+ ", " &+#.*+=+x.{.-+;+>+,+'+)+!+~+{+ ", " ]+^+/+x.(+_+:+<+[+}+|+1+2+3+4+ ", " 5+6+f o 7+8+9+0+a+b+c+d+e+f+g+ ", " h+i+7 6 o j+g r k+l+m+n+o+ ", " p+q+r+s+t+o g } u+v+_ 5 w+x+ ", " y+z+A+B+C+D+E+F+G+H+I+J+ ", " K+L+M+ "}; --Boundary-00=_klp//BK978XcUA+--