You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2006/02/10 17:14:42 UTC

svn commit: r376752 - in /myfaces/tomahawk/trunk: core/src/main/java/org/apache/myfaces/component/html/ext/ core/src/main/java/org/apache/myfaces/custom/navmenu/ core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/ core/src/main/java/org/a...

Author: mmarinschek
Date: Fri Feb 10 08:14:39 2006
New Revision: 376752

URL: http://svn.apache.org/viewcvs?rev=376752&view=rev
Log:
Following Features are added:

HtmlPanelNavigationMenu:

	-new Attribute Boolean expandAll: 
		if true all MenuItems are always expanded

	-new Attribute Boolean disabled:
		if true all MenuItems are disabled

	-new Attribute String disabledStyle:
		if a MenuItem is disabled its Style will
		be set to disabledStyle. This can
		be overwritten by disabledStyle Attribute
		of the MenuItem

	-new Attribute String disabledStyleClass:
		if a MenuItem is disabled its StyleClass will
		be set to disabledStyleClass. This can
		be overwritten by disabledStyleClass Attribute
		of the MenuItem

NavigationMenuItem (and UINavigationMenuItem):

	-existing Attribute String icon:
		Implemented that if set an UIGraphic with url:icon
		will be	rendered instead of the UIOutput inside the Link

	-new Attribute String target:
		HTML-Target-Attribute of the created commandLink
		will be set to target if available

	-new Attribute Boolean disabled:
		if true:
		* the rendered CommandLinks disabled-Attribute is set 
		  to true
		* the Style of the rendered CommandLink is set to
		  disabledStyle if available
		* the StyleClass of the rendered CommandLink is set to
		  disabledStyleClass if available
		* All Children-NavigationItems are disabled
		  as well

	-new Attribute String disabledStyle:
		This Style will be used by this Items CommandLink and 
		its Children-NavigationItems if the Item is disabled,
		can be overwritten in a Child-NavigationItem

	-new Attribute String disabledStyleClass:
		This StyleClass will be used by this Items CommandLink and 
		its Children-NavigationItems if the Item is disabled,
		can be overwritten in a Child-NavigationItem

HTMLCommandLink:

	-new Attribute Boolean disabled:
		if true:
		* a HTML-Span-Element is rendered instead
		  of the Anchor-Element 
		* the Style of the rendered Element is set to
		  disabledStyle if available
		* the StyleClass of the rendered Element is set to
		  disabledStyleClass if available

	-new Attribute String disabledStyle:
		This Style will be used by this Components rendered Element 
		if the Component is disabled

	-new Attribute String disabledStyleClass:
		This StyleClass will be used by this Components rendered Element 
		if the Component is disabled

Added:
    myfaces/tomahawk/trunk/core/src/main/tld/entities/ext_disabled_attribute.xml
Modified:
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlCommandLink.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenuTag.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlLinkRenderer.java
    myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlCommandLinkTag.java
    myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_command_link_attributes.xml
    myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_navigation_menu_item_attributes.xml
    myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_panel_navigation_2_attributes.xml
    myfaces/tomahawk/trunk/core/src/main/tld/tomahawk.tld
    myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/misc/NavigationMenu.java
    myfaces/tomahawk/trunk/examples/simple/src/main/webapp/panelnavigation_2.jsp

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlCommandLink.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlCommandLink.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlCommandLink.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/component/html/ext/HtmlCommandLink.java Fri Feb 10 08:14:39 2006
@@ -54,6 +54,9 @@
     private String _enabledOnUserRole = null;
     private String _visibleOnUserRole = null;
     private String _actionFor = null;
+    private Boolean _disabled;
+    private String _disabledStyle;
+    private String _disabledStyleClass;
 
     public HtmlCommandLink()
     {
@@ -109,6 +112,42 @@
         return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
     }
 
