public class VScrollTable extends FlowPanel implements Table, ScrollHandler {
public static final String CLASSNAME = "v-table";
+ public static final String ITEM_CLICK_EVENT_ID = "itemClick";
+
private static final double CACHE_RATE_DEFAULT = 2;
/**
/** flag to indicate that table body has changed */
private boolean isNewBody = true;
- private boolean emitClickEvents;
-
/*
* Read from the "recalcWidths" -attribute. When it is true, the table will
* recalculate the widths for columns - desirable in some cases. For #1983,
this.client = client;
paintableId = uidl.getStringAttribute("id");
immediate = uidl.getBooleanAttribute("immediate");
- emitClickEvents = uidl.getBooleanAttribute("listenClicks");
final int newTotalRows = uidl.getIntAttribute("totalrows");
if (newTotalRows != totalRows) {
if (scrollBody != null) {
}
private void handleClickEvent(Event event, Element targetTdOrTr) {
- if (emitClickEvents) {
+ if (client.hasEventListeners(VScrollTable.this,
+ ITEM_CLICK_EVENT_ID)) {
boolean doubleClick = (DOM.eventGetType(event) == Event.ONDBLCLICK);
/* This row was clicked */
public static final String CLASSNAME = "v-tree";
+ public static final String ITEM_CLICK_EVENT_ID = "itemClick";
+
private Set<String> selectedIds = new HashSet<String>();
private ApplicationConnection client;
private String paintableId;
private boolean readonly;
- private boolean emitClickEvents;
-
private boolean rendering;
public VTree() {
disabled = uidl.getBooleanAttribute("disabled");
readonly = uidl.getBooleanAttribute("readonly");
- emitClickEvents = uidl.getBooleanAttribute("listenClicks");
isNullSelectionAllowed = uidl.getBooleanAttribute("nullselect");
}
final int type = DOM.eventGetType(event);
final Element target = DOM.eventGetTarget(event);
- if (emitClickEvents && target == nodeCaptionSpan
+ if (client.hasEventListeners(VTree.this, ITEM_CLICK_EVENT_ID)
+ && target == nodeCaptionSpan
&& (type == Event.ONDBLCLICK || type == Event.ONMOUSEUP)) {
fireClick(event);
}
*/
private CellStyleGenerator cellStyleGenerator = null;
- private int clickListenerCount;
-
/*
* EXPERIMENTAL feature: will tell the client to re-calculate column widths
* if set to true. Currently no setter: extend to enable.
* java.util.Map)
*/
@Override
- public void changeVariables(Object source, Map variables) {
+ public void changeVariables(Object source, Map<String, Object> variables) {
boolean clientNeedsContentRefresh = false;
if (!isSelectable() && variables.containsKey("selected")) {
// Not-selectable is a special case, AbstractSelect does not support
// TODO could be optimized.
- variables = new HashMap(variables);
+ variables = new HashMap<String, Object>(variables);
variables.remove("selected");
}
*
* @param variables
*/
- private void handleClickEvent(Map variables) {
- if (clickListenerCount > 0) {
- if (variables.containsKey("clickEvent")) {
- String key = (String) variables.get("clickedKey");
- Object itemId = itemIdMapper.get(key);
- Object propertyId = null;
- String colkey = (String) variables.get("clickedColKey");
- // click is not necessary on a property
- if (colkey != null) {
- propertyId = columnIdMap.get(colkey);
- }
- MouseEventDetails evt = MouseEventDetails
- .deSerialize((String) variables.get("clickEvent"));
- Item item = getItem(itemId);
- if (item != null) {
- fireEvent(new ItemClickEvent(this, item, itemId,
- propertyId, evt));
- }
+ private void handleClickEvent(Map<String, Object> variables) {
+ if (variables.containsKey("clickEvent")) {
+ String key = (String) variables.get("clickedKey");
+ Object itemId = itemIdMapper.get(key);
+ Object propertyId = null;
+ String colkey = (String) variables.get("clickedColKey");
+ // click is not necessary on a property
+ if (colkey != null) {
+ propertyId = columnIdMap.get(colkey);
+ }
+ MouseEventDetails evt = MouseEventDetails
+ .deSerialize((String) variables.get("clickEvent"));
+ Item item = getItem(itemId);
+ if (item != null) {
+ fireEvent(new ItemClickEvent(this, item, itemId, propertyId,
+ evt));
}
}
}
target.addAttribute("selectmode", "none");
}
- if (clickListenerCount > 0) {
- target.addAttribute("listenClicks", true);
- }
-
if (cacheRate != CACHE_RATE_DEFAULT) {
target.addAttribute("cr", cacheRate);
}
}
public void addListener(ItemClickListener listener) {
- addListener(ItemClickEvent.class, listener,
- ItemClickEvent.ITEM_CLICK_METHOD);
- clickListenerCount++;
- // repaint needed only if click listening became necessary
- if (clickListenerCount == 1) {
- requestRepaint();
- }
-
+ addListener(VScrollTable.ITEM_CLICK_EVENT_ID, ItemClickEvent.class,
+ listener, ItemClickEvent.ITEM_CLICK_METHOD);
}
public void removeListener(ItemClickListener listener) {
- removeListener(ItemClickEvent.class, listener,
- ItemClickEvent.ITEM_CLICK_METHOD);
- clickListenerCount--;
- // repaint needed only if click listening is not needed in client
- // anymore
- if (clickListenerCount == 0) {
- requestRepaint();
- }
+ removeListener(VScrollTable.ITEM_CLICK_EVENT_ID, ItemClickEvent.class,
+ listener);
}
// Identical to AbstractCompoenentContainer.setEnabled();
@Override
public void changeVariables(Object source, Map variables) {
- if (clickListenerCount > 0 && variables.containsKey("clickedKey")) {
+ if (variables.containsKey("clickedKey")) {
String key = (String) variables.get("clickedKey");
Object id = itemIdMapper.get(key);
target.addAttribute("nullselect", true);
}
- if (clickListenerCount > 0) {
- target.addAttribute("listenClicks", true);
- }
-
}
// Initialize variables
}
}
- private int clickListenerCount = 0;
-
private ItemStyleGenerator itemStyleGenerator;
public void addListener(ItemClickListener listener) {
- addListener(ItemClickEvent.class, listener,
+ addListener(VTree.ITEM_CLICK_EVENT_ID, ItemClickEvent.class, listener,
ItemClickEvent.ITEM_CLICK_METHOD);
- clickListenerCount++;
- // repaint needed only if click listening became necessary
- if (clickListenerCount == 1) {
- requestRepaint();
- }
}
public void removeListener(ItemClickListener listener) {
- removeListener(ItemClickEvent.class, listener,
- ItemClickEvent.ITEM_CLICK_METHOD);
- clickListenerCount++;
- // repaint needed only if click listening is not needed in client
- // anymore
- if (clickListenerCount == 0) {
- requestRepaint();
- }
+ removeListener(VTree.ITEM_CLICK_EVENT_ID, ItemClickEvent.class,
+ listener);
}
/**