import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollListener;
import com.google.gwt.user.client.ui.ScrollPanel;
-import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.itmill.toolkit.terminal.gwt.client.Client;
import com.itmill.toolkit.terminal.gwt.client.Paintable;
public class IScrollTable extends Composite implements Paintable, ITable, ScrollListener {
+ public static final String CLASSNAME = "i-table";
/**
* multiple of pagelenght which component will
* cache when requesting more rows
bodyContainer.addScrollListener(this);
- VerticalPanel panel = new VerticalPanel();
+ bodyContainer.setStyleName(CLASSNAME+"-body");
+
+ FlowPanel panel = new FlowPanel();
+ panel.setStyleName(CLASSNAME);
panel.add(tHead);
panel.add(bodyContainer);
public HeaderCell(String colId, String headerText) {
this.cid = colId;
-
- DOM.setStyleAttribute(colResizeWidget,"display", "block");
+
+ DOM.setAttribute(colResizeWidget, "className", CLASSNAME+"-resizer");
DOM.setStyleAttribute(colResizeWidget, "width", DRAG_WIDGET_WIDTH +"px");
- DOM.setStyleAttribute(colResizeWidget,"height", "20px");
- DOM.setStyleAttribute(colResizeWidget,"cssFloat", "right");
- DOM.setStyleAttribute(colResizeWidget, "styleFloat", "right");
- DOM.setStyleAttribute(colResizeWidget,"background", "brown");
- DOM.setStyleAttribute(colResizeWidget,"cursor", "e-resize");
- DOM.sinkEvents(colResizeWidget,Event.MOUSEEVENTS);
+ DOM.sinkEvents(colResizeWidget, Event.MOUSEEVENTS);
setText(headerText);
DOM.appendChild(td, colResizeWidget);
-
- DOM.setStyleAttribute(captionContainer, "cssFloat", "right");
- DOM.setStyleAttribute(captionContainer, "styleFloat", "right");
- DOM.setStyleAttribute(captionContainer, "overflow", "hidden");
- DOM.setStyleAttribute(captionContainer, "white-space", "nowrap");
- DOM.setStyleAttribute(captionContainer, "display", "inline");
+ DOM.setAttribute(captionContainer, "className", CLASSNAME+"-caption-container");
DOM.sinkEvents(captionContainer, Event.MOUSEEVENTS);
DOM.appendChild(td, captionContainer);
private void setSorted(boolean sorted) {
if(sorted) {
if(sortAscending)
- this.setStyleName("headerCellAsc");
+ this.setStyleName("header-cell-asc");
else
- this.setStyleName("headerCellDesc");
+ this.setStyleName("header-cell-desc");
} else {
- this.setStyleName("headerCell");
+ this.setStyleName("header-cell");
}
}
floatingCopyOfHeaderCell = DOM.getChild(floatingCopyOfHeaderCell, 1);
// TODO isolate non-standard css attribute (filter)
// TODO move styles to css file
- DOM.setStyleAttribute(floatingCopyOfHeaderCell, "position", "absolute");
- DOM.setStyleAttribute(floatingCopyOfHeaderCell, "background", "#000000");
- DOM.setStyleAttribute(floatingCopyOfHeaderCell, "color", "#ffffff");
- DOM.setStyleAttribute(floatingCopyOfHeaderCell, "opacity", "0.5");
- DOM.setStyleAttribute(floatingCopyOfHeaderCell, "filter", "alpha(opacity=100)");
+ DOM.setAttribute(floatingCopyOfHeaderCell, "className", CLASSNAME+"-header-drag");
updateFloatingCopysPosition(DOM.getAbsoluteLeft(td), DOM.getAbsoluteTop(td));
DOM.appendChild(RootPanel.get().getElement(), floatingCopyOfHeaderCell);
}
public class TableHead extends Panel implements IActionOwner {
+ /**
+ * Apply these in CSS also.
+ */
private static final int COLUMN_SELECTOR_WIDTH = 10;
private static final int COLUMN_SELECTOR_HEIGHT = 10;
public TableHead() {
DOM.setStyleAttribute(hTableWrapper, "overflow", "hidden");
- DOM.setAttribute(hTableWrapper, "className", "iscrolltable-header");
+ DOM.setAttribute(hTableWrapper, "className", CLASSNAME+"-header");
// TODO move styles to CSS
+ DOM.setAttribute(columnSelector, "className", CLASSNAME+"-column-selector");
DOM.setStyleAttribute(columnSelector, "width", COLUMN_SELECTOR_WIDTH +"px");
- DOM.setStyleAttribute(columnSelector, "cssFloat", "right");
- DOM.setStyleAttribute(columnSelector, "styleFloat", "right");
DOM.setStyleAttribute(columnSelector, "height", COLUMN_SELECTOR_HEIGHT + "px");
- DOM.setStyleAttribute(columnSelector, "background", "brown");
DOM.setStyleAttribute(columnSelector, "display", "none");
DOM.appendChild(table, headerTableBody);
DOM.appendChild(div, hTableWrapper);
setElement(div);
+ setStyleName(CLASSNAME+"-header-wrap");
+
DOM.sinkEvents(columnSelector, Event.ONCLICK);
availableCells.put("0", new RowHeadersHeaderCell());
private void focusSlot(int index) {
removeSlotFocus();
if(index > 0)
- DOM.setStyleAttribute(
+ DOM.setAttribute(
DOM.getFirstChild(DOM.getChild(tr, index - 1)),
- "borderRight", "2px solid black");
+ "className", CLASSNAME+"-resizer "+CLASSNAME+"-focus-slot-right");
else
- DOM.setStyleAttribute(
+ DOM.setAttribute(
DOM.getFirstChild(DOM.getChild(tr, index)),
- "borderLeft", "2px solid black");
+ "className", CLASSNAME+"-resizer "+CLASSNAME+"-focus-slot-left");
focusedSlot = index;
}
if(focusedSlot < 0)
return;
if(focusedSlot == 0)
- DOM.setStyleAttribute(
+ DOM.setAttribute(
DOM.getFirstChild(DOM.getChild(tr, focusedSlot)),
- "borderLeft", "none");
+ "className", CLASSNAME+"-resizer");
else if( focusedSlot > 0)
- DOM.setStyleAttribute(
+ DOM.setAttribute(
DOM.getFirstChild(DOM.getChild(tr, focusedSlot - 1)),
- "borderRight", "none");
+ "className", CLASSNAME+"-resizer");
focusedSlot = -1;
}
public String getHTML() {
StringBuffer buf = new StringBuffer();
if(collapsed)
- buf.append("<span class=\"off\">");
+ buf.append("<span class=\"i-off\">");
buf.append(super.getHTML());
if(collapsed)
buf.append("</span>");
}
private void constructDOM() {
- DOM.setAttribute(table, "className", "iscrolltable-table");
- DOM.setAttribute(preSpacer, "className", "iscrolltable-rowspacer");
- DOM.setAttribute(postSpacer, "className", "iscrolltable-rowspacer");
+ DOM.setAttribute(table, "className", CLASSNAME+"-table");
+ DOM.setAttribute(preSpacer, "className", CLASSNAME+"-row-spacer");
+ DOM.setAttribute(postSpacer, "className", CLASSNAME+"-row-spacer");
DOM.appendChild(table, tBody);
DOM.appendChild(container, preSpacer);
}
// } else if (firstIndex > lastRendered || firstIndex + rows < firstRendered) {
} else if (true) {
- // complitely new set of rows
+ // completely new set of rows
// create one row before truncating row
IScrollTableRow row = createRow((UIDL) it.next());
while(lastRendered + 1 > firstRendered)
}
private void addRowBeforeFirstRendered(IScrollTableRow row) {
+ IScrollTableRow first = null;
+ if(renderedRows.size()>0)
+ first = (IScrollTableRow) renderedRows.get(0);
+ if(first != null && first.getStyleName().indexOf("i-odd") == -1)
+ row.addStyleName("i-odd");
DOM.insertChild(tBody, row.getElement(), 0);
adopt(row, null);
renderedRows.add(0, row);
}
private void addRow(IScrollTableRow row) {
+ IScrollTableRow last = null;
+ if(renderedRows.size()>0)
+ last = (IScrollTableRow) renderedRows.get(renderedRows.size()-1);
+ if(last != null && last.getStyleName().indexOf("i-odd") == -1)
+ row.addStyleName("i-odd");
DOM.appendChild(tBody, row.getElement());
adopt(row, null);
renderedRows.add(row);
setElement(DOM.createElement("tr"));
DOM.sinkEvents(getElement(), Event.ONCLICK);
attachContextMenuEvent(getElement());
- setStyleName("iscrolltable-row");
+ setStyleName(CLASSNAME+"-row");
}
private native void attachContextMenuEvent(Element el) /*-{
// String only content is optimized by not using Label widget
Element td = DOM.createTD();
Element container = DOM.createDiv();
- DOM.setAttribute(container, "className", "iscrolltable-cellContent");
+ DOM.setAttribute(container, "className", CLASSNAME+"-cell-content");
DOM.setInnerHTML(container, text);
if(align != ALIGN_LEFT) {
switch (align) {
public void addCell(Widget w, char align) {
Element td = DOM.createTD();
Element container = DOM.createDiv();
- DOM.setAttribute(container, "className", "iscrolltable-cellContent");
+ DOM.setAttribute(container, "className", CLASSNAME+"-cell-content");
// TODO make widget cells respect align. text-align:center for IE, margin: auto for others
DOM.appendChild(td, container);
DOM.appendChild(getElement(), td);
String s = DOM.getAttribute(DOM.eventGetTarget(event), "className");
switch (DOM.eventGetType(event)) {
case Event.ONCLICK:
- if("iscrolltable-cellContent".equals(s)) {
+ if((CLASSNAME+"-cell-content").equals(s)) {
client.console.log("Row click");
if(selectMode > ITable.SELECT_MODE_NONE) {
toggleSelection();
if(selectMode == ITable.SELECT_MODE_SINGLE)
IScrollTable.this.deselectAll();
selectedRowKeys.add(String.valueOf(rowKey));
-
- setStyleName("iscrolltable-selRow");
+ addStyleName("i-selected");
} else {
selectedRowKeys.remove(String.valueOf(rowKey));
- setStyleName("iscrolltable-row");
+ removeStyleName("i-selected");
}
}