aboutsummaryrefslogtreecommitdiffstats
path: root/uitest/src/com/vaadin/tests/components/draganddropwrapper/DragAndDropWrapperTooltips.java
blob: f0010acce8d250425fd2069c6b27a91de5c11d39 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package com.vaadin.tests.components.draganddropwrapper;

import java.util.Iterator;

import com.vaadin.event.Transferable;
import com.vaadin.event.TransferableImpl;
import com.vaadin.event.dd.DragAndDropEvent;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.DropTarget;
import com.vaadin.event.dd.TargetDetails;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
import com.vaadin.tests.components.TestBase;
import com.vaadin.tests.util.TestUtils;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.DragAndDropWrapper;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;

public class DragAndDropWrapperTooltips extends TestBase {

    private final String BASE = ".v-widget.greenblock {vertical-align: middle; float:left; width:60px;height:60px;background: green !important; padding:0; margin:2px;-webkit-transition: width 0.3s ease-in-out;color: white;}";
    private final String B2 = ".v-widget.b2 {background-color: red !important;}";
    private final String B3 = ".v-widget.b3 {background-color: yellow !important;color: black;}";
    private final String B4 = ".v-widget.b4 {background-color: blue !important;}";
    private final String HIDEDRAGSOURCE = ".v-active-drag-source { overflow:hidden; width:0px !important;}";
    private DragAndDropWrapper dragAndDropWrapper;

    @Override
    protected void setup() {
        TestUtils.injectCSS(getMainWindow(), BASE + B4 + B2 + B3
                + HIDEDRAGSOURCE);

        VerticalLayout l = new VerticalLayout();
        l.setWidth("400px");
        l.setHeight("100px");
        dragAndDropWrapper = new DragAndDropWrapper(cssLayout);
        dragAndDropWrapper
                .setDescription("Tooltip for the wrapper wrapping all the draggable layouts");
        dragAndDropWrapper.setSizeFull();
        l.addComponent(dragAndDropWrapper);

        addComponent(l);

        for (int i = 1; i <= 4; i++) {
            WrappedLabel wl = new WrappedLabel("Block");
            wl.setId("wrapper" + i);
            wl.addStyleName("b" + i);
            cssLayout.addComponent(wl);
        }

    }

    int count;

    private CssLayout cssLayout = new CssLayout() {
    };

    class WrappedLabel extends DragAndDropWrapper {

        private static final long serialVersionUID = 1L;

        public WrappedLabel(String content) {
            super(new Label(content + " " + ++count));
            getCompositionRoot().setSizeUndefined();
            setHeight("60px"); // FIXME custom component seems to be broken:
            // can't set height with css only
            setWidth("60px");
            setDragStartMode(DragStartMode.WRAPPER);
            addStyleName("greenblock");
        }

        @Override
        public DropHandler getDropHandler() {
            return dh;
        }

    }

    private DropHandler dh = new DropHandler() {

        @Override
        public AcceptCriterion getAcceptCriterion() {
            return AcceptAll.get();
        }

        @Override
        public void drop(DragAndDropEvent dropEvent) {
            Transferable transferable = dropEvent.getTransferable();
            if (transferable instanceof TransferableImpl) {
                TransferableImpl ct = (TransferableImpl) transferable;
                Component sourceComponent = ct.getSourceComponent();
                if (sourceComponent instanceof WrappedLabel) {
                    int index = 1;
                    Iterator<Component> componentIterator = cssLayout
                            .getComponentIterator();
                    Component next = componentIterator.next();
                    TargetDetails dropTargetData = dropEvent.getTargetDetails();
                    DropTarget target = dropTargetData.getTarget();
                    while (next != target) {
                        if (next != sourceComponent) {
                            index++;
                        }
                        next = componentIterator.next();
                    }
                    if (dropTargetData.getData("horizontalLocation").equals(
                            "LEFT")) {
                        index--;
                        if (index < 0) {
                            index = 0;
                        }
                    }

                    cssLayout.removeComponent(sourceComponent);
                    cssLayout.addComponent(sourceComponent, index);

                    dragAndDropWrapper
                            .setDescription("Drag was performed and tooltip was changed");
                }
            }
        }
    };

    @Override
    protected String getDescription() {
        return "A tooltip should be shown when hovering the DragAndDropWrapper containing all the draggable layouts";
    }

    @Override
    protected Integer getTicketNumber() {
        return 7708;
    }
}