+    public boolean isDisabled()
+    {
+        if (_disabled != null) return _disabled.booleanValue();
+        ValueBinding vb = getValueBinding("disabled");
+        Boolean v = vb != null ? (Boolean)vb.getValue(getFacesContext()) : null;
+        return v != null && v.booleanValue();
+    }
+
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled ? Boolean.TRUE : Boolean.FALSE;
+    }
+
+    public String getDisabledStyle()
+    {
+        if (_disabledStyle != null) return _disabledStyle;
+        ValueBinding vb = getValueBinding("disabledStyle");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public String getDisabledStyleClass()
+    {
+        if (_disabledStyleClass != null) return _disabledStyleClass;
+        ValueBinding vb = getValueBinding("disabledStyleClass");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
+    }
 
     public boolean isRendered()
     {
@@ -118,12 +157,15 @@
 
     public Object saveState(FacesContext context)
     {
-        Object values[] = new Object[5];
+        Object values[] = new Object[8];
         values[0] = super.saveState(context);
         values[1] = _target;
         values[2] = _enabledOnUserRole;
         values[3] = _visibleOnUserRole;
         values[4] = _actionFor;
+        values[5] = _disabled;
+        values[6] = _disabledStyle;
+        values[7] = _disabledStyleClass;
         return values;
     }
 
@@ -135,6 +177,9 @@
         _enabledOnUserRole = (String)values[2];
         _visibleOnUserRole = (String)values[3];
         _actionFor = (String)values[4];
+        _disabled = (Boolean) values[5];
+        _disabledStyle = (String) values[6];
+        _disabledStyleClass = (String) values[7];
     }
     //------------------ GENERATED CODE END ---------------------------------------
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java Fri Feb 10 08:14:39 2006
@@ -33,6 +33,10 @@
     private static final String SPLIT_ATTR  = "split";
     private static final String OPEN_ATTR  = "open";
     private static final String ACTIVE_ATTR  = "active";
+    private static final String TARGET_ATTR = "target";
+    private static final String DISABLED_ATTR = "disabled";
+    private static final String DISABLED_STYLE_ATTR = "disabledStyle";
+    private static final String DISABLED_STYLE_CLASS_ATTR = "disabledStyleClass";
 
     private String _icon;
     private String _action;
@@ -41,6 +45,10 @@
     private String _split;
     private String _open;
     private String _active;
+    private String _target;
+    private String _disabled;
+    private String _disabledStyle;
+    private String _disabledStyleClass;
 
     // User Role support
     private String _enabledOnUserRole;
@@ -81,6 +89,10 @@
         setActionProperty(component, _action);
         setActionListenerProperty(component, _actionListener);
         setBooleanProperty(component, JSFAttr.IMMEDIATE_ATTR, _immediate);
+        setStringProperty(component,TARGET_ATTR,_target);
+        setBooleanProperty(component,DISABLED_ATTR,_disabled);
+        setStringProperty(component,DISABLED_STYLE_ATTR,_disabledStyle);
+        setStringProperty(component,DISABLED_STYLE_CLASS_ATTR,_disabledStyleClass);
     }
 
     public void setAction(String action)
@@ -116,5 +128,25 @@
     public void setEnabledOnUserRole(String enabledOnUserRole)
     {
         _enabledOnUserRole = enabledOnUserRole;
+    }
+
+    public void setTarget(String target)
+    {
+        _target = target;
+    }
+
+    public void setDisabled(String disabled)
+    {
+        _disabled = disabled;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
     }
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java Fri Feb 10 08:14:39 2006
@@ -36,6 +36,10 @@
     boolean _split;
     private boolean rendered = true;
     private List _navigationMenuItems = null;
+    private String _target;
+    private boolean _disabled;
+    private String _disabledStyle;
+    private String _disabledStyleClass;
 
     public NavigationMenuItem(String label, String action)
     {
@@ -80,6 +84,19 @@
         this.rendered = rendered;
     }
 
