[sdb] Avoid asserting when trying to single step on a thread with no managed frames...
[mono.git] / mcs / class / System.Web.Extensions / System.Web.UI.WebControls / TemplatePagerField.cs
index fa9bf42be7a4d0bc7c8283e7d1960a5ff8942a97..77da9571b5101ef3aee1a9444ab0df8d625853a7 100644 (file)
@@ -4,7 +4,7 @@
 // Authors:
 //   Marek Habersack (mhabersack@novell.com)
 //
-// (C) 2007 Novell, Inc
+// (C) 2007-2008 Novell, Inc
 //
 
 //
@@ -27,8 +27,8 @@
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-#if NET_3_5
 using System;
+using System.ComponentModel;
 using System.Security.Permissions;
 using System.Web;
 using System.Web.UI;
@@ -39,11 +39,74 @@ namespace System.Web.UI.WebControls
        [AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
        public class TemplatePagerField : DataPagerField
        {
+               static object PagerCommandEvent = new object ();
+
+               EventHandlerList events = new EventHandlerList ();
+               
+               public event EventHandler <DataPagerCommandEventArgs> PagerCommand {
+                       add { events.AddHandler (PagerCommandEvent, value); }
+                       remove { events.RemoveHandler (PagerCommandEvent, value); }
+               }
+
+               [TemplateContainerAttribute(typeof(DataPagerFieldItem), BindingDirection.TwoWay)]
+               [BrowsableAttribute(false)]
+               [PersistenceModeAttribute(PersistenceMode.InnerProperty)]
+               public virtual ITemplate PagerTemplate {
+                       get;
+                       set;
+               }
+
                public TemplatePagerField ()
                {
                }
 
-               
+               protected override void CopyProperties (DataPagerField newField)
+               {
+                       base.CopyProperties (newField);
+
+                       var field = newField as TemplatePagerField;
+                       if (field == null)
+                               return;
+
+                       field.PagerTemplate = PagerTemplate;
+               }
+
+               public override void CreateDataPagers (DataPagerFieldItem container, int startRowIndex, int maximumRows, int totalRowCount, int fieldIndex)
+               {
+                       ITemplate pagerTemplate = PagerTemplate;
+                       if (pagerTemplate == null)
+                               return;
+
+                       pagerTemplate.InstantiateIn (container);
+               }
+
+               protected override DataPagerField CreateField ()
+               {
+                       return new TemplatePagerField ();
+               }
+
+               public override void HandleEvent (CommandEventArgs e)
+               {
+                       var args = e as DataPagerCommandEventArgs;
+                       if (args == null)
+                               return;
+                       
+                       DataPager pager = DataPager;
+                       var eventArgs = new DataPagerCommandEventArgs (this, pager.TotalRowCount, e, args.Item);
+                       OnPagerCommand (eventArgs);
+
+                       int newStartRowIndex = eventArgs.NewStartRowIndex;
+                       if (newStartRowIndex < 0)
+                               return;
+
+                       pager.SetPageProperties (newStartRowIndex, eventArgs.NewMaximumRows, true);
+               }
+
+               protected virtual void OnPagerCommand (DataPagerCommandEventArgs e)
+               {
+                       EventHandler <DataPagerCommandEventArgs> eh = events [PagerCommandEvent] as EventHandler <DataPagerCommandEventArgs>;
+                       if (eh != null)
+                               eh (this, e);
+               }
        }
 }
-#endif