You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lo...@apache.org on 2011/08/09 17:53:23 UTC

svn commit: r1155414 - in /myfaces/tobago/trunk: tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/ tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/ tobago-example/tobago-example-demo/src/mai...

Author: lofwyr
Date: Tue Aug  9 15:53:22 2011
New Revision: 1155414

URL: http://svn.apache.org/viewvc?rev=1155414&view=rev
Log:
TOBAGO-377: Tree
 - Getting "marked" running. This is useful e. g. to highlight the current node in the menu.

Added:
    myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeMarkedListener.java
      - copied, changed from r1155247, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java
    myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedEvent.java
      - copied, changed from r1155247, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java
    myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedListener.java
      - copied, changed from r1155247, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java
Modified:
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITree.java
    myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeNode.java
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Navigation.java
    myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/navigation.xhtml
    myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxNodeRenderer.java
    myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java
    myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeMenuNodeRenderer.java
    myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java
    myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
    myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg
    myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITree.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITree.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITree.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITree.java Tue Aug  9 15:53:22 2011
@@ -41,7 +41,7 @@ public abstract class AbstractUITree ext
   public static final String SEP = "-";
 
   public static final String SELECT_STATE = SEP + "selectState";
-  public static final String MARKED = SEP + "marked";
+  public static final String MARKED = "marked";
 
   private MixedTreeModel model;
 

Modified: myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeNode.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeNode.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeNode.java (original)
+++ myfaces/tobago/trunk/tobago-core/src/main/java/org/apache/myfaces/tobago/internal/component/AbstractUITreeNode.java Tue Aug  9 15:53:22 2011
@@ -24,6 +24,8 @@ import org.apache.myfaces.tobago.compone
 import org.apache.myfaces.tobago.config.Configurable;
 import org.apache.myfaces.tobago.event.TreeExpansionEvent;
 import org.apache.myfaces.tobago.event.TreeExpansionListener;
+import org.apache.myfaces.tobago.event.TreeMarkedEvent;
+import org.apache.myfaces.tobago.event.TreeMarkedListener;
 import org.apache.myfaces.tobago.model.MixedTreeModel;
 import org.apache.myfaces.tobago.model.TreePath;
 import org.apache.myfaces.tobago.util.ComponentUtils;
@@ -213,6 +215,22 @@ public abstract class AbstractUITreeNode
         setExpanded(expanded);
       }
     }
+    if (event instanceof TreeMarkedEvent) {
+      FacesUtils.invokeMethodBinding(getFacesContext(), getTreeMarkedListener(), event);
+      boolean marked = ((TreeMarkedEvent) event).isNewMarked();
+
+      if (FacesUtils.hasValueBindingOrValueExpression(this, Attributes.MARKED)) {
+        try {
+          FacesUtils.setValueOfBindingOrExpression(getFacesContext(), marked, this, Attributes.MARKED);
+        } catch (Exception e) {
+          if (LOG.isDebugEnabled()) {
+            LOG.debug("Can't set marked.", e);
+          }
+        }
+      } else {
+        setMarked(marked);
+      }
+    }
   }
 
   public void restoreState(FacesContext context, Object componentState) {
@@ -286,6 +304,22 @@ public abstract class AbstractUITreeNode
     removeFacesListener(listener);
   }
 
