<%--

    Copyright (c) 2004, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

--%>

<%@ taglib uri="http://java.sun.com/jsf/core"   prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html"   prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/demo/components" prefix="d" %>

<f:view>
<html>
<head>
<title>Demonstration Components - Menu</title>
</head>
<body bgcolor="white">

<h:form >

<d:stylesheet path="/tree-control-test.css"/>

Render graph as a menu bar (graph retrieved from model):<br>
<d:graph_menubar id="menu2" value="#{GraphBean.menuGraph}" 
    selectedClass="tree-control-selected"
    unselectedClass="tree-control-unselected" immediate="true"/>

<hr>
Render graph as a menu bar (graph specified via JSP):<br>
<d:graph_menubar id="menu3" selectedClass="tree-control-selected"
      unselectedClass="tree-control-unselected" immediate="true">
    <d:graph_menunode  name="Menu" label="Menu 3" >
        <d:graph_menunode  name="File" label="File 3" expanded="true">
            <d:graph_menunode  name="File-New" label="New 3" action="demo-test.faces" />
            <d:graph_menunode  name="File-Open" label="Open 3" action="demo-test.faces" />
            <d:graph_menunode  name="File-Close" label="Close 3" enabled="false" />
            <d:graph_menunode  name="File-Exit" label="Exit 3" action="demo-test.faces" />
        </d:graph_menunode>

       <d:graph_menunode  name="Edit" label="Edit 3" >
           <d:graph_menunode  name="Edit-Cut" label="Cut 3" action="demo-test.faces"/>
           <d:graph_menunode  name="Edit-Copy" label="Copy 3" action="demo-test.faces" />
           <d:graph_menunode  name="Edit-Paste" label="Paste 3" enabled="false" />
       </d:graph_menunode>
   </d:graph_menunode>
</d:graph_menubar>

<hr>
Render graph as a tree control (graph retrieved from model):<br>
<d:graph_menutree id="menu4" value="#{GraphBean.treeGraph}" styleClass="tree-control"
     selectedClass="tree-control-selected" 
     unselectedClass="tree-control-unselected" immediate="true"/>
<hr>
Render graph as a tree control (graph specified via JSP):<br>
<d:graph_menutree id="menu5" selectedClass="tree-control-selected"
    unselectedClass="tree-control-unselected" styleClass="tree-control" 
    immediate="true">
    <d:graph_treenode  name="Menu" label="Menu 5" enabled="false" 
         expanded="true">

        <d:graph_treenode  name="File" label="File 5"
             icon="folder_16_pad.gif" enabled="false">

            <d:graph_treenode  name="File-New" label="New 5"
                icon="folder_16_pad.gif" action="demo-test.faces"/>
            <d:graph_treenode  name="File-Open" label="Open 5"
                icon="folder_16_pad.gif" action="/demo-test.faces" />
            <d:graph_treenode  name="File-Close" label="Close 5" enabled="false"
                icon="folder_16_pad.gif" />
            <d:graph_treenode  name="File-Exit" label="Exit 5"
                icon="folder_16_pad.gif" action="demo-test.faces" />
       </d:graph_treenode>

       <d:graph_treenode  name="Edit" label="Edit 5" 
           icon="folder_16_pad.gif" expanded="true" enabled="false"> 

           <d:graph_treenode  name="Edit-Cut" label="Cut 5" 
               icon="folder_16_pad.gif" action="demo-test.faces"/>
           <d:graph_treenode  name="Edit-Copy" label="Copy 5"
               icon="folder_16_pad.gif" action="demo-test.faces" />
           <d:graph_treenode  name="Edit-Paste" label="Paste 5" enabled="false" 
               icon="folder_16_pad.gif" />
       </d:graph_treenode>
   </d:graph_treenode>
</d:graph_menutree>

<hr>
</h:form>
<a href='<%= request.getContextPath() + "/index.jsp" %>'>Back</a> to home page.

<h1>How to Use this Component</h1>

<p>This component renders a <code>Graph</code> as either a menu bar or a tree control.  
The <code>Graph</code> can be specified as model data, or it can be specified in 
<code>JSP</code>.</p>

