/* * Ext GWT 2.2.4 - Ext for GWT * Copyright(c) 2007-2010, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.ui.client.widget.table; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.SortDir; import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.core.XDOM; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.EventType; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.SplitBarEvent; import com.extjs.gxt.ui.client.util.Format; import com.extjs.gxt.ui.client.widget.BoxComponent; import com.extjs.gxt.ui.client.widget.SplitBar; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Event; /** * @deprecated see {@link Grid} */ public class TableColumnUI extends BoxComponent { protected static String html; static { StringBuffer sb = new StringBuffer(); sb.append("<div class=my-tbl-col-overflow style='text-align: {0}'>"); sb.append("<div class=my-tbl-col-text>{1}</div>"); sb.append("</div>"); html = sb.toString(); } protected int lastWidth; protected boolean end; protected int index; protected BaseTable table; protected TableColumn column; protected TableHeader header; protected SplitBar splitBar; protected Listener<ComponentEvent> splitBarListener = new Listener<ComponentEvent>() { public void handleEvent(ComponentEvent e) { EventType type = e.getType(); if (type == Events.DragStart) { header.enableEvents(false); } else if (type == Events.DragEnd) { header.enableEvents(true); } } }; protected TableColumnUI(BaseTable table, int index) { this.table = table; this.index = index; column = table.getColumn(index); header = table.getTableHeader(); } public String getAlignment() { String align = "left"; if (column != null) { if (column.getAlignment() == HorizontalAlignment.CENTER) { align = "center"; } else if (column.getAlignment() == HorizontalAlignment.RIGHT) { align = "right"; } } return align; } @Override protected void onRightClick(ComponentEvent ce) { super.onRightClick(ce); header.onRightClick(column, ce); } public void onBrowserEvent(Event event) { if (!header.isEnabled()) { return; } super.onBrowserEvent(event); } public void onColumnResize(SplitBarEvent sbe) { if (sbe.getSize() < 1) { return; } if (column.getWidth() < 1.1) { int pixWidth = sbe.getSize() - 6; float percent = (float) pixWidth / table.getColumnModel().getVariableWidth(); table.getColumnModel().setWidthAsPercent(column.index, percent); header.resizeColumns(true, true); } else { column.setWidth(sbe.getSize()); header.resizeColumn(index, true); } } public void onComponentEvent(ComponentEvent ce) { switch (ce.getEventTypeInt()) { case Event.ONMOUSEOVER: onMouseOver(ce); break; case Event.ONMOUSEOUT: onMouseOut(ce); break; case Event.ONCLICK: header.onColumnClick(this, ce); break; } } public void onMouseMove(BaseEvent be) { header.onColumnMouseMove(this, be); } public void onMouseOut(BaseEvent be) { removeStyleName("my-tbl-col-over"); } public void onMouseOver(BaseEvent be) { addStyleName("my-tbl-col-over"); } public void onSortChange(SortDir sortDir) { Element td = DOM.getParent(getElement()); switch (sortDir) { case ASC: fly(td).addStyleName("my-tbl-col-sort"); addStyleName("my-tbl-col-asc"); break; case DESC: fly(td).addStyleName("my-tbl-col-sort"); addStyleName("my-tbl-col-desc"); break; case NONE: fly(td).removeStyleName("my-tbl-col-sort"); removeStyleName("my-tbl-col-asc"); removeStyleName("my-tbl-col-desc"); } } public void onTextChange(String text) { El textEl = el().selectNode(".my-tbl-col-text"); textEl.dom.setInnerHTML(text); } @Override protected void onRender(Element target, int index) { String[] params = null; if (end) { params = new String[] {"", ""}; } else { params = new String[] {getAlignment(), column.getText()}; } String s = Format.substitute(html, (Object[]) params); setElement(XDOM.create(s), target, index); if (column != null) { addStyleName("my-tbl-col-" + column.getId()); } el().setHeight(24); if (!end && column.isResizable()) { splitBar = header.createSplitBar(LayoutRegion.EAST, this); splitBar.setHandleWidth(5); splitBar.setXOffset(-2); splitBar.setAutoSize(false); splitBar.addListener(Events.Resize, new Listener<SplitBarEvent>() { public void handleEvent(SplitBarEvent ce) { onColumnResize(ce); } }); splitBar.addListener(Events.DragStart, splitBarListener); splitBar.addListener(Events.DragEnd, splitBarListener); } sinkEvents(Event.ONCLICK | Event.MOUSEEVENTS); } }