refactoring
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / SiteMapDataSource.cs
index d979d84e50c8f88abcb815a2010c2d3df2bda9e6..1aa88f78ca5b98ba8fb08462fa6bbd44abd849d6 100644 (file)
@@ -52,14 +52,14 @@ namespace System.Web.UI.WebControls
                        return emptyNames;
                }
                
-               public IList GetList ()
+               public virtual IList GetList ()
                {
                        return ListSourceHelper.GetList (this);
                }
                
-           [BrowsableAttribute (false)]\r
-           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]\r
-               public bool ContainsListCollection {
+               [BrowsableAttribute (false)]
+               [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
+               public virtual bool ContainsListCollection {
                        get { return ListSourceHelper.ContainsListCollection (this); }
                }
                
@@ -68,8 +68,8 @@ namespace System.Web.UI.WebControls
                        remove { ((IHierarchicalDataSource)this).DataSourceChanged -= value; }
                }
                
-           [BrowsableAttribute (false)]\r
-           [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]\r
+               [BrowsableAttribute (false)]
+               [DesignerSerializationVisibilityAttribute (DesignerSerializationVisibility.Hidden)]
                public SiteMapProvider Provider {
                        get {
                                if (provider == null) {
@@ -91,61 +91,51 @@ namespace System.Web.UI.WebControls
                        }
                }
                
-           [DefaultValueAttribute ("")]\r
-               public string SiteMapProvider {
-                       get {
-                               object o = ViewState ["SiteMapProvider"];
-                               if (o != null) return (string) o;
-                               else return string.Empty;
-                       }
+               [DefaultValueAttribute ("")]
+               public virtual string SiteMapProvider {
+                       get { return ViewState.GetString ("SiteMapProvider", ""); }
                        set {
                                ViewState ["SiteMapProvider"] = value;
                                OnDataSourceChanged (EventArgs.Empty);
                        }
                }
                
-           [DefaultValueAttribute ("")]\r
-           [EditorAttribute ("System.Web.UI.Design.UrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]\r
-           [UrlPropertyAttribute]\r
-               public string StartingNodeUrl {
-                       get {
-                               object o = ViewState ["StartingNodeUrl"];
-                               if (o != null) return (string) o;
-                               else return string.Empty;
-                       }
+               [DefaultValueAttribute ("")]
+               [EditorAttribute ("System.Web.UI.Design.UrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
+               [UrlPropertyAttribute]
+               public virtual string StartingNodeUrl {
+                       get { return ViewState.GetString ("StartingNodeUrl", ""); }
                        set {
                                ViewState ["StartingNodeUrl"] = value;
                                OnDataSourceChanged (EventArgs.Empty);
                        }
                }
+
+               [DefaultValue (0)]
+               public virtual int StartingNodeOffset {
+                       get { return ViewState.GetInt ("StartingNodeOffset", 0); }
+                       set { ViewState["StartingNodeOffset"] = value; }
+               }
                
-           [DefaultValueAttribute (false)]\r
-               public bool StartFromCurrentNode {
-                       get {
-                               object o = ViewState ["StartFromCurrentNode"];
-                               if (o != null) return (bool) o;
-                               else return false;
-                       }
+               [DefaultValueAttribute (false)]
+               public virtual bool StartFromCurrentNode {
+                       get { return ViewState.GetBool ("StartFromCurrentNode", false); }
                        set {
                                ViewState ["StartFromCurrentNode"] = value;
                                OnDataSourceChanged (EventArgs.Empty);
                        }
                }
                
-           [DefaultValueAttribute (true)]\r
-               public bool ShowStartingNode {
-                       get {
-                               object o = ViewState ["ShowStartingNode"];
-                               if (o != null) return (bool) o;
-                               else return true;
-                       }
+               [DefaultValueAttribute (true)]
+               public virtual bool ShowStartingNode {
+                       get { return ViewState.GetBool ("ShowStartingNode", true); }
                        set {
                                ViewState ["ShowStartingNode"] = value;
                                OnDataSourceChanged (EventArgs.Empty);
                        }
                }
 
-               public DataSourceView GetView (string viewName)
+               public virtual DataSourceView GetView (string viewName)
                {
                        SiteMapNode node = GetStartNode (viewName);
                        if (node == null)
@@ -167,8 +157,11 @@ namespace System.Web.UI.WebControls
                                return new SiteMapHierarchicalDataSourceView (node.ChildNodes);
                }
                
+               [MonoTODO ("handle StartNodeOffsets > 0")]
                SiteMapNode GetStartNode (string viewPath)
                {
+                       SiteMapNode starting_node;
+
                        if (viewPath != null && viewPath.Length != 0) {
                                string url = MapUrl (StartingNodeUrl);
                                return Provider.FindSiteMapNode (url);
@@ -176,16 +169,30 @@ namespace System.Web.UI.WebControls
                        else if (StartFromCurrentNode) {
                                if (StartingNodeUrl.Length != 0)
                                        throw new InvalidOperationException ("StartingNodeUrl can't be set if StartFromCurrentNode is set to true.");
-                               return Provider.CurrentNode;
+                               starting_node = Provider.CurrentNode;
                        }
                        else if (StartingNodeUrl.Length != 0) {
                                string url = MapUrl (StartingNodeUrl);
                                SiteMapNode node = Provider.FindSiteMapNode (url);
                                if (node == null) throw new ArgumentException ("Can't find a site map node for the url: " + StartingNodeUrl);
-                               return node;
+
+                               starting_node = node;
                        }
                        else
-                               return Provider.RootNode;
+                               starting_node = Provider.RootNode;
+
+                       int i;
+                       if (StartingNodeOffset < 0) {
+                               for (i = StartingNodeOffset; i < 0; i ++) {
+                                       if (starting_node.ParentNode == null)
+                                               break;
+                                       starting_node = starting_node.ParentNode;
+                               }
+                       }
+                       else if (StartingNodeOffset > 0) {
+                       }
+
+                       return starting_node;
                }
                
                string MapUrl (string url)