|
// VideoLibrary DEMO - DaST Technology Demonstrator
// Copyright (C) 2011 Roman Gubarenko
// http://www.rgubarenko.net
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// Licence terms for AspNetDaST.dll (in Bin folder) are below.
//
// ASP.NET DaST Rendering Engine (BETA version)
// Copyright (C) 2011 Roman Gubarenko
// http://www.rgubarenko.net
//
// Redistribution and use of BETA version of DaST Rendering Engine
// is permitted in binary form without modification. Only original and
// unmodified .NET dll (AspNetDaST.dll) can be used in your own projects and
// redistributed. You may not copy, decompile, reverse engineer, disassemble,
// modify, or create derivative works of the software or any part thereof.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE.
//
// DaST technology dev site: http://www.rgubarenko.net
// My contact email for questions: rgubarenko@gmail.com
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using AspNetDaST.Web;
/// <summary>
/// Summary description for PagerController
/// </summary>
public class PagerController : ScopeController
{
public override void SetTemplate(SetTemplateArgs template)
{
template.Markup = Utils.LoadTemplate("PagerTemplate.htm");
}
public override void SetupModel(ControllerModelBuilder model)
{
model.SetDataBind(new DataBindHandler(ROOT_DataBind));
model.HandleAction("NextPage", new ActionHandler(Action_NextPage));
model.HandleAction("PrevPage", new ActionHandler(Action_PrevPage));
model.RegisterMethod("UpdatePagerValues", new MethodHandler(UpdatePagerValues));
}
private void Action_NextPage(ActionArgs args)
{
int startItemIdx = ControlPath.Scope.Param<int>("StartItemIdx");
int pageSize = ControlPath.Scope.Param<int>("PageSize");
int itemTotalCount = ControlPath.Scope.Param<int>("ItemTotalCount");
if (startItemIdx + pageSize <= itemTotalCount)
{
startItemIdx = startItemIdx + pageSize;
ControlPath.Scope.SetParam("StartItemIdx", startItemIdx);
RaiseAction("NextPage", null);
}
}
private void Action_PrevPage(ActionArgs args)
{
int startItemIdx = ControlPath.Scope.Param<int>("StartItemIdx");
int pageSize = ControlPath.Scope.Param<int>("PageSize");
int itemTotalCount = ControlPath.Scope.Param<int>("ItemTotalCount");
if (startItemIdx > 0)
{
startItemIdx = startItemIdx - pageSize;
ControlPath.Scope.SetParam("StartItemIdx", startItemIdx);
RaiseAction("PrevPage", null);
}
}
private void ROOT_DataBind()
{
UpdatePagerValues(null);
int startItemIdx = CurrentPath.Scope.Param<int>("StartItemIdx");
int pageSize = CurrentPath.Scope.Param<int>("PageSize");
int itemCount = CurrentPath.Scope.Param<int>("ItemTotalCount");
if (startItemIdx >= 0 && pageSize > 0 && itemCount > 0)
{
int currPage = startItemIdx / pageSize + (startItemIdx % pageSize == 0 ? 0 : 1); ;
int pageCount = itemCount / pageSize + (itemCount % pageSize == 0 ? 0 : 1);
CurrentPath.Scope.Replace("{PrevPageIdx}", currPage > 0 ? currPage - 1 : 0);
CurrentPath.Scope.Replace("{NextPageIdx}", currPage + 1);
CurrentPath.Scope.Replace("{CurrPageNum}", currPage + 1);
CurrentPath.Scope.Replace("{TotalPageCount}", pageCount);
CurrentPath.Fwd("PrevEnabled").Scope.Replace("{PrevPageIdx}", currPage > 0 ? currPage - 1 : 0);
CurrentPath.Fwd("NextEnabled").Scope.Replace("{NextPageIdx}", currPage + 1);
if (currPage > 0)
{
CurrentPath.Fwd("PrevEnabled").Scope.RenderType = ScopeRenderType.Normal;
CurrentPath.Fwd("PrevDisabled").Scope.RenderType = ScopeRenderType.None;
}
else
{
CurrentPath.Fwd("PrevEnabled").Scope.RenderType = ScopeRenderType.None;
CurrentPath.Fwd("PrevDisabled").Scope.RenderType = ScopeRenderType.Normal;
}
if (currPage < pageCount - 1)
{
CurrentPath.Fwd("NextEnabled").Scope.RenderType = ScopeRenderType.Normal;
CurrentPath.Fwd("NextDisabled").Scope.RenderType = ScopeRenderType.None;
}
else
{
CurrentPath.Fwd("NextEnabled").Scope.RenderType = ScopeRenderType.None;
CurrentPath.Fwd("NextDisabled").Scope.RenderType = ScopeRenderType.Normal;
}
}
else
{
CurrentPath.Scope.RenderType = ScopeRenderType.Empty;
}
}
private object UpdatePagerValues(object jsonData)
{
int startItemIdx, pageSize, itemTotalCount;
if (DaSTUtils.HasValue("StartItemIdx", jsonData)) startItemIdx = (int)DaSTUtils.GetValue("StartItemIdx", jsonData);
else startItemIdx = ControlPath.Scope.Param<int>("StartItemIdx", 0);
if (DaSTUtils.HasValue("PageSize", jsonData)) pageSize = (int)DaSTUtils.GetValue("PageSize", jsonData);
else pageSize = ControlPath.Scope.Param<int>("PageSize", 1);
if (DaSTUtils.HasValue("ItemTotalCount", jsonData)) itemTotalCount = (int)DaSTUtils.GetValue("ItemTotalCount", jsonData);
else itemTotalCount = ControlPath.Scope.Param<int>("ItemTotalCount", 0);
startItemIdx = Math.Min(startItemIdx, itemTotalCount - 1);
startItemIdx = ((int)(startItemIdx / pageSize)) * pageSize;
// set recalculated values
ControlPath.Scope.SetParam("StartItemIdx", startItemIdx);
ControlPath.Scope.SetParam("PageSize", pageSize);
ControlPath.Scope.SetParam("ItemTotalCount", itemTotalCount);
return null;
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Software Architect with over 15 years in IT field. Started with deep math and C++ Computer Vision software. Currently in .NET and PHP web development. Creator of DaST pattern, open-source frameworks, and plugins. Interested in cutting Edge IT, open-source, Web 2.0, .NET, MVC, C++, Java, jQuery, Mobile tech, and extreme sports.