[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.platform.swt] Re: DND within TableTree?

The TableTreeViewer registers your DragSourceListener with the TableTree 
control. To get DND to work, the listener has to be registered with the 
underlying Table control, like in:

DragSource dragSource = new 
DragSource(tableTreeViewer.getTableTree().getTable(), ops);
dragSource.setTransfer(transfers);
dragSource.addDragListener(new SymbolDragListener(tableTreeViewer));

You can do the same for drop. For your class TableTreeDropAdapter, this is 
the hack to determine the drop target:

protected Object determineTarget(DropTargetEvent event) {
    Object tableTreeItem = event.item == null ? null : 
event.item.getData("TableTreeItemID");
    return tableTreeItem == null ? null : ((TableTreeItem) 
tableTreeItem).getData();
}

The JFace team says this is a bug in SWT (see bugzilla #38840). Apparently, 
native table trees are coming up for 3.1 (see #36822).

/Boris

=====================
"Mighty M" <fn2o-mycl@xxxxxxxxxx> wrote:

When I converted my TreeViewer to a TableTreeViewer, the drag-and-drop 
support broke. Performing a selection and drag gesture no longer initiates a 
drag operation. The dragStart() method is never evoked.  Are there any known 
issues that prevent dragging and dropping within the TableTree?  Do I need 
to supply a special TableTreeViewer SWT style to enable dragging?  Please 
help.

Thanks,
Mark

reply to: fn2o-mycl@xxxxxxxxxx

==========
tableTreeViewer = new TableTreeViewer(parent, SWT.FULL_SELECTION + 
SWT.MULTI);
tableTreeViewer.setContentProvider( new DomainContentProvider () );
labelProvider = new DomainLabelProvider ();
tableTreeViewer.setLabelProvider(labelProvider);
tableTreeViewer.setUseHashlookup(true);

tableTreeViewer.setInput (getInitalInput());

Table table = tableTreeViewer.getTableTree().getTable();
new TableColumn(table, SWT.LEFT).setText(DomainConstants.COLUMN_NAME);
new TableColumn(table, SWT.LEFT).setText(DomainConstants.COLUMN_TYPE);
new TableColumn(table, SWT.RIGHT).setText(DomainConstants.COLUMN_STATUS);
new TableColumn(table, SWT.RIGHT).setText(DomainConstants.COLUMN_PRIORITY);

// Add drag and drop support.

int ops = DND.DROP_COPY | DND.DROP_MOVE;

Transfer[] transfers = new Transfer[] { DomainSymbolTransfer.getInstance()};
tableTreeViewer.addDragSupport(ops, transfers, new 
SymbolDragListener(tableTreeViewer));

dropAdapter = new TableTreeDropAdapter(tableTreeViewer);
tableTreeViewer.addDropSupport(ops, transfers, dropAdapter);