Commit 727bdcab authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

поправила баги, связанные c Remove и сcursor_moveLeft

реализовала cursor_MoveToStartPos и cursor_MoveToEndPos

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@52723 954022d7-b5bf-4e40-9824-e11837661b57
parent 2363d983
...@@ -7493,6 +7493,7 @@ function ParaMath() ...@@ -7493,6 +7493,7 @@ function ParaMath()
this.Jc = undefined; this.Jc = undefined;
this.Math = new CMathComposition(); this.Math = new CMathComposition();
this.Math.Parent = this;
this.Inline = false; // внутристроковая формула или нет (проверяемся внутри Internal_Recalculate_0) this.Inline = false; // внутристроковая формула или нет (проверяемся внутри Internal_Recalculate_0)
...@@ -7584,6 +7585,12 @@ ParaMath.prototype = ...@@ -7584,6 +7585,12 @@ ParaMath.prototype =
this.Math.UpdateCursor(); this.Math.UpdateCursor();
}, },
Refresh_RecalcData2: function()
{
this.Parent.RecalcInfo.Set_Type_0(pararecalc_0_All);
this.Parent.Refresh_RecalcData2();
},
Selection_SetStart : function(X, Y, PageNum) Selection_SetStart : function(X, Y, PageNum)
{ {
this.Math.Selection_SetStart( X, Y, PageNum ); this.Math.Selection_SetStart( X, Y, PageNum );
...@@ -7659,10 +7666,12 @@ ParaMath.prototype = ...@@ -7659,10 +7666,12 @@ ParaMath.prototype =
Cursor_MoveToStartPos : function() Cursor_MoveToStartPos : function()
{ {
this.Math.Cursor_MoveToStartPos();
}, },
Cursor_MoveToEndPos : function() Cursor_MoveToEndPos : function()
{ {
this.Math.Cursor_MoveToEndPos();
}, },
Copy : function() Copy : function()
......
...@@ -284,7 +284,7 @@ CMathBase.prototype = ...@@ -284,7 +284,7 @@ CMathBase.prototype =
} }
else else
{ {
this.elements[ this.CurPos_X ][ this.CurPos_Y].end(); this.elements[ this.CurPos_X ][ this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos
content = this.elements[this.CurPos_X][this.CurPos_Y].goToLastElement(); //если внутренний элемент не контент, а базовый класс, вернется последний элемент этого класса content = this.elements[this.CurPos_X][this.CurPos_Y].goToLastElement(); //если внутренний элемент не контент, а базовый класс, вернется последний элемент этого класса
} }
...@@ -319,7 +319,7 @@ CMathBase.prototype = ...@@ -319,7 +319,7 @@ CMathBase.prototype =
} }
else else
{ {
this.elements[ this.CurPos_X ][ this.CurPos_Y ].home(); this.elements[ this.CurPos_X ][ this.CurPos_Y ].cursor_MoveToStartPos(); // home => cursor_MoveToStartPos
content = this.elements[this.CurPos_X][this.CurPos_Y].goToFirstElement(); content = this.elements[this.CurPos_X][this.CurPos_Y].goToFirstElement();
} //если внутренний элемент не контент, а базовый класс, вернется первый элемент этого класса } //если внутренний элемент не контент, а базовый класс, вернется первый элемент этого класса
...@@ -359,7 +359,7 @@ CMathBase.prototype = ...@@ -359,7 +359,7 @@ CMathBase.prototype =
} }
} }
this.elements[this.CurPos_X][this.CurPos_Y].end(); this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos
return this.elements[this.CurPos_X][this.CurPos_Y].goToLastElement(); return this.elements[this.CurPos_X][this.CurPos_Y].goToLastElement();
}, },
...@@ -380,7 +380,7 @@ CMathBase.prototype = ...@@ -380,7 +380,7 @@ CMathBase.prototype =
} }
} }
this.elements[this.CurPos_X][this.CurPos_Y].home(); this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToStartPos(); // home => cursor_MoveToStartPos
return this.elements[this.CurPos_X][this.CurPos_Y].goToFirstElement(); return this.elements[this.CurPos_X][this.CurPos_Y].goToFirstElement();
}, },
...@@ -525,7 +525,7 @@ CMathBase.prototype = ...@@ -525,7 +525,7 @@ CMathBase.prototype =
{ {
this.elements[this.CurPos_X][this.CurPos_Y].drawSelect(); this.elements[this.CurPos_X][this.CurPos_Y].drawSelect();
}, },
home: function() cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos
{ {
this.CurPos_X = 0; this.CurPos_X = 0;
this.CurPos_Y = 0; this.CurPos_Y = 0;
...@@ -542,9 +542,9 @@ CMathBase.prototype = ...@@ -542,9 +542,9 @@ CMathBase.prototype =
} }
} }
this.elements[this.CurPos_X][this.CurPos_Y].home(); this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToStartPos(); // home => cursor_MoveToStartPos
}, },
end: function() cursor_MoveToEndPos: function() // end => cursor_MoveToEndPos
{ {
this.CurPos_X = this.nRow - 1; this.CurPos_X = this.nRow - 1;
this.CurPos_Y = this.nCol - 1; this.CurPos_Y = this.nCol - 1;
...@@ -561,7 +561,7 @@ CMathBase.prototype = ...@@ -561,7 +561,7 @@ CMathBase.prototype =
} }
} }
this.elements[this.CurPos_X][this.CurPos_Y].end(); this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos
}, },
mouseUp: function() mouseUp: function()
......
...@@ -3743,28 +3743,127 @@ CMathContent.prototype = ...@@ -3743,28 +3743,127 @@ CMathContent.prototype =
return res; return res;
}, },
cursor_moveLeft: function() cursor_moveLeft2: function()
{
//когда возвращаем наверх, проверяем на bRoot
},
getPos_toMoveLeft: function()
{ {
var state = true, var state = true,
SelectContent = null, CurrContent = null; SelectContent = null;
var currType = this.content[this.CurPos].value.typeObj; var start = this.RealPosSelect.start,
var bFirstRunPrp = this.CurPos == 1 && currType == MATH_RUN_PRP; end = this.RealPosSelect.end;
var posStart = start > end ? end : start; // для CurPos, стартовая и конечная позиции совпадают
var posLeft;
var currType = this.content[posStart].value.typeObj;
var bFirstRunPrp = posStart == 1 && currType == MATH_RUN_PRP;
var bComposition = this.CurPos == 0 && !this.bRoot;
if(this.IsPlaceholder()) if(this.IsPlaceholder())
{ {
var movement = this.Parent.cursor_moveLeft(); var movement = this.Parent.getPos_toMoveLeft();
CurrContent = SelectContent = movement.SelectContent; SelectContent = movement.SelectContent;
} }
else if(bFirstRunPrp) else if(bFirstRunPrp && bComposition)
{ {
if( ! this.bRoot ) var movement = this.Parent.getPos_toMoveLeft();
SelectContent = movement.SelectContent;
//state = false; // перешли вверх по иерархии
}
else if(posStart!=0 || this.selection.startPos != this.selection.endPos) // не в начале
{ {
var movement = this.Parent.cursor_moveLeft();
SelectContent = CurrContent = movement.SelectContent; if(this.selection.startPos != this.selection.endPos)
{
if( this.selection.active )
{
SelectContent = this;
var end_select = this.selection.endPos > 0 ? this.selection.endPos - 1 : 0;
this.setEnd_Selection(end_select);
}
else
{
this.CurPos = start - 1;
SelectContent = this;
}
}
//пришли из базового класса
else if( currType === MATH_COMP )
{
if( this.selection.active )
{
var end_select = this.CurPos > 0 ? this.CurPos - 1 : 0;
this.setStart_Selection(end_select);
this.setEnd_Selection(this.CurPos);
SelectContent = this;
}
else
{
this.CurPos--;
SelectContent = this;
}
}
else
{
//если нет селекта, то просто перемещаемся по контенту
var prevType = this.content[this.CurPos - 1].value.typeObj,
prev2_Type = this.CurPos > 2 ? this.content[this.CurPos - 2].value.typeObj : null;
var bDiffRPrp = prevType === MATH_RUN_PRP && prev2_Type == MATH_TEXT,
bRPrComp = currType === MATH_RUN_PRP && prevType === MATH_EMPTY && prev2_Type === MATH_COMP;
if(bDiffRPrp || bRPrComp)
this.CurPos -= 2;
else
this.CurPos--;
if( this.content[this.CurPos].value.typeObj === MATH_COMP ) // this.CurPos может измениться
{
SelectContent = this.content[this.CurPos].value.goToLastElement();
}
else
SelectContent = this;
}
this.setStart_Selection(this.CurPos);
this.selection.active = false;
} }
else else
state = false; state = false;
return {state: state, SelectContent: SelectContent, pos: pos};
},
cursor_moveLeft: function()
{
var state = true,
SelectContent = null, CurrContent = null;
var currType = this.content[this.CurPos].value.typeObj;
var bFirstRunPrp = this.CurPos == 1 && currType == MATH_RUN_PRP;
var bComposition = this.CurPos == 0;
var bPlh = this.IsPlaceholder(),
bStartPos = (bFirstRunPrp || bComposition) && !this.bRoot;
var bUpperLevel = bPlh || bStartPos;
if(bUpperLevel)
{
var movement = this.Parent.cursor_moveLeft();
CurrContent = SelectContent = movement.SelectContent;
} }
else if(this.CurPos!=0 || this.selection.startPos != this.selection.endPos) // не в начале else if(this.CurPos!=0 || this.selection.startPos != this.selection.endPos) // не в начале
{ {
...@@ -3802,7 +3901,6 @@ CMathContent.prototype = ...@@ -3802,7 +3901,6 @@ CMathContent.prototype =
this.setStart_Selection(end_select); this.setStart_Selection(end_select);
this.setEnd_Selection(this.CurPos); this.setEnd_Selection(this.CurPos);
SelectContent = this; SelectContent = this;
} }
else else
{ {
...@@ -3810,13 +3908,11 @@ CMathContent.prototype = ...@@ -3810,13 +3908,11 @@ CMathContent.prototype =
SelectContent = this; SelectContent = this;
CurrContent = this; CurrContent = this;
} }
} }
else else
{ {
//если нет селекта, то просто перемещаемся по контенту //если нет селекта, то просто перемещаемся по контенту
var prevType = this.content[this.CurPos - 1].value.typeObj, var prevType = this.content[this.CurPos - 1].value.typeObj,
prev2_Type = this.CurPos > 2 ? this.content[this.CurPos - 2].value.typeObj : null; prev2_Type = this.CurPos > 2 ? this.content[this.CurPos - 2].value.typeObj : null;
...@@ -3842,7 +3938,7 @@ CMathContent.prototype = ...@@ -3842,7 +3938,7 @@ CMathContent.prototype =
} }
else else
state = false; state = false; // bRoot, в начале
/*else /*else
{ {
...@@ -4097,8 +4193,10 @@ CMathContent.prototype = ...@@ -4097,8 +4193,10 @@ CMathContent.prototype =
return {state: state, SelectContent: SelectContent }; //для CMathContent state всегда true return {state: state, SelectContent: SelectContent }; //для CMathContent state всегда true
}, },
home: function() cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos
{ {
console.log("cursor_MoveToStartPos");
if( !this.IsEmpty() ) if( !this.IsEmpty() )
{ {
if(!this.IsPlaceholder()) if(!this.IsPlaceholder())
...@@ -4108,14 +4206,20 @@ CMathContent.prototype = ...@@ -4108,14 +4206,20 @@ CMathContent.prototype =
else // первым идет мат объект else // первым идет мат объект
this.CurPos = 1; this.CurPos = 1;
} }
else
this.CurPos = 0;
} }
}, },
end: function() cursor_MoveToEndPos: function() // end => cursor_MoveToEndPos
{ {
console.log("cursor_MoveToStartPos");
if( !this.IsEmpty() ) if( !this.IsEmpty() )
{ {
if(!this.IsPlaceholder()) if(!this.IsPlaceholder())
this.CurPos = this.content.length - 1; this.CurPos = this.content.length - 1;
else
this.CurPos = 0;
} }
}, },
////////////////////////////////////// //////////////////////////////////////
...@@ -4441,9 +4545,22 @@ CMathContent.prototype = ...@@ -4441,9 +4545,22 @@ CMathContent.prototype =
var CurrContent = SelectContent = null, var CurrContent = SelectContent = null,
items = null; items = null;
if( this.IsPlaceholder() )
var currType = this.content[this.CurPos].value.typeObj;
var bFirstRunPrp = this.CurPos == 1 && currType == MATH_RUN_PRP;
var bComposition = this.CurPos == 0;
var bPlh = this.IsPlaceholder(),
bStartPos = (bFirstRunPrp || bComposition) && order == 1;
var bSelect = this.selectUse();
var bLastPos = order == -1 && this.CurPos == this.content.length - 1;
var bUpperLevel = (bPlh || bStartPos || bLastPos) && !bSelect ; // на плейсхолдер это не распространяется
// т.к. даже когда в нем находимся, у него selection.startPos и selection.endPos совпадают
if(bUpperLevel)
{ {
if ( !this.bRoot ) if(!this.bRoot)
{ {
var result = this.Parent.remove(-2); var result = this.Parent.remove(-2);
SelectContent = result.SelectContent; SelectContent = result.SelectContent;
...@@ -4451,35 +4568,16 @@ CMathContent.prototype = ...@@ -4451,35 +4568,16 @@ CMathContent.prototype =
} }
else else
{ {
//в основном контенте и элемент target if(bStartPos)
//переделать : вставлять объект типа placeholder
this.content.length = 0;
state.bDelete = true;
SelectContent = this;
CurrContent = this;
}
}
else
{
var bFirst = order == 1 && this.CurPos == 0,
bLast = order == -1 && this.CurPos == this.content.length - 1;
if(bFirst)
state.bBegin = true; state.bBegin = true;
else if(bLast) else if(bLastPos)
state.bEnd = true; state.bEnd = true;
else // на всякий случай, для плейсхолдера в Root
if(bFirst || bLast)
{
if( ! this.bRoot )
{ {
var result = this.Parent.remove(-2); this.content.length = 0;
SelectContent = result.SelectContent; state.bDelete = true;
CurrContent = this;
} }
else
{
CurrContent = SelectContent = this; CurrContent = SelectContent = this;
} }
} }
...@@ -4493,9 +4591,6 @@ CMathContent.prototype = ...@@ -4493,9 +4591,6 @@ CMathContent.prototype =
} }
else if(order == -2) else if(order == -2)
{ {
/*this.setStart_Selection(this.CurPos + 1);
this.setEnd_Selection(this.CurPos - 1);
this.selection.active = false;*/
this.removeFormula(this.CurPos); this.removeFormula(this.CurPos);
...@@ -4503,7 +4598,6 @@ CMathContent.prototype = ...@@ -4503,7 +4598,6 @@ CMathContent.prototype =
CurrContent = null; // т.к. пришли из другого контента CurrContent = null; // т.к. пришли из другого контента
} }
}
return {CurrContent : CurrContent, SelectContent: SelectContent, state: state, items: items}; return {CurrContent : CurrContent, SelectContent: SelectContent, state: state, items: items};
}, },
...@@ -5121,6 +5215,12 @@ CMathContent.prototype = ...@@ -5121,6 +5215,12 @@ CMathContent.prototype =
end = tmp; end = tmp;
} }
if(this.IsPlaceholder())
{
start = 1;
end = 2;
}
//var heightSelect = this.size.ascent + this.size.descent; //var heightSelect = this.size.ascent + this.size.descent;
var heightSelect = this.size.height; var heightSelect = this.size.height;
var widthSelect = 0; var widthSelect = 0;
...@@ -5682,10 +5782,16 @@ CMathContent.prototype = ...@@ -5682,10 +5782,16 @@ CMathContent.prototype =
}, },
Refresh_RecalcData: function() Refresh_RecalcData: function()
{ {
this.Composition.Refresh_RecalcData2(); // Refresh_RecalcData сообщает родительскому классу, что у него произошли изменения, нужно пересчитать
// Refresh_RecalcData2 у родительского класса сообщает, что у внутреннего класса произошли изменения, нужен пересчет
// временно // временно
//this.RecalculateReverse(); //this.RecalculateReverse();
//this.Root.Resize(); //this.Root.Resize();
}, },
/*Refresh_RecalcData2: function()
{
this.Composition.Refresh_RecalcData2();
},*/
_Check_HistoryUninon: function(Data1, Data2) _Check_HistoryUninon: function(Data1, Data2)
{ {
var Type1 = Data1.Type; var Type1 = Data1.Type;
...@@ -5760,7 +5866,6 @@ CMathContent.prototype = ...@@ -5760,7 +5866,6 @@ CMathContent.prototype =
var state = true; // вышли / не вышли за переделы контента var state = true; // вышли / не вышли за переделы контента
var SelectContent = null; var SelectContent = null;
if(this.IsPlaceholder()) if(this.IsPlaceholder())
{ {
SelectContent = this; SelectContent = this;
...@@ -5847,14 +5952,14 @@ CMathContent.prototype = ...@@ -5847,14 +5952,14 @@ CMathContent.prototype =
{ {
if(bStart) if(bStart)
{ {
this.RealPosSelect.start = 0; /// в итоге, селект начнется с позиции 1 this.RealPosSelect.start = 1; /// в итоге, селект начнется с позиции 1
this.RealPosSelect.end = 0; this.RealPosSelect.end = 1;
this.CurPos = 1; this.CurPos = 1;
} }
else else
{ {
this.RealPosSelect.end = 0; this.RealPosSelect.end = 1;
this.setEndPos_Selection(0); this.setEndPos_Selection(1);
} }
}, },
...@@ -5911,7 +6016,6 @@ function CMathComposition() ...@@ -5911,7 +6016,6 @@ function CMathComposition()
this.CurrentContent = null; this.CurrentContent = null;
this.SelectContent = null; this.SelectContent = null;
this.NeedRecalculate = true;
this.DefaultTxtPrp = this.DefaultTxtPrp =
{ {
...@@ -5924,6 +6028,8 @@ function CMathComposition() ...@@ -5924,6 +6028,8 @@ function CMathComposition()
}; };
this.Init(); this.Init();
this.Parent = undefined;
} }
CMathComposition.prototype = CMathComposition.prototype =
{ {
...@@ -6042,7 +6148,7 @@ CMathComposition.prototype = ...@@ -6042,7 +6148,7 @@ CMathComposition.prototype =
//this.CheckTarget(); //this.CheckTarget();
} }
console.log("Cursor_MoveLeft: " + move.state); //console.log("Cursor_MoveLeft: " + move.state);
return move.state; return move.state;
}, },
...@@ -6090,6 +6196,16 @@ CMathComposition.prototype = ...@@ -6090,6 +6196,16 @@ CMathComposition.prototype =
return move.state; return move.state;
}, },
Cursor_MoveToStartPos: function()
{
this.Root.cursor_MoveToStartPos();
this.CurrentContent = this.SelectContent = this.Root;
},
Cursor_MoveToEndPos: function()
{
this.Root.cursor_MoveToEndPos();
this.CurrentContent = this.SelectContent = this.Root;
},
MouseDown: function(mouseX, mouseY) MouseDown: function(mouseX, mouseY)
{ {
this.ClearSelect(); this.ClearSelect();
...@@ -6133,14 +6249,31 @@ CMathComposition.prototype = ...@@ -6133,14 +6249,31 @@ CMathComposition.prototype =
}, },
Remove: function(order) Remove: function(order)
{ {
//this.ClearSelect(); ////* History */////
History.Create_NewPoint();
var start = this.SelectContent.selection.startPos,
end = this.SelectContent.selection.endPos;
var Pos;
if(start !== end)
Pos = start < end ? start: end;
else if(order == 1)
Pos = this.SelectContent.CurPos;
else
Pos = this.SelectContent.CurPos + 1;
///////////////////////////
var result = this.SelectContent.remove(order); var result = this.SelectContent.remove(order);
this.NeedRecalculate = result.state.bDelete;
var bRoot = this.SelectContent.bRoot === true, var bRoot = this.SelectContent.bRoot === true,
bToUpper = result.state.bBegin || result.state.bEnd; // наверх нужно ли прокидовать bToUpper = result.state.bBegin || result.state.bEnd; // наверх нужно ли прокидовать
if( result.state.bDelete )
History.Add(this.CurrentContent, {Type: historyitem_Math_RemoveItem, Items: result.items, Pos: Pos});
this.CurrentContent = result.CurrContent; this.CurrentContent = result.CurrContent;
this.SelectContent = result.SelectContent; this.SelectContent = result.SelectContent;
this.CurrentContent.setPlaceholderAfterRemove(); // чтобы не выставлялся тагет при вставке, когда заселекчен весь контент и мы добавляем, например, другой мат элемент this.CurrentContent.setPlaceholderAfterRemove(); // чтобы не выставлялся тагет при вставке, когда заселекчен весь контент и мы добавляем, например, другой мат элемент
...@@ -6463,7 +6596,10 @@ CMathComposition.prototype = ...@@ -6463,7 +6596,10 @@ CMathComposition.prototype =
//this.SelectContent.drawSelect(); //this.SelectContent.drawSelect();
this.CheckTarget(); this.CheckTarget();
}, },
Refresh_RecalcData2: function()
{
this.Parent.Refresh_RecalcData2();
},
//test //test
// из MathControl // из MathControl
IsRect: function(x, y) IsRect: function(x, y)
...@@ -6628,11 +6764,8 @@ CMathComposition.prototype = ...@@ -6628,11 +6764,8 @@ CMathComposition.prototype =
/////////////////////// ///////////////////////
if(this.NeedRecalculate)
this.Root.Resize(oMeasure); // пересчитываем всю формулу this.Root.Resize(oMeasure); // пересчитываем всю формулу
this.NeedRecalculate = true;
var width = this.Root.size.width, var width = this.Root.size.width,
height = this.Root.size.height; height = this.Root.size.height;
......
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