Commit 07f71564 authored by GoshaZotov's avatar GoshaZotov Committed by Alexander.Trofimov

functions for color sort

parent e76d4e7a
......@@ -1721,7 +1721,8 @@ var g_oUndoRedoData_AutoFilterProperties = {
ShowLastColumn : 13,
ShowRowStripes : 14,
HeaderRowCount : 15,
TotalsRowCount : 16
TotalsRowCount : 16,
color : 17
};
function UndoRedoData_AutoFilter() {
this.Properties = g_oUndoRedoData_AutoFilterProperties;
......@@ -1747,6 +1748,7 @@ function UndoRedoData_AutoFilter() {
this.HeaderRowCount = null;
this.TotalsRowCount = null;
this.color = null;
}
UndoRedoData_AutoFilter.prototype = {
getType : function ()
......@@ -1778,6 +1780,7 @@ UndoRedoData_AutoFilter.prototype = {
case this.Properties.ShowRowStripes: return this.ShowRowStripes; break;
case this.Properties.HeaderRowCount: return this.HeaderRowCount; break;
case this.Properties.TotalsRowCount: return this.TotalsRowCount; break;
case this.Properties.color: return this.color; break;
}
return null;
......@@ -1803,6 +1806,7 @@ UndoRedoData_AutoFilter.prototype = {
case this.Properties.ShowRowStripes: this.ShowRowStripes = value;break;
case this.Properties.HeaderRowCount: this.HeaderRowCount = value;break;
case this.Properties.TotalsRowCount: this.TotalsRowCount = value;break;
case this.Properties.color: this.color = value;break;
}
return null;
},
......
......@@ -8563,7 +8563,7 @@ Range.prototype.cleanHyperlinks=function(){
this.removeHyperlink(aHyperlinks.inner[i].data);
History.EndTransaction();
};
Range.prototype.sort=function(nOption, nStartCol, color){
Range.prototype.sort=function(nOption, nStartCol, sortColor){
//todo горизонтальная сортировка
var aMerged = this.worksheet.mergeManager.get(this.bbox);
if(aMerged.outer.length > 0 || (aMerged.inner.length > 0 && null == _isSameSizeMerged(this.bbox, aMerged.inner)))
......@@ -8577,8 +8577,8 @@ Range.prototype.sort=function(nOption, nStartCol, color){
nStartCol = merged.bbox.c1;
}
this.worksheet.workbook.lockDraw();
var colorFill = nOption === Asc.c_oAscSortOptions.ByColorFill ? color : null;
var colorText = nOption === Asc.c_oAscSortOptions.ByColorFont ? color : null;
var colorFill = nOption === Asc.c_oAscSortOptions.ByColorFill;
var colorText = nOption === Asc.c_oAscSortOptions.ByColorFont;
var isSortColor = !!(colorFill || colorText);
var oRes = null;
......@@ -8629,14 +8629,19 @@ Range.prototype.sort=function(nOption, nStartCol, color){
if(colorFill)
{
var styleCell = oCell.getStyle();
colorFillCell = styleCell !== null ? styleCell.fill : null;
colorFillCell = styleCell !== null && styleCell.fill ? styleCell.fill.bg : null;
}
else if(colorText)
{
var value2 = oCell.getValue2();
for(var n = 0; n < value2.length; n++)
{
colorsTextCell.push(value2[n].c);
if(null === colorsTextCell)
{
colorsTextCell = [];
}
colorsTextCell.push(value2[n].format.c);
}
}
......@@ -8689,15 +8694,16 @@ Range.prototype.sort=function(nOption, nStartCol, color){
var colorFillCmp = function(color1, color2)
{
var res = false;
//TODO возможно так сравнивать не правильно, позже пересмотреть
if(colorFill)
{
res = color1 !== null && color2 !== null && color1.isEqual(color2) === true ? true : false;
res = (color1 !== null && color2 !== null && color1.rgb === color2.rgb) || (color1 === color2) ? true : false;
}
else if(colorText && color1 && color1.length)
{
for(var n = 0; n < color1.length; n++)
{
if(color1[n] && color1[n].isEqual(color2))
if(color1[n] && color2 !== null && color1[n].rgb === color2.rgb)
{
res = true;
break;
......@@ -8712,11 +8718,10 @@ Range.prototype.sort=function(nOption, nStartCol, color){
{
var newArrayNeedColor = [];
var newArrayAnotherColor = [];
var sortColor = colorText ? colorText : colorFill;
for(var i = 0; i < aSortElems.length; i++)
{
var color = colorFill ? aSortElems[i].colorFill : aSortElems[i].colorText;
var color = colorFill ? aSortElems[i].colorFill : aSortElems[i].colorsText;
if(colorFillCmp(color, sortColor))
{
newArrayNeedColor.push(aSortElems[i]);
......@@ -8727,7 +8732,7 @@ Range.prototype.sort=function(nOption, nStartCol, color){
}
}
aSortElems = newArrayAnotherColor.concat(newArrayNeedColor);
aSortElems = newArrayNeedColor.concat(newArrayAnotherColor);
}
else
{
......
......@@ -719,7 +719,7 @@
this.changeTableStyleInfo(data.styleName, data.activeCells);
break;
case AscCH.historyitem_AutoFilter_Sort:
this.sortColFilter(data.type, data.cellId, data.activeCells);
this.sortColFilter(data.type, data.cellId, data.activeCells, null, null, data.color);
break;
case AscCH.historyitem_AutoFilter_Empty:
this.isEmptyAutoFilters(data.activeCells);
......@@ -1498,9 +1498,8 @@
History.EndTransaction();
},
sortColFilter: function(type, cellId, activeRange, sortProps, displayName) {
sortColFilter: function(type, cellId, activeRange, sortProps, displayName, color) {
var curFilter, sortRange, filterRef, startCol, maxFilterRow;
var resType = type == 'ascending';
var t = this;
if(!sortProps)
......@@ -1508,7 +1507,7 @@
curFilter = sortProps.curFilter, sortRange = sortProps.sortRange, filterRef = sortProps.filterRef, startCol = sortProps.startCol, maxFilterRow = sortProps.maxFilterRow;
var onSortAutoFilterCallback = function(success)
var onSortAutoFilterCallback = function(type)
{
History.Create_NewPoint();
History.StartTransaction();
......@@ -1523,13 +1522,12 @@
curFilter.SortState.SortConditions = [];
curFilter.SortState.SortConditions[0] = new AscCommonExcel.SortCondition();
}
if(!curFilter.SortState.SortConditions[0])
curFilter.SortState.SortConditions[0] = new AscCommonExcel.SortCondition();
var cellIdRange = new Asc.Range(startCol, filterRef.r1, startCol, filterRef.r1);
curFilter.SortState.SortConditions[0].Ref = new Asc.Range(startCol, filterRef.r1, startCol, filterRef.r2);
curFilter.SortState.SortConditions[0].ConditionDescending = resType;
curFilter.SortState.SortConditions[0].ConditionDescending = type;
if(curFilter.TableStyleInfo)
{
......@@ -1540,7 +1538,67 @@
History.EndTransaction();
};
onSortAutoFilterCallback();
var onSortColorAutoFilterCallback = function(type)
{
History.Create_NewPoint();
History.StartTransaction();
var oldFilter = curFilter.clone(null);
//изменяем содержимое фильтра
if(!curFilter.SortState)
{
curFilter.SortState = new SortState();
curFilter.SortState.Ref = new Asc.Range(startCol, curFilter.Ref.r1, startCol, maxFilterRow);
curFilter.SortState.SortConditions = [];
curFilter.SortState.SortConditions[0] = new SortCondition();
}
curFilter.SortState.SortConditions[0] = new SortCondition();
var cellIdRange = new Asc.Range(startCol, filterRef.r1, startCol, filterRef.r1);
curFilter.SortState.SortConditions[0].Ref = new Asc.Range(startCol, filterRef.r1, startCol, filterRef.r2);
curFilter.SortState.SortConditions[0].dxf = new CellXfs();
if(type === Asc.c_oAscSortOptions.ByColorFill)
{
curFilter.SortState.SortConditions[0].dxf.fill = new Fill();
curFilter.SortState.SortConditions[0].dxf.fill.bg = color;
curFilter.SortState.SortConditions[0].ConditionSortBy = Asc.ESortBy.sortbyCellColor;
}
else
{
curFilter.SortState.SortConditions[0].dxf.font = new Font();
curFilter.SortState.SortConditions[0].dxf.font.c = color;
curFilter.SortState.SortConditions[0].ConditionSortBy = Asc.ESortBy.sortbyFontColor;
}
if(curFilter.TableStyleInfo)
{
t._setColorStyleTable(curFilter.Ref, curFilter);
}
t._addHistoryObj({oldFilter: oldFilter}, AscCH.historyitem_AutoFilter_Sort,
{activeCells: cellIdRange, type: type, cellId: cellId, color: color}, null, curFilter.Ref);
History.EndTransaction();
};
switch(type)
{
case Asc.c_oAscSortOptions.Ascending:
case Asc.c_oAscSortOptions.Descending:
{
onSortAutoFilterCallback(type === Asc.c_oAscSortOptions.Ascending);
break;
}
case Asc.c_oAscSortOptions.ByColorFill:
case Asc.c_oAscSortOptions.ByColorFont:
{
onSortColorAutoFilterCallback(type);
break;
}
}
},
getPropForSort: function(cellId, activeRange, displayName)
......@@ -2498,6 +2556,7 @@
oHistoryObject.bWithoutFilter = bWithoutFilter ? bWithoutFilter : false;
oHistoryObject.displayName = redoObject.displayName;
oHistoryObject.val = redoObject.val;
oHistoryObject.color = redoObject.color;
if(redoObject.pasteStyleObj)
{
......
......@@ -12023,9 +12023,11 @@
History.Create_NewPoint();
History.StartTransaction();
var sort = sortProps.sortRange.sort(type, sortProps.startCol, color);
var rgbColor = color ? new RgbColor((color.asc_getR() << 16) + (color.asc_getG() << 8) + color.asc_getB()) : null;
var sort = sortProps.sortRange.sort(type, sortProps.startCol, rgbColor);
t.cellCommentator.sortComments(sort);
t.model.autoFilters.sortColFilter( type, cellId, ar, sortProps, displayName );
t.model.autoFilters.sortColFilter( type, cellId, ar, sortProps, displayName, rgbColor );
t._onUpdateFormatTable(sortProps.sortRange.bbox, false);
History.EndTransaction();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment