private boolean initialContentReceived = false;
private Element scrollPositionElement;
private FlowPanel panel;
+ private boolean enabled;
public IScrollTable() {
if (client.updateComponent(this, uidl, true))
return;
+ this.enabled = !uidl.hasAttribute("disabled");
+
this.client = client;
this.paintableId = uidl.getStringAttribute("id");
this.immediate = uidl.getBooleanAttribute("immediate");
public void iLayout() {
if (height != null) {
-
- if(height.equals("100%")) {
- // we define height in pixels with 100% not to include borders
+ if (height.equals("100%")) {
+ /*
+ * We define height in pixels with 100% not to include borders
+ * which is what users usually want. So recalculate pixels via
+ * setHeight.
+ */
setHeight(height);
}
-
+
int contentH = (DOM.getElementPropertyInt(getElement(),
"clientHeight") - tHead.getOffsetHeight());
if (contentH < 0)
public void onScroll(Widget widget, int scrollLeft, int scrollTop) {
if (!initializedAndAttached)
return;
+ if (!enabled) {
+ // TODO cancel scroll (scrorll back or something)
+ return;
+ }
rowRequestHandler.cancel();
private int reqFirstRow = 0;
private int reqRows = 0;
-
public void deferRowFetch() {
deferRowFetch(250);
}
-
+
public void deferRowFetch(int msec) {
if (reqRows > 0 && reqFirstRow < totalRows) {
schedule(msec);
* Handle column reordering.
*/
public void onBrowserEvent(Event event) {
- if (isResizing
- || DOM.compare(DOM.eventGetTarget(event), colResizeWidget)) {
- onResizeEvent(event);
- } else {
- handleCaptionEvent(event);
+ if (enabled) {
+ if (isResizing
+ || DOM.compare(DOM.eventGetTarget(event),
+ colResizeWidget)) {
+ onResizeEvent(event);
+ } else {
+ handleCaptionEvent(event);
+ }
}
- super.onBrowserEvent(event);
}
private void createFloatingCopy() {
createFloatingCopy();
moved = true;
}
- int x = DOM.eventGetClientX(event);
+ int x = DOM.eventGetClientX(event)
+ + DOM.getElementPropertyInt(tHead.hTableWrapper,
+ "scrollLeft");
int slotX = headerX;
closestSlot = colIndex;
int closestDistance = -1;
}
tHead.focusSlot(closestSlot);
- updateFloatingCopysPosition(x, -1);
+ updateFloatingCopysPosition(DOM.eventGetClientX(event), -1);
ApplicationConnection.getConsole().log("" + closestSlot);
}
break;
}
public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (DOM.compare(DOM.eventGetTarget(event), columnSelector)) {
- int left = DOM.getAbsoluteLeft(columnSelector);
- int top = DOM.getAbsoluteTop(columnSelector)
- + DOM.getElementPropertyInt(columnSelector,
- "offsetHeight");
- client.getContextMenu().showAt(this, left, top);
+ if (enabled) {
+ if (DOM.compare(DOM.eventGetTarget(event), columnSelector)) {
+ int left = DOM.getAbsoluteLeft(columnSelector);
+ int top = DOM.getAbsoluteTop(columnSelector)
+ + DOM.getElementPropertyInt(columnSelector,
+ "offsetHeight");
+ client.getContextMenu().showAt(this, left, top);
+ }
}
}
* @param el
* element where to attach contenxt menu event
*/
- private native void attachContextMenuEvent(Element el)
+ private native void attachContextMenuEvent(Element el)
/*-{
var row = this;
el.oncontextmenu = function(e) {
public void setHeight(String height) {
// workaround very common 100% height problem - extract borders
- if(height.equals("100%")) {
+ if (height.equals("100%")) {
final int borders = getBorderSpace();
Element elem = getElement();
Element parentElem = DOM.getParent(elem);
// put table away from flow for a moment
DOM.setStyleAttribute(getElement(), "position", "absolute");
// get containers natural space for table
- int availPixels = DOM.getElementPropertyInt(parentElem, "clientHeight");
+ int availPixels = DOM.getElementPropertyInt(parentElem,
+ "clientHeight");
// put table back to flow
DOM.setStyleAttribute(getElement(), "position", "static");
// set 100% height with borders
private int getBorderSpace() {
Element el = getElement();
- return DOM.getElementPropertyInt(el, "offsetHeight") - DOM.getElementPropertyInt(el, "clientHeight");
+ return DOM.getElementPropertyInt(el, "offsetHeight")
+ - DOM.getElementPropertyInt(el, "clientHeight");
}
}