com.vaadin.v7.client.ui.treetable.TreeTableConnector Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vaadin-compatibility-client Show documentation
Show all versions of vaadin-compatibility-client Show documentation
Vaadin 7 compatibility package for Vaadin 8
/*
* Copyright (C) 2000-2023 Vaadin Ltd
*
* This program is available under Vaadin Commercial License and Service Terms.
*
* See for the full
* license.
*/
package com.vaadin.v7.client.ui.treetable;
import com.google.gwt.dom.client.Element;
import com.vaadin.client.ApplicationConnection;
import com.vaadin.client.TooltipInfo;
import com.vaadin.client.UIDL;
import com.vaadin.client.WidgetUtil;
import com.vaadin.client.ui.FocusableScrollPanel;
import com.vaadin.shared.ui.Connect;
import com.vaadin.v7.client.ui.VScrollTable.VScrollTableBody.VScrollTableRow;
import com.vaadin.v7.client.ui.VTreeTable;
import com.vaadin.v7.client.ui.VTreeTable.PendingNavigationEvent;
import com.vaadin.v7.client.ui.VTreeTable.VTreeTableScrollBody.VTreeTableRow;
import com.vaadin.v7.client.ui.table.TableConnector;
import com.vaadin.v7.shared.ui.treetable.TreeTableConstants;
import com.vaadin.v7.shared.ui.treetable.TreeTableState;
import com.vaadin.v7.ui.TreeTable;
@Connect(TreeTable.class)
public class TreeTableConnector extends TableConnector {
@Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
FocusableScrollPanel widget = null;
int scrollPosition = 0;
if (getWidget().collapseRequest) {
widget = (FocusableScrollPanel) getWidget().getWidget(1);
scrollPosition = widget.getScrollPosition();
}
getWidget().animationsEnabled = uidl.getBooleanAttribute("animate");
getWidget().colIndexOfHierarchy = uidl.hasAttribute(
TreeTableConstants.ATTRIBUTE_HIERARCHY_COLUMN_INDEX)
? uidl.getIntAttribute(
TreeTableConstants.ATTRIBUTE_HIERARCHY_COLUMN_INDEX)
: 0;
int oldTotalRows = getWidget().getTotalRows();
super.updateFromUIDL(uidl, client);
// super.updateFromUIDL set rendering to false, even though we continue
// rendering here. Set it back to true.
getWidget().rendering = true;
if (getWidget().collapseRequest) {
if (getWidget().collapsedRowKey != null
&& getWidget().scrollBody != null) {
VScrollTableRow row = getWidget()
.getRenderedRowByKey(getWidget().collapsedRowKey);
if (row != null) {
getWidget().setRowFocus(row);
getWidget().focus();
}
}
int scrollPosition2 = widget.getScrollPosition();
if (scrollPosition != scrollPosition2) {
widget.setScrollPosition(scrollPosition);
}
// check which rows are needed from the server and initiate a
// deferred fetch
getWidget().onScroll(null);
}
// Recalculate table size if collapse request, or if page length is zero
// (not sent by server) and row count changes (#7908).
if (getWidget().collapseRequest || (!uidl.hasAttribute("pagelength")
&& getWidget().getTotalRows() != oldTotalRows)) {
/*
* Ensure that possibly removed/added scrollbars are considered.
* Triggers row calculations, removes cached rows etc. Basically
* cleans up state. Be careful if touching this, you will break
* pageLength=0 if you remove this.
*/
getWidget().triggerLazyColumnAdjustment(true);
getWidget().collapseRequest = false;
}
if (uidl.hasAttribute("focusedRow")) {
String key = uidl.getStringAttribute("focusedRow");
getWidget().setRowFocus(getWidget().getRenderedRowByKey(key));
getWidget().focusParentResponsePending = false;
} else if (uidl.hasAttribute("clearFocusPending")) {
// Special case to detect a response to a focusParent request that
// does not return any focusedRow because the selected node has no
// parent
getWidget().focusParentResponsePending = false;
}
while (!getWidget().collapseRequest
&& !getWidget().focusParentResponsePending
&& !getWidget().pendingNavigationEvents.isEmpty()) {
// Keep replaying any queued events as long as we don't have any
// potential content changes pending
PendingNavigationEvent event = getWidget().pendingNavigationEvents
.removeFirst();
getWidget().handleNavigation(event.keycode, event.ctrl,
event.shift);
}
getWidget().rendering = false;
}
@Override
public VTreeTable getWidget() {
return (VTreeTable) super.getWidget();
}
@Override
public TreeTableState getState() {
return (TreeTableState) super.getState();
}
@Override
public TooltipInfo getTooltipInfo(Element element) {
TooltipInfo info = null;
if (element != getWidget().getElement()) {
Object node = WidgetUtil.findWidget(element, VTreeTableRow.class);
if (node != null) {
VTreeTableRow row = (VTreeTableRow) node;
info = row.getTooltip(element);
}
}
if (info == null) {
info = super.getTooltipInfo(element);
}
return info;
}
@Override
protected VScrollTableRow getScrollTableRow(Element e) {
return WidgetUtil.findWidget(e, VTreeTableRow.class);
}
}