Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SWT Drag-N-Drop  & Clipboard Praveen Innamuri
Agenda <ul><li>Drag & Drop </li></ul><ul><ul><li>Drag Source </li></ul></ul><ul><ul><li>Drop Target </li></ul></ul><ul><ul...
Dragging and Dropping.....
Drag and Drop <ul><li>What is the use of Drag-N-Drop ? </li></ul><ul><li>Entities in Drag-N-Drop : </li></ul><ul><ul><li>D...
Type of Drop Operations <ul><ul><li>int operations = DND.DROP_MOVE | DND.DROP_COPY; DragSource source = new DragSource(lab...
Transfer Types Transfer[] types = new Transfer[] {TextTransfer.getInstance()}; source.setTransfer(types);
DragSourceEvent <ul><li>public int detail; // Move, Copy, Link, None etc. </li></ul><ul><li>public boolean doit; //true or...
DragSourceListener –  Events of  DragSource  <ul><li>DragStart  : </li></ul><ul><ul><li>Notified when the drag is started ...
DropTargetEffect : Feedback Options <ul><li>FEEDBACK_NONE </li></ul><ul><li>FEEDBACK_SELECT </li></ul><ul><li>FEEDBACK_INS...
Drop Target Events <ul><li>DragEnter </li></ul><ul><ul><li>Indicates that cursor enters the bounds of the drop target widg...
Drop Target Events  (contd......) <ul><li>DragOperationChange </li></ul><ul><ul><li>This event occurs when the user presse...
Drop Target Events  (contd......) <ul><li>DropAccept </li></ul><ul><ul><li>This event provides the application with one la...
Possible sequence of Events.. <ul><li>DragSourceEvents - </li></ul><ul><ul><li>dragStart </li></ul></ul><ul><ul><li>dragSt...
Defining Own Transfer Type <ul><li>Extend existing predefine transfer types : ByteArrayTransferType </li></ul><ul><li>Meth...
Clipboard <ul><li>Selection vs Primary Clipboard </li></ul><ul><li>Setting clipboard contents – multiple data types can be...
Thank YOU Q & A ?
Upcoming SlideShare
Loading in …5
×

Dn d clipboard

607 views

Published on

  • Be the first to comment

  • Be the first to like this

Dn d clipboard

  1. 1. SWT Drag-N-Drop & Clipboard Praveen Innamuri
  2. 2. Agenda <ul><li>Drag & Drop </li></ul><ul><ul><li>Drag Source </li></ul></ul><ul><ul><li>Drop Target </li></ul></ul><ul><ul><li>Drag/Drop Events and Operations </li></ul></ul><ul><ul><li>Feedback </li></ul></ul><ul><li>Transfer Types </li></ul><ul><li>Defining your own Transfer Type </li></ul><ul><li>Clipboard </li></ul><ul><ul><li>Primary Clipboard vs Selection Clipboard </li></ul></ul><ul><ul><li>Setting/Getting multiple content types altogether </li></ul></ul>
  3. 3. Dragging and Dropping.....
  4. 4. Drag and Drop <ul><li>What is the use of Drag-N-Drop ? </li></ul><ul><li>Entities in Drag-N-Drop : </li></ul><ul><ul><li>DragSource. </li></ul></ul><ul><ul><li>DropTarget. </li></ul></ul><ul><ul><li>Transfer data - Text/Image. </li></ul></ul><ul><ul><li>Kind of drag/drop actions - Move/Copy/Link. </li></ul></ul><ul><ul><li>Interaction between DragSource and DropTarget. with drag-and-drop operation using listeners. </li></ul></ul>
  5. 5. Type of Drop Operations <ul><ul><li>int operations = DND.DROP_MOVE | DND.DROP_COPY; DragSource source = new DragSource(label, operations); </li></ul></ul><ul><li>DROP_COPY </li></ul><ul><li>DROP_MOVE Data is moved from source to target </li></ul><ul><li>DROP_LINK A link of data is created at target </li></ul><ul><li>DROP_TARGET_MOVE Applicable to non-SWT applications </li></ul><ul><li>DROP_DEFAULT </li></ul><ul><li>DROP_NONE </li></ul>
  6. 6. Transfer Types Transfer[] types = new Transfer[] {TextTransfer.getInstance()}; source.setTransfer(types);
  7. 7. DragSourceEvent <ul><li>public int detail; // Move, Copy, Link, None etc. </li></ul><ul><li>public boolean doit; //true or false </li></ul><ul><li>public TransferData dataType; //data that is transferred </li></ul><ul><li>public Image image; //DragSourceEffect </li></ul>DropTargetEvent <ul><li>public int detail; //choose from operations </li></ul><ul><li>public int operations; //(DROP_NONE, DROP_MOVE etc..) </li></ul><ul><li>public int feedback; //feedback_insert/expand/scroll etc. </li></ul><ul><li>public TransferData currentDataType; //type of data that will be dropped </li></ul><ul><li>public TransferData[] dataTypes; //all supported data types by source </li></ul>
  8. 8. DragSourceListener – Events of DragSource <ul><li>DragStart : </li></ul><ul><ul><li>Notified when the drag is started at drag source. </li></ul></ul><ul><ul><li>Cancel the operation if no valid items are currently selected. </li></ul></ul><ul><ul><li>One can defer to set the transfer type in this event. </li></ul></ul><ul><ul><li>DragSourceEffect : Provide custom image to the drag cursor. </li></ul></ul><ul><li>DragSetData : </li></ul><ul><ul><li>Invoked when the data is requested. </li></ul></ul><ul><ul><li>Once the operation is started, it has to provide the requested data, otherwise, DnD contract is violated. </li></ul></ul><ul><li>DragFinished : </li></ul><ul><ul><li>Perform any cleanup operation after the drag is finished depending upon the event.detail and event.doit fields. Also used for cleaning DragSourceEffect. </li></ul></ul><ul><ul><li>Example: handle refresh if it is TARGET_MOVE, or delete data for DROP_MOVE </li></ul></ul>
  9. 9. DropTargetEffect : Feedback Options <ul><li>FEEDBACK_NONE </li></ul><ul><li>FEEDBACK_SELECT </li></ul><ul><li>FEEDBACK_INSERT_BEFORE </li></ul><ul><li>FEEDBACK_INSERT_AFTER </li></ul><ul><li>FEEDBACK_SCROLL </li></ul><ul><li>FEEDBACK_EXPAND </li></ul>
  10. 10. Drop Target Events <ul><li>DragEnter </li></ul><ul><ul><li>Indicates that cursor enters the bounds of the drop target widget. </li></ul></ul><ul><ul><li>Generally used for initializing any data. </li></ul></ul><ul><ul><li>Can modify : c urrentDataType – modify the data type detail – when DND.DROP_DEFAULT is set ? Feedback – provides a default drag under effect for the feedback. </li></ul></ul><ul><ul><li>Can not modify : dataTypes, operations </li></ul></ul><ul><li>DragOver </li></ul><ul><ul><li>Occurs when the user drags the cursor over the drop target widget. </li></ul></ul><ul><ul><li>This is mostly used with widgets like Tree, or Table for modifying feedback as the cursor moves over various item types. </li></ul></ul><ul><ul><li>To control drop operation if the drop is going to happen on a invalid item. </li></ul></ul>
  11. 11. Drop Target Events (contd......) <ul><li>DragOperationChange </li></ul><ul><ul><li>This event occurs when the user presses or releases a modifier key (such as Ctrl, Shift, Command, Option). </li></ul></ul><ul><ul><li>Can change : CurrentDataType,detail, Feedback </li></ul></ul><ul><ul><li>have access to : dataTypes, operations. </li></ul></ul><ul><li>DragLeave </li></ul><ul><ul><li>This is invoked when the cursor moves outside of the drop target widget, or if the user cancels the Drag and Drop operation by hitting Escape, or just before a drop is performed. </li></ul></ul><ul><ul><li>Used for cleaning up the code the initialized data in dragEnter. </li></ul></ul><ul><ul><li>Example : StyledText sets back it's cursor to it's original position. </li></ul></ul>
  12. 12. Drop Target Events (contd......) <ul><li>DropAccept </li></ul><ul><ul><li>This event provides the application with one last chance to define the type of data that will be returned in the drop event. </li></ul></ul><ul><ul><li>Example : StyledText sets the position for dropping the data. </li></ul></ul><ul><ul><li>Can Modify : currentDataType, detail. </li></ul></ul><ul><li>Drop </li></ul><ul><ul><li>This occurs when the user releases the mouse over the drop target if a valid operation and currentDataType. </li></ul></ul><ul><ul><li>Example : StyledText paste the content; Tree adds the new item. </li></ul></ul><ul><ul><li>It still can cancel the operation through event.detail field if there is a failure while processing the drop operation. </li></ul></ul>
  13. 13. Possible sequence of Events.. <ul><li>DragSourceEvents - </li></ul><ul><ul><li>dragStart </li></ul></ul><ul><ul><li>dragStart, one or more dragSetData, dragFinished </li></ul></ul><ul><ul><li>dragStart, dragFinished </li></ul></ul><ul><li>DropTargetEvents - </li></ul><ul><ul><li>dragEnter, dragLeave </li></ul></ul><ul><ul><li>dragEnter, one or more dragOver *, dragLeave </li></ul></ul><ul><ul><li>dragEnter, one or more dragOver *, dragLeave, dropAccept </li></ul></ul><ul><ul><li>dragEnter, one or more dragOver *, dragLeave, dropAccept, drop </li></ul></ul><ul><ul><li>*may be a mixture of dragOver and dragOperationChanged </li></ul></ul>
  14. 14. Defining Own Transfer Type <ul><li>Extend existing predefine transfer types : ByteArrayTransferType </li></ul><ul><li>Methods to override : </li></ul><ul><ul><li>Create a unique type name for describing the type of data. </li></ul></ul><ul><ul><li>Register the typeName to get a unique ID. </li></ul></ul><ul><ul><li>JavaToNative (Object object, TransferData transferData) </li></ul></ul><ul><ul><ul><li>Converts a java representation of data to a platform specific representation of the data. </li></ul></ul></ul><ul><ul><li>NativeToJava (TransferData transferData) </li></ul></ul><ul><ul><ul><li>Converts a platform specific representation of data to a java representation. </li></ul></ul></ul><ul><ul><li>GetTypeNames() </li></ul></ul><ul><ul><li>GetTypeIds() </li></ul></ul>
  15. 15. Clipboard <ul><li>Selection vs Primary Clipboard </li></ul><ul><li>Setting clipboard contents – multiple data types can be set together at once. </li></ul><ul><li>Querying existing data types in the clipboard </li></ul><ul><li>Clearing the clipboard </li></ul><ul><li>Retrieving the clipboard contents. Clipboard clipboard = new Clipboard(display); String textData = &quot;Hello World&quot;; String rtfData = &quot;{tf1 Hello World}&quot;; TextTransfer textTransfer = TextTransfer.getInstance(); RTFTransfer rtfTransfer = RTFTransfer.getInstance(); Transfer[] transfers = new Transfer[]{textTransfer, rtfTransfer}; Object[] data = new Object[]{textData, rtfData}; clipboard.setContents(data, transfers); clipboard.dispose(); </li></ul>
  16. 16. Thank YOU Q & A ?

×