Commit 64da77d5 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

1. поправила баг: не выставлялась логическая позиция курсора в CMathBase на selection_End

2. Переписала перемещение по стрелкам(влево/вправо) с учетом RunPrp

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@52935 954022d7-b5bf-4e40-9824-e11837661b57
parent 6f60fee1
...@@ -252,7 +252,7 @@ CMathBase.prototype = ...@@ -252,7 +252,7 @@ CMathBase.prototype =
{ {
this.Parent = parent; this.Parent = parent;
}, },
cursor_moveLeft: function() old_cursor_moveLeft: function()
{ {
var bUpperLevel = false; var bUpperLevel = false;
//var oldPos = {x: this.CurPos_X, y: this.CurPos_Y}; //старая позиция нужна когда только в случае если находимся в базовом контенте, а здесь нет, т.к. всегда есть родитель //var oldPos = {x: this.CurPos_X, y: this.CurPos_Y}; //старая позиция нужна когда только в случае если находимся в базовом контенте, а здесь нет, т.к. всегда есть родитель
...@@ -290,7 +290,7 @@ CMathBase.prototype = ...@@ -290,7 +290,7 @@ CMathBase.prototype =
return { SelectContent: content }; return { SelectContent: content };
}, },
cursor_moveRight: function() old_cursor_moveRight: function()
{ {
var bUpperLevel = false; var bUpperLevel = false;
...@@ -359,7 +359,7 @@ CMathBase.prototype = ...@@ -359,7 +359,7 @@ CMathBase.prototype =
} }
} }
this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos //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].cursor_MoveToStartPos(); // home => cursor_MoveToStartPos //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();
}, },
...@@ -521,7 +521,7 @@ CMathBase.prototype = ...@@ -521,7 +521,7 @@ CMathBase.prototype =
return content; return content;
}, },
cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos /*cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos
{ {
this.CurPos_X = 0; this.CurPos_X = 0;
this.CurPos_Y = 0; this.CurPos_Y = 0;
...@@ -559,7 +559,7 @@ CMathBase.prototype = ...@@ -559,7 +559,7 @@ CMathBase.prototype =
this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos
}, },*/
mouseUp: function() mouseUp: function()
{ {
this.elements[this.CurPos_X][this.CurPos_Y].mouseUp(); this.elements[this.CurPos_X][this.CurPos_Y].mouseUp();
...@@ -1007,6 +1007,8 @@ CMathBase.prototype = ...@@ -1007,6 +1007,8 @@ CMathBase.prototype =
if(startX == endX && startY == endY && bInside === -1) if(startX == endX && startY == endY && bInside === -1)
{ {
this.CurPos_X = startX;
this.CurPos_Y = startY;
var movement = this.elements[endX][endY].selection_End(X, Y); var movement = this.elements[endX][endY].selection_End(X, Y);
SelectContent = movement.SelectContent; SelectContent = movement.SelectContent;
state = true; state = true;
...@@ -1015,5 +1017,73 @@ CMathBase.prototype = ...@@ -1015,5 +1017,73 @@ CMathBase.prototype =
state = false; state = false;
return {state: state, SelectContent: SelectContent}; return {state: state, SelectContent: SelectContent};
},
goToLeft: function()
{
var bUpperLevel = false;
do{
if( this.CurPos_Y > 0 )
{
this.CurPos_Y--;
}
else if(this.CurPos_X > 0)
{
this.CurPos_X--;
this.CurPos_Y = this.nCol - 1;
}
else
{
bUpperLevel = true;
break;
}
} while( this.elements[this.CurPos_X][this.CurPos_Y].IsJustDraw() )
//из цикла вышли если bJustDraw = false or bUpperLevel = true
var SelectContent;
if(bUpperLevel)
{
SelectContent = this.Parent.goToLeft();
}
else
{
SelectContent = this.elements[this.CurPos_X][this.CurPos_Y].goToLastElement(); //если внутренний элемент не контент, а базовый класс, вернется последний элемент этого класса
}
return SelectContent;
},
goToRight: function()
{
var bUpperLevel = false;
do{
if( this.CurPos_Y < this.nCol - 1 )
{
this.CurPos_Y++;
}
else if(this.CurPos_X < this.nRow - 1)
{
this.CurPos_X++;
this.CurPos_Y = 0;
}
else
{
bUpperLevel = true;
break;
}
} while( this.elements[this.CurPos_X][this.CurPos_Y].IsJustDraw() )
var SelectContent;
if( bUpperLevel )
{
SelectContent = this.Parent.goToRight();
}
else
{
SelectContent = this.elements[this.CurPos_X][this.CurPos_Y].goToFirstElement();
}
return SelectContent;
} }
} }
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
// При удаление из начала контента элемента, у всех остальных автоматом 11 размер шрифта // При удаление из начала контента элемента, у всех остальных автоматом 11 размер шрифта
/// TODO /// TODO
// 1. после того, как будет реализован селект с учетом RunPrp, убрать проверки из remove на RunPrp (!)
// 1. properties для записи в файл // 1. properties для записи в файл
// 2. плейсхолдер на чтение // 2. плейсхолдер на чтение
// 3. убрать slashWidth // 3. убрать slashWidth
...@@ -26,6 +28,7 @@ ...@@ -26,6 +28,7 @@
/// TODO /// TODO
// !!! Проверить типы для groupCharacter, delimiters и accent // !!! Проверить типы для groupCharacter, delimiters и accent
// 1. Посмотреть стрелки и прочее для delimiters (которые используются для accent), при необходимости привести к одному типу // 1. Посмотреть стрелки и прочее для delimiters (которые используются для accent), при необходимости привести к одному типу
// 2. Убрать ненужные(!!) setTxtPrp и getTxtPrp // 2. Убрать ненужные(!!) setTxtPrp и getTxtPrp
...@@ -3640,7 +3643,7 @@ CMathContent.prototype = ...@@ -3640,7 +3643,7 @@ CMathContent.prototype =
}, },
///////// перемещение ////////// ///////// перемещение //////////
old_cursor_moveRight: function() old_old_cursor_moveRight: function()
{ {
var state = true, var state = true,
SelectContent = null, CurrContent = null; SelectContent = null, CurrContent = null;
...@@ -3716,7 +3719,7 @@ CMathContent.prototype = ...@@ -3716,7 +3719,7 @@ CMathContent.prototype =
return {state: state, SelectContent: SelectContent, CurrContent: CurrContent }; return {state: state, SelectContent: SelectContent, CurrContent: CurrContent };
}, },
cursor_moveRight: function() old_cursor_moveRight: function()
{ {
var state = true, var state = true,
SelectContent = null, CurrContent = null; SelectContent = null, CurrContent = null;
...@@ -3821,13 +3824,111 @@ CMathContent.prototype = ...@@ -3821,13 +3824,111 @@ CMathContent.prototype =
return res; return res;
}, },
cursor_moveLeft2: function() cursor_moveLeft: function(bShiftKey, bCtrlKey)
{ {
//когда возвращаем наверх, проверяем на bRoot var state = true,
SelectContent = null;
if(bShiftKey)
{
}
else
{
var pos;
if(!this.selectUse())
pos = this.changeSelectPosition(this.CurPos, -1);
else
{
var start = this.RealSelect.startPos,
end = this.RealSelect.endPos;
pos = start < end ? start : end;
}
if(pos !== -1)
{
this.CurPos = pos;
if(this.content[pos].value.typeObj == MATH_COMP)
SelectContent = this.content[pos].value.goToLastElement();
else
SelectContent = this;
}
else
{
if(!this.bRoot)
{
SelectContent = this.Parent.goToLeft();
}
else
state = false;
}
}
return {state: state, SelectContent: SelectContent};
},
goToLeft: function()
{
var SelectContent = this;
this.CurPos--; // в принципе, вызов changeSelectPosition(...) приведет к этому действию
return SelectContent;
},
cursor_moveRight: function(bShiftKey, bCtrlKey)
{
var state = true,
SelectContent = null;
if(bShiftKey)
{
}
else
{
var pos;
if(!this.selectUse())
pos = this.changeSelectPosition(this.CurPos, 1);
else
{
var start = this.RealSelect.startPos,
end = this.RealSelect.endPos;
pos = start > end ? start : end;
}
if(pos !== -1)
{
this.CurPos = pos;
if(this.content[pos].value.typeObj == MATH_COMP)
SelectContent = this.content[pos].value.goToFirstElement();
else
SelectContent = this;
}
else
{
if(!this.bRoot)
{
SelectContent = this.Parent.goToRight();
}
else
state = false;
}
}
return {state: state, SelectContent: SelectContent};
},
goToRight: function()
{
var SelectContent = this;
this.CurPos = this.changeSelectPosition(this.CurPos, 1);
return SelectContent;
}, },
getPos_toMoveLeft: function() getPos_toMoveLeft: function()
{ {
...@@ -3856,7 +3957,6 @@ CMathContent.prototype = ...@@ -3856,7 +3957,6 @@ CMathContent.prototype =
} }
else if(!bStartRoot || this.selectUse()) // не в начале else if(!bStartRoot || this.selectUse()) // не в начале
{ {
if(this.selectUse()) if(this.selectUse())
{ {
var start = this.RealSelect.start, var start = this.RealSelect.start,
...@@ -3945,7 +4045,7 @@ CMathContent.prototype = ...@@ -3945,7 +4045,7 @@ CMathContent.prototype =
return {state: state, SelectContent: SelectContent, pos: pos}; return {state: state, SelectContent: SelectContent, pos: pos};
}, },
cursor_moveLeft: function() old_cursor_moveLeft: function()
{ {
var state = true, var state = true,
SelectContent = null, CurrContent = null; SelectContent = null, CurrContent = null;
...@@ -4056,10 +4156,12 @@ CMathContent.prototype = ...@@ -4056,10 +4156,12 @@ CMathContent.prototype =
}, },
goToLastElement: function() goToLastElement: function()
{ {
this.cursor_MoveToEndPos();
return this; return this;
}, },
goToFirstElement: function() goToFirstElement: function()
{ {
this.cursor_MoveToStartPos();
return this; return this;
}, },
goToLowerLevel: function( coord ) goToLowerLevel: function( coord )
...@@ -4295,8 +4397,56 @@ CMathContent.prototype = ...@@ -4295,8 +4397,56 @@ CMathContent.prototype =
return {state: state, SelectContent: SelectContent }; //для CMathContent state всегда true return {state: state, SelectContent: SelectContent }; //для CMathContent state всегда true
}, },
changeSelectPosition: function(pos, order)
{
var posChange = -1;
var currType = this.content[pos].value.typeObj,
prevType = pos - 1 > 0 ? this.content[pos-1].value.typeObj : null,
prev2_Type = pos - 2 > 0 ? this.content[pos-2].value.typeObj : null,
nextType = pos + 1 < this.content.length ? this.content[pos+1].value.typeObj : null,
next2_Type = pos + 2 < this.content.length ? this.content[pos+2].value.typeObj : null;
////// проверка на начало и конец контента //////
var bFirstRunPrp = this.CurPos == 1 && currType == MATH_RUN_PRP;
var bFirst = bFirstRunPrp || this.CurPos == 0;
var bPlh = this.IsPlaceholder();
var bLeft = order == -1 && !bFirst && !bPlh,
bRight = order == 1 && this.CurPos !== this.content.length - 1 && !bPlh;
////////////////////////////////////////////////////
/*var bLeftTextRPrp = currType == MATH_RUN_PRP && prevType == MATH_TEXT,
bRightTextRPrp = nextType == MATH_TEXT && next2_Type == MATH_RUN_PRP;*/
/*var bLeft2Comp = currType == MATH_EMPTY && prevType == MATH_COMP,
bRight2Comp = nextType == MATH_EMPTY && next2_Type !== MATH_RUN_PRP;*/
/*var bLeftCompRPrp = currType == MATH_RUN_PRP && prevType == MATH_EMPTY && prev2_Type == MATH_COMP,
bRightCompRPrp = nextType == MATH_EMPTY && next2_Type == MATH_RUN_PRP;*/
if(bLeft)
{
if(currType == MATH_RUN_PRP) // перепрыгнули через RunPrp, неважно какой предыдущий элемент
posChange = pos - 2;
else
posChange = pos - 1;
}
else if(bRight)
{
if(next2_Type == MATH_RUN_PRP) // перепрыгнули через RunPrp, неважно какой следующий элемент за текущим
posChange = pos + 2;
else
posChange = pos + 1;
}
return posChange;
},
// выставить курсор в начало конента // выставить курсор в начало конента
cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos
{ {
if( !this.IsEmpty() ) if( !this.IsEmpty() )
{ {
...@@ -5853,7 +6003,6 @@ CMathContent.prototype = ...@@ -5853,7 +6003,6 @@ CMathContent.prototype =
{ {
this.RealSelect.startPos -= 2; this.RealSelect.startPos -= 2;
} }
} }
}, },
selection_check: function(X, Y) selection_check: function(X, Y)
...@@ -6568,21 +6717,28 @@ CMathComposition.prototype = ...@@ -6568,21 +6717,28 @@ CMathComposition.prototype =
{ {
return this.Root.getFirstPrp(); return this.Root.getFirstPrp();
}, },
Cursor_MoveLeft: function() Cursor_MoveLeft: function(bShiftKey, bCtrlKey)
{ {
var move = this.SelectContent.cursor_moveLeft(); var move = this.SelectContent.cursor_moveLeft(bShiftKey, bCtrlKey);
if(move.state) if(move.state)
{ {
this.SelectContent = move.SelectContent; if(bShiftKey)
this.CurrentContent = move.CurrContent; {
}
else
{
this.SelectContent = move.SelectContent;
this.CurrentContent = move.CurrContent;
}
} }
return move.state; return move.state;
}, },
Cursor_MoveRight: function() Cursor_MoveRight: function(bShiftKey, bCtrlKey)
{ {
var move = this.SelectContent.cursor_moveRight(); var move = this.SelectContent.cursor_moveRight(bShiftKey, bCtrlKey);
//передаем состояние, т.к. можем выйти за пределы формулы //передаем состояние, т.к. можем выйти за пределы формулы
if(move.state) if(move.state)
......
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