|
|
Line 1: |
Line 1: |
− | {{ScoutPage|cat=HowTo 4.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<br>
| + | |
− | *In the Scout Object Properties under Advanced Operations add the following methods:<br>'''execDrag()'''<br>'''execDrop()'''<br> If you want to also add support for copying using Ctrl-C, you can also add '''execCopy()'''<br>[[Image:DragAndDropAddingMethods.png]]<br>
| + | |
− | *Click on one of the newly added methods to open the source code at the correct position.<br>
| + | |
− | *Add two new methods<br>'''getConfiguredDropType()'''<br>'''getConfiguredDragType()'''<br>to define what type of objects your drag and drop handlers support.<br>
| + | |
− | <pre> @Override
| + | |
− | protected int getConfiguredDragType() {
| + | |
− | return TYPE_TEXT_TRANSFER;
| + | |
− | }
| + | |
− |
| + | |
− | @Override
| + | |
− | @ConfigProperty("DRAG_AND_DROP_TYPE")
| + | |
− | @Order(190.0)
| + | |
− | @ConfigPropertyValue("0")
| + | |
− | protected int getConfiguredDropType() {
| + | |
− | return TYPE_TEXT_TRANSFER | TYPE_FILE_TRANSFER | TYPE_IMAGE_TRANSFER | TYPE_JAVA_ELEMENT_TRANSFER;
| + | |
− | }
| + | |
− | </pre>
| + | |
− | *Add code to '''execDrag()''' to create an appropriate TransferObject<br>
| + | |
− | <pre> @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());
| + | |
− | }
| + | |
− | </pre>
| + | |
− | *Add code to '''execDrop()''' to handle the appropriate TransferObjects. You need to treat each TransferObject type that getConfiguredDropType() returns<br>
| + | |
− | <pre> @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");
| + | |
− | }
| + | |
− | }
| + | |
− | </pre>
| + | |
− | *If you added '''execCopy()''', the easiest way to implement this is probably to just forward it to execDrag()
| + | |
− | <pre> @Override
| + | |
− | protected TransferObject execCopy(List<? extends ITableRow> rows) throws ProcessingException {
| + | |
− | return execDrag((List<ITableRow>) rows);
| + | |
− | }
| + | |
− | </pre>
| + | |
− | <br>
| + | |