Author: abelevich
Date: 2007-11-01 10:31:53 -0400 (Thu, 01 Nov 2007)
New Revision: 3672
Added:
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagBase.java
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagHandlerBase.java
Modified:
trunk/ui/panelmenu/src/main/config/component/panelMenu.xml
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenu.java
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java
Log:
RF-902
Modified: trunk/ui/panelmenu/src/main/config/component/panelMenu.xml
===================================================================
--- trunk/ui/panelmenu/src/main/config/component/panelMenu.xml 2007-11-01 14:00:27 UTC
(rev 3671)
+++ trunk/ui/panelmenu/src/main/config/component/panelMenu.xml 2007-11-01 14:31:53 UTC
(rev 3672)
@@ -366,8 +366,14 @@
<tag>
<name>panelMenuGroup</name>
<classname>org.richfaces.taglib.PanelMenuGroupTag</classname>
- <superclass>org.ajax4jsf.webapp.taglib.HtmlComponentTagBase</superclass>
- </tag>
+ <superclass>org.richfaces.taglib.PanelMenuGroupTagBase</superclass>
+ </tag>
+
+ <taghandler generate="true">
+ <classname>org.richfaces.taglib.PanelMenuGroupTagHandler</classname>
+ <superclass>org.richfaces.taglib.PanelMenuGroupTagHandlerBase</superclass>
+ </taghandler>
+
<property>
<name>expandMode</name>
<classname>java.lang.String</classname>
Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenu.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenu.java 2007-11-01
14:00:27 UTC (rev 3671)
+++ trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenu.java 2007-11-01
14:31:53 UTC (rev 3672)
@@ -8,6 +8,8 @@
public static final String DEFAULT_SELECTED_CLASS = "dr-pmenu-selected-item";
public static final String USER_DEFINED_SELECTED_CLASS =
"rich-pmenu-item-selected";
+
+ private boolean firstExpandedEncoded = false;
public abstract String getEvent();
public abstract void setEvent(String event);
@@ -113,4 +115,11 @@
public String getSelectedName(){
return getValue() != null ? getValue().toString() : getSelectedChild();
}
+ public boolean isFirstExpandedEncoded() {
+ return firstExpandedEncoded;
+ }
+ public void setFirstExpandedEncoded(boolean firstExpandedEncoded) {
+ this.firstExpandedEncoded = firstExpandedEncoded;
+ }
+
}
Modified: trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java 2007-11-01
14:00:27 UTC (rev 3671)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/component/UIPanelMenuGroup.java 2007-11-01
14:31:53 UTC (rev 3672)
@@ -73,14 +73,26 @@
public abstract void setOnexpand(String ongroupexpand);
public abstract String getLabel();
public abstract void setLabel(String label);
-
- public abstract boolean isExpanded();
- public abstract void setExpanded(boolean expanded);
-
public abstract void setName(String string);
public abstract String getName();
+ public boolean isExpanded(){
+
+ Object value = getValue();
+ if(value == null){
+ return false;
+ }
+ if(value instanceof String){
+ value = new Boolean((String)value);
+ }
+
+ return ((Boolean)value).booleanValue();
+ }
+ public void setExpanded(boolean expanded){
+ setValue(expanded);
+ }
+
public UIPanelMenuGroup(){
setConverter(new BooleanConverter());
}
@@ -129,4 +141,6 @@
}
}
}
+
+
}
Modified:
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2007-11-01
14:00:27 UTC (rev 3671)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuGroupRenderer.java 2007-11-01
14:31:53 UTC (rev 3672)
@@ -221,24 +221,26 @@
}
public boolean isOpened(FacesContext context, UIComponent component)throws IOException
{
- UIPanelMenuGroup group = (UIPanelMenuGroup)component;
- Boolean value = (Boolean)group.getValue();
- if (value != null) {
- return value.booleanValue();
- } else {
+ boolean value = false;
+ if(component instanceof UIPanelMenuGroup){
+ UIPanelMenuGroup group = (UIPanelMenuGroup)component;
+ value = group.isExpanded();
+
boolean isParentDisabled = isParentDisabled(component);
- if(component instanceof UIPanelMenuGroup){
- if( ((UIPanelMenuGroup)component).isExpanded() &&
!((UIPanelMenuGroup)component).isDisabled() && !isParentDisabled ){
- return true;
- } else {
- //check expanded attributes in children groups, if exists
- boolean isChildrenExpanded = isChildrenExpanded(component);
- return isChildrenExpanded && !isParentDisabled &&
!((UIPanelMenuGroup)component).isDisabled();// ? "opened" : "closed";
- }
+ boolean disabled = !group.isDisabled() && !isParentDisabled ;
+
+ if( value && disabled){
+ value = true;
+ } else {
+ //check expanded attributes in children groups, if exists
+ boolean isChildrenExpanded = isChildrenExpanded(component);
+ value = isChildrenExpanded && disabled; // ? "opened" :
"closed";
}
+
}
- return false;
+
+ return value;
}
public String getLabelClass(FacesContext context, UIComponent component) {
Modified:
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java 2007-11-01
14:00:27 UTC (rev 3671)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/renderkit/html/PanelMenuRenderer.java 2007-11-01
14:31:53 UTC (rev 3672)
@@ -36,7 +36,6 @@
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
-import org.ajax4jsf.Messages;
import org.ajax4jsf.javascript.JSFunction;
import org.ajax4jsf.javascript.ScriptUtils;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
@@ -50,6 +49,7 @@
/* (non-Javadoc)
* @see org.ajax4jsf.framework.renderer.RendererBase#getComponentClass()
*/
+
protected Class getComponentClass() {
return UIComponent.class;
}
@@ -502,8 +502,36 @@
}
buffer.append("\"");
}
-
+ public void renderChildren(FacesContext facesContext, UIComponent component)throws
IOException {
+
+ if(component instanceof UIPanelMenu){
+ UIPanelMenu panelMenu = (UIPanelMenu)component;
+ if(panelMenu.getChildCount() > 0){
+ for (Iterator it = component.getChildren().iterator(); it.hasNext();) {
+ UIComponent child = (UIComponent) it.next();
+ if(child instanceof UIPanelMenuGroup) {
+ UIPanelMenuGroup group = (UIPanelMenuGroup)child;
+
+ if(panelMenu.isExpandSingle()) {
+ if(!(Boolean)panelMenu.getAttributes().get("firstExpandedEncoded")) {
+ if(group.isExpanded()) {
+ panelMenu.getAttributes().put("firstExpandedEncoded", true);
+ }
+ }else {
+ group.setExpanded(false);
+ if((Boolean)group.getValue()){
+ group.setValue(null);
+ }
+ }
+ }
+ }
+ renderChild(facesContext, child);
+ }
+ }
+ }
+ }
+
public void doDecode(FacesContext context, UIComponent component) {
Map requestMap = context.getExternalContext().getRequestParameterMap();
String menuClientId = component.getClientId(context);
Added: trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagBase.java
===================================================================
--- trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagBase.java
(rev 0)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagBase.java 2007-11-01
14:31:53 UTC (rev 3672)
@@ -0,0 +1,72 @@
+package org.richfaces.taglib;
+
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.webapp.taglib.HtmlComponentTagBase;
+import org.richfaces.component.UIPanelMenuGroup;
+
+/**
+ * @author Anton Belevich
+ *
+ */
+public abstract class PanelMenuGroupTagBase extends HtmlComponentTagBase{
+
+ private boolean _setExpandedSet = false;
+ private ValueExpression _value = null;
+
+ private void logValueDeprecation(ValueExpression value) {
+ FacesContext facesContext = getFacesContext();
+ facesContext.getExternalContext().log("expanded attribute has been already set for
component with id: " + this.getId() +
+ "[" + value.getExpressionString() + "]. value attribute is deprecated
and thus has been dropped!");
+ }
+
+
+ public void setExpanded(ValueExpression value){
+
+ if (!_setExpandedSet && _value != null) {
+ logValueDeprecation(value);
+ }
+ _value = value;
+ _setExpandedSet = true;
+ }
+
+ public void setValue(ValueExpression value) {
+ if (!_setExpandedSet) {
+ _value = value;
+ } else {
+ logValueDeprecation(value);
+ }
+ }
+
+
+ protected void setProperties(UIComponent component) {
+ super.setProperties(component);
+
+ UIPanelMenuGroup panelMenu = (UIPanelMenuGroup) component;
+
+ if (_value != null) {
+ if (_value.isLiteralText()) {
+ try {
+ panelMenu.setExpanded(Boolean.parseBoolean(_value.getExpressionString()));
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ component.setValueExpression("expanded", _value);
+ }
+ }else{
+ panelMenu.setExpanded(false);
+ }
+ }
+
+
+ public void release() {
+ super.release();
+ _setExpandedSet = false;
+ _value = null;
+ }
+}
Added:
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagHandlerBase.java
===================================================================
---
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagHandlerBase.java
(rev 0)
+++
trunk/ui/panelmenu/src/main/java/org/richfaces/taglib/PanelMenuGroupTagHandlerBase.java 2007-11-01
14:31:53 UTC (rev 3672)
@@ -0,0 +1,39 @@
+/**
+ *
+ */
+package org.richfaces.taglib;
+
+import javax.faces.context.FacesContext;
+
+import org.ajax4jsf.webapp.taglib.AjaxComponentHandler;
+
+import com.sun.facelets.tag.MetaRuleset;
+import com.sun.facelets.tag.TagAttribute;
+import com.sun.facelets.tag.TagAttributes;
+import com.sun.facelets.tag.jsf.ComponentConfig;
+
+/**
+ * @author Anton Belevich
+ *
+ */
+public abstract class PanelMenuGroupTagHandlerBase extends AjaxComponentHandler {
+ public PanelMenuGroupTagHandlerBase(ComponentConfig config) {
+ super(config);
+ }
+
+ protected MetaRuleset createMetaRuleset(Class type) {
+ TagAttributes attributes = this.tag.getAttributes();
+ TagAttribute attribute = attributes.get("value");
+ if (attribute != null && attributes.get("expanded") != null) {
+ TagAttribute idAttribute = attributes.get("id");
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ facesContext.getExternalContext().log("expanded attribute has been already set
for component with id: " +
+ idAttribute != null ? idAttribute.getValue() : null +
+ "[" + attribute.getValue() + "]. value attribute is deprecated and
thus has been dropped!");
+ }
+
+ return super.createMetaRuleset(type).alias("expanded", "value");
+ }
+
+
+}
Show replies by date