Subversion Repository Public Repository

litesoft

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
package com.temp.client.foundation.widget.table.cell;

import java.util.List;

import com.temp.client.foundation.handler.DataClickHandler;
import com.temp.shared.utils.DisplayStringHandler;
import com.temp.shared.utils.StringUtils;

import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.cell.client.ValueUpdater;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.EventTarget;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;

public class ClickableTextListDataCell<E, L extends List<E>> extends AbstractCell<L>{

	DataClickHandler<E> clickHandler;
	DisplayStringHandler<E> displayStringHandler;
	private static final String CLICK_EVENT = "click";
	public ClickableTextListDataCell(DataClickHandler<E> _clickHandler, DisplayStringHandler<E> _displayStringHandler) {
		super(CLICK_EVENT);
		clickHandler = _clickHandler;
		displayStringHandler = _displayStringHandler;
		if (displayStringHandler == null) {
			displayStringHandler = new DisplayStringHandler<E>() {
				public String getDisplayString(E value) {
					return value.toString();
				}
			};
		}
	}

	@Override
	public void render(Context context, L valueList, SafeHtmlBuilder sb) {
		if (valueList != null && !valueList.isEmpty()) {
			for (E valueListElement : valueList) {
                String displayString = displayStringHandler.getDisplayString(valueListElement);
                if (!StringUtils.isBlank(displayString)) {
                    if (clickHandler != null) {
                        sb.appendHtmlConstant("<div class='link-button'>");
                    } else {
                        sb.appendHtmlConstant("<div>");
                    }
                    sb.appendEscaped(displayString);
                    if (clickHandler != null) {
                        sb.appendHtmlConstant("</div>");
                    } else {
                        sb.appendHtmlConstant("</div>");
                    }
                } else {
                    sb.appendHtmlConstant("<span></span>");
                }
            }
		}
	}

	@Override
	public void onBrowserEvent(Context context, Element parent, L valueList, NativeEvent event, ValueUpdater<L> valueUpdater) {
		if (clickHandler != null
				&& event.getType().equals(CLICK_EVENT)
				&& valueList != null
				&& !valueList.isEmpty()) {

			int index = 0;
		    EventTarget eventTarget = event.getEventTarget();
		    if (Element.is(eventTarget)) {
		    	Element target = eventTarget.cast();
		    	Element container = parent;
		    	Element wrapper = container.getFirstChildElement();
		    	while (wrapper != null) {
		    		if (wrapper.isOrHasChild(target)) {
		    			clickHandler.onClick(valueList.get(index));
		    		}
		    		index++;
		    		wrapper = wrapper.getNextSiblingElement();
		    	}
		    }
		}
	}
}

Commits for litesoft/trunk/GWT_Sandbox/FormEngine/src/com/temp/client/foundation/widget/table/cell/ClickableTextListDataCell.java

Diff revisions: vs.
Revision Author Commited Message
626 GeorgeS picture GeorgeS Wed 11 Apr, 2012 19:39:41 +0000