+    public NavigationMenuItem(Object value,
+                              String label,
+                              String description,
+                              boolean disabled,
+                              boolean rendered,
+                              String action,
+                              String icon,
+                              boolean split,
+                              String target)
+    {
+        this(value, label, description, disabled, rendered, action, icon, split);
+        this.setTarget(target);
+    }
 
     public boolean isRendered()
     {
@@ -150,6 +167,46 @@
     public void setActionListener(String actionListener)
     {
         _actionListener = actionListener;
+    }
+
+    public String getTarget()
+    {
+        return _target;
+    }
+
+    public void setTarget(String target)
+    {
+        _target = target;
+    }
+
+    public boolean isDisabled()
+    {
+        return _disabled;
+    }
+
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled;
+    }
+
+    public String getDisabledStyle()
+    {
+        return _disabledStyle;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public String getDisabledStyleClass()
+    {
+        return _disabledStyleClass;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
     }
 
     /**

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java Fri Feb 10 08:14:39 2006
@@ -46,6 +46,10 @@
     private MethodBinding _action = null;
     private MethodBinding _actionListener = null;
     private Boolean _immediate = null;
+    private String _target = null;
+    private Boolean _disabled = null;
+    private String _disabledStyle = null;
+    private String _disabledStyleClass = null;
 
     public UINavigationMenuItem()
     {
@@ -183,6 +187,55 @@
         return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
     }
 
+    public void setTarget(String target)
+    {
+        _target = target;
+    }
+
+    public String getTarget()
+    {
+        if (_target != null) return _target;
+        ValueBinding vb = getValueBinding("target");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = Boolean.valueOf(disabled);
+    }
+
+    public boolean isDisabled()
+    {
+        if (_disabled != null) return _disabled.booleanValue();
+        ValueBinding vb = getValueBinding("disabled");
+        Boolean v = vb != null ? (Boolean)vb.getValue(getFacesContext()) : null;
+        return v != null && v.booleanValue();
+    }
+
+    public String getDisabledStyle()
+    {
+        if (_disabledStyle != null) return _disabledStyle;
+        ValueBinding vb = getValueBinding("disabledStyle");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public String getDisabledStyleClass()
+    {
+        if (_disabledStyleClass != null) return _disabledStyleClass;
+        ValueBinding vb = getValueBinding("disabledStyleClass");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
+    }
+
     public boolean isRendered()
     {
         if (!UserRoleUtils.isVisibleOnUserRole(this)) return false;
@@ -191,7 +244,7 @@
 
     public Object saveState(FacesContext context)
     {
-        Object values[] = new Object[10];
+        Object values[] = new Object[14];
         values[0] = super.saveState(context);
         values[1] = _icon;
         values[2] = _split;
@@ -202,6 +255,10 @@
         values[7] = _active;
         values[8] = saveAttachedState(context, _actionListener);
         values[9] = _immediate;
+        values[10] = _target;
+        values[11] = _disabled;
+        values[12] = _disabledStyle;
+        values[13] = _disabledStyleClass;
         return ((Object) (values));
     }
 
@@ -218,5 +275,9 @@
         _active = (Boolean)values[7];
         _actionListener = (MethodBinding)restoreAttachedState(context, values[8]);
         _immediate = (Boolean)values[9];
+        _target = (String)values[10];
+        _disabled = (Boolean) values[11];
+        _disabledStyle = (String) values[12];
+        _disabledStyleClass = (String) values[13];
     }
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java Fri Feb 10 08:14:39 2006
@@ -25,10 +25,7 @@
 import org.apache.myfaces.renderkit.html.HtmlRendererUtils;
 import org.apache.myfaces.renderkit.html.ext.HtmlLinkRenderer;
 
-import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
-import javax.faces.component.UISelectItems;
-import javax.faces.component.UIViewRoot;
+import javax.faces.component.*;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
 import javax.faces.event.ActionListener;
@@ -197,7 +194,11 @@
             HtmlRendererUtils.writePrettyLineSeparator(facesContext);
             writer.startElement(HTML.UL_ELEM, panelNav);
             HtmlRendererUtils.renderHTMLAttributes(writer, panelNav, HTML.UL_PASSTHROUGH_ATTRIBUTES);
-
+            //iterate over the tree and set every item open if expandAll
+            if(panelNav.isExpandAll())
+            {
+                expandAll(panelNav);
+            }
             HtmlNavigationMenuRendererUtils.renderChildrenListLayout(facesContext, writer, panelNav, panelNav.getChildren(), 0);
 
             HtmlRendererUtils.writePrettyLineSeparator(facesContext);
@@ -297,6 +298,11 @@
             newItem.setActive(uiNavMenuItem.isActive());
             newItem.setValue(uiNavMenuItem.getValue());
             newItem.setTransient(false);
+            newItem.setTarget(uiNavMenuItem.getTarget());
+            newItem.setDisabled(uiNavMenuItem.isDisabled());
+            newItem.setDisabledStyle(uiNavMenuItem.getDisabledStyle());
+            newItem.setDisabledStyleClass(uiNavMenuItem.getDisabledStyleClass());
+
             if (uiNavMenuItem.getNavigationMenuItems() != null && uiNavMenuItem.getNavigationMenuItems().length > 0)
             {
                 addUINavigationMenuItems(facesContext, newItem, newItem.getChildren(), 0,
@@ -341,36 +347,103 @@
         if (uiNavMenuItem.isOpen()) newItem.toggleOpen();
         newItem.setActive(uiNavMenuItem.isActive());
 
-        // Create and add UIOutput
-        UIOutput uiOutput = (UIOutput) facesContext.getApplication().createComponent(UIOutput.COMPONENT_TYPE);
-        uiOutput.setId(parentId + "_txt" + id);
-        uiOutput.getClientId(facesContext); // create clientid
-        newItem.getChildren().add(uiOutput);
-        uiOutput.setParent(newItem);
-        if (uiNavMenuItem.getItemLabel() != null)
-        {
-            if (HtmlNavigationMenuRendererUtils.isValueReference(uiNavMenuItem.getItemLabel()))
+        if (!copyValueBinding(uiNavMenuItem, newItem, "target"))
+                    newItem.setTarget(uiNavMenuItem.getTarget());
+        if (!copyValueBinding(uiNavMenuItem, newItem, "disabled"))
+                    newItem.setDisabled(uiNavMenuItem.isDisabled());
+        if (!copyValueBinding(uiNavMenuItem, newItem, "disabledStyle"))
+                    newItem.setDisabledStyle(uiNavMenuItem.getDisabledStyle());
+        if (!copyValueBinding(uiNavMenuItem, newItem, "disabledStyleClass"))
+                    newItem.setDisabledStyleClass(uiNavMenuItem.getDisabledStyleClass());
+        // If the parent-Element is disabled the child is disabled as well
+        if(parent instanceof HtmlPanelNavigationMenu){
+            if(newItem.getDisabledStyle()==null)
             {
-                uiOutput.setValueBinding("value",
-                                         facesContext.getApplication().createValueBinding(uiNavMenuItem.getItemLabel()));
+                newItem.setDisabledStyle(
+                        ((HtmlPanelNavigationMenu)parent).getDisabledStyle()
+                );
             }
-            else
+            if(newItem.getDisabledStyleClass()==null)
+            {
+                newItem.setDisabledStyleClass(
+                        ((HtmlPanelNavigationMenu)parent).getDisabledStyleClass()
+                );
+            }
+            if(((HtmlPanelNavigationMenu)parent).isDisabled())
             {
-                uiOutput.setValue(uiNavMenuItem.getItemLabel());
+                newItem.setDisabled(true);
             }
         }
+        if(parent instanceof HtmlCommandNavigationItem){
+            if(newItem.getDisabledStyle()==null)
+            {
+                newItem.setDisabledStyle(
+                        ((HtmlCommandNavigationItem)parent).getDisabledStyle()
+                );
+            }
+            if(newItem.getDisabledStyleClass()==null)
+            {
+                newItem.setDisabledStyleClass(
+                        ((HtmlCommandNavigationItem)parent).getDisabledStyleClass()
+                );
+            }
+            if(((HtmlCommandNavigationItem)parent).isDisabled())
+            {
+                newItem.setDisabled(true);
+            }
+        }
+
+        if (uiNavMenuItem.getIcon()!=null)
+        {
+            UIGraphic uiGraphic = (UIGraphic) facesContext.getApplication().createComponent(UIGraphic.COMPONENT_TYPE);
+            uiGraphic.setId(parentId + "_img" + id);
+            uiGraphic.getClientId(facesContext);
+            newItem.getChildren().add(uiGraphic);
+            uiGraphic.setParent(newItem);
+            if (HtmlNavigationMenuRendererUtils.isValueReference(uiNavMenuItem.getIcon()))
+                {
+                    uiGraphic.setValueBinding("value",
+                                             facesContext.getApplication().createValueBinding(uiNavMenuItem.getIcon()));
+                }
+                else
+                {
+                    uiGraphic.setValue(uiNavMenuItem.getIcon());
+                }
+        }
+        
         else
         {
-            Object value = uiNavMenuItem.getValue();
-            if (value != null &&
-                HtmlNavigationMenuRendererUtils.isValueReference(value.toString()))
+            // Create and add UIOutput
+            UIOutput uiOutput = (UIOutput) facesContext.getApplication().createComponent(UIOutput.COMPONENT_TYPE);
+            uiOutput.setId(parentId + "_txt" + id);
+            uiOutput.getClientId(facesContext); // create clientid
+            newItem.getChildren().add(uiOutput);
+            uiOutput.setParent(newItem);
+            if (uiNavMenuItem.getItemLabel() != null)
             {
-                uiOutput.setValueBinding("value",
-                                         facesContext.getApplication().createValueBinding(value.toString()));
+                if (HtmlNavigationMenuRendererUtils.isValueReference(uiNavMenuItem.getItemLabel()))
+                {
+                    uiOutput.setValueBinding("value",
+                                             facesContext.getApplication().createValueBinding(uiNavMenuItem.getItemLabel()));
+                }
+                else
+                {
+                    uiOutput.setValue(uiNavMenuItem.getItemLabel());
+                }
             }
             else
             {
-                uiOutput.setValue(uiNavMenuItem.getValue());
+                Object value = uiNavMenuItem.getValue();
+                if (value != null &&
+                    HtmlNavigationMenuRendererUtils.isValueReference(value.toString()))
+                {
+                    uiOutput.setValueBinding("value",
+                                             facesContext.getApplication().createValueBinding(value.toString()));
+                }
+                else
+                {
+                    uiOutput.setValue(uiNavMenuItem.getValue());
+                }
             }
         }
         // process next level
@@ -450,6 +523,23 @@
         {
             _id--;
         }
+    }
+
+    private void expandAll(UIComponent parent)
+    {   //Recurse over all Children setOpen if child is HtmlCommandNavigationItem
+        if(parent instanceof HtmlCommandNavigationItem)
+        {
+            HtmlCommandNavigationItem navItem = (HtmlCommandNavigationItem) parent;
+            navItem.setOpen(true);
+        }
+        List children = parent.getChildren();
+        UIComponent child;
+        for (int i = 0; i < children.size(); i++)
+        {
+            child =  (UIComponent) children.get(i);
+            expandAll(child);
+        }
+
     }
 
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenu.java Fri Feb 10 08:14:39 2006
@@ -42,6 +42,9 @@
 
     static final String PREVIOUS_VIEW_ROOT = HtmlPanelNavigationMenu.class.getName() + ".PREVIOUS_VIEW_ROOT";
     private boolean _itemOpenActiveStatesRestored = false;
+    private Boolean _disabled;
+    private String _disabledStyle;
+    private String _disabledStyleClass;
 
     public void decode(FacesContext context)
     {
@@ -113,6 +116,7 @@
     private String _separatorStyle = null;
     private String _layout = null;
     private Boolean _preprocessed = Boolean.FALSE;
+    private Boolean _expandAll;
 
     public HtmlPanelNavigationMenu()
     {
@@ -242,9 +246,59 @@
         _preprocessed = preprocessed;
     }
 
+    public boolean isExpandAll()
+    {
+        if (_expandAll != null) return _expandAll.booleanValue();
+        ValueBinding vb = getValueBinding("expandAll");
+        Boolean v = vb != null ? (Boolean)vb.getValue(getFacesContext()) : null;
+        return v != null && v.booleanValue();
+    }
+
+    public void setExpandAll(boolean expandAll)
+    {
+        _expandAll = expandAll ? Boolean.TRUE : Boolean.FALSE;
+    }
+
+    public boolean isDisabled()
+    {
+        if (_disabled != null) return _disabled.booleanValue();
+        ValueBinding vb = getValueBinding("disabled");
+        Boolean v = vb != null ? (Boolean)vb.getValue(getFacesContext()) : null;
+        return v != null && v.booleanValue();
+    }
+
+    public void setDisabled(boolean disabled)
+    {
+        _disabled = disabled ? Boolean.TRUE : Boolean.FALSE;
+    }
+
+    public String getDisabledStyle()
+    {
+        if (_disabledStyle != null) return _disabledStyle;
+        ValueBinding vb = getValueBinding("disabledStyle");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public String getDisabledStyleClass()
+    {
+        if (_disabledStyleClass != null) return _disabledStyleClass;
+        ValueBinding vb = getValueBinding("disabledStyleClass");
+        return vb != null ? _ComponentUtils.getStringValue(getFacesContext(), vb) : null;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
+    }
+
     public Object saveState(FacesContext context)
     {
-        Object values[] = new Object[11];
+        Object values[] = new Object[15];
         values[0] = super.saveState(context);
         values[1] = _itemClass;
         values[2] = _openItemClass;
@@ -256,6 +310,10 @@
         values[8] = _separatorStyle;
         values[9] = _layout;
         values[10] = _preprocessed;
+        values[11] = _expandAll;
+        values[12] = _disabled;
+        values[13] = _disabledStyle;
+        values[14] = _disabledStyleClass;
         return values;
     }
 
@@ -273,5 +331,9 @@
         _separatorStyle = (String)values[8];
         _layout = (String)values[9];
         _preprocessed = (Boolean)values[10];
+        _expandAll = (Boolean)values[11];
+        _disabled = (Boolean) values[12];
+        _disabledStyle = (String) values[13];
+        _disabledStyleClass = (String) values[14];
     }
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenuTag.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenuTag.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenuTag.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlPanelNavigationMenuTag.java Fri Feb 10 08:14:39 2006
@@ -54,6 +54,10 @@
     private String _activeItemStyle;
     private String _separatorStyle;
     private String _layout;
+    private String _expandAll;
+    private String _disabled;
+    private String _disabledStyle;
+    private String _disabledStyleClass;
 
     // HTML table attributes
     private String _align;
@@ -93,6 +97,7 @@
         _summary=null;
         _width=null;
         _layout = null;
+        _expandAll = null;
     }
 
     // User Role support --> already handled by HtmlPanelGroupTag
@@ -111,6 +116,10 @@
         setStringProperty(component, "activeItemStyle", _activeItemStyle);
         setStringProperty(component, "separatorStyle", _separatorStyle);
         setStringProperty(component, "layout", _layout);
+        setBooleanProperty(component, "expandAll", _expandAll);
+        setBooleanProperty(component, "disabled", _disabled);
+        setStringProperty(component, "disabledStyle", _disabledStyle);
+        setStringProperty(component, "disabledStyleClass", _disabledStyleClass);
 
         setStringProperty(component, HTML.ALIGN_ATTR, _align);
         setStringProperty(component, HTML.BGCOLOR_ATTR, _bgcolor);
@@ -234,5 +243,25 @@
     public void setLayout(String layout)
     {
         _layout = layout;
+    }
+
+    public void setExpandAll(String expandAll)
+    {
+        _expandAll = expandAll;
+    }
+
+    public void setDisabled(String disabled)
+    {
+        _disabled = disabled;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
     }
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlLinkRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlLinkRenderer.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlLinkRenderer.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/renderkit/html/ext/HtmlLinkRenderer.java Fri Feb 10 08:14:39 2006
@@ -16,7 +16,10 @@
 package org.apache.myfaces.renderkit.html.ext;
 
 import org.apache.myfaces.component.UserRoleUtils;
+import org.apache.myfaces.component.html.ext.HtmlCommandLink;
 import org.apache.myfaces.renderkit.html.HtmlLinkRendererBase;
+import org.apache.myfaces.renderkit.html.HTML;
+import org.apache.myfaces.renderkit.html.HtmlRendererUtils;
 import org.apache.myfaces.renderkit.JSFAttr;
 
 import javax.faces.component.UIComponent;
@@ -42,19 +45,35 @@
                                           String styleClass) throws IOException
     {
         //if link is disabled we render the nested components without the anchor
-        if (UserRoleUtils.isEnabledOnUserRole(component))
+        if (UserRoleUtils.isEnabledOnUserRole(component) &&
+                        !((HtmlCommandLink) component).isDisabled() )
         {
             super.renderCommandLinkStart(facesContext, component, clientId, value, style, styleClass);
         }
         else
         {
-            // render value as required by JSF 1.1 renderkitdocs
+            //For a disabled HtmlCommandLink we want to
+            //render a span-element instead of the Anchor
+
+            //set disabledStyle if available
+            if(((HtmlCommandLink) component).getDisabledStyle() != null)
+            {
+                style = ((HtmlCommandLink) component).getDisabledStyle();
+            }
+
+            if(((HtmlCommandLink) component).getDisabledStyleClass() != null)
+            {
+                styleClass = ((HtmlCommandLink) component).getDisabledStyleClass();
+            }
+
+            renderSpanStart(facesContext, component, clientId, value, style, styleClass);
+            /*// render value as required by JSF 1.1 renderkitdocs
             if(value != null)
             {
                 ResponseWriter writer = facesContext.getResponseWriter();
 
                 writer.writeText(value.toString(), JSFAttr.VALUE_ATTR);
-            }
+            }*/
         }
     }
 
