org.zkoss.zul.Detail Maven / Gradle / Ivy
/* Detail.java
Purpose:
Description:
History:
Jul 25, 2008 5:15:48 PM , Created by jumperchen
Copyright (C) 2008 Potix Corporation. All Rights Reserved.
{{IS_RIGHT
This program is distributed under LGPL Version 2.1 in the hope that
it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.zul;
import org.zkoss.lang.Objects;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.UiException;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.OpenEvent;
import org.zkoss.zul.impl.XulElement;
/**
* The detail component is used to display a detailed section where a master row and
* multiple detail rows are on the same row.
* Available in ZK PE and ZK EE.
*
Event:
*
* - onOpen is sent when this component is opened or closed by user.
*
*
*
* Default {@link #getZclass}: z-detail.
*
*
Default {@link #getWidth}: 18px. It depends on the width of the icon of
* the detail.
*
* @author jumperchen
* @since 3.5.0
*/
public class Detail extends XulElement {
private boolean _open;
/** The style used for the content block. */
private String _cntStyle;
/** The style class used for the content block. */
private String _cntscls;
static {
addClientEvent(Detail.class, Events.ON_OPEN, CE_IMPORTANT);
}
/**
* Returns the CSS style for the content block of the window.
*/
public String getContentStyle() {
return _cntStyle;
}
/**
* Sets the CSS style for the content block of the window.
*
*
Default: null.
*/
public void setContentStyle(String style) {
if (!Objects.equals(_cntStyle, style)) {
_cntStyle = style;
smartUpdate("contentStyle", getContentStyle());
}
}
/**
* Returns the style class used for the content block.
*/
public String getContentSclass() {
return _cntscls;
}
/**
* Sets the style class used for the content block.
*/
public void setContentSclass(String scls) {
if (!Objects.equals(_cntscls, scls)) {
_cntscls = scls;
smartUpdate("contentSclass", _cntscls);
}
}
/**
* Sets whether the detail is open.
*/
public void setOpen(boolean open) {
if (_open != open) {
_open = open;
smartUpdate("open", _open);
}
}
/**
* Returns whether the detail is open.
*/
public boolean isOpen() {
return _open;
}
//-- Component --//
public String getZclass() {
return _zclass == null ? "z-detail" : _zclass;
}
// super
protected void renderProperties(org.zkoss.zk.ui.sys.ContentRenderer renderer) throws java.io.IOException {
super.renderProperties(renderer);
render(renderer, "open", this.isOpen());
render(renderer, "contentSclass", this.getContentSclass());
render(renderer, "contentStyle", this.getContentStyle());
}
public void beforeParentChanged(Component parent) {
if (parent != null && !(parent instanceof Row))
throw new UiException("Unsupported parent for detail: " + parent);
super.beforeParentChanged(parent);
}
//-- ComponentCtrl --//
/** Processes an AU request.
*
*
Default: in addition to what are handled by {@link XulElement#service},
* it also handles onOpen.
* @since 5.0.0
*/
public void service(org.zkoss.zk.au.AuRequest request, boolean everError) {
final String cmd = request.getCommand();
if (cmd.equals(Events.ON_OPEN)) {
OpenEvent evt = OpenEvent.getOpenEvent(request);
_open = evt.isOpen();
Events.postEvent(evt);
} else
super.service(request, everError);
}
}