[CLOSED] ProgressBarPager on different ToolBar than PagingToolBar

Page 1 of 2 12 LastLast
  1. #1

    [CLOSED] ProgressBarPager on different ToolBar than PagingToolBar

    Hi,

    Is it possible to change location of ProgressBarPager plugin ? I would like to have PagingToolbar on TopBar and ProgressBarPager on BottomBar but they must be connected. I don't see any settings like "Store" where I could point the plugin to.

    Thank you.

    Matt
    Last edited by Daniil; Jan 21, 2015 at 1:01 PM. Reason: [CLOSED]
  2. #2
  3. #3
    I mean this one (in the right bottom corner).

    https://examples3.ext.net/#/GridPane...rayWithPaging/

    Original:

    Click image for larger version. 

Name:	PagingProgressBar1.png 
Views:	7 
Size:	37.4 KB 
ID:	18721


    This is what I would like to get:

    Click image for larger version. 

Name:	PagingProgressBar2.png 
Views:	5 
Size:	38.3 KB 
ID:	18731

    Thank you,
  4. #4
    Wait some minutes.
  5. #5
    Matt, do you just want to display info or you want all the ProgressBarPager's functionalities? Note that it's possible to change the current page of the store by clicking on ProgressBarPager.
  6. #6
    Yes, I want to have all the functionality, just add the plugin to different toolbar. I am looking into source codes now and I think we would have to new plugin that extend this one.
  7. #7
    A good start point.

    Click image for larger version. 

