DnD CellTable reordering rows problem

27 views
Skip to first unread message

Will Davis

unread,
Sep 23, 2014, 11:31:52 AM9/23/14
to gwtq...@googlegroups.com
So I followed the old example for the sortable celllist that I cannot seem to find anymore to implement a solution for the celltable allowing me to drag and drop rows to move them around in a table. I have it working when I set the drag and drop options like this:

droppableOptions.setOnOver(new DroppableFunction() {
    @Override
    public void f(DragAndDropContext context) {
        Element el = context.getDroppable();
        if (oldEl != null && oldEl.equals(el))
           return;
        else
           oldEl = el;
         
        if (el != null)
           placeHolder.insertBefore(el.getParentElement().getParentElement());
    }
});

The oldEl is a global variable so that I don't keep inserting over and over again.

Then my droppable options the set on drop places the item in the table. The problem with this method is it will only insert before, I cannot drop an item in the last space.

So I tried to change it up by adding the on drag handler to determine if I am dragging above or below.

draggableOptions.setOnDrag(new DragFunction() {
    @Override
    public void f(DragContext context) {
        if (oldEl != null) {
            int middleEl = (oldEl.getAbsoluteTop() + oldEl.getOffsetHeight()) / 2;
            int middleHelper = (context.getHelper().getAbsoluteTop() + context.getHelper().getOffsetHeight()) / 2;
            int difference = middleEl - middleHelper;
            if (difference > 0) {
                /* dragging on top edge, so insert place holder */
                placeHolder.insertBefore(oldEl.getParentElement().getParentElement());
                } else if (difference < 0) {
                /* dragging on bottom edge, so insert place holder */
                placeHolder.insertAfter(oldEl.getParentElement().getParentElement());
            }
        }
    }
});


droppableOptions.setOnOver(new DroppableFunction() {
    @Override
    public void f(DragAndDropContext context) {
        Element el = context.getDroppable();
        if (oldEl != null && oldEl.equals(el))
        return;
        else
        oldEl = el;
    }
});

The place holder works but as soon as I drop it in the last space in the table, I get this error. Before it even gets to the onDrop or onDragStop

java.lang.NullPointerException: null
    at gwtquery.plugins.draggable.client.events.DragContext.init(DragContext.java:104)
    at gwtquery.plugins.draggable.client.events.DragContext.<init>(DragContext.java:48)
    at gwtquery.plugins.draggable.client.events.AbstractDraggableEvent.<init>(AbstractDraggableEvent.java:41)
    at gwtquery.plugins.draggable.client.events.DragStopEvent.<init>(DragStopEvent.java:37)
    at gwtquery.plugins.draggable.client.Draggable$3.execute(Draggable.java:490)
    at com.google.gwt.core.client.impl.SchedulerImpl$Task$.executeScheduled$(SchedulerImpl.java:50)
    at com.google.gwt.core.client.impl.SchedulerImpl.runScheduledTasks(SchedulerImpl.java:180)
    at com.google.gwt.core.client.impl.SchedulerImpl.flushPostEventPumpCommands(SchedulerImpl.java:347)
    at com.google.gwt.core.client.impl.SchedulerImpl$Flusher.execute(SchedulerImpl.java:78)
    at com.google.gwt.core.client.impl.SchedulerImpl.execute(SchedulerImpl.java:138)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
    at sun.reflect.GeneratedMethodAccessor373.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
    at java.lang.Thread.run(Thread.java:722)


I can't seem to figure out what is going wrong.

Thanks,
Will
Reply all
Reply to author
Forward
0 new messages