Commit 5c62de03 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

1. Реализовала удаление заселекченной части контента с учетом RunPrp

2. Поправила getCtrPrp для мат объекта (для отрисовки внутренних контентов в первую очередь должны учитываться собственные ctrPrp, потом FirstCtrPrp, для управляющих символов - наоборот)
3. Поправила Undo для вставки объекта из меню
4. Баг с переходом по стрелке на право (не выставлялся CurrentContent)
5. Поправила выставление логической позици курсора для случая, когда в контенте несколько Run

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@53082 954022d7-b5bf-4e40-9824-e11837661b57
parent f4e7eb12
...@@ -85,22 +85,20 @@ CMathBase.prototype = ...@@ -85,22 +85,20 @@ CMathBase.prototype =
this.alignment.wdt[u] = CENTER; this.alignment.wdt[u] = CENTER;
}, },
///////// RunPrp, CtrPrp ///////// RunPrp, CtrPrp
setCtrPrp: function(runPrp) setCtrPrp: function(runPrp)
{ {
this.CtrPrp.Merge(runPrp); // only runPrp for paragraph this.CtrPrp.Merge(runPrp); // only runPrp for paragraph
}, },
getCtrPrp: function() getCtrPrp: function()
{ {
var ctrPrp = new CTextPr(); var ctrPrp = new CTextPr();
ctrPrp.Merge(DEFAULT_RUN_PRP); ctrPrp.Merge(DEFAULT_RUN_PRP);
ctrPrp.Merge(this.CtrPrp);
ctrPrp.Merge(this.Composition.GetFirstPrp() ); ctrPrp.Merge(this.Composition.GetFirstPrp() );
ctrPrp.Merge(this.CtrPrp);
return ctrPrp; return ctrPrp;
}, },
getCtrPrp_2: function() getCtrPrpForFirst: function()
{ {
var ctrPrp = new CTextPr(); var ctrPrp = new CTextPr();
ctrPrp.Merge(DEFAULT_RUN_PRP); ctrPrp.Merge(DEFAULT_RUN_PRP);
...@@ -108,18 +106,20 @@ CMathBase.prototype = ...@@ -108,18 +106,20 @@ CMathBase.prototype =
return ctrPrp; return ctrPrp;
}, },
// getPrpToControlLetter => getCtrPrp // для управляющих символов в приоритете GetFirstPrp
old_getPrpToControlLetter: function() // если первый элемент - мат объект, то берутся его CtrPrp
getPrpToControlLetter: function()
{ {
var rPrp = new CTextPr(); var rPrp = new CTextPr();
//rPrp.Merge(DEFAULT_RUN_PRP);
rPrp.Merge( this.getCtrPrp() );
rPrp.Merge( this.Composition.GetFirstPrp() ); rPrp.Merge( this.Composition.GetFirstPrp() );
return rPrp; return rPrp;
}, },
setRPrp: function(rPrp) setRPrp: function(rPrp)
{ {
this.CtrPrp = new CTextPr();
this.CtrPrp.Merge(rPrp);
for(var i=0; i < this.nRow; i++) for(var i=0; i < this.nRow; i++)
for(var j = 0; j < this.nCol; j++) for(var j = 0; j < this.nCol; j++)
{ {
......
...@@ -19,12 +19,15 @@ ...@@ -19,12 +19,15 @@
// 1. после того, как будет реализован селект с учетом RunPrp, убрать проверки из remove на RunPrp (!) // 1. после того, как будет реализован селект с учетом RunPrp, убрать проверки из remove на RunPrp (!)
// 1. properties для записи в файл // 1. properties для записи в файл
// 2. плейсхолдер на чтение // 2. убрать slashWidth
// 3. убрать slashWidth // 3. центр => baseline
// 4. центр => baseline // 4. сделать gaps для мат. объектов, +, - в зависимости от расположения в контенте
// 5. сделать gaps для мат. объектов, +, - в зависимости от расположения в контенте // 5. баг с отрисовкой кругового интеграла
// 6. объединение формул на remove и add // 5. ctr + shift
// 7. ctr + shift // 6. Merge textPrp и mathTextPrp (bold, italic)
// 7. Для управляющих символов запрашивать не getCtrPrp, getPrpToControlLetter (реализована, нужно только протащить для всех управляющих элементов)
// 8. объединение формул на remove и add
/// TODO /// TODO
...@@ -33,7 +36,7 @@ ...@@ -33,7 +36,7 @@
// 1. Посмотреть стрелки и прочее для delimiters (которые используются для accent), при необходимости привести к одному типу // 1. Посмотреть стрелки и прочее для delimiters (которые используются для accent), при необходимости привести к одному типу
// 2. Убрать ненужные(!!) setTxtPrp и getTxtPrp // 2. Убрать ненужные(!!) setTxtPrp и getTxtPrp
// 3. Проверить что будет, если какие-то настройки убрать/добавить из ctrPrp, влияют ли они на отрисовку управляющих элементов (например, Italic, Bold) // 3. Проверить что будет, если какие-то настройки убрать/добавить из ctrPrp, влияют ли они на отрисовку управляющих элементов (например, Italic, Bold)
// 4. Протестировать n-арные операторы, когда добавляется текст вместо оператора (mouseDown не работает, выровнено как alignTop) // 4. Протестировать n-арные операторы, когда добавляется текст вместо оператора (mouseDown не работает, выравнено как alignTop)
var historyitem_Math_AddItem = 1; // Добавляем элемент var historyitem_Math_AddItem = 1; // Добавляем элемент
var historyitem_Math_RemoveItem = 2; // Удаляем элемент var historyitem_Math_RemoveItem = 2; // Удаляем элемент
...@@ -611,7 +614,6 @@ CMathContent.prototype = ...@@ -611,7 +614,6 @@ CMathContent.prototype =
addToContent_2: function(oSub) // for "menu" addToContent_2: function(oSub) // for "menu"
{ {
// добавление к контенту элементов из другого контента в текущую позицию // добавление к контенту элементов из другого контента в текущую позицию
// первый элемент в добавляемом контенте CEmpty пропускаем // первый элемент в добавляемом контенте CEmpty пропускаем
var subContent = oSub.content; var subContent = oSub.content;
...@@ -629,6 +631,7 @@ CMathContent.prototype = ...@@ -629,6 +631,7 @@ CMathContent.prototype =
if(CurFirstType == MATH_RUN_PRP) if(CurFirstType == MATH_RUN_PRP)
{ {
curStart = this.CurPos - 1; curStart = this.CurPos - 1;
curEnd = this.CurPos - 1;
// не убираем RunPrp для вставляемого текста, чтобы History работала нормально !! // не убираем RunPrp для вставляемого текста, чтобы History работала нормально !!
// когда на запись отдаем, можно лишние RunPrp убрать, как в Ворде // когда на запись отдаем, можно лишние RunPrp убрать, как в Ворде
...@@ -3974,121 +3977,6 @@ CMathContent.prototype = ...@@ -3974,121 +3977,6 @@ CMathContent.prototype =
return SelectContent; return SelectContent;
}, },
getPos_toMoveLeft: function()
{
var state = true,
SelectContent = null;
var start = this.RealSelect.start,
end = this.RealSelect.end;
var posLeft = null; // позиция курсора, стартовая позиция селекта
var posStart = start > end ? end : start; // для CurPos, стартовая и конечная позиции совпадают
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;
var bStartRoot = bStartPos && this.bRoot;
var bUpperLevel = (bPlh || bStartPos) && !this.bRoot;
if(bUpperLevel)
{
var movement = this.Parent.cursor_moveLeft();
SelectContent = movement.SelectContent;
}
else if(!bStartRoot || this.selectUse()) // не в начале
{
if(this.selectUse())
{
var start = this.RealSelect.start,
end = this.RealSelect.end;
if(start > end)
{
var tmp = start;
start = end;
end = tmp;
}
// select move left
/*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;
CurrContent = this;
}*/
this.CurPos = start - 1;
SelectContent = this;
}
//пришли из базового класса
else if( currType === MATH_COMP )
{
// select move left
/*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;
CurrContent = this;
}*/
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.setLogicalPosition(this.CurPos);
}
else
state = false; // bRoot, в начале
//return {state: state, SelectContent: SelectContent, CurrContent: CurrContent };
return {state: state, SelectContent: SelectContent, pos: pos};
},
old_cursor_moveLeft: function() old_cursor_moveLeft: function()
{ {
var state = true, var state = true,
...@@ -4826,35 +4714,35 @@ CMathContent.prototype = ...@@ -4826,35 +4714,35 @@ CMathContent.prototype =
{ {
if( this.content[pos].value.typeObj === MATH_COMP ) if( this.content[pos].value.typeObj === MATH_COMP )
{ {
/*if( this.content[pos - 1].widthToEl <= mouseX && mouseX < (this.content[pos - 1].widthToEl + gps.left) )
pos--;
else if( (this.content[pos].widthToEl - gps.right) < mouseX && mouseX <= this.content[ pos ].widthToEl)
pos++;*/
if(mouseX < widthToEl - width - gps.right) if(mouseX < widthToEl - width - gps.right)
pos--; pos--;
else if(mouseX >= widthToEl - gps.right) else if(mouseX >= widthToEl - gps.right)
pos++; pos++;
/*if(!bPos)
pos--;
else
pos++;*/
} }
else else
{ {
if( !(widthToEl - width/2 < mouseX) ) if( !(widthToEl - width/2 < mouseX) )
pos--; pos--;
/*if( this.content[ pos - 1].widthToEl <= mouseX && mouseX < (this.content[ pos - 1].widthToEl + gps.left) )
pos--;
else if( (this.content[ pos ].widthToEl - (this.content[ pos ].value.size.width/2) - this.content[ pos ].g_mContext.left ) > mouseX )
pos--;*/
} }
} }
// проверка на RunPrp
pos = this.verifyCurPos(pos);
return pos;
},
verifyCurPos: function(pos) // проверка на RunPrp
{
var currType = this.content[pos].value.typeObj,
prevType = pos > 0 ? this.content[pos-1].value.typeObj : null,
nextType = pos < this.content.length -1 ? this.content[pos+1].value.typeObj : null;
if(currType == MATH_RUN_PRP && prevType == MATH_TEXT)
pos--;
else if(currType == MATH_EMPTY && nextType == MATH_RUN_PRP)
pos++;
return pos; return pos;
}, },
getCoordElem: function(index, mCoord) // without gaps of Math Component ( например, если справа/слева есть относительно мат элемента компонент, то добавляем gaps справа/слева для этого мат элемента ) getCoordElem: function(index, mCoord) // without gaps of Math Component ( например, если справа/слева есть относительно мат элемента компонент, то добавляем gaps справа/слева для этого мат элемента )
...@@ -4980,7 +4868,7 @@ CMathContent.prototype = ...@@ -4980,7 +4868,7 @@ CMathContent.prototype =
var bRemoveFormula = (bDirectly_CurrComp|| bDirectly_RPrpComp || bReverseComp) && !bSelect; var bRemoveFormula = (bDirectly_CurrComp|| bDirectly_RPrpComp || bReverseComp) && !bSelect;
if(bRemoveFormula) if(bRemoveFormula) // удаление формулы (селект)
{ {
var pos; var pos;
if(bMEReverse) if(bMEReverse)
...@@ -4992,11 +4880,11 @@ CMathContent.prototype = ...@@ -4992,11 +4880,11 @@ CMathContent.prototype =
this.removeFormula(pos); this.removeFormula(pos);
} }
else if(!bNotRemove) else if(!bNotRemove) // удаление в контенте
{ {
var start, end; var start, end;
if(bSelect) if(bSelect) // если заселекчено
{ {
start = this.RealSelect.startPos; start = this.RealSelect.startPos;
end = this.RealSelect.endPos; end = this.RealSelect.endPos;
...@@ -5008,8 +4896,54 @@ CMathContent.prototype = ...@@ -5008,8 +4896,54 @@ CMathContent.prototype =
start = end; start = end;
end = tmp; end = tmp;
} }
}
// при селекте используем findPosition
// соответственно, если перед RunPrp идёт текст, то встаем перед RunPrp,
// а если empty, то встаем после RunPrp
var endCurType = this.content[end - 1].value.typeObj, // последний элемент в селекте "end - 1"
endNextType = end < this.content.length ? this.content[end].value.typeObj : null,
startCurType = this.content[start].value.typeObj, // RunPrp1, RunPrp2
startPrevType = start > 0 ? this.content[start - 1].value.typeObj : null; // MATH_COMP + RunPrp
var bStartCurrRPrp = startCurType == MATH_RUN_PRP, // проверка на то, чтобы добавить RunPrp к селекту
bStartPrevRPrp = startPrevType == MATH_RUN_PRP; // проверка на то, чтобы убрать RunPrp из селекта
if(endCurType == MATH_RUN_PRP)
end--;
if(bStartCurrRPrp || bStartPrevRPrp) // check RunPrp
{
var bSelectRunPrp = false;
if(this.content.length == end)
bSelectRunPrp = true;
else if(endNextType !== MATH_TEXT)
bSelectRunPrp = true;
else else
{
for(var i = start + 1; i < end; i++)
{
if(this.content[i].value.typeObj !== MATH_TEXT)
{
bSelectRunPrp = true;
break;
}
}
}
if(!bSelectRunPrp && bStartCurrRPrp)
start++;
else if(bSelectRunPrp && bStartPrevRPrp)
start--;
// TODO
// добавить RunPrp, когда не весь Run заселектили, но при этом начали селектить вне Run (и следовательно заселектили RunPrp)
// на Undo сделать флаг, что были добавлены RunPrp при удалении
}
}
else // если нет селекта
{ {
start = order == 1 ? this.CurPos : this.CurPos + 1; // позиция, с которой будем удалять start = order == 1 ? this.CurPos : this.CurPos + 1; // позиция, с которой будем удалять
...@@ -5017,9 +4951,9 @@ CMathContent.prototype = ...@@ -5017,9 +4951,9 @@ CMathContent.prototype =
start = (order == -1) ? start + 1 : start - 1; start = (order == -1) ? start + 1 : start - 1;
var bRun = start - 1 > 0 ? this.content[start - 1].value.typeObj === MATH_RUN_PRP : false, var bRun = start - 1 > 0 ? this.content[start - 1].value.typeObj === MATH_RUN_PRP : false,
bNotNextText = start + 1 < this.content.length ? this.content[start + 1].value.typeObj !== MATH_TEXT : true; // start < this.content.length - 1, значит последняя буква в контента bNextText = start + 1 < this.content.length ? this.content[start + 1].value.typeObj == MATH_TEXT : false; // start < this.content.length - 1, значит последняя буква в контента
var bOnlyLetter = bRun && bNotNextText; // если все текстовые элементы удалили из Run, нужно удалить RunPrp var bOnlyLetter = bRun && ! bNextText; // если все текстовые элементы удалили из Run, нужно удалить RunPrp
if(bOnlyLetter) if(bOnlyLetter)
{ {
...@@ -5037,6 +4971,9 @@ CMathContent.prototype = ...@@ -5037,6 +4971,9 @@ CMathContent.prototype =
if(!this.IsEmpty() && this.CurPos == 0 && this.content[this.CurPos+1].value.typeObj === MATH_RUN_PRP) // если удалили мат. объект и стоим в начале, то позиция курсора будет перед RunPrp, а нужно после if(!this.IsEmpty() && this.CurPos == 0 && this.content[this.CurPos+1].value.typeObj === MATH_RUN_PRP) // если удалили мат. объект и стоим в начале, то позиция курсора будет перед RunPrp, а нужно после
this.CurPos++; this.CurPos++;
// проверка на RunPrp
this.CurPos = this.verifyCurPos(this.CurPos);
this.setLogicalPosition(this.CurPos); this.setLogicalPosition(this.CurPos);
bDelete = true; bDelete = true;
...@@ -5239,6 +5176,10 @@ CMathContent.prototype = ...@@ -5239,6 +5176,10 @@ CMathContent.prototype =
return {bDelete: bDelete, items: items}; return {bDelete: bDelete, items: items};
},
removeLetter: function(pos, order)
{
}, },
removeFormula: function(pos) removeFormula: function(pos)
{ {
...@@ -5536,7 +5477,7 @@ CMathContent.prototype = ...@@ -5536,7 +5477,7 @@ CMathContent.prototype =
else if(this.content[1].value.typeObj === MATH_COMP) else if(this.content[1].value.typeObj === MATH_COMP)
{ {
//var ctrPrp = this.content[1].value.getCtrPrp(); //var ctrPrp = this.content[1].value.getCtrPrp();
var ctrPrp = this.content[1].value.getCtrPrp_2();// иначе зациклимся на getCtrPrp var ctrPrp = this.content[1].value. getCtrPrpForFirst();// иначе зациклимся на getCtrPrp
txtPrp.Merge(ctrPrp); txtPrp.Merge(ctrPrp);
} }
} }
...@@ -6855,7 +6796,6 @@ CMathComposition.prototype = ...@@ -6855,7 +6796,6 @@ CMathComposition.prototype =
else else
{ {
this.SelectContent = move.SelectContent; this.SelectContent = move.SelectContent;
//this.CurrentContent = move.CurrContent;
this.CurrentContent = this.SelectContent; this.CurrentContent = this.SelectContent;
} }
} }
...@@ -6866,11 +6806,17 @@ CMathComposition.prototype = ...@@ -6866,11 +6806,17 @@ CMathComposition.prototype =
{ {
var move = this.SelectContent.cursor_moveRight(bShiftKey, bCtrlKey); var move = this.SelectContent.cursor_moveRight(bShiftKey, bCtrlKey);
//передаем состояние, т.к. можем выйти за пределы формулы
if(move.state) if(move.state)
{
if(bShiftKey)
{
}
else
{ {
this.SelectContent = move.SelectContent; this.SelectContent = move.SelectContent;
this.CurrentContent = move.CurrContent; this.CurrentContent = this.SelectContent;
}
} }
return move.state; return move.state;
...@@ -7103,8 +7049,8 @@ CMathComposition.prototype = ...@@ -7103,8 +7049,8 @@ CMathComposition.prototype =
var items = this.CurrentContent.addToContent_2(content); var items = this.CurrentContent.addToContent_2(content);
var Pos = this.CurrentContent.CurPos, var Pos = this.CurrentContent.CurPos - items.length,
PosEnd = Pos + items.length; PosEnd = this.CurrentContent.CurPos;
History.Add(this.CurrentContent, {Type: historyitem_Math_AddItem, Items: items, Pos: Pos, PosEnd: PosEnd}); History.Add(this.CurrentContent, {Type: historyitem_Math_AddItem, Items: items, Pos: Pos, PosEnd: PosEnd});
...@@ -7114,9 +7060,7 @@ CMathComposition.prototype = ...@@ -7114,9 +7060,7 @@ CMathComposition.prototype =
return this.CurrentContent.getCurrRunPrp(); return this.CurrentContent.getCurrRunPrp();
} }
////////////////////////////// //////////////////////////////
} }
......
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