@@ -70,10 +89,54 @@
     protected void renderLinkEnd(FacesContext facesContext, UIComponent component) throws IOException
     {
         //if link is disabled we render the nested components without the anchor
-        if (UserRoleUtils.isEnabledOnUserRole(component))
+        if (UserRoleUtils.isEnabledOnUserRole(component) &&
+                        !((HtmlCommandLink) component).isDisabled() )
         {
             super.renderLinkEnd(facesContext, component);
         }
+        else
+        {
+            renderSpanEnd(facesContext, component);
+        }
     }
 
+    protected void renderSpanStart(FacesContext facesContext,
+                                          UIComponent component,
+                                          String clientId,
+                                          Object value,
+                                          String style,
+                                          String styleClass) throws IOException
+    {
+    ResponseWriter writer = facesContext.getResponseWriter();
+
+        String[] spanAttrsToRender;
+
+        writer.startElement(HTML.SPAN_ELEM, component);
+
+        spanAttrsToRender = HTML.COMMON_PASSTROUGH_ATTRIBUTES_WITHOUT_STYLE;
+
+        HtmlRendererUtils.renderHTMLAttribute(writer, HTML.ID_ATTR, HTML.ID_ATTR, clientId);
+
+        writer.writeAttribute(HTML.ID_ATTR, clientId, null);
+        HtmlRendererUtils.renderHTMLAttributes(writer, component,
+                                               spanAttrsToRender);
+        HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_ATTR, HTML.STYLE_ATTR,
+                                              style);
+        HtmlRendererUtils.renderHTMLAttribute(writer, HTML.STYLE_CLASS_ATTR, HTML.STYLE_CLASS_ATTR,
+                                              styleClass);
+
+        // render value as required by JSF 1.1 renderkitdocs
+        if(value != null)
+        {
+            writer.writeText(value.toString(), JSFAttr.VALUE_ATTR);
+        }
+    }
+
+    protected void renderSpanEnd(FacesContext facesContext, UIComponent component) throws IOException
+    {
+        ResponseWriter writer = facesContext.getResponseWriter();
+        // force separate end tag
+        writer.writeText("", null);
+        writer.endElement(HTML.SPAN_ELEM);
+    }
 }

Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlCommandLinkTag.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlCommandLinkTag.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlCommandLinkTag.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/taglib/html/ext/HtmlCommandLinkTag.java Fri Feb 10 08:14:39 2006
@@ -46,6 +46,9 @@
     private String _visibleOnUserRole;
 
     private String _actionFor;
