zul/src/main/java/org/zkoss/zul/Cell.java
/* Cell.java
{{IS_NOTE
Purpose:
Description:
History:
Aug 31, 2009 4:24:00 PM , Created by jumperchen
}}IS_NOTE
Copyright (C) 2009 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
}}IS_RIGHT
*/
package org.zkoss.zul;
import org.zkoss.lang.Objects;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zul.impl.XulElement;
/**
* The generic cell component to be embedded into {@link Row} or {@link Vbox}
* or {@link Hbox} for fully control style and layout.
*
* <p>Default {@link #getZclass}: z-cell.
* @author jumperchen
* @since 5.0.0
*/
public class Cell extends XulElement {
private AuxInfo _auxinf;
/** Returns the horizontal alignment.
* <p>Default: null (system default: left unless CSS specified).
*/
public String getAlign() {
return _auxinf != null ? _auxinf.align : null;
}
/** Sets the horizontal alignment.
* Allowed values: left,right,center,justify,char.
*/
public void setAlign(String align) {
if (!Objects.equals(getAlign(), align)) {
initAuxInfoForCell().align = align;
smartUpdate("align", getAlign());
}
}
/** Returns the vertical alignment.
* <p>Default: null (system default: top).
*/
public String getValign() {
return _auxinf != null ? _auxinf.valign : null;
}
/** Sets the vertical alignment of this grid.
* Allowed values: top, middle, bottom, baseline
*/
public void setValign(String valign) {
if (!Objects.equals(getValign(), valign)) {
initAuxInfoForCell().valign = valign;
smartUpdate("valign", getValign());
}
}
/** Returns number of columns to span.
* Default: 1.
*/
public int getColspan() {
return _auxinf != null ? _auxinf.colspan : 1;
}
/** Sets the number of columns to span.
* <p>It is the same as the colspan attribute of HTML TD tag.
*/
public void setColspan(int colspan) throws WrongValueException {
if (colspan <= 0)
throw new WrongValueException("Positive only");
if (getColspan() != colspan) {
initAuxInfoForCell().colspan = colspan;
smartUpdate("colspan", getColspan());
}
}
/** Returns number of rows to span.
* Default: 1.
*/
public int getRowspan() {
return _auxinf != null ? _auxinf.rowspan : 1;
}
/** Sets the number of rows to span.
* <p>It is the same as the rowspan attribute of HTML TD tag.
*/
public void setRowspan(int rowspan) throws WrongValueException {
if (rowspan <= 0)
throw new WrongValueException("Positive only");
if (getRowspan() != rowspan) {
initAuxInfoForCell().rowspan = rowspan;
smartUpdate("rowspan", getRowspan());
}
}
//super//
public String getZclass() {
return _zclass == null ? "z-cell" : _zclass;
}
//Cloneable//
public Object clone() {
final Cell clone = (Cell) super.clone();
if (_auxinf != null)
clone._auxinf = (AuxInfo) _auxinf.clone();
return clone;
}
protected void renderProperties(org.zkoss.zk.ui.sys.ContentRenderer renderer) throws java.io.IOException {
super.renderProperties(renderer);
if (getColspan() != 1)
renderer.render("colspan", getColspan());
if (getRowspan() != 1)
renderer.render("rowspan", getRowspan());
renderer.render("align", getAlign());
renderer.render("valign", getValign());
}
private AuxInfo initAuxInfoForCell() {
if (_auxinf == null)
_auxinf = new AuxInfo();
return _auxinf;
}
@Override
public boolean evalCSSFlex() {
return false;
}
private static class AuxInfo implements java.io.Serializable, Cloneable {
private String align = null;
private String valign = null;
private int colspan = 1;
private int rowspan = 1;
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
}
}