// // System.Web.UI.WebControls.NextPreviousPagerField // // Authors: // Marek Habersack (mhabersack@novell.com) // // (C) 2007-2008 Novell, Inc // // // 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. // #if NET_3_5 using System; using System.ComponentModel; using System.Security.Permissions; using System.Web; using System.Web.UI; namespace System.Web.UI.WebControls { [AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)] [AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] public class NextPreviousPagerField : DataPagerField { int _startRowIndex; int _maximumRows; int _totalRowCount; int _fieldIndex; public NextPreviousPagerField () { } protected override void CopyProperties (DataPagerField newField) { base.CopyProperties (newField); NextPreviousPagerField field = newField as NextPreviousPagerField; if (field != null) { field.ButtonCssClass = ButtonCssClass; field.ButtonType = ButtonType; field.FirstPageImageUrl = FirstPageImageUrl; field.FirstPageText = FirstPageText; field.LastPageImageUrl = LastPageImageUrl; field.LastPageText = LastPageText; field.NextPageImageUrl = NextPageImageUrl; field.NextPageText = NextPageText; field.PreviousPageImageUrl = PreviousPageImageUrl; field.PreviousPageText = PreviousPageText; field.ShowFirstPageButton = ShowFirstPageButton; field.ShowLastPageButton = ShowLastPageButton; field.ShowNextPageButton = ShowNextPageButton; field.ShowPreviousPageButton = ShowPreviousPageButton; } } // What's the fieldIndex used for? public override void CreateDataPagers (DataPagerFieldItem container, int startRowIndex, int maximumRows, int totalRowCount, int fieldIndex) { _startRowIndex = startRowIndex; _maximumRows = maximumRows; _totalRowCount = totalRowCount; _fieldIndex = fieldIndex; bool setPagePropertiesNeeded = false; bool queryMode = GetQueryModeStartRowIndex (_totalRowCount, _maximumRows, ref _startRowIndex, ref setPagePropertiesNeeded); bool enablePrevFirst = _startRowIndex >= _maximumRows; bool enableNextLast = (_startRowIndex + _maximumRows) < _totalRowCount; bool addNonBreakingSpace = RenderNonBreakingSpacesBetweenControls; if (ShowFirstPageButton) CreateButton (container, DataControlCommands.FirstPageCommandArgument, FirstPageText, FirstPageImageUrl, 0, queryMode, enablePrevFirst, addNonBreakingSpace); int newPageNum = -1; if (ShowPreviousPageButton) { if (queryMode) newPageNum = (_startRowIndex / _maximumRows) - 1; CreateButton (container, DataControlCommands.PreviousPageCommandArgument, PreviousPageText, PreviousPageImageUrl, newPageNum, queryMode, enablePrevFirst, addNonBreakingSpace); } if (ShowNextPageButton) { if (queryMode) newPageNum = (_startRowIndex + _maximumRows) / _maximumRows; CreateButton (container, DataControlCommands.NextPageCommandArgument, NextPageText, NextPageImageUrl, newPageNum, queryMode, enableNextLast, addNonBreakingSpace); } if (ShowLastPageButton) { if (queryMode) { newPageNum = _totalRowCount / _maximumRows; if ((_totalRowCount % _maximumRows) == 0) newPageNum--; } CreateButton (container, DataControlCommands.LastPageCommandArgument, LastPageText, LastPageImageUrl, newPageNum, queryMode, enableNextLast, addNonBreakingSpace); } if (setPagePropertiesNeeded) DataPager.SetPageProperties (_startRowIndex, _maximumRows, true); } void CreateButton (DataPagerFieldItem container, string commandName, string text, string imageUrl, int pageNum, bool queryMode, bool enabled, bool addNonBreakingSpace) { WebControl ctl = null; if (queryMode) { pageNum++; HyperLink h = new HyperLink (); h.Text = text; h.ImageUrl = imageUrl; h.Enabled = enabled; h.NavigateUrl = GetQueryStringNavigateUrl (pageNum); h.CssClass = ButtonCssClass; ctl = h; } else { if (!enabled && RenderDisabledButtonsAsLabels) { Label l = new Label (); l.Text = text; ctl = l; } else { switch (ButtonType) { case ButtonType.Button: Button btn = new Button (); btn.CommandName = commandName; btn.Text = text; break; case ButtonType.Link: LinkButton lbtn = new LinkButton (); lbtn.CommandName = commandName; lbtn.Text = text; ctl = lbtn; break; case ButtonType.Image: ImageButton ibtn = new ImageButton (); ibtn.CommandName = commandName; ibtn.ImageUrl = imageUrl; ibtn.AlternateText = text; ctl = ibtn; break; } if (ctl != null) { ctl.Enabled = enabled; ctl.CssClass = ButtonCssClass; } } } if (ctl != null) { container.Controls.Add (ctl); if (addNonBreakingSpace) container.Controls.Add (new LiteralControl (" ")); } } protected override DataPagerField CreateField () { return new NextPreviousPagerField (); } public override bool Equals (object o) { NextPreviousPagerField field = o as NextPreviousPagerField; if (field == null) return false; // Compare using the properties that are copied in CopyProperties if (field.ButtonCssClass != ButtonCssClass) return false; if (field.ButtonType != ButtonType) return false; if (field.FirstPageImageUrl != FirstPageImageUrl) return false; if (field.FirstPageText != FirstPageText) return false; if (field.LastPageImageUrl != LastPageImageUrl) return false; if (field.LastPageText != LastPageText) return false; if (field.NextPageImageUrl != NextPageImageUrl) return false; if (field.NextPageText != NextPageText) return false; if (field.PreviousPageImageUrl != PreviousPageImageUrl) return false; if (field.PreviousPageText != PreviousPageText) return false; if (field.ShowFirstPageButton != ShowFirstPageButton) return false; if (field.ShowLastPageButton != ShowLastPageButton) return false; if (field.ShowNextPageButton != ShowNextPageButton) return false; if (field.ShowPreviousPageButton != ShowPreviousPageButton) return false; return true; } public override int GetHashCode () { int ret = 0; // Base the calculation on the properties that are copied in CopyProperties ret |= ButtonCssClass.GetHashCode (); ret |= ButtonType.GetHashCode (); ret |= FirstPageImageUrl.GetHashCode (); ret |= FirstPageText.GetHashCode (); ret |= LastPageImageUrl.GetHashCode (); ret |= LastPageText.GetHashCode (); ret |= NextPageImageUrl.GetHashCode (); ret |= NextPageText.GetHashCode (); ret |= PreviousPageImageUrl.GetHashCode (); ret |= PreviousPageText.GetHashCode (); ret |= ShowFirstPageButton.GetHashCode (); ret |= ShowLastPageButton.GetHashCode (); ret |= ShowNextPageButton.GetHashCode (); ret |= ShowPreviousPageButton.GetHashCode (); return ret; } public override void HandleEvent (CommandEventArgs e) { string commandName = e.CommandName; int newStartIndex = -1; int pageSize = DataPager.PageSize; if (String.Compare (commandName, DataControlCommands.FirstPageCommandArgument, StringComparison.OrdinalIgnoreCase) == 0) newStartIndex = 0; else if (String.Compare (commandName, DataControlCommands.LastPageCommandArgument, StringComparison.OrdinalIgnoreCase) == 0) { int lastPageMod = _totalRowCount % pageSize; if (lastPageMod == 0) newStartIndex = _totalRowCount - pageSize; else newStartIndex = _totalRowCount - lastPageMod; } else if (String.Compare (commandName, DataControlCommands.NextPageCommandArgument, StringComparison.OrdinalIgnoreCase) == 0) { newStartIndex = _startRowIndex + pageSize; if (newStartIndex > _totalRowCount) newStartIndex = _totalRowCount - pageSize; } else if (String.Compare (commandName, DataControlCommands.PreviousPageCommandArgument, StringComparison.OrdinalIgnoreCase) == 0) { newStartIndex = _startRowIndex - pageSize; if (newStartIndex < 0) newStartIndex = 0; } if (newStartIndex != -1) DataPager.SetPageProperties (newStartIndex, pageSize, true); } public string ButtonCssClass { get { string s = ViewState ["ButtonCssClass"] as string; if (s != null) return s; return String.Empty; } set { ViewState ["ButtonCssClass"] = value; } } public ButtonType ButtonType { get { object o = ViewState ["ButtonType"]; if (o != null) return (ButtonType) o; return ButtonType.Link; } set { ViewState ["ButtonType"] = value; } } public string FirstPageImageUrl { get { string s = ViewState ["FirstPageImageUrl"] as string; if (s != null) return s; return String.Empty; } set { ViewState ["FirstPageImageUrl"] = value; } } public string FirstPageText { get { string s = ViewState ["FirstPageText"] as string; if (s != null) return s; return "First"; } set { ViewState ["FirstPageText"] = value; } } public string LastPageImageUrl { get { string s = ViewState ["LastPageImageUrl"] as string; if (s != null) return s; return String.Empty; } set { ViewState ["LastPageImageUrl"] = value; } } public string LastPageText { get { string s = ViewState ["LastPageText"] as string; if (s != null) return s; return "Last"; } set { ViewState ["LastPageText"] = value; } } public string NextPageImageUrl { get { string s = ViewState ["NextPageImageUrl"] as string; if (s != null) return s; return String.Empty; } set { ViewState ["NextPageImageUrl"] = value; } } public string NextPageText { get { string s = ViewState ["NextPageText"] as string; if (s != null) return s; return "Next"; } set { ViewState ["NextPageText"] = value; } } public string PreviousPageImageUrl { get { string s = ViewState ["PreviousPageImageUrl"] as string; if (s != null) return s; return String.Empty; } set { ViewState ["PreviousPageImageUrl"] = value; } } public string PreviousPageText { get { string s = ViewState ["PreviousPageText"] as string; if (s != null) return s; return "Previous"; } set { ViewState ["PreviousPageText"] = value; } } public bool RenderDisabledButtonsAsLabels { get { object o = ViewState ["RenderDisabledButtonsAsLabels"]; if (o != null) return (bool) o; return false; } set { ViewState ["RenderDisabledButtonsAsLabels"] = value; } } public bool RenderNonBreakingSpacesBetweenControls { get { object o = ViewState ["RenderNonBreakingSpacesBetweenControls"]; if (o != null) return (bool) o; return true; } set { ViewState ["RenderNonBreakingSpacesBetweenControls"] = value; } } public bool ShowFirstPageButton { get { object o = ViewState ["ShowFirstPageButton"]; if (o != null) return (bool) o; return false; } set { ViewState ["ShowFirstPageButton"] = value; } } public bool ShowLastPageButton { get { object o = ViewState ["ShowLastPageButton"]; if (o != null) return (bool) o; return false; } set { ViewState ["ShowLastPageButton"] = value; } } public bool ShowNextPageButton { get { object o = ViewState ["ShowNextPageButton"]; if (o != null) return (bool) o; return true; } set { ViewState ["ShowNextPageButton"] = value; } } public bool ShowPreviousPageButton { get { object o = ViewState ["ShowPreviousPageButton"]; if (o != null) return (bool) o; return true; } set { ViewState ["ShowPreviousPageButton"] = value; } } } } #endif