+    private String _disabled;
+    private String _disabledStyle;
+    private String _disabledStyleClass;
 
     public void release() {
         super.release();
@@ -61,7 +64,9 @@
         setStringProperty(component, UserRoleAware.ENABLED_ON_USER_ROLE_ATTR, _enabledOnUserRole);
         setStringProperty(component, UserRoleAware.VISIBLE_ON_USER_ROLE_ATTR, _visibleOnUserRole);
         setStringProperty(component, "actionFor", _actionFor);
-
+        setBooleanProperty(component, "disabled", _disabled);
+        setStringProperty(component, "disabledStyle",_disabledStyle);
+        setStringProperty(component, "disabledStyleClass",_disabledStyleClass);
     }
 
 
@@ -78,5 +83,20 @@
     public void setActionFor(String actionFor)
     {
         _actionFor = actionFor;
+    }
+
+    public void setDisabled(String disabled)
+    {
+        _disabled = disabled;
+    }
+
+    public void setDisabledStyle(String disabledStyle)
+    {
+        _disabledStyle = disabledStyle;
+    }
+
+    public void setDisabledStyleClass(String disabledStyleClass)
+    {
+        _disabledStyleClass = disabledStyleClass;
     }
 }

Added: myfaces/tomahawk/trunk/core/src/main/tld/entities/ext_disabled_attribute.xml
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/tld/entities/ext_disabled_attribute.xml?rev=376752&view=auto
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/tld/entities/ext_disabled_attribute.xml (added)
+++ myfaces/tomahawk/trunk/core/src/main/tld/entities/ext_disabled_attribute.xml Fri Feb 10 08:14:39 2006
@@ -0,0 +1,25 @@
+        <attribute>
+            <name>disabled</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+            <description>When set instead of a Hyperlink
+                a span tag is rendered in the corresponding
+                Component
+            </description>
+        </attribute>
+        <attribute>
+            <name>disabledStyle</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+            <description>CSS-Style Attribute to
+                render when disabled is true
+            </description>
+        </attribute>
+        <attribute>
+            <name>disabledStyleClass</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+            <description>CSS-Style Class to
+                use when disabled is true
+            </description>
+        </attribute>
\ No newline at end of file

