Merge pull request #2084 from joelmartinez/mdoc-deletetestfix
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / TreeView.cs
index 64af9677e635aba1aef99c73a7e804567f08e7a4..f0ebcdeb3eaf0d54cd235454161b097dac8f7eeb 100644 (file)
@@ -28,7 +28,6 @@
 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
 //
 
-#if NET_2_0
 
 using System.Collections;
 using System.Text;
@@ -53,6 +52,8 @@ namespace System.Web.UI.WebControls
        [Designer ("System.Web.UI.Design.WebControls.TreeViewDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
        public class TreeView: HierarchicalDataBoundControl, IPostBackEventHandler, IPostBackDataHandler, ICallbackEventHandler
        {
+               static readonly char[] postDataSplitChars = {'|'};
+               
                string activeSiteMapPath;
                bool stylesPrepared;
                Style hoverNodeStyle;
@@ -1025,12 +1026,15 @@ namespace System.Web.UI.WebControls
                        if (EnableClientScript && PopulateNodesFromClient) {
                                string states = postCollection [ClientID + "_PopulatedStates"];
                                if (states != null) {
-                                       foreach (string id in states.Split ('|')) {
-                                               if (String.IsNullOrEmpty(id))
-                                                       continue;
+                                       foreach (string id in states.Split (postDataSplitChars, StringSplitOptions.RemoveEmptyEntries)) {
                                                TreeNode node = FindNodeByPos (id);
-                                               if (node != null && node.PopulateOnDemand && !node.Populated)
-                                                       node.Populated = true;
+                                               if (node != null && node.PopulateOnDemand && !node.Populated) {
+                                                       Page page = Page;
+                                                       if (page != null && page.IsCallback)
+                                                               node.Populated = true; // Bug #492307
+                                                       else
+                                                               node.Populate (); // Bug #626829
+                                               }
                                        }
                                }
                                res = true;
@@ -1042,7 +1046,7 @@ namespace System.Web.UI.WebControls
                        if (EnableClientScript) {
                                string states = postCollection [ClientID + "_ExpandStates"];
                                if (states != null) {
-                                       string[] ids = states.Split ('|');
+                                       string[] ids = states.Split (postDataSplitChars, StringSplitOptions.RemoveEmptyEntries);
                                        UnsetExpandStates (Nodes, ids);
                                        SetExpandStates (ids);
                                } else
@@ -1337,9 +1341,7 @@ namespace System.Web.UI.WebControls
                                writer.AddAttribute (HtmlTextWriterAttribute.Src, csm.GetWebResourceUrl (typeof (SiteMapPath), "transparent.gif"));
                                writer.AddAttribute (HtmlTextWriterAttribute.Height, "0");
                                writer.AddAttribute (HtmlTextWriterAttribute.Width, "0");
-#if NET_4_0
                                writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0px");
-#endif
                                writer.RenderBeginTag (HtmlTextWriterTag.Img);
                                
                                writer.RenderEndTag (); // img
@@ -1361,8 +1363,9 @@ namespace System.Web.UI.WebControls
                
                void RenderNode (HtmlTextWriter writer, TreeNode node, int level, ArrayList levelLines, bool hasPrevious, bool hasNext)
                {
-                       if (node.PopulateOnDemand && node.HadChildrenBeforePopulating)
-                               throw new InvalidOperationException ("PopulateOnDemand cannot be set to true on a node that already has children.");
+                       // FIXME: disabled for now - needs closer investigation
+                       //if (node.PopulateOnDemand && node.HadChildrenBeforePopulating)
+                       //      throw new InvalidOperationException ("PopulateOnDemand cannot be set to true on a node that already has children.");
                        
                        DecorateNode(node);
                        
@@ -1386,11 +1389,6 @@ namespace System.Web.UI.WebControls
                        writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0");
                        writer.RenderBeginTag (HtmlTextWriterTag.Table);
 
-                       Unit nodeSpacing = GetNodeSpacing (node);
-#if !NET_4_0
-                       if (nodeSpacing != Unit.Empty && (node.Depth > 0 || node.Index > 0))
-                               RenderMenuItemSpacing (writer, nodeSpacing);
-#endif
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        
                        // Vertical lines from previous levels
@@ -1489,9 +1487,7 @@ namespace System.Web.UI.WebControls
                        
                        if (!String.IsNullOrEmpty (imageUrl)) {
                                writer.RenderBeginTag (HtmlTextWriterTag.Td);   // TD
-#if NET_4_0
                                writer.AddAttribute (HtmlTextWriterAttribute.Tabindex, "-1");
-#endif
                                BeginNodeTag (writer, node, clientExpand);
                                writer.AddAttribute (HtmlTextWriterAttribute.Src, imageUrl);
                                writer.AddStyleAttribute (HtmlTextWriterStyle.BorderWidth, "0");
@@ -1523,9 +1519,9 @@ namespace System.Web.UI.WebControls
                        if (node.ShowCheckBoxInternal) {
                                writer.AddAttribute (HtmlTextWriterAttribute.Name, ClientID + "_cs_" + node.Path);
                                writer.AddAttribute (HtmlTextWriterAttribute.Type, "checkbox", false);
-#if !NET_4_0
-                               writer.AddAttribute (HtmlTextWriterAttribute.Title, node.Text);
-#endif
+                               string str = node.ToolTip;
+                               if (!String.IsNullOrEmpty (str))
+                                       writer.AddAttribute (HtmlTextWriterAttribute.Title, str);
                                if (node.Checked)
                                        writer.AddAttribute (HtmlTextWriterAttribute.Checked, "checked", false);
                                writer.RenderBeginTag (HtmlTextWriterTag.Input);        // INPUT
@@ -1548,10 +1544,6 @@ namespace System.Web.UI.WebControls
                        writer.RenderEndTag (); // TD
                        
                        writer.RenderEndTag (); // TR
-#if !NET_4_0
-                       if (nodeSpacing != Unit.Empty)
-                               RenderMenuItemSpacing (writer, nodeSpacing);
-#endif
                        
                        writer.RenderEndTag (); // TABLE
                        
@@ -1613,7 +1605,7 @@ namespace System.Web.UI.WebControls
                                return;
 
                        writer.RenderBeginTag (HtmlTextWriterTag.Table);
-                       writer.AddAttribute (HtmlTextWriterAttribute.Height, ((int) value).ToString () + "dupa1", false);
+                       writer.AddAttribute (HtmlTextWriterAttribute.Height, ((int) value).ToString (), false);
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.RenderEndTag (); // td
@@ -1623,9 +1615,6 @@ namespace System.Web.UI.WebControls
                
                void RenderMenuItemSpacing (HtmlTextWriter writer, Unit itemSpacing)
                {
-#if !NET_4_0
-                       writer.AddStyleAttribute (HtmlTextWriterStyle.Height, itemSpacing.ToString ());
-#endif
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.RenderEndTag ();
@@ -1663,33 +1652,34 @@ namespace System.Web.UI.WebControls
                        if (Page.Header != null) {
                                // styles are registered
                                if (nodeStyle != null) {
-                                       style.AddCssClass (nodeStyle.CssClass);
-                                       style.AddCssClass (nodeStyle.RegisteredCssClass);
+                                       style.PrependCssClass (nodeStyle.RegisteredCssClass);
+                                       style.PrependCssClass (nodeStyle.CssClass);
                                }
                                if (node.IsLeafNode) {
                                        if (leafNodeStyle != null) {
-                                               style.AddCssClass (leafNodeStyle.CssClass);
-                                               style.AddCssClass (leafNodeStyle.RegisteredCssClass);
+                                               style.PrependCssClass (leafNodeStyle.RegisteredCssClass);
+                                               style.PrependCssClass (leafNodeStyle.CssClass);
                                        }
                                } else if (node.IsRootNode) {
                                        if (rootNodeStyle != null) {
-                                               style.AddCssClass (rootNodeStyle.CssClass);
-                                               style.AddCssClass (rootNodeStyle.RegisteredCssClass);
+                                               style.PrependCssClass (rootNodeStyle.RegisteredCssClass);
+                                               style.PrependCssClass (rootNodeStyle.CssClass);
                                        }
                                } else if (node.IsParentNode) {
                                        if (parentNodeStyle != null) {
-                                               style.AddCssClass (parentNodeStyle.CssClass);
                                                style.AddCssClass (parentNodeStyle.RegisteredCssClass);
+                                               style.AddCssClass (parentNodeStyle.CssClass);
                                        }
                                }
+                               
                                if (levelStyles != null && levelStyles.Count > level) {
-                                       style.AddCssClass (levelStyles [level].CssClass);
-                                       style.AddCssClass (levelStyles [level].RegisteredCssClass);
+                                       style.PrependCssClass (levelStyles [level].RegisteredCssClass);
+                                       style.PrependCssClass (levelStyles [level].CssClass);
                                }
                                
                                if (nodeIsSelected) {
-                                       style.AddCssClass (selectedNodeStyle.CssClass);
                                        style.AddCssClass (selectedNodeStyle.RegisteredCssClass);
+                                       style.AddCssClass (selectedNodeStyle.CssClass);
                                }
                        } else {
                                // styles are not registered
@@ -1721,9 +1711,7 @@ namespace System.Web.UI.WebControls
                void AddNodeLinkStyle (HtmlTextWriter writer, TreeNode node, int level, bool nodeIsSelected)
                {
                        Style style = new Style ();
-#if NET_4_0
                        bool addBorderStyle = false;
-#endif
                        if (Page.Header != null) {
                                // styles are registered
                                style.AddCssClass (ControlLinkStyle.RegisteredCssClass);
@@ -1736,9 +1724,7 @@ namespace System.Web.UI.WebControls
                                if (levelLinkStyles != null && levelLinkStyles.Count > level) {
                                        style.AddCssClass (levelLinkStyles [level].CssClass);
                                        style.AddCssClass (levelLinkStyles [level].RegisteredCssClass);
-#if NET_4_0
                                        addBorderStyle = true;
-#endif
                                }
                                
                                if (node.IsLeafNode) {
@@ -1770,9 +1756,7 @@ namespace System.Web.UI.WebControls
                                
                                if (levelLinkStyles != null && levelLinkStyles.Count > level) {
                                        style.CopyFrom (levelLinkStyles [level]);
-#if NET_4_0
                                        addBorderStyle = true;
-#endif
                                }
                                
                                if (node.IsLeafNode) {
@@ -1791,14 +1775,12 @@ namespace System.Web.UI.WebControls
                                
                                style.AlwaysRenderTextDecoration = true;
                        }
-#if NET_4_0
                        if (addBorderStyle) {
                                // This appears not to come from any style. Instead, it's added
                                // whenever a level style is present.
                                writer.AddStyleAttribute (HtmlTextWriterStyle.BorderStyle, "none");
                                writer.AddStyleAttribute (HtmlTextWriterStyle.FontSize, "1em");
                        }               
-#endif
                        style.AddAttributesToRender (writer);
                }
 
@@ -1810,11 +1792,7 @@ namespace System.Web.UI.WebControls
                        string navigateUrl = node.NavigateUrl;
                        if (!String.IsNullOrEmpty (navigateUrl)) {
                                string target = node.Target.Length > 0 ? node.Target : Target;
-#if TARGET_J2EE
-                               string navUrl = ResolveClientUrl (navigateUrl, String.Compare (target, "_blank", StringComparison.InvariantCultureIgnoreCase) != 0);
-#else
                                string navUrl = ResolveClientUrl (navigateUrl);
-#endif
                                writer.AddAttribute (HtmlTextWriterAttribute.Href, navUrl);
                                if (target.Length > 0)
                                        writer.AddAttribute (HtmlTextWriterAttribute.Target, target);
@@ -2004,4 +1982,3 @@ namespace System.Web.UI.WebControls
                }
        }
 }
-#endif