// // System.Web.UI.WebControls.PagerSettings.cs // // Authors: // Lluis Sanchez Gual (lluis@novell.com) // // (C) 2005 Novell, Inc (http://www.novell.com) // // 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. // // Copyright (C) 2004 Novell, Inc (http://www.novell.com) // #if NET_2_0 using System.ComponentModel; using System.Security.Permissions; namespace System.Web.UI.WebControls { [TypeConverterAttribute (typeof(ExpandableObjectConverter))] [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] public sealed class PagerSettings: IStateManager { static readonly object propertyChangedEvent = new object (); StateBag ViewState = new StateBag (); Control ctrl; EventHandlerList events = new EventHandlerList (); public event EventHandler PropertyChanged { add { events.AddHandler (propertyChangedEvent, value); } remove { events.RemoveHandler (propertyChangedEvent, value); } } public PagerSettings () { } internal PagerSettings (Control ctrl) { this.ctrl = ctrl; } [WebCategoryAttribute ("Appearance")] [NotifyParentPropertyAttribute (true)] [UrlPropertyAttribute] [DefaultValueAttribute ("")] [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)] public string FirstPageImageUrl { get { object ob = ViewState ["FirstPageImageUrl"]; if (ob != null) return (string) ob; return string.Empty; } set { ViewState ["FirstPageImageUrl"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Appearance")] [DefaultValueAttribute ("<<")] [NotifyParentPropertyAttribute (true)] public string FirstPageText { get { object ob = ViewState ["FirstPageText"]; if (ob != null) return (string) ob; return "<<"; } set { ViewState ["FirstPageText"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Appearance")] [NotifyParentPropertyAttribute (true)] [UrlPropertyAttribute] [DefaultValueAttribute ("")] [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)] public string LastPageImageUrl { get { object ob = ViewState ["LastPageImageUrl"]; if (ob != null) return (string) ob; return string.Empty; } set { ViewState ["LastPageImageUrl"] = value; RaisePropertyChanged (); } } [NotifyParentPropertyAttribute (true)] [WebCategoryAttribute ("Appearance")] [DefaultValueAttribute (">>")] public string LastPageText { get { object ob = ViewState ["LastPageText"]; if (ob != null) return (string) ob; return ">>"; } set { ViewState ["LastPageText"] = value; RaisePropertyChanged (); } } [NotifyParentPropertyAttribute (true)] [WebCategoryAttribute ("Appearance")] [DefaultValueAttribute (PagerButtons.Numeric)] public PagerButtons Mode { get { object ob = ViewState ["Mode"]; if (ob != null) return (PagerButtons) ob; return PagerButtons.Numeric; } set { ViewState ["Mode"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Appearance")] [NotifyParentPropertyAttribute (true)] [UrlPropertyAttribute] [DefaultValueAttribute ("")] [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)] public string NextPageImageUrl { get { object ob = ViewState ["NextPageImageUrl"]; if (ob != null) return (string) ob; return string.Empty; } set { ViewState ["NextPageImageUrl"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Appearance")] [NotifyParentPropertyAttribute (true)] [DefaultValueAttribute (">")] public string NextPageText { get { object ob = ViewState ["NextPageText"]; if (ob != null) return (string) ob; return ">"; } set { ViewState ["NextPageText"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Behavior")] [NotifyParentPropertyAttribute (true)] [DefaultValueAttribute (10)] public int PageButtonCount { get { object ob = ViewState ["PageButtonCount"]; if (ob != null) return (int) ob; return 10; } set { ViewState ["PageButtonCount"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Layout")] [DefaultValueAttribute (PagerPosition.Bottom)] [NotifyParentPropertyAttribute (true)] public PagerPosition Position { get { object ob = ViewState ["Position"]; if (ob != null) return (PagerPosition) ob; return PagerPosition.Bottom; } set { ViewState ["Position"] = value; } } [WebCategoryAttribute ("Appearance")] [NotifyParentPropertyAttribute (true)] [UrlPropertyAttribute] [DefaultValueAttribute ("")] [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)] public string PreviousPageImageUrl { get { object ob = ViewState ["PreviousPageImageUrl"]; if (ob != null) return (string) ob; return string.Empty; } set { ViewState ["PreviousPageImageUrl"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Appearance")] [DefaultValueAttribute ("<")] [NotifyParentPropertyAttribute (true)] public string PreviousPageText { get { object ob = ViewState ["PreviousPageText"]; if (ob != null) return (string) ob; return "<"; } set { ViewState ["PreviousPageText"] = value; RaisePropertyChanged (); } } [WebCategoryAttribute ("Appearance")] [DefaultValueAttribute (true)] [NotifyParentPropertyAttribute (true)] public bool Visible { get { object ob = ViewState ["Visible"]; if (ob != null) return (bool) ob; return true; } set { ViewState ["Visible"] = value; } } void RaisePropertyChanged () { EventHandler eh = events [propertyChangedEvent] as EventHandler; if (eh != null) eh (this, EventArgs.Empty); } public override string ToString () { return string.Empty; } void IStateManager.LoadViewState (object savedState) { ViewState.LoadViewState (savedState); } object IStateManager.SaveViewState () { return ViewState.SaveViewState(); } void IStateManager.TrackViewState () { ViewState.TrackViewState(); } bool IStateManager.IsTrackingViewState { get { return ViewState.IsTrackingViewState; } } internal Table CreatePagerControl (int currentPage, int pageCount) { Table table = new Table (); TableRow row = new TableRow (); table.Rows.Add (row); int buttonCount = (Mode == PagerButtons.Numeric || Mode == PagerButtons.NumericFirstLast) ? PageButtonCount : 1; int first = buttonCount * (currentPage / buttonCount); int last = first + buttonCount; if (last > pageCount) { last = pageCount; if (last - first < buttonCount) first = last - buttonCount; if (first < 0) first = 0; } // First button if (Mode == PagerButtons.NumericFirstLast || Mode == PagerButtons.NextPreviousFirstLast) { if (first > 0) row.Cells.Add (CreateCell (FirstPageText, FirstPageImageUrl, "Page", "First")); } // Prev button if (Mode == PagerButtons.NextPrevious || Mode == PagerButtons.NextPreviousFirstLast) { if (first > 0) row.Cells.Add (CreateCell (PreviousPageText, PreviousPageImageUrl, "Page", "Prev")); } // Numbers if (Mode == PagerButtons.Numeric || Mode == PagerButtons.NumericFirstLast) { if (first > 0) row.Cells.Add (CreateCell ("...", string.Empty, "Page", first.ToString ())); for (int n = first; n < last; n++) row.Cells.Add (CreateCell ((n + 1).ToString (), string.Empty, (n != currentPage) ? "Page" : "", (n != currentPage) ? (n + 1).ToString () : "")); if (last < pageCount) row.Cells.Add (CreateCell ("...", string.Empty, "Page", (last + 1).ToString ())); } // Next button if (Mode == PagerButtons.NextPrevious || Mode == PagerButtons.NextPreviousFirstLast) { if (last < pageCount) row.Cells.Add (CreateCell (NextPageText, NextPageImageUrl, "Page", "Next")); } // Last button if (Mode == PagerButtons.NumericFirstLast || Mode == PagerButtons.NextPreviousFirstLast) { if (last < pageCount) row.Cells.Add (CreateCell (LastPageText, LastPageImageUrl, "Page", "Last")); } return table; } TableCell CreateCell (string text, string image, string command, string argument) { TableCell cell = new TableCell (); Control button; if (String.IsNullOrEmpty (command)) { Label l = new Label (); l.Text = text; button = l; } else button = (Control)DataControlButton.CreateButton (String.IsNullOrEmpty (image) ? ButtonType.Link : ButtonType.Image, ctrl, text, image, command, argument, true); cell.Controls.Add (button); return cell; } } } #endif