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 =
{
this.Parent = parent;
},
cursor_moveLeft: function()
old_cursor_moveLeft: function()
{
var bUpperLevel = false;
//var oldPos = {x: this.CurPos_X, y: this.CurPos_Y}; //старая позиция нужна когда только в случае если находимся в базовом контенте, а здесь нет, т.к. всегда есть родитель
......@@ -290,7 +290,7 @@ CMathBase.prototype =
return { SelectContent: content };
},
cursor_moveRight: function()
old_cursor_moveRight: function()
{
var bUpperLevel = false;
......@@ -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();
},
......@@ -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();
},
......@@ -521,7 +521,7 @@ CMathBase.prototype =
return content;
},
cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos
/*cursor_MoveToStartPos: function() // home => cursor_MoveToStartPos
{
this.CurPos_X = 0;
this.CurPos_Y = 0;
......@@ -559,7 +559,7 @@ CMathBase.prototype =
this.elements[this.CurPos_X][this.CurPos_Y].cursor_MoveToEndPos(); // end => cursor_MoveToEndPos
},
},*/
mouseUp: function()
{
this.elements[this.CurPos_X][this.CurPos_Y].mouseUp();
......@@ -1007,6 +1007,8 @@ CMathBase.prototype =
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);
SelectContent = movement.SelectContent;
state = true;
......@@ -1015,5 +1017,73 @@ CMathBase.prototype =
state = false;
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 @@
// При удаление из начала контента элемента, у всех остальных автоматом 11 размер шрифта
/// TODO
// 1. после того, как будет реализован селект с учетом RunPrp, убрать проверки из remove на RunPrp (!)
// 1. properties для записи в файл
// 2. плейсхолдер на чтение
// 3. убрать slashWidth
......@@ -26,6 +28,7 @@
/// TODO
// !!! Проверить типы для groupCharacter, delimiters и accent
// 1. Посмотреть стрелки и прочее для delimiters (которые используются для accent), при необходимости привести к одному типу
// 2. Убрать ненужные(!!) setTxtPrp и getTxtPrp
......@@ -3640,7 +3643,7 @@ CMathContent.prototype =
},
///////// перемещение //////////
old_cursor_moveRight: function()
old_old_cursor_moveRight: function()
{
var state = true,
SelectContent = null, CurrContent = null;
......@@ -3716,7 +3719,7 @@ CMathContent.prototype =
return {state: state, SelectContent: SelectContent, CurrContent: CurrContent };
},
cursor_moveRight: function()
old_cursor_moveRight: function()
{
var state = true,
SelectContent = null, CurrContent = null;
......@@ -3821,13 +3824,111 @@ CMathContent.prototype =
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()
{
......@@ -3856,7 +3957,6 @@ CMathContent.prototype =
}
else if(!bStartRoot || this.selectUse()) // не в начале
{
if(this.selectUse())
{
var start = this.RealSelect.start,
......@@ -3945,7 +4045,7 @@ CMathContent.prototype =
return {state: state, SelectContent: SelectContent, pos: pos};
},
cursor_moveLeft: function()
old_cursor_moveLeft: function()
{
var state = true,
SelectContent = null, CurrContent = null;
......@@ -4056,10 +4156,12 @@ CMathContent.prototype =
},
goToLastElement: function()
{
this.cursor_MoveToEndPos();
return this;
},
goToFirstElement: function()
{
this.cursor_MoveToStartPos();
return this;
},
goToLowerLevel: function( coord )
......@@ -4295,8 +4397,56 @@ CMathContent.prototype =
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() )
{
......@@ -5853,7 +6003,6 @@ CMathContent.prototype =
{
this.RealSelect.startPos -= 2;
}
}
},
selection_check: function(X, Y)
......@@ -6568,21 +6717,28 @@ CMathComposition.prototype =
{
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)
{
this.SelectContent = move.SelectContent;
this.CurrentContent = move.CurrContent;
if(bShiftKey)
{
}
else
{
this.SelectContent = move.SelectContent;
this.CurrentContent = move.CurrContent;
}
}
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)
......
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