2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Web.Mobile / System.Web.UI.MobileControls / PagedControl.cs
index 2dbdd8a51c0e1a7ebe417076d2feffe2328e4f56..41f64f27f2bb22be3c99f5bb428b30c4b60c9049 100644 (file)
@@ -1,3 +1,24 @@
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
 /**
  * Project   : Mono
  * Namespace : System.Web.UI.MobileControls
@@ -16,8 +37,6 @@ namespace System.Web.UI.MobileControls
        public abstract class PagedControl : MobileControl
        {
                private static readonly object LoadItemsEvent    = new object();
-               private static readonly object ItemDataBindEvent = new object();
-               private static readonly object ItemCommandEvent  = new object();
 
                private int itemCount = 0;
                private ItemPager itemPager;
@@ -39,11 +58,6 @@ namespace System.Web.UI.MobileControls
                        }
                }
 
-               private void OnLoadItems()
-               {
-                       OnLoadItems(new LoadItemsEventArgs(PagerItemIndex, PagerItemCount));
-               }
-
                private int PagerItemIndex
                {
                        get
@@ -63,6 +77,87 @@ namespace System.Web.UI.MobileControls
 
                protected abstract int InternalItemCount { get; }
 
+               public int FirstVisibleItemIndex
+               {
+                       get
+                       {
+                               if(!IsCustomPaging && EnablePagination)
+                                       return PagerItemIndex;
+                               return 0;
+                       }
+               }
+
+               private bool IsCustomPaging
+               {
+                       get
+                       {
+                               return (itemCount > 0);
+                       }
+               }
+
+               public int ItemCount
+               {
+                       get
+                       {
+                               return itemCount;
+                       }
+                       set
+                       {
+                               itemCount = value;
+                       }
+               }
+
+               public int ItemWeight
+               {
+                       get
+                       {
+                               return ControlPager.DefaultWeight;
+                       }
+               }
+
+               public int ItemsPerPage
+               {
+                       get
+                       {
+                               object o = ViewState["ItemsPerPage"];
+                               if(o != null)
+                                       return (int)o;
+                               return 0;
+                       }
+                       set
+                       {
+                               ViewState["ItemsPerPage"] = value;
+                       }
+               }
+
+               public int VisibleItemCount
+               {
+                       get
+                       {
+                               if(IsCustomPaging || !EnablePagination)
+                                       return InternalItemCount;
+                               return PagerItemCount;
+                       }
+               }
+
+               public override int VisibleWeight
+               {
+                       get
+                       {
+                               if(VisibleItemCount == -1)
+                                       return 0;
+                               return VisibleItemCount * GetItemWeight();
+                       }
+               }
+
+               private int GetItemWeight()
+               {
+                       int iw = Adapter.ItemWeight;
+                       if(iw == ControlPager.UseDefaultWeight)
+                               return ItemWeight;
+                       return iw;
+               }
+
                protected virtual void OnLoadItems(LoadItemsEventArgs e)
                {
                        LoadItemsEventHandler lieh = (LoadItemsEventHandler)(Events[LoadItemsEvent]);
@@ -70,34 +165,47 @@ namespace System.Web.UI.MobileControls
                                lieh(this, e);
                }
 
-               protected override bool OnBubbleEvent(object sender, EventArgs e)
+               private void OnLoadItems()
                {
-                       if(e is ListCommandEventArgs)
-                       {
-                               OnItemCommand((ListCommandEventArgs)e);
-                               return true;
-                       }
-                       return false;
+                       OnLoadItems(new LoadItemsEventArgs(PagerItemIndex, PagerItemCount));
+               }
+
+               protected override void OnPageChange(int oldPageIndex, int newPageIndex)
+               {
+                       pagingCharsChanged = true;
                }
 
-               protected override void OnDataBinding(EventArgs e)
+               protected override void OnPreRender(EventArgs e)
                {
-                       base.OnDataBinding(e);
-                       throw new NotImplementedException();
+                       if(IsCustomPaging)
+                       {
+                               if(!Page.IsPostBack || Form.PaginationStateChanged
+                                  || pagingCharsChanged || !IsViewStateEnabled())
+                               {
+                                       OnLoadItems();
+                               }
+                       }
+                       base.OnPreRender(e);
                }
 
-               protected void OnItemDataBind(ListDataBindEventArgs e)
+               private bool IsViewStateEnabled()
                {
-                       ListDataBindEventHandler ldbeh = (ListDataBindEventHandler)(Events[ItemDataBindEvent]);
-                       if(ldbeh != null)
-                               ldbeh(this, e);
+                       Control ctrl = this;
+                       while(ctrl != null && ctrl.EnableViewState)
+                       {
+                               ctrl = ctrl.Parent;
+                       }
+                       return (ctrl == null);
                }
 
-               protected virtual void OnItemCommand(ListCommandEventArgs e)
+               public override void PaginateRecursive(ControlPager pager)
                {
-                       ListCommandEventHandler lceh = (ListCommandEventHandler)(Events[ItemCommandEvent]);
-                       if(lceh != null)
-                               lceh(this, e);
+                       int ic = 0;
+                       int ipp = 0;
+                       if(IsCustomPaging || InternalItemCount == 0)
+                               ic = ItemCount;
+                       ipp = ItemsPerPage;
+                       itemPager = pager.GetItemPager(this, ic, ipp, GetItemWeight());
                }
        }
 }