@@ -68,6 +68,7 @@ private static final class TwinColModel<T> implements Serializable {
6868 final Label columnLabel = new Label ();
6969 final VerticalLayout layout = new VerticalLayout (columnLabel , grid );
7070 HeaderRow headerRow ;
71+ boolean droppedInsideGrid = false ;
7172
7273 @ SuppressWarnings ("unchecked" )
7374 ListDataProvider <T > getDataProvider () {
@@ -107,9 +108,8 @@ Collection<T> getItems() {
107108
108109 private Grid <T > draggedGrid ;
109110
110- private Label fakeButtonContainerLabel = new Label ();
111111
112- private boolean droppedInsideGrid = false ;
112+ private Label fakeButtonContainerLabel = new Label () ;
113113
114114 /**
115115 * Constructs a new TwinColGrid with an empty {@link ListDataProvider}.
@@ -360,8 +360,8 @@ public TwinColGrid<T> withSizeFull() {
360360 * @return this instance
361361 */
362362 public TwinColGrid <T > withDragAndDropSupport () {
363- configDragAndDrop (leftGrid , rightGrid );
364- configDragAndDrop (rightGrid , leftGrid );
363+ configDragAndDrop (left , right );
364+ configDragAndDrop (right , left );
365365 return this ;
366366 }
367367
@@ -455,46 +455,51 @@ private void updateSelection(final Set<T> addedItems, final Set<T> removedItems)
455455 });
456456 }
457457
458- @ SuppressWarnings ("unchecked" )
459- private void configDragAndDrop (final Grid <T > sourceGrid , final Grid <T > targetGrid ) {
458+ private void configDragAndDrop (final TwinColModel <T > sourceModel , final TwinColModel <T > targetModel ) {
460459
461460 final Set <T > draggedItems = new LinkedHashSet <>();
462461
463- sourceGrid .setRowsDraggable (true );
464- sourceGrid .addDragStartListener (event -> {
465- draggedGrid = sourceGrid ;
466- if (!(draggedGrid .getSelectionModel () instanceof GridNoneSelectionModel )) {
462+ sourceModel .grid .setRowsDraggable (true );
463+ sourceModel .grid .addDragStartListener (event -> {
464+ draggedGrid = null ;
465+
466+ if (!(sourceModel .grid .getSelectionModel () instanceof GridNoneSelectionModel )) {
467467 draggedItems .addAll (event .getDraggedItems ());
468468 }
469- targetGrid .setDropMode (GridDropMode .ON_GRID );
469+ targetModel . grid .setDropMode (GridDropMode .ON_GRID );
470470 });
471471
472- sourceGrid .addDragEndListener (event -> {
473- if (droppedInsideGrid ) {
474- droppedInsideGrid = false ;
475- if (draggedGrid == null ) {
472+ sourceModel .grid .addDragEndListener (event -> {
473+ if (targetModel .droppedInsideGrid && sourceModel .grid ==draggedGrid ) {
474+
475+
476+ if (draggedGrid == null ) {
477+ draggedItems .clear ();
478+ return ;
479+ }
480+
481+ final ListDataProvider <T > dragGridSourceDataProvider = sourceModel .getDataProvider ();
482+
483+ dragGridSourceDataProvider .getItems ().removeAll (draggedItems );
484+ dragGridSourceDataProvider .refreshAll ();
485+
486+ targetModel .droppedInsideGrid = false ;
487+ draggedGrid = null ;
488+
476489 draggedItems .clear ();
477- return ;
490+ sourceModel .grid .deselectAll ();
491+ } else {
492+ draggedItems .clear ();
478493 }
479- final ListDataProvider <T > dragGridSourceDataProvider =
480- (ListDataProvider <T >) draggedGrid .getDataProvider ();
481- dragGridSourceDataProvider .getItems ().removeAll (draggedItems );
482- dragGridSourceDataProvider .refreshAll ();
483494
484- draggedItems . clear ( );
495+ } );
485496
486- draggedGrid . deselectAll ();
487- draggedGrid = null ;
497+ targetModel . grid . addDropListener ( event -> {
498+ draggedGrid = sourceModel . grid ;
488499
489- } else {
490- draggedItems .clear ();
491- }
492- });
493500
494- targetGrid .addDropListener (event -> {
495- droppedInsideGrid = true ;
496- final ListDataProvider <T > dragGridTargetDataProvider =
497- (ListDataProvider <T >) event .getSource ().getDataProvider ();
501+ targetModel .droppedInsideGrid = true ;
502+ final ListDataProvider <T > dragGridTargetDataProvider = targetModel .getDataProvider ();
498503 dragGridTargetDataProvider .getItems ().addAll (draggedItems );
499504 dragGridTargetDataProvider .refreshAll ();
500505 });
0 commit comments