You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

VMyDragSource.java 3.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package com.vaadin.tests.dd;
  2. import com.google.gwt.dom.client.NativeEvent;
  3. import com.google.gwt.event.dom.client.MouseDownEvent;
  4. import com.google.gwt.event.dom.client.MouseDownHandler;
  5. import com.google.gwt.event.dom.client.MouseMoveEvent;
  6. import com.google.gwt.event.dom.client.MouseMoveHandler;
  7. import com.google.gwt.event.dom.client.MouseOutEvent;
  8. import com.google.gwt.event.dom.client.MouseOutHandler;
  9. import com.google.gwt.user.client.ui.Composite;
  10. import com.google.gwt.user.client.ui.FlowPanel;
  11. import com.google.gwt.user.client.ui.HTML;
  12. import com.google.gwt.user.client.ui.Widget;
  13. import com.vaadin.terminal.gwt.client.ApplicationConnection;
  14. import com.vaadin.terminal.gwt.client.VPaintableWidget;
  15. import com.vaadin.terminal.gwt.client.UIDL;
  16. import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager;
  17. import com.vaadin.terminal.gwt.client.ui.dd.VTransferable;
  18. /**
  19. * Example code to implement Component that has something to drag.
  20. */
  21. public class VMyDragSource extends Composite implements VPaintableWidget,
  22. MouseDownHandler, MouseMoveHandler, MouseOutHandler {
  23. private boolean mouseDown;
  24. private MouseDownEvent mDownEvent;
  25. @SuppressWarnings("unused")
  26. private ApplicationConnection client;
  27. public VMyDragSource() {
  28. FlowPanel fp = new FlowPanel();
  29. initWidget(fp);
  30. HTML html = new HTML("DragThis");
  31. fp.add(html);
  32. html.addMouseDownHandler(this);
  33. html.addMouseMoveHandler(this);
  34. html.addMouseOutHandler(this);
  35. }
  36. public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
  37. if (client.updateComponent(this, uidl, true)) {
  38. return;
  39. }
  40. this.client = client;
  41. }
  42. /*
  43. * Below a sophisticated drag start implementation. Drag event is started if
  44. * mouse is moved 5 pixels with left mouse key down.
  45. */
  46. public void onMouseDown(MouseDownEvent event) {
  47. if (event.getNativeButton() == NativeEvent.BUTTON_LEFT) {
  48. mouseDown = true;
  49. mDownEvent = event;
  50. }
  51. }
  52. public void onMouseMove(MouseMoveEvent event) {
  53. if (mouseDown) {
  54. int deltaX = Math.abs(mDownEvent.getClientX() - event.getClientX());
  55. int deltaY = Math.abs(mDownEvent.getClientY() - event.getClientY());
  56. if (deltaX > 5 || deltaY > 5) {
  57. // Start the drag and drop operation
  58. // create Transferable, that contains the payload
  59. VTransferable transferable = new VTransferable();
  60. transferable.setData("Text", "myPayload");
  61. // Tell DragAndDropManager to start a drag and drop operation.
  62. // Also let it handle all events (last parameter true). Could
  63. // also do all event handling here too.
  64. VDragAndDropManager.get().startDrag(transferable,
  65. mDownEvent.getNativeEvent(), true);
  66. mouseDown = false;
  67. mDownEvent = null;
  68. }
  69. }
  70. }
  71. public void onMouseOut(MouseOutEvent event) {
  72. mouseDown = false;
  73. mDownEvent = null;
  74. }
  75. public Widget getWidgetForPaintable() {
  76. return this;
  77. }
  78. }