Browse Source

Fix declarative support for DragAndDropWrapper (#16324)

Change-Id: I132e37fe54fb5949748c0e0ec265bd411ff91ce3
tags/7.5.0.beta1
Miki 9 years ago
parent
commit
f386977869

+ 36
- 1
server/src/com/vaadin/ui/DragAndDropWrapper.java View File

@@ -24,6 +24,8 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.jsoup.nodes.Element;

import com.vaadin.event.Transferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.dd.DragSource;
@@ -38,6 +40,7 @@ import com.vaadin.shared.MouseEventDetails;
import com.vaadin.shared.ui.dd.HorizontalDropLocation;
import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.shared.ui.draganddropwrapper.DragAndDropWrapperConstants;
import com.vaadin.ui.declarative.DesignContext;

@SuppressWarnings("serial")
public class DragAndDropWrapper extends CustomComponent implements DropTarget,
@@ -185,7 +188,12 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,

private Set<String> sentIds = new HashSet<String>();

private DragAndDropWrapper() {
/**
* This is an internal constructor. Use
* {@link DragAndDropWrapper#DragAndDropWrapper(Component)} instead.
*/
@Deprecated
public DragAndDropWrapper() {
super();
}

@@ -458,4 +466,31 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,

}

@Override
public void readDesign(Element design, DesignContext designContext) {
super.readDesign(design, designContext);

for (Element child : design.children()) {
Component component = designContext.readDesign(child);
if (getDragStartMode() == DragStartMode.COMPONENT_OTHER
&& child.hasAttr(":drag-image")) {
setDragImageComponent(component);
} else if (getCompositionRoot() == null) {
setCompositionRoot(component);
}
}
}

@Override
public void writeDesign(Element design, DesignContext designContext) {
super.writeDesign(design, designContext);

design.appendChild(designContext.createElement(getCompositionRoot()));
if (getDragStartMode() == DragStartMode.COMPONENT_OTHER) {
Element child = designContext
.createElement(getDragImageComponent());
child.attr(":drag-image", "");
design.appendChild(child);
}
}
}

+ 66
- 0
server/tests/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperDeclarativeTest.java View File

@@ -0,0 +1,66 @@
/*
* Copyright 2000-2014 Vaadin Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.tests.components.draganddropwrapper;

import org.junit.Test;

import com.vaadin.tests.design.DeclarativeTestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.DragAndDropWrapper.DragStartMode;
import com.vaadin.ui.declarative.DesignContext;

public class DragAndDropWrapperDeclarativeTest extends
DeclarativeTestBase<DragAndDropWrapper> {

@Test
public void testDefaultDnDWrapper() {
Button okButton = new Button("OK");
String input = "<v-drag-and-drop-wrapper>"
+ new DesignContext().createElement(okButton)
+ "</v-drag-and-drop-wrapper>";
DragAndDropWrapper wrapper = new DragAndDropWrapper(okButton);
testWrite(input, wrapper);
testRead(input, wrapper);
}

@Test
public void testNoDragImage() {
Button okButton = new Button("OK");
String input = "<v-drag-and-drop-wrapper drag-start-mode='wrapper'>"
+ new DesignContext().createElement(okButton)
+ "</v-drag-and-drop-wrapper>";
DragAndDropWrapper wrapper = new DragAndDropWrapper(okButton);
wrapper.setDragStartMode(DragStartMode.WRAPPER);
testWrite(input, wrapper);
testRead(input, wrapper);
}

@Test
public void testWithDragImage() {
Button dragImage = new Button("Cancel");
Button okButton = new Button("OK");
String input = "<v-drag-and-drop-wrapper drag-start-mode='component_other'>"
+ new DesignContext().createElement(okButton)
+ new DesignContext().createElement(dragImage).attr(
":drag-image", "") + "</v-drag-and-drop-wrapper>";
DragAndDropWrapper wrapper = new DragAndDropWrapper(okButton);
wrapper.setDragStartMode(DragStartMode.COMPONENT_OTHER);
wrapper.setDragImageComponent(dragImage);
testWrite(input, wrapper);
testRead(input, wrapper);
}
}

Loading…
Cancel
Save