Modified: myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_command_link_attributes.xml
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_command_link_attributes.xml?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_command_link_attributes.xml (original)
+++ myfaces/tomahawk/trunk/core/src/main/tld/entities/extended_command_link_attributes.xml Fri Feb 10 08:14:39 2006
@@ -1,4 +1,5 @@
         &standard_command_link_attributes;
         &user_role_attributes;
         &ext_forceId_attribute;
-        &ext_actionfor_attribute;
\ No newline at end of file
+        &ext_actionfor_attribute;
+        &ext_disabled_attribute;
\ No newline at end of file

Modified: myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_navigation_menu_item_attributes.xml
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_navigation_menu_item_attributes.xml?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_navigation_menu_item_attributes.xml (original)
+++ myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_navigation_menu_item_attributes.xml Fri Feb 10 08:14:39 2006
@@ -18,4 +18,13 @@
             <required>false</required>
             <rtexprvalue>false</rtexprvalue>
         </attribute>
+        <attribute><name>target</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+        </attribute>
+        <attribute><name>disabled</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+        </attribute>
+        &ext_disabled_attribute;
 

Modified: myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_panel_navigation_2_attributes.xml
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_panel_navigation_2_attributes.xml?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_panel_navigation_2_attributes.xml (original)
+++ myfaces/tomahawk/trunk/core/src/main/tld/tomahawk-entities/tomahawk_panel_navigation_2_attributes.xml Fri Feb 10 08:14:39 2006
@@ -70,3 +70,13 @@
                 Table or List Layout (default is Table)
             </description>
         </attribute>