<h2>JSP Attributes</h2>

<p>Attributes described below apply to graph_menubar tag as well as graph_tree tag 
since they are just two different visual representations of the Graph Component.
Attributes can represent values directly or point to them via value binding
expressions except for actionListener attribute that points to a 
method reference. This component allows the user to define CSS classes via JSP 
attributes that are output in the rendered markup.  This makes it possible to 
produce highly customizable output. You can compare the rendered source of this 
page, using the "View Source" feature of your browser, with 
<a href="ShowSource.jsp?filename=/menu.jsp">the JSP source</A> for this page.</p>

<table border="1">

<tr>
<th>JSP Attribute Name</th>
<th>What it Does</th>
</tr>

<tr>
<td><code>selectedClass</code></td>
<td>A style sheet class which controls the display attributes of the selected 
menu bar or tree element.  This is used to distinguish the selected portion from 
the other unselected portions.</td>
</tr>
<tr>

<td><code>unselectedClass</code></td>
<td>A style sheet class which controls the display attributes of an unselected menu bar or tree element.  This is used to distinguish an unselected portion from a selected portion.</
<td>
</tr>

<tr>
<td><code>immediate</code>
</td>
<td>A flag indicating that the default ActionListener should execute
      immediately (that is, during the Apply Request Values phase of the 
      request processing lifecycle, instead of waiting for Invoke 
      Application phase). The default value of this property must be false.
</td>
</tr>

<tr>
<td><code>styleClass</code></td>
<td>The CSS style <code>class</code> to be applied to the entire menu/tree.
</td>
</tr>

<tr>
<td><code>value</code></td>
<td>Value Binding reference expression that points to a Graph in scoped namespace.
</td>
</tr>

<tr>
<td><code>actionListener</code></td>
<td>Method binding reference to handle tree expansion and contraction events.
</td>
</tr>

</table>

<h2>Menu Bar</h2>

<p>The menu bar can be described from a <code>Graph</code> specified in the model or it can be described from <code>JSP</code> tags.</p>

<h3>Described From JSP</h3>

<p>The <code>graph_menubar</code> tag consists of multiple <code>graph_menunode</code> tags.  Each <code>graph_menunode</code> tag corresponds to an item on the menu bar, and you can nest <code>graph_menunode</code> tags within each other.  The <code>graph_menunode</code> tag has attributes that control the visual aspects of the node, and it has an <code>action</code> attribute that can be used to specify a context-relative URL for when the node is selected.  Refer to the tag library descriptor <code>tld</code> file for a complete list of attributes.</p>

<h3>Described From Model</h3>

<p>The <code>graph_menubar</code> tag refers to a <code>Graph</code> model component through the <code>valueRef</code> attribute.  The <code>Graph</code> model component consists of multiple <code>Node</code> components.  Each <code>Node</code> component describes an item on the menu bar.</p>

<h2>Tree Control</h2>

<p>The tree control can be described from a <code>Graph</code> specified in the model or it can be described from <code>JSP</code> tags.</p>

<h3>Described From JSP</h3>

<p>The <code>graph_menutree</code> tag consists of multiple <code>graph_treenode</code> tags.  Each <code>graph_treenode</code> tag corresponds to a node in the tree, and you can nest <code>graph_treenode</code> tags within each other.  The <code>graph_treenode</code> tag has attributes that control the visual aspects of the node, and it has an <code>action</code> attribute that can be used to specify a context-relative URL for when the node is selected.  Refer to the tag library descriptor <code>tld</code> file for a complete list of attributes.</p>

<h3>Described From Model</h3>

<p>The <code>graph_menutree</code> tag refers to a <code>Graph</code> model component through the <code>valueRef</code> attribute.  The <code>Graph</code> model component consists of multiple <code>Node</code> components.  Each <code>Node</code> component describes an item in the tree.</p>

 
<hr>

<a href='<%= request.getContextPath() + "/index.jsp" %>'>Back</a> to home page.

</body>
</html>
</f:view>
