Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Scout/HowTo/5.0/Drag and drop support

< Scout‎ | HowTo‎ | 5.0

The Scout documentation has been moved to https://eclipsescout.github.io/.

This how-to describes how to add support for drag and drop to your tables.

Steps

  • Select the table
  • In the Scout Object Properties under Advanced Operations add the following methods:
    execDrag()
    execDrop()
    If you want to also add support for copying using Ctrl-C, you can also add execCopy()
    DragAndDropAddingMethods.png
  • Click on one of the newly added methods to open the source code at the correct position.
  • Add two new methods
    getConfiguredDropType()
    getConfiguredDragType()
    to define what type of objects your drag and drop handlers support.
Note.png
Advanced Properties
You can find these two options under the Advanced Properties of the table too but it is only possible to select one drag and drop type with the Scout Object Properties view.
    @Override
    protected int getConfiguredDragType() {
      return TYPE_TEXT_TRANSFER;
    }
 
    @Override
    protected int getConfiguredDropType() {
      return TYPE_TEXT_TRANSFER | TYPE_FILE_TRANSFER | TYPE_IMAGE_TRANSFER | TYPE_JAVA_ELEMENT_TRANSFER;
    }

  • Add code to execDrag() to create an appropriate TransferObject
    @Override
    protected TransferObject execDrag(List<ITableRow> rows) throws ProcessingException {
      StringBuilder result = new StringBuilder();
 
      for (ITableRow row : rows) {
        if (!result.toString().equals("")) {
          result.append("; ");
        }
        result.append(getTable().getShortNameColumn().getValue(row) + " " + getTable().getNameColumn().getValue(row));
      }
      return new TextTransferObject(result.toString());
    }
  • Add code to execDrop() to handle the appropriate TransferObjects. You need to treat each TransferObject type that getConfiguredDropType() returns
    @Override
    protected void execDrop(ITableRow row, TransferObject t) throws ProcessingException {
      if (t.isText() && (t instanceof TextTransferObject)) {
        String text = ((TextTransferObject) t).getPlainText();
        // split text at "; " to get seperate lines
        // treat each line according to business logic
        System.out.println("Dropped text: " + text);
      }
      else if (t.isFileList()) {
        List<File> o = ((FileListTransferObject) t).getFiles();
        for (int i = 0; i < o.size(); ++i) {
          // handle content of o[i]
          System.out.println("Dropped file: " + o.get(i).getName());
        }
      }
      else if (t.isImage()) {
        System.out.println("Dropped image");
      }
      else if (t.isLocalObject()) {
        System.out.println("Dropped local object");
      }
      else {
        System.out.println("Dropped other stuff");
      }
    }
  • If you added execCopy(), the easiest way to implement this is probably to just forward it to execDrag()
    @Override
    protected TransferObject execCopy(List<? extends ITableRow> rows) throws ProcessingException {
      return execDrag((List<ITableRow>) rows);
    }


Back to the top