app/assets/javascripts/ext_extensions/TreeGrid/src/PagingToolbar.js
/**
* Paging toolbar for work this AbstractTreeStore.
*/
Ext.ux.maximgb.tg.PagingToolbar = Ext.extend(Ext.PagingToolbar,
{
onRender : function(ct, position)
{
Ext.ux.maximgb.tg.PagingToolbar.superclass.onRender.call(this, ct, position);
this.updateUI();
},
getPageData : function()
{
var total = 0, cursor = 0;
if (this.store) {
cursor = this.store.getActiveNodePageOffset();
total = this.store.getActiveNodeTotalCount();
}
return {
total : total,
activePage : Math.ceil((cursor + this.pageSize) / this.pageSize),
pages : total < this.pageSize ? 1 : Math.ceil(total / this.pageSize)
};
},
updateInfo : function()
{
var count = 0, cursor = 0, total = 0, msg;
if (this.displayItem) {
if (this.store) {
cursor = this.store.getActiveNodePageOffset();
count = this.store.getActiveNodeCount();
total = this.store.getActiveNodeTotalCount();
}
msg = count == 0 ?
this.emptyMsg
:
String.format(
this.displayMsg,
cursor + 1, cursor + count, total
);
this.displayItem.setText(msg);
}
},
updateUI : function()
{
var d = this.getPageData(), ap = d.activePage, ps = d.pages;
this.afterTextItem.setText(String.format(this.afterPageText, d.pages));
this.inputItem.setValue(ap);
this.first.setDisabled(ap == 1);
this.prev.setDisabled(ap == 1);
this.next.setDisabled(ap == ps);
this.last.setDisabled(ap == ps);
this.refresh.enable();
this.updateInfo();
},
bindStore : function(store, initial)
{
if (!initial && this.store) {
this.store.un('activenodechange', this.onStoreActiveNodeChange, this);
}
if (store) {
store.on('activenodechange', this.onStoreActiveNodeChange, this);
}
Ext.ux.maximgb.tg.PagingToolbar.superclass.bindStore.call(this, store, initial);
},
beforeLoad : function(store, options)
{
var paramNames = this.getParams();
Ext.ux.maximgb.tg.PagingToolbar.superclass.beforeLoad.call(this, store, options);
if (options && options.params) {
if(options.params[paramNames.start] === undefined) {
options.params[paramNames.start] = 0;
}
if(options.params[paramNames.limit] === undefined) {
options.params[paramNames.limit] = this.pageSize;
}
}
},
/**
* Move to the first page, has the same effect as clicking the 'first' button.
*/
moveFirst : function()
{
this.doLoad(0);
},
/**
* Move to the previous page, has the same effect as clicking the 'previous' button.
*/
movePrevious : function()
{
var store = this.store,
cursor = store ? store.getActiveNodePageOffset() : 0;
this.doLoad(Math.max(0, cursor - this.pageSize));
},
/**
* Move to the next page, has the same effect as clicking the 'next' button.
*/
moveNext : function()
{
var store = this.store,
cursor = store ? store.getActiveNodePageOffset() : 0;
this.doLoad(cursor + this.pageSize);
},
/**
* Move to the last page, has the same effect as clicking the 'last' button.
*/
moveLast : function()
{
var store = this.store,
cursor = store ? store.getActiveNodePageOffset() : 0,
total = store ? store.getActiveNodeTotalCount() : 0,
extra = total % this.pageSize;
this.doLoad(extra ? (total - extra) : total - this.pageSize);
},
onStoreActiveNodeChange : function(store, old_rec, new_rec)
{
if (this.rendered) {
this.updateUI();
}
}
});