/* Menubar.java
Purpose:
Description:
History:
Thu Sep 22 10:34:31 2005, Created by tomyeh
Copyright (C) 2005 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.WrongValueException;
import org.zkoss.zul.impl.XulElement;
/**
* A container that usually contains menu elements.
*
* <p>Default {@link #getZclass}: z-menubar
*
* @author tomyeh
*/
public class Menubar extends XulElement {
private boolean _autodrop;
private String _orient = "horizontal";
private boolean _scrollable = false;
public Menubar() {
}
/**
* @param orient either horizontal or vertical
*/
public Menubar(String orient) {
this();
setOrient(orient);
}
/** Returns the orient.
* <p>Default: "horizontal".
*/
public String getOrient() {
return _orient;
}
/** Sets the orient.
* @param orient either horizontal or vertical
*/
public void setOrient(String orient) throws WrongValueException {
if (!"horizontal".equals(orient) && !"vertical".equals(orient))
throw new WrongValueException("orient cannot be " + orient);
if (!Objects.equals(_orient, orient)) {
_orient = orient;
smartUpdate("orient", _orient);
}
}
/**
* Returns whether it is a horizontal .
* @since 3.6.3
*/
public boolean isHorizontal() {
return "horizontal".equals(getOrient());
}
/**
* Returns whether it is a vertical .
* @since 3.6.3
*/
public boolean isVertical() {
return "vertical".equals(getOrient());
}
/**
* Returns whether the menubar scrolling is enabled.
* <p>Default: false.
* @since 3.6.3
*/
public boolean isScrollable() {
return _scrollable;
}
/**
* Sets whether to enable the menubar scrolling
* When enable, if menubar is shorter than total width of menu, left,right arrow will appear.
* @since 3.6.3
*/
public void setScrollable(boolean scrollable) {
if (isHorizontal() && _scrollable != scrollable) {
_scrollable = scrollable;
smartUpdate("scrollable", scrollable);
}
}
/** Returns whether to automatically drop down menus if user moves mouse
* over it.
* <p>Default: false.
*/
public boolean isAutodrop() {
return _autodrop;
}
/** Sets whether to automatically drop down menus if user moves mouse
* over it.
*/
public void setAutodrop(boolean autodrop) {
if (_autodrop != autodrop) {
_autodrop = autodrop;
smartUpdate("autodrop", autodrop);
}
}
//-- Component --//
public String getZclass() {
return _zclass == null ? "z-menubar" : _zclass;
}
public void beforeChildAdded(Component child, Component refChild) {
if (!(child instanceof Menu) && !(child instanceof Menuitem) && !(child instanceof Menuseparator))
throw new UiException("Unsupported child for menubar: " + child);
super.beforeChildAdded(child, refChild);
}
// super
protected void renderProperties(org.zkoss.zk.ui.sys.ContentRenderer renderer) throws java.io.IOException {
super.renderProperties(renderer);
render(renderer, "autodrop", _autodrop);
if ("vertical".equals(getOrient()))
render(renderer, "orient", _orient);
if (isHorizontal() && _scrollable)
render(renderer, "scrollable", _scrollable);
}
}