+        <attribute>
+            <name>expandAll</name>
+            <required>false</required>
+            <rtexprvalue>false</rtexprvalue>
+            <description>
+                If set to true all Items are expanded from the beginning
+                and never closed.
+            </description>
+        </attribute>
+        &ext_disabled_attribute;
\ No newline at end of file

Modified: myfaces/tomahawk/trunk/core/src/main/tld/tomahawk.tld
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/core/src/main/tld/tomahawk.tld?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/tld/tomahawk.tld (original)
+++ myfaces/tomahawk/trunk/core/src/main/tld/tomahawk.tld Fri Feb 10 08:14:39 2006
@@ -24,6 +24,7 @@
 <!ENTITY ext_textarea_attribute         SYSTEM "entities/ext_textarea_attribute.xml">
 <!ENTITY ext_actionfor_attribute        SYSTEM "entities/ext_actionfor_attribute.xml">
 <!ENTITY ext_escape_attribute           SYSTEM "entities/ext_escape_attribute.xml">
+<!ENTITY ext_disabled_attribute        SYSTEM "entities/ext_disabled_attribute.xml">        
 <!ENTITY faces_binding_attribute        SYSTEM "entities/faces_binding_attribute.xml">
 <!ENTITY faces_id_optional_attribute    SYSTEM "entities/faces_id_optional_attribute.xml">
 <!ENTITY faces_id_required_attribute    SYSTEM "entities/faces_id_required_attribute.xml">