+  public abstract MethodBinding getTreeMarkedListener();
+
+  public abstract void setTreeMarkedListener(MethodBinding treeMarkedListener);
+
+  public void addTreeMarkedListener(TreeMarkedListener listener) {
+    addFacesListener(listener);
+  }
+
+  public TreeMarkedListener[] getTreeMarkedListeners() {
+    return (TreeMarkedListener[]) getFacesListeners(TreeMarkedListener.class);
+  }
+
+  public void removeStateChangeListener(TreeMarkedListener listener) {
+    removeFacesListener(listener);
+  }
+
   public abstract boolean isMarked();
 
   public abstract void setMarked(boolean b);

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Navigation.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Navigation.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Navigation.java (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/java/org/apache/myfaces/tobago/example/demo/Navigation.java Tue Aug  9 15:53:22 2011
@@ -209,6 +209,7 @@ public class Navigation implements Seria
     private String title;
     private String outcome;
     private boolean expanded;
+    private boolean marked;
 
     public Node(String path) {
 
@@ -298,6 +299,14 @@ public class Navigation implements Seria
       this.expanded = expanded;
     }
 
+    public boolean isMarked() {
+      return marked;
+    }
+
+    public void setMarked(boolean marked) {
+      this.marked = marked;
+    }
+
     @Override
     public String toString() {
       return outcome;

Modified: myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/navigation.xhtml
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/navigation.xhtml?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/navigation.xhtml (original)
+++ myfaces/tobago/trunk/tobago-example/tobago-example-demo/src/main/webapp/navigation.xhtml Tue Aug  9 15:53:22 2011
@@ -20,22 +20,15 @@
 <f:subview id="navigator"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns:tc="http://myfaces.apache.org/tobago/component">
-  <tc:panel>
-    <f:facet name="layout">
-      <tc:gridLayout rows="*"/>
-    </f:facet>
-
     <tc:treeMenu id="nav">
       <tc:treeData value="#{navigation.tree}" var="node" id="data">
-        <tc:treeNode expanded="#{node.expanded}">
-          <!-- todo:  markup="#{node.expanded ? 'marked' : 'other'}"-->
+        <tc:treeNode expanded="#{node.expanded}" marked="#{node.marked}" id="node">
           <tc:treeCommand
+              id="cmd"
               label="#{node.title}"
               action="#{node.action}"
               immediate="true"/>
         </tc:treeNode>
       </tc:treeData>
     </tc:treeMenu>
-
-  </tc:panel>
 </f:subview>

Copied: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeMarkedListener.java (from r1155247, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeMarkedListener.java?p2=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeMarkedListener.java&p1=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java&r1=1155247&r2=1155414&rev=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeExpansionListener.java (original)
+++ myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/MethodExpressionTreeMarkedListener.java Tue Aug  9 15:53:22 2011
@@ -25,20 +25,20 @@ import javax.faces.component.StateHolder
 import javax.faces.context.FacesContext;
 
 
-public class MethodExpressionTreeExpansionListener implements TreeExpansionListener, StateHolder {
+public class MethodExpressionTreeMarkedListener implements TreeMarkedListener, StateHolder {
 
   private MethodExpression methodExpression;
 
   private boolean isTransient = false;
 
-  public MethodExpressionTreeExpansionListener() {
+  public MethodExpressionTreeMarkedListener() {
   }
 
-  public MethodExpressionTreeExpansionListener(MethodExpression methodExpression) {
+  public MethodExpressionTreeMarkedListener(MethodExpression methodExpression) {
     this.methodExpression = methodExpression;
   }
 
-  public void treeExpanded(TreeExpansionEvent event) {
+  public void treeMarked(TreeMarkedEvent event) {
     FacesUtilsEL.invokeMethodExpression(FacesContext.getCurrentInstance(), methodExpression, event);
   }
 

Copied: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedEvent.java (from r1155247, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedEvent.java?p2=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedEvent.java&p1=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java&r1=1155247&r2=1155414&rev=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionEvent.java (original)
+++ myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedEvent.java Tue Aug  9 15:53:22 2011
@@ -21,50 +21,49 @@ import javax.faces.component.UIComponent
 import javax.faces.event.FacesEvent;
 import javax.faces.event.FacesListener;
 
-public class TreeExpansionEvent extends FacesEvent {
+public class TreeMarkedEvent extends FacesEvent {
 
   private static final long serialVersionUID = 422186716954088729L;
 
-  private boolean oldExpanded;
-  private boolean newExpanded;
+  private boolean oldMarked;
+  private boolean newMarked;
 
-  public TreeExpansionEvent(UIComponent node, boolean oldExpanded, boolean newExpanded) {
+  public TreeMarkedEvent(UIComponent node, boolean oldMarked, boolean newMarked) {
     super(node);
-    this.oldExpanded = oldExpanded;
-    this.newExpanded = newExpanded;
+    this.oldMarked = oldMarked;
+    this.newMarked = newMarked;
   }
 
   public boolean isAppropriateListener(FacesListener facesListener) {
-    return facesListener instanceof TreeExpansionListener;
+    return facesListener instanceof TreeMarkedListener;
   }
 
   public void processListener(FacesListener facesListener) {
-    if (facesListener instanceof TreeExpansionListener) {
-      if (oldExpanded && !newExpanded) {
-   //todo     ((TreeExpansionListener) facesListener).treeCollapsed(this);
-        ((TreeExpansionListener) facesListener).treeExpanded(this);
-      } else if (!oldExpanded && newExpanded) {
-        ((TreeExpansionListener) facesListener).treeExpanded(this);
+    if (facesListener instanceof TreeMarkedListener) {
+      if (oldMarked && !newMarked) {
+        ((TreeMarkedListener) facesListener).treeMarked(this);
+      } else if (!oldMarked && newMarked) {
+        ((TreeMarkedListener) facesListener).treeMarked(this);
       } else {
         // nothing to do
       }
     }
   }
 
-  public boolean isOldExpanded() {
-    return oldExpanded;
+  public boolean isOldMarked() {
+    return oldMarked;
   }
 
-  public boolean isNewExpanded() {
-    return newExpanded;
+  public boolean isNewMarked() {
+    return newMarked;
   }
 
   @Override
   public String toString() {
     return new StringBuilder()
         .append(super.toString())
-        .append("expanded=")
-        .append(newExpanded)
+        .append("marked=")
+        .append(newMarked)
         .toString();
   }
 }

Copied: myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedListener.java (from r1155247, myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java)
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedListener.java?p2=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedListener.java&p1=myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java&r1=1155247&r2=1155414&rev=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeExpansionListener.java (original)
+++ myfaces/tobago/trunk/tobago-jsf-compat/src/main/java/org/apache/myfaces/tobago/event/TreeMarkedListener.java Tue Aug  9 15:53:22 2011
@@ -19,7 +19,7 @@ package org.apache.myfaces.tobago.event;
 
 import javax.faces.event.FacesListener;
 
-public interface TreeExpansionListener  extends FacesListener {
+public interface TreeMarkedListener extends FacesListener {
 
-  void treeExpanded(TreeExpansionEvent event);
+  void treeMarked(TreeMarkedEvent event);
 }

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxNodeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxNodeRenderer.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxNodeRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxNodeRenderer.java Tue Aug  9 15:53:22 2011
@@ -23,6 +23,7 @@ import org.apache.myfaces.tobago.compone
 import org.apache.myfaces.tobago.component.UITreeNode;
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.event.TreeExpansionEvent;
+import org.apache.myfaces.tobago.event.TreeMarkedEvent;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
 import org.apache.myfaces.tobago.internal.context.ResponseWriterDivider;
 import org.apache.myfaces.tobago.layout.Display;
@@ -64,7 +65,6 @@ public class TreeListboxNodeRenderer ext
     }
 
     AbstractUITree tree = ComponentUtils.findAncestor(node, AbstractUITree.class);
-    ;
     String treeId = tree.getClientId(facesContext);
     String nodeStateId = node.nodeStateId(facesContext);
     Map requestParameterMap = facesContext.getExternalContext().getRequestParameterMap();
@@ -77,10 +77,9 @@ public class TreeListboxNodeRenderer ext
     }
 
     // select
-    String searchString;
     if (tree.getSelectableAsEnum() != TreeSelectable.OFF) { // selection
       String selected = (String) requestParameterMap.get(treeId + AbstractUITree.SELECT_STATE);
-      searchString = ";" + nodeStateId + ";";
+      String searchString = ";" + nodeStateId + ";";
       if (StringUtils.contains(selected, searchString)) {
         // TODO: add selection to Component
         //state.addSelection((DefaultMutableTreeNode) node.getValue());
@@ -88,10 +87,13 @@ public class TreeListboxNodeRenderer ext
     }
 
     // marked
-    String marked = (String) requestParameterMap.get(treeId + AbstractUITree.MARKED);
+    String marked = (String) requestParameterMap.get(treeId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
     if (marked != null) {
-      searchString = treeId + NamingContainer.SEPARATOR_CHAR + nodeStateId;
-      node.setMarked(marked.equals(searchString));
+      String searchString = treeId + NamingContainer.SEPARATOR_CHAR + nodeStateId;
+      boolean markedValue = marked.equals(searchString);
+      if (node.isMarked() != markedValue) {
+        new TreeMarkedEvent(node, node.isMarked(), markedValue).queue();
+      }
     } else {
       LOG.warn("This log message is help clarifying the occurrence of this else case.");
     }

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeListboxRenderer.java Tue Aug  9 15:53:22 2011
@@ -96,8 +96,8 @@ public class TreeListboxRenderer extends
 
     writer.startElement(HtmlElements.INPUT, tree);
     writer.writeAttribute(HtmlAttributes.TYPE, "hidden", false);
-    writer.writeNameAttribute(clientId + AbstractUITree.MARKED);
-    writer.writeIdAttribute(clientId + AbstractUITree.MARKED);
+    writer.writeNameAttribute(clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
+    writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
     writer.writeAttribute(HtmlAttributes.VALUE, "", false);
     writer.endElement(HtmlElements.INPUT);
 

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeMenuNodeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeMenuNodeRenderer.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeMenuNodeRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeMenuNodeRenderer.java Tue Aug  9 15:53:22 2011
@@ -23,6 +23,7 @@ import org.apache.myfaces.tobago.context
 import org.apache.myfaces.tobago.context.ResourceManagerUtils;
 import org.apache.myfaces.tobago.context.UserAgent;
 import org.apache.myfaces.tobago.event.TreeExpansionEvent;
+import org.apache.myfaces.tobago.event.TreeMarkedEvent;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
 import org.apache.myfaces.tobago.layout.Display;
 import org.apache.myfaces.tobago.renderkit.LayoutComponentRendererBase;
@@ -71,11 +72,14 @@ public class TreeMenuNodeRenderer extend
       new TreeExpansionEvent(node, node.isExpanded(), expanded).queue();
     }
 
-    // marker
-    String marked = requestParameterMap.get(treeId + AbstractUITree.MARKED);
+    // marked
+    String marked = (String) requestParameterMap.get(treeId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
     if (marked != null) {
       String searchString = treeId + NamingContainer.SEPARATOR_CHAR + nodeStateId;
-      node.setMarked(marked.equals(searchString));
+      boolean markedValue = marked.equals(searchString);
+      if (node.isMarked() != markedValue) {
+        new TreeMarkedEvent(node, node.isMarked(), markedValue).queue();
+      }
     } else {
       LOG.warn("This log message is help clarifying the occurrence of this else case.");
     }

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeNodeRenderer.java Tue Aug  9 15:53:22 2011
@@ -24,8 +24,8 @@ import org.apache.myfaces.tobago.compone
 import org.apache.myfaces.tobago.context.Markup;
 import org.apache.myfaces.tobago.context.ResourceUtils;
 import org.apache.myfaces.tobago.event.TreeExpansionEvent;
+import org.apache.myfaces.tobago.event.TreeMarkedEvent;
 import org.apache.myfaces.tobago.internal.component.AbstractUITree;
-import org.apache.myfaces.tobago.internal.component.AbstractUITreeNode;
 import org.apache.myfaces.tobago.layout.Display;
 import org.apache.myfaces.tobago.model.TreeSelectable;
 import org.apache.myfaces.tobago.renderkit.LayoutComponentRendererBase;
@@ -93,10 +93,13 @@ public class TreeNodeRenderer extends La
     }
 
     // marked
-    String marked = (String) requestParameterMap.get(treeId + AbstractUITree.MARKED);
+    String marked = (String) requestParameterMap.get(treeId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
     if (marked != null) {
       searchString = treeId + NamingContainer.SEPARATOR_CHAR + nodeStateId;
-      node.setMarked(marked.equals(searchString));
+      boolean markedValue = marked.equals(searchString);
+      if (node.isMarked() != markedValue) {
+        new TreeMarkedEvent(node, node.isMarked(), markedValue).queue();
+      }
     } else {
       LOG.warn("This log message is help clarifying the occurrence of this else case.");
     }
@@ -124,7 +127,6 @@ public class TreeNodeRenderer extends La
     AbstractUITree tree = ComponentUtils.findAncestor(node, AbstractUITree.class);
 
     final boolean folder = node.isFolder();
-    final boolean marked = node.isMarked();
     final String id = node.getClientId(facesContext);
     final int level = node.getLevel();
     final boolean root = level == 0;
@@ -177,7 +179,7 @@ public class TreeNodeRenderer extends La
   }
 
   private void encodeExpandedHidden(
-      TobagoResponseWriter writer, AbstractUITreeNode node, String clientId, boolean expanded) throws IOException {
+      TobagoResponseWriter writer, UITreeNode node, String clientId, boolean expanded) throws IOException {
     writer.startElement(HtmlElements.INPUT, node);
     writer.writeAttribute(HtmlAttributes.TYPE, "hidden", false);
     writer.writeClassAttribute(Classes.create(node, "expanded", Markup.NULL));

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/TreeRenderer.java Tue Aug  9 15:53:22 2011
@@ -85,8 +85,9 @@ public class TreeRenderer extends Layout
 
     writer.startElement(HtmlElements.INPUT, tree);
     writer.writeAttribute(HtmlAttributes.TYPE, "hidden", false);
-    writer.writeNameAttribute(clientId + AbstractUITree.MARKED);
-    writer.writeIdAttribute(clientId + AbstractUITree.MARKED);
+    writer.writeNameAttribute(clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
+    writer.writeIdAttribute(clientId + ComponentUtils.SUB_SEPARATOR + AbstractUITree.MARKED);
+    writer.writeClassAttribute(Classes.create(tree, "marked"));
     writer.writeAttribute(HtmlAttributes.VALUE, "", false);
     writer.endElement(HtmlElements.INPUT);
 

Modified: myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js (original)
+++ myfaces/tobago/trunk/tobago-theme/tobago-theme-standard/src/main/resources/org/apache/myfaces/tobago/renderkit/html/standard/standard/script/tobago-tree.js Tue Aug  9 15:53:22 2011
@@ -47,32 +47,6 @@ Tobago.Tree.onDblClick = function(elemen
   }
 };
 
-Tobago.Tree.updateMarker = function(node, add) {
-  node = Tobago.element(node);
-  if (node) {
-    node = node.firstChild;
-    while (node) {
-      if (node.className && node.className.indexOf("tobago-treeNode") > -1) {
-        if (add) {
-          Tobago.addCssClass(node, "tobago-treeNode-markup-marked");
-        } else {
-          Tobago.removeCssClass(node, "tobago-treeNode-markup-marked");
-        }
-      }
-      node = node.nextSibling;
-    }
-  }
-};
-
-Tobago.Tree.storeMarker = function(node, treeHiddenId) {
-  var markerHidden = document.getElementById(treeHiddenId + '-marked');
-  if (markerHidden) {
-    Tobago.Tree.updateMarker(markerHidden.value, false);
-    markerHidden.value = node.id;
-  }
-  Tobago.Tree.updateMarker(node.id, true);
-};
-
 function tobagoTreeNodeToggle(element) {
   var node = jQuery(element).closest(".tobago-treeNode, .tobago-treeMenuNode");
   var content = jQuery(Tobago.escapeClientId(node.attr("id") + Tobago.SUB_COMPONENT_SEP + "content"));
@@ -168,6 +142,28 @@ jQuery(document).ready(function () {
     jQuery(this).toggleClass("tobago-treeMenuNode-markup-hover");
   });
 
+  // marked for treeNode
+  jQuery(".tobago-treeNode").focus(function() {
+    var command = jQuery(this);
+    var node = command.parent(".tobago-treeNode");
+    var tree = node.closest(".tobago-tree");
+    var marked = tree.children(".tobago-tree-marked");
+    marked.attr("value", node.attr("id"));
+    tree.find(".tobago-treeNode").removeClass("tobago-treeNode-markup-marked");
+    node.addClass("tobago-treeNode-markup-marked");
+  });
+
+  // marked for treeMenuNode
+  jQuery(".tobago-treeMenuCommand").focus(function() {
+    var command = jQuery(this);
+    var node = command.parent(".tobago-treeMenuNode");
+    var tree = node.closest(".tobago-treeMenu");
+    var marked = tree.children(".tobago-treeMenu-marked");
+    marked.attr("value", node.attr("id"));
+    tree.find(".tobago-treeMenuNode").removeClass("tobago-treeMenuNode-markup-marked");
+    node.addClass("tobago-treeMenuNode-markup-marked");
+  });
+
 /*
   jQuery(".tobago-treeListbox > div > div > select > option:selected").change();
 */

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.1.stg Tue Aug  9 15:53:22 2011
@@ -284,6 +284,13 @@ if (<it.propertyName> != null && isValue
 }
 >>
 
+TreeMarkedListener() ::= <<
+if (<it.propertyName> != null && isValueReference(<it.propertyName>)) {
+  <createMethodBinding(it)>
+  component.set<it.template>(methodBinding);
+}
+>>
+
 SuggestMethod() ::= <<
 if (<it.propertyName> != null && isValueReference(<it.propertyName>)) {
   <createMethodBinding(it)>

Modified: myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg?rev=1155414&r1=1155413&r2=1155414&view=diff
==============================================================================
--- myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg (original)
+++ myfaces/tobago/trunk/tobago-tool/tobago-tool-apt/src/main/resources/org/apache/myfaces/tobago/apt/tag1.2.stg Tue Aug  9 15:53:22 2011
@@ -311,6 +311,12 @@ if (<it.propertyName> != null) {
 }
 >>
 
+TreeMarkedListener() ::= <<
+if (<it.propertyName> != null) {
+  component.add<it.template>(new org.apache.myfaces.tobago.event.MethodExpressionTreeMarkedListener(<it.propertyName>));
+}
+>>
+
 SuggestMethod() ::= <<
 if (<it.propertyName> != null) {
   component.set<it.template>Expression(<it.propertyName>);