Componentes.Terceros.DevExp.../internal/x.44/1/ExpressWeb Framework/Client/JS/dataengine_1.44.js

389 lines
18 KiB
JavaScript
Raw Normal View History

/*
ExpressWeb Framework by Developer Express
ExpressWebDataSource
Copyright (c) 2000-2004 Developer Express Inc.
ALL RIGHTS RESERVED
The entire contents of this file is protected by U.S. and
International Copyright Laws. Unauthorized reproduction,
reverse-engineering, and distribution of all or any portion of
the code contained in this file is strictly prohibited and may
result in severe civil and criminal penalties and will be
prosecuted to the maximum extent possible under the law.
*/
var soNone = 0
var soAscending = 1
var soDescending = 2
var itemRemoved = 0;
var itemChanged = 1;
var itemAdded = 2;
function SortingArrayItem()
{
this.sortingIndex = -1;
this.sortingOrder = soNone;
}
function dx_DataEngine(ADataController)
{
this.DataController = ADataController;
this.groupingArray = new Array();
this.sortingArray = new Array();
this.expandingArray = new Array();
this.globalSortingArray = new Array();
this.globalRowsArray = new Array();
this.RestoreFocusing = function(oldFocusedRow) {
if(!oldFocusedRow) return;
for(var i = 0; i < this.DataController.RowCount; i ++) {
if(this.DataController.Rows[i] == oldFocusedRow) {
this.DataController.FocusedRow = i;
this.DataController.SyncronizeFocusingInfo();
return;
}
}
for(var i = 0; i < this.DataController.RowCount; i ++) {
if(this.DataController.Rows[i].recordIndex == oldFocusedRow.recordIndex) {
this.DataController.FocusedRow = i;
this.DataController.SyncronizeFocusingInfo();
return;
}
}
}
this.GetSortingItemCount = function() {
var sortingItemCount = 0;
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if (Exists(this.sortingArray[i])) {
if(this.sortingArray[i].sortingIndex != -1) sortingItemCount ++;
}
}
return sortingItemCount;
}
this.GetItemSortIndex = function(AItemIndex) {
if (Exists(this.sortingArray[AItemIndex]))
return this.sortingArray[AItemIndex].sortingIndex;
else
return -1;
}
this.GetItemSortOrder = function(AItemIndex) {
if (Exists(this.sortingArray[AItemIndex]))
return this.sortingArray[AItemIndex].sortingOrder;
else
return soNone;
}
this.GetSortingItemIndex = function(Index) {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if (Exists(this.sortingArray[i])) {
if(this.sortingArray[i].sortingIndex == Index) return i;
}
}
return -1;
}
this.ChangeSorting = function(SortingItem, SortingOrder) {
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
if(SortingOrder == soNone) {
if(this.sortingArray[SortingItem].sortingIndex != -1 && this.groupingArray[SortingItem] == -1) {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.sortingArray[i].sortingIndex > this.sortingArray[SortingItem].sortingIndex) {
this.sortingArray[i].sortingIndex --;
}
}
this.sortingArray[SortingItem].sortingIndex = -1;
this.sortingArray[SortingItem].sortingOrder = SortingOrder;
}
} else {
if(this.sortingArray[SortingItem].sortingIndex == -1)
this.sortingArray[SortingItem].sortingIndex = this.GetSortingItemCount();
this.sortingArray[SortingItem].sortingOrder = SortingOrder;
}
this.UpdateRowInfo(true);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
this.DataController.SyncronizeSortingInfo();
}
this.ClearSorting = function() {
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] == -1) {
this.sortingArray[i].sortingIndex = -1;
this.sortingArray[i].sortingOrder = soNone;
}
}
this.UpdateRowInfo(true);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
this.DataController.SyncronizeSortingInfo();
}
this.GetGroupingItemCount = function() {
var groupingItemCount = 0;
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if (Exists(this.groupingArray[i])) {
if(this.groupingArray[i] != -1) groupingItemCount ++;
}
}
return groupingItemCount;
}
this.GetItemGroupIndex = function(AItemIndex) {
if (Exists(this.groupingArray[AItemIndex]))
return this.groupingArray[AItemIndex];
else
return -1;
}
this.GetGroupingItemIndex = function(Index) {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if (Exists(this.groupingArray[i])) {
if(this.groupingArray[i] == Index) return i;
}
}
return -1;
}
this.UpdateSortingArray = function(GroupingItem, operation) {
if(operation == itemRemoved) {
this.sortingArray[GroupingItem].sortingIndex = -1;
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) this.sortingArray[i].sortingIndex = this.groupingArray[i];
}
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] == -1) {
if(this.sortingArray[i].sortingIndex != -1) this.sortingArray[i].sortingIndex --;
}
}
} else {
if(operation == itemChanged) {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) this.sortingArray[i].sortingIndex = this.groupingArray[i];
}
} else {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] == -1) {
if(this.sortingArray[i].sortingIndex != -1) this.sortingArray[i].sortingIndex ++;
}
}
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) this.sortingArray[i].sortingIndex = this.groupingArray[i];
}
}
}
}
this.ChangeGrouping = function(GroupingItem, GroupingIndex) {
if(this.GetGroupingItemCount() == this.DataController.ItemCount - 1 && GroupingIndex != -1) return;
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
if (GroupingIndex > this.GetGroupingItemCount()) GroupingIndex = this.GetGroupingItemCount();
if(GroupingIndex == -1) {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) {
if(this.groupingArray[i] > this.groupingArray[GroupingItem]) this.groupingArray[i] --;
}
}
this.groupingArray[GroupingItem] = GroupingIndex;
this.sortingArray[GroupingItem].sortingOrder = soNone;
this.UpdateSortingArray(GroupingItem, itemRemoved);
} else {
if(this.groupingArray[GroupingItem] != -1) {
if (GroupingIndex >= this.GetGroupingItemCount()) GroupingIndex = this.GetGroupingItemCount() - 1;
var oldGroupingIndex = this.groupingArray[GroupingItem];
if((oldGroupingIndex - GroupingIndex) > 0) {
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) {
if(this.groupingArray[i] < oldGroupingIndex && this.groupingArray[i] >= GroupingIndex) this.groupingArray[i] ++;
}
}
}
if((oldGroupingIndex - GroupingIndex) < 0) {
for(i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) {
if(this.groupingArray[i] > oldGroupingIndex && this.groupingArray[i] <= GroupingIndex) this.groupingArray[i] --;
}
}
}
this.groupingArray[GroupingItem] = GroupingIndex;
this.sortingArray[GroupingItem].sortingOrder = soAscending;
this.UpdateSortingArray(GroupingItem, itemChanged);
} else {
if (GroupingIndex > this.GetGroupingItemCount()) GroupingIndex = this.GetGroupingItemCount();
for(var i = 0; i < this.DataController.ItemCount; i ++) {
if(this.groupingArray[i] != -1) {
if(this.groupingArray[i] >= GroupingIndex) this.groupingArray[i] ++;
}
}
this.groupingArray[GroupingItem] = GroupingIndex;
this.sortingArray[GroupingItem].sortingOrder = soAscending;
this.UpdateSortingArray(GroupingItem, itemAdded);
}
}
this.UpdateRowInfo(true);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
this.DataController.SyncronizeGroupingInfo();
this.DataController.SyncronizeSortingInfo();
}
this.ClearGrouping = function() {
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
for(var i = 0; i < this.DataController.ItemCount; i ++) this.groupingArray[i] = -1;
this.UpdateRowInfo(true);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
this.DataController.SyncronizeGroupingInfo();
this.DataController.SyncronizeSortingInfo();
}
this.ChangeExpanding = function(rowIndex, AExpanded, ARecursive) {
if(this.DataController.Rows[rowIndex].level == this.GetGroupingItemCount()) return;
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
var globalIndex = this.DataController.Rows[rowIndex].globalIndex;
this.globalRowsArray[globalIndex].expanded = AExpanded;
if(ARecursive) {
var Level = this.globalRowsArray[globalIndex].level;
for(var i = globalIndex + 1; i < this.globalRowsArray.length; i ++) {
if(this.globalRowsArray[i].level == Level) break;
if(this.globalRowsArray[i].level < this.GetGroupingItemCount())
this.globalRowsArray[i].expanded = AExpanded;
}
}
this.UpdateRowInfo(false);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
}
this.FullExpand = function() {
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
for(var i = 0; i < this.globalRowsArray[i].length; i ++) {
if(this.globalRowsArray[i].level < this.GetGroupingItemCount())
this.globalRowsArray[i].expanded = true;
}
this.UpdateRowInfo(false);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
}
this.FullCollapse = function() {
var SavedFocusedRow = this.DataController.Rows[this.DataController.FocusedRow];
for(var i = 0; i < this.globalRowsArray[i].length; i ++) {
this.globalRowsArray[i].expanded = false;
}
this.UpdateRowInfo(false);
this.RestoreFocusing(SavedFocusedRow);
this.DataController.SyncronizeExpandingInfo();
}
this.GetDataRecordNumber = function(recordIndex) {
for(var i = 0; i < this.DataController.RecordCount; i ++) {
if(this.globalSortingArray[i] == recordIndex) return i;
}
return -1;
}
this.CompareRows = function(rowIndex1, rowIndex2) {
if (rowIndex1==rowIndex2) return 0;
var row1 = this.DataController.Values[rowIndex1];
var row2 = this.DataController.Values[rowIndex2];
for(var i = 0; i < this.GetSortingItemCount(); i ++) {
var itemIndex = this.GetSortingItemIndex(i);
var value1 = row1[itemIndex];
var value2 = row2[itemIndex];
var ret;
if(value1 == value2) continue;
if(value1 == null) ret = -1;
if(value2 == null) ret = 1;
if(value1 < value2) ret = -1;
if(value1 > value2) ret = 1;
if(this.sortingArray[itemIndex].sortingOrder == soDescending) ret *= -1;
return ret;
}
return (rowIndex1 > rowIndex2)?1:-1;
}
this.UpdateGlobalSortingArray = function() {
this.globalSortingArray = [];
if(this.DataController.RecordCount > 0) {
var tempSortingArray = [];
for(var i = 0; i < this.DataController.RecordCount; i ++) {
tempSortingArray[i] = i;
}
while (tempSortingArray.length > 0) {
var maxIndex = 0;
for(var i = 1; i < tempSortingArray.length; i ++) {
if (this.CompareRows(tempSortingArray[maxIndex], tempSortingArray[i]) == 1)
maxIndex = i;
}
this.globalSortingArray[this.globalSortingArray.length] = tempSortingArray[maxIndex];
tempSortingArray[maxIndex] = tempSortingArray[tempSortingArray.length - 1];
tempSortingArray.length--;
}
}
}
this.NeedGroupNode = function(Index, Level) {
if(Index == 0) return true;
for(var i = 0; i <= Level; i ++) {
var ItemIndex = this.GetGroupingItemIndex(i);
if(this.DataController.Values[this.globalSortingArray[Index]][ItemIndex] !=
this.DataController.Values[this.globalSortingArray[Index - 1]][ItemIndex])
return true;
}
return false;
}
this.UpdateGlobalRowsArray = function() {
var globalRowCount = 0;
this.globalRowsArray = [];
for(var i = 0; i < this.DataController.RecordCount; i ++) {
for(var j = 0; j < this.GetGroupingItemCount(); j ++) {
if(this.NeedGroupNode(i, j)) {
this.globalRowsArray[globalRowCount] = new dx_Row()
this.globalRowsArray[globalRowCount].expanded = false;
this.globalRowsArray[globalRowCount].level = j;
this.globalRowsArray[globalRowCount].recordIndex = this.globalSortingArray[i];
this.globalRowsArray[globalRowCount].globalIndex = globalRowCount;
globalRowCount ++;
}
}
this.globalRowsArray[globalRowCount] = new dx_Row()
this.globalRowsArray[globalRowCount].expanded = false;
this.globalRowsArray[globalRowCount].level = this.GetGroupingItemCount();
this.globalRowsArray[globalRowCount].recordIndex = this.globalSortingArray[i];
this.globalRowsArray[globalRowCount].globalIndex = globalRowCount;
globalRowCount ++;
}
}
this.UpdateRowInfo = function(UpdateAll) {
if(UpdateAll) {
this.UpdateGlobalSortingArray();
this.UpdateGlobalRowsArray();
}
var Level = 0, RowCount = 0;
this.DataController.Rows = [];
for(var i = 0; i < this.globalRowsArray.length; i ++) {
if(Level >= this.globalRowsArray[i].level)
{
if(this.globalRowsArray[i].expanded == false) {
Level = this.globalRowsArray[i].level;
} else {
Level = this.globalRowsArray[i].level + 1;
}
this.DataController.Rows[RowCount] = new dx_Row();
this.DataController.Rows[RowCount] = this.globalRowsArray[i];
RowCount ++;
}
}
this.DataController.RowCount = this.DataController.Rows.length;
}
this.LoadExpandingInfo = function() {
for(var i = 0; i < this.expandingArray.length; i ++) {
if(i >= this.DataController.RowCount) break;
if(this.expandingArray[i]) {
if(this.DataController.Rows[i].level == this.GetGroupingItemCount()) continue;
var globalIndex = this.DataController.Rows[i].globalIndex;
this.globalRowsArray[globalIndex].expanded = true;
this.UpdateRowInfo(false);
}
}
}
this.SaveExpandingInfo = function() {
this.expandingArray = [];
for(var i = 0; i < this.DataController.Rows.length; i ++) {
this.expandingArray[i] = this.DataController.Rows[i].expanding;
}
}
}