Name:	pg001.png 
Views:	5 
Size:	37.1 KB 
ID:	18782

    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!X.IsAjaxRequest)
            {
                this.BindData();
            }
        }
    
        protected void MyData_Refresh(object sender, StoreReadDataEventArgs e)
        {
            this.BindData();
        }
    
        private void BindData()
        {
            Store store = this.GridPanel1.GetStore();
    
            store.DataSource = this.Data;
            store.DataBind();
        }
    
        private object[] Data
        {
            get
            {
                DateTime now = DateTime.Now;
    
                return new object[]
                {
                    new object[] { "3m Co", 71.72, 0.02, 0.03, now },
                    new object[] { "Alcoa Inc", 29.01, 0.42, 1.47, now },
                    new object[] { "Altria Group Inc", 83.81, 0.28, 0.34, now },
                    new object[] { "American Express Company", 52.55, 0.01, 0.02, now },
                    new object[] { "American International Group, Inc.", 64.13, 0.31, 0.49, now },
                    new object[] { "AT&T Inc.", 31.61, -0.48, -1.54, now },
                    new object[] { "Boeing Co.", 75.43, 0.53, 0.71, now },
                    new object[] { "Caterpillar Inc.", 67.27, 0.92, 1.39, now },
                    new object[] { "Citigroup, Inc.", 49.37, 0.02, 0.04, now },
                    new object[] { "E.I. du Pont de Nemours and Company", 40.48, 0.51, 1.28, now },
                    new object[] { "Exxon Mobil Corp", 68.1, -0.43, -0.64, now },
                    new object[] { "General Electric Company", 34.14, -0.08, -0.23, now },
                    new object[] { "General Motors Corporation", 30.27, 1.09, 3.74, now },
                    new object[] { "Hewlett-Packard Co.", 36.53, -0.03, -0.08, now },
                    new object[] { "Honeywell Intl Inc", 38.77, 0.05, 0.13, now },
                    new object[] { "Intel Corporation", 19.88, 0.31, 1.58, now },
                    new object[] { "International Business Machines", 81.41, 0.44, 0.54, now },
                    new object[] { "Johnson & Johnson", 64.72, 0.06, 0.09, now },
                    new object[] { "JP Morgan & Chase & Co", 45.73, 0.07, 0.15, now },
                    new object[] { "McDonald\"s Corporation", 36.76, 0.86, 2.40, now },
                    new object[] { "Merck & Co., Inc.", 40.96, 0.41, 1.01, now },
                    new object[] { "Microsoft Corporation", 25.84, 0.14, 0.54, now },
                    new object[] { "Pfizer Inc", 27.96, 0.4, 1.45, now },
                    new object[] { "The Coca-Cola Company", 45.07, 0.26, 0.58, now },
                    new object[] { "The Home Depot, Inc.", 34.64, 0.35, 1.02, now },
                    new object[] { "The Procter & Gamble Company", 61.91, 0.01, 0.02, now },
                    new object[] { "United Technologies Corporation", 63.26, 0.55, 0.88, now },
                    new object[] { "Verizon Communications", 35.57, 0.39, 1.11, now },
                    new object[] { "Wal-Mart Stores, Inc.", 45.45, 0.73, 1.63, now }
                };
            }
        }
    </script>
    
    <!DOCTYPE html>
    
    <html>
    <head runat="server">
        <title>Simple Array Grid With Paging and Remote Reloading - Ext.NET Examples</title>
        <link href="/resources/css/examples.css" rel="stylesheet" />
    
        <script>
            var template = '<span style="color:{0};">{1}</span>';
    
            var change = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value);
            };
    
            var pctChange = function (value) {
                return Ext.String.format(template, (value > 0) ? "green" : "red", value + "%");
            };
    
            var UpdateInfo = function () {
                var store = App._str;
                var pagingToolbar = App._ptb;
                var progressBar = App._pb;
    
                var count = store.getCount();
                var pageData = pagingToolbar.getPageData();
                var message = count === 0 ? pagingToolbar.emptyMsg : Ext.String.format(pagingToolbar.displayMsg, pageData.fromRecord, pageData.toRecord, store.getTotalCount());
                var percentage = pageData.pageCount > 0 ? (pageData.currentPage / pageData.pageCount) : 0;
    
                progressBar.updateProgress(percentage, message, this.animate || this.defaultAnimConfig);
            }
        </script>
    </head>
    <body>
        <form runat="server">
            <ext:ResourceManager ScriptMode="Debug" Locale="en" runat="server" />
    
            <h1>Array Grid with Local Paging and Remote Reloading</h1>
    
            <p>Demonstrates how to create a grid from Array data with Local Paging and Remote Reloading.</p>
    
            <p>
                Notice <b>Last Updated</b> column is revised with a new server-side DateTime stamp when the GridPanel "Refresh" button is clicked.<br />
                This demonstrates that when the GridPanel is refreshed, the Data is requested again from the server via a DirectEvent, but the Paging and Sorting is done completely client-side in the browser.
            </p>
    
            <ext:GridPanel
                ID="GridPanel1"
                runat="server"
                Title="Array Grid"
                Width="700">
                <Store>
                    <ext:Store ID="_str" runat="server" OnReadData="MyData_Refresh" PageSize="10">
                        <Model>
                            <ext:Model runat="server">
                                <Fields>
                                    <ext:ModelField Name="company" />
                                    <ext:ModelField Name="price" Type="Float" />
                                    <ext:ModelField Name="change" Type="Float" />
                                    <ext:ModelField Name="pctChange" Type="Float" />
                                    <ext:ModelField Name="lastChange" Type="Date" />
                                </Fields>
                            </ext:Model>
                        </Model>
                    </ext:Store>
                </Store>
                <ColumnModel runat="server">
                    <Columns>
                        <ext:RowNumbererColumn runat="server" Width="35" />
                        <ext:Column runat="server" Text="Company" DataIndex="company" Flex="1" />
                        <ext:Column runat="server" Text="Price" Width="75" DataIndex="price">
                            <Renderer Format="UsMoney" />
                        </ext:Column>
                        <ext:Column runat="server" Text="Change" Width="75" DataIndex="change">
                            <Renderer Fn="change" />
                        </ext:Column>
                        <ext:Column runat="server" Text="Change" Width="75" DataIndex="pctChange">
                            <Renderer Fn="pctChange" />
                        </ext:Column>
                        <ext:DateColumn runat="server" Text="Last Updated" Width="85" DataIndex="lastChange" Format="H:mm:ss" />
                    </Columns>
                </ColumnModel>
                <SelectionModel>
                    <ext:RowSelectionModel runat="server" Mode="Multi" />
                </SelectionModel>
                <View>
                    <ext:GridView runat="server" StripeRows="true" />
                </View>
                <BottomBar>
                    <ext:PagingToolbar ID="_ptb" DisplayInfo="false" runat="server">
                        <Items>
                            <ext:Label runat="server" Text="Page size:" />
                            <ext:ToolbarSpacer runat="server" Width="10" />
                            <ext:ComboBox runat="server" Width="80">
                                <Items>
                                    <ext:ListItem Text="1" />
                                    <ext:ListItem Text="2" />
                                    <ext:ListItem Text="10" />
                                    <ext:ListItem Text="20" />
                                </Items>
                                <SelectedItems>
                                    <ext:ListItem Value="10" />
                                </SelectedItems>
                                <Listeners>
                                    <Select Handler="#{GridPanel1}.store.pageSize = parseInt(this.getValue(), 10); #{GridPanel1}.store.reload();" />
                                </Listeners>
                            </ext:ComboBox>
                        </Items>
                        <Listeners>
                            <Change Handler="UpdateInfo()" />
                        </Listeners>
                    </ext:PagingToolbar>
                </BottomBar>
                <TopBar>
                    <ext:Toolbar runat="server">
                        <Items>
                            <ext:Button runat="server" Text="Print" Icon="Printer" Handler="this.up('grid').print();" />
                            <ext:Button runat="server" Text="Print current grid page" Icon="Printer" Handler="this.up('grid').print({currentPageOnly : true});" />
                            <ext:ToolbarFill />
                            <ext:ProgressBar ID="_pb" Width="200" runat="server" />
                        </Items>
                    </ext:Toolbar>
                </TopBar>
            </ext:GridPanel>
        </form>
    </body>
    </html>
  8. #8
    now i'm a little busy, but later i'll try to render the ProgressBar within panel's header and change the current page of the store by clicking on ProgressBarPager, ok?
    Last edited by RCN; Jan 12, 2015 at 5:54 PM.
  9. #9
    Thanks! It is a very good starting point.
    Don't worry. Your post gave me an idea...

    I have modified slightly original ProgressBarPager by adding storeParent and displayParent properties.

    Ext.define('Matt.Plugins.ProgressBarPager', {
    
    	requires: ['Ext.ProgressBar'],
    	/**
         * @cfg {Number} width
         * <p>The default progress bar width.  Default is 225.</p>
        */
    	width: 225,
    	/**
         * @cfg {String} defaultText
        * <p>The text to display while the store is loading.  Default is 'Loading...'</p>
         */
    	defaultText: 'Loading...',
    	/**
         * @cfg {Object} defaultAnimCfg
         * <p>A {@link Ext.fx.Anim Ext.fx.Anim} configuration object.</p>
         */
    	defaultAnimCfg: {
    		duration: 1000,
    		easing: 'bounceOut'
    	},
    
    	/**
         * Creates new ProgressBarPager.
         * @param {Object} config Configuration options
         */
    	constructor: function (config) {
    		if (config) {
    			Ext.apply(this, config);
    		}
    	},
    	//public
    	init: function (parent) {
    		var me = this,
    			displayItem,
    			storeParent = me.storeParent,
    			displayParent = me.displayParent;			
    
    			displayItem = displayParent.child("#displayItem");
    			if (displayItem) {
    				displayParent.remove(displayItem, true);
    			}
    
    			this.progressBar = Ext.create('Ext.ProgressBar', {
    				text: this.defaultText,
    				width: this.width,
    				animate: this.defaultAnimCfg,
    				style: {
    					cursor: 'pointer'
    				},
    				listeners: {
    					el: {
    						scope: this,
    						click: this.handleProgressBarClick
    					}
    				}
    			});
    
    			displayParent.displayItem = this.progressBar;
    
    			displayParent.add(displayParent.displayItem);
    
    			Ext.apply(storeParent, {
    				displayItem: displayParent.displayItem,
    				displayMsg: this.displayMsg
    			});
    			Ext.apply(storeParent, this.parentOverrides);		
    	},
    	// private
    	// This method handles the click for the progress bar
    	handleProgressBarClick: function (e) {
    		var storeParent = this.storeParent,
                displayItem = this.displayParent.displayItem,
                box = this.progressBar.getBox(),
                xy = e.getXY(),
                position = xy[0] - box.x,
                pages = Math.ceil(storeParent.store.getTotalCount() / storeParent.store.pageSize),
                newPage = Math.max(Math.ceil(position / (displayItem.width / pages)), 1);
    
    		storeParent.store.loadPage(newPage);
    	},
    
    	// private, overriddes
    	parentOverrides: {
    		// private
    		// This method updates the information via the progress bar.
    		updateInfo: function () {
    			if (this.displayItem) {
    				var count = this.store.getCount(),
                        pageData = this.getPageData(),
                        message = count === 0 ?
                        this.emptyMsg :
                        Ext.String.format(
                            this.displayMsg,
                            pageData.fromRecord, pageData.toRecord, this.store.getTotalCount()
                        ),
                        percentage = pageData.pageCount > 0 ? (pageData.currentPage / pageData.pageCount) : 0;
    
    				this.displayItem.updateProgress(percentage, message, this.animate || this.defaultAnimConfig);
    			}
    		}
    	}
    });

    You can create plugin from JS code behind like that:
    #{barBottom}.initPlugin(
    	Ext.create("Matt.Plugins.ProgressBarPager", {				
    		storeParent: #{barStore},
    		displayParent: #{barBottom},
    		width: 320,
    		displayMsg: 'Item {0} of {2}'
    	}));
    In my case PagingToolBar is on the top tool bar and ProgressBarPager is on the bottom one.

    I will edit this post with fully working example later.
    Last edited by matt; Jan 12, 2015 at 6:59 PM.
  10. #10
    A cleaner example:

    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">
        <script type="text/javascript">
            var UpdateInfo = function () {
                var store = App._str;
                var pagingToolbar = App._ptb;
                var progressBar = App._pb;
    
                var count = store.getCount();
                var pageData = pagingToolbar.getPageData();
                var message = count === 0 ? pagingToolbar.emptyMsg : Ext.String.format(pagingToolbar.displayMsg, pageData.fromRecord, pageData.toRecord, store.getTotalCount());
                var percentage = pageData.pageCount > 0 ? (pageData.currentPage / pageData.pageCount) : 0;
    
                progressBar.updateProgress(percentage, message, this.animate || this.defaultAnimConfig);
            }
        </script>
    </head>
    <body>
        <ext:ResourceManager runat="server" ScriptMode="Debug" />
        <ext:GridPanel runat="server" Title="Records" Frame="false" Width="500" Height="500">
            <Store>
                <ext:Store ID="_str" AutoLoad="true" PageSize="10" runat="server">
                    <Proxy>
                        <ext:AjaxProxy Url="~/Example/LoadFakeRecords/" StartParam="start" LimitParam="limit" PageParam="page" SortParam="sort">
                            <ActionMethods Read="POST" />
                            <Reader>
                                <ext:JsonReader RootProperty="data" />
                            </Reader>
                        </ext:AjaxProxy>
                    </Proxy>
                    <Model>
                        <ext:Model IDProperty="ID" runat="server">
                            <Fields>
                                <ext:ModelField Name="ID" Type="String" />
                                <ext:ModelField Name="Name" Type="String" />
                            </Fields>
                        </ext:Model>
                    </Model>
                </ext:Store>
            </Store>
            <ColumnModel runat="server">
                <Columns>
                    <ext:Column Text="ID" DataIndex="ID" runat="server" />
                    <ext:Column Text="Name" DataIndex="Name" runat="server" />
                </Columns>
            </ColumnModel>
            <TopBar>
                <ext:Toolbar runat="server">
                    <Items>
                        <ext:ToolbarFill />
                        <ext:ProgressBar ID="_pb" Width="200" runat="server" />
                    </Items>
                </ext:Toolbar>
            </TopBar>
            <BottomBar>
                <ext:PagingToolbar ID="_ptb" DisplayInfo="false" runat="server">
                    <Listeners>
                        <Change Handler="UpdateInfo()" />
                    </Listeners>
                </ext:PagingToolbar>
            </BottomBar>
        </ext:GridPanel>
    </body>
    </html>
    namespace SandBox.Controllers
    {
        public class ExampleController : System.Web.Mvc.Controller
        {
            public ActionResult Index()
            {
                return View();
            }
            public StoreResult LoadFakeRecords(int start, int limit, int page, string sort)
            {
                List<Person> lst = new List<Person>();
    
                for (int index = start; index < (page * limit); index++)
                {
                    lst.Add(new Person
                    {
                        ID = index,
                        Name = string.Format("Name - {0}", index)
                    });
                }
    
                return new StoreResult(lst, 100);
            }
        }
    
        [Serializable]
        public class Person
        {
            public int ID { get; set; }
    
            public string Name { get; set; }
    
        }
    }
Page 1 of 2 12 LastLast

Similar Threads

  1. [CLOSED] [#607] Bouncing ProgressBarPager plugin
    By matt in forum 2.x Legacy Premium Help
    Replies: 6
    Last Post: Dec 11, 2014, 9:30 AM
  2. Replies: 0
    Last Post: Nov 24, 2012, 10:45 PM
  3. Replies: 1
    Last Post: Mar 07, 2011, 9:39 AM
  4. [CLOSED] Pagingtoolbar text overlaps in toolbar
    By yobnet in forum 1.x Legacy Premium Help
    Replies: 1
    Last Post: Apr 12, 2010, 8:37 AM
  5. Replies: 0
    Last Post: Feb 01, 2010, 5:44 AM

Tags for this Thread

Posting Permissions