@@ -896,7 +897,7 @@
         &ui_panel_attributes;
         &html_universal_attributes;
         &html_event_handler_attributes;
-	&html_table_attributes;
+	    &html_table_attributes;
         &tomahawk_panel_navigation_2_attributes;
     </tag>
 

Modified: myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/misc/NavigationMenu.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/misc/NavigationMenu.java?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/misc/NavigationMenu.java (original)
+++ myfaces/tomahawk/trunk/examples/simple/src/main/java/org/apache/myfaces/examples/misc/NavigationMenu.java Fri Feb 10 08:14:39 2006
@@ -71,6 +71,7 @@
         NavigationMenuItem item = getMenuNaviagtionItem("#{example_messages['panelnav_search_adv']}", "#{navigationMenu.getAction2}");
         item.setActive(true);
         item.setOpen(true);
+        item.setTarget("_blank");
         products.add(item);
         // Shop
         menu.add(getMenuNaviagtionItem("#{example_messages['panelnav_shop']}", "#{navigationMenu.getAction2}"));
@@ -79,6 +80,8 @@
         menu.add(corporateInfo);
         corporateInfo.add(getMenuNaviagtionItem("#{example_messages['panelnav_news']}", "#{navigationMenu.getAction2}"));
         item =  getMenuNaviagtionItem("#{example_messages['panelnav_investor']}", "#{navigationMenu.getAction3}");
+        //item.setIcon("images/arrow-first.gif");
+        item.setDisabled(true);
         corporateInfo.add(item);
         // Contact
         menu.add(getMenuNaviagtionItem("#{example_messages['panelnav_contact']}", "#{navigationMenu.getAction2}"));
@@ -128,4 +131,8 @@
     	return "go_home";
     }
 
+    public boolean getDisabled()
+    {
+        return true;
+    }
 }

Modified: myfaces/tomahawk/trunk/examples/simple/src/main/webapp/panelnavigation_2.jsp
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/examples/simple/src/main/webapp/panelnavigation_2.jsp?rev=376752&r1=376751&r2=376752&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/examples/simple/src/main/webapp/panelnavigation_2.jsp (original)
+++ myfaces/tomahawk/trunk/examples/simple/src/main/webapp/panelnavigation_2.jsp Fri Feb 10 08:14:39 2006
@@ -33,7 +33,8 @@
 
     <t:div id="subnavigation_outer">
     <t:div id="subnavigation">
-    <t:panelNavigation2 id="nav1" layout="list" itemClass="mypage" activeItemClass="selected" openItemClass="selected" >
+    <t:panelNavigation2 id="nav1" layout="list" itemClass="mypage" activeItemClass="selected"
+                        openItemClass="selected" expandAll="true" disabledStyle="color:red;padding: 2px 20px 2px 25px">
         <t:navigationMenuItems id="navitems" value="#{navigationMenu.panelNavigationItems}" />
     </t:panelNavigation2>
     </t:div>