- enhancement: Press left/right arrow will move caret to the begin/end of the selection.
- enhancement: Press up/down arrow will move caret up/down from the begin/end of the selection.
This commit is contained in:
parent
9be257e8e8
commit
d3760db7ec
3
NEWS.md
3
NEWS.md
|
@ -7,6 +7,9 @@ Red Panda C++ Version 2.24
|
||||||
- fix: Goto definition/declaration may choose wrong symbol is multiple files are opened and symbols have the same name.
|
- fix: Goto definition/declaration may choose wrong symbol is multiple files are opened and symbols have the same name.
|
||||||
- fix: "UTF-8 BOM" can't be correctly loaded as project file's encoding.
|
- fix: "UTF-8 BOM" can't be correctly loaded as project file's encoding.
|
||||||
- fix: Project file's encoding is not correctly updated after converted manually.
|
- fix: Project file's encoding is not correctly updated after converted manually.
|
||||||
|
- enhancement: Press left/right arrow will move caret to the begin/end of the selection.
|
||||||
|
- enhancement: Press up/down arrow will move caret up/down from the begin/end of the selection.
|
||||||
|
|
||||||
|
|
||||||
Red Panda C++ Version 2.23
|
Red Panda C++ Version 2.23
|
||||||
|
|
||||||
|
|
|
@ -4739,13 +4739,18 @@ void QSynEdit::processCommand(EditCommand Command, QChar AChar, void *pData)
|
||||||
onCommandProcessed(Command, AChar, pData);
|
onCommandProcessed(Command, AChar, pData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSynEdit::moveCaretHorz(int DX, bool isSelection)
|
void QSynEdit::moveCaretHorz(int deltaX, bool isSelection)
|
||||||
{
|
{
|
||||||
BufferCoord ptO = caretXY();
|
BufferCoord ptO = caretXY();
|
||||||
BufferCoord ptDst = ptO;
|
BufferCoord ptDst = ptO;
|
||||||
QString s = displayLineText();
|
QString s = displayLineText();
|
||||||
int nLineLen = s.length();
|
int nLineLen = s.length();
|
||||||
|
if (!isSelection && selAvail() && (deltaX!=0)) {
|
||||||
|
if (deltaX<0)
|
||||||
|
ptDst = blockBegin();
|
||||||
|
else
|
||||||
|
ptDst = blockEnd();
|
||||||
|
} else {
|
||||||
if (mOptions.testFlag(eoAltSetsColumnMode) &&
|
if (mOptions.testFlag(eoAltSetsColumnMode) &&
|
||||||
(mActiveSelectionMode != SelectionMode::Line)) {
|
(mActiveSelectionMode != SelectionMode::Line)) {
|
||||||
if (qApp->keyboardModifiers().testFlag(Qt::AltModifier) && !mReadOnly) {
|
if (qApp->keyboardModifiers().testFlag(Qt::AltModifier) && !mReadOnly) {
|
||||||
|
@ -4757,7 +4762,7 @@ void QSynEdit::moveCaretHorz(int DX, bool isSelection)
|
||||||
// only moving or selecting one char can change the line
|
// only moving or selecting one char can change the line
|
||||||
//bool bChangeY = !mOptions.testFlag(SynEditorOption::eoScrollPastEol);
|
//bool bChangeY = !mOptions.testFlag(SynEditorOption::eoScrollPastEol);
|
||||||
bool bChangeY=true;
|
bool bChangeY=true;
|
||||||
if (bChangeY && (DX == -1) && (ptO.ch == 1) && (ptO.line > 1)) {
|
if (bChangeY && (deltaX == -1) && (ptO.ch == 1) && (ptO.line > 1)) {
|
||||||
// end of previous line
|
// end of previous line
|
||||||
if (mActiveSelectionMode==SelectionMode::Column) {
|
if (mActiveSelectionMode==SelectionMode::Column) {
|
||||||
return;
|
return;
|
||||||
|
@ -4769,7 +4774,7 @@ void QSynEdit::moveCaretHorz(int DX, bool isSelection)
|
||||||
ptDst.line = line;
|
ptDst.line = line;
|
||||||
ptDst.ch = getDisplayStringAtLine(ptDst.line).length() + 1;
|
ptDst.ch = getDisplayStringAtLine(ptDst.line).length() + 1;
|
||||||
}
|
}
|
||||||
} else if (bChangeY && (DX == 1) && (ptO.ch > nLineLen) && (ptO.line < mDocument->count())) {
|
} else if (bChangeY && (deltaX == 1) && (ptO.ch > nLineLen) && (ptO.line < mDocument->count())) {
|
||||||
// start of next line
|
// start of next line
|
||||||
if (mActiveSelectionMode==SelectionMode::Column) {
|
if (mActiveSelectionMode==SelectionMode::Column) {
|
||||||
return;
|
return;
|
||||||
|
@ -4777,17 +4782,18 @@ void QSynEdit::moveCaretHorz(int DX, bool isSelection)
|
||||||
int row = lineToRow(ptDst.line);
|
int row = lineToRow(ptDst.line);
|
||||||
row++;
|
row++;
|
||||||
int line = rowToLine(row);
|
int line = rowToLine(row);
|
||||||
// qDebug()<<line<<ptDst.Line;
|
// qDebug()<<line<<ptDst.Line;
|
||||||
if (line!=ptDst.line && line<=mDocument->count()) {
|
if (line!=ptDst.line && line<=mDocument->count()) {
|
||||||
ptDst.line = line;
|
ptDst.line = line;
|
||||||
ptDst.ch = 1;
|
ptDst.ch = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ptDst.ch = std::max(1, ptDst.ch + DX);
|
ptDst.ch = std::max(1, ptDst.ch + deltaX);
|
||||||
// don't go past last char when ScrollPastEol option not set
|
// don't go past last char when ScrollPastEol option not set
|
||||||
if ((DX > 0) && bChangeY)
|
if ((deltaX > 0) && bChangeY)
|
||||||
ptDst.ch = std::min(ptDst.ch, nLineLen + 1);
|
ptDst.ch = std::min(ptDst.ch, nLineLen + 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// set caret and block begin / end
|
// set caret and block begin / end
|
||||||
incPaintLock();
|
incPaintLock();
|
||||||
|
|
||||||
|
@ -4795,13 +4801,19 @@ void QSynEdit::moveCaretHorz(int DX, bool isSelection)
|
||||||
decPaintLock();
|
decPaintLock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSynEdit::moveCaretVert(int DY, bool isSelection)
|
void QSynEdit::moveCaretVert(int deltaY, bool isSelection)
|
||||||
{
|
{
|
||||||
DisplayCoord ptO = displayXY();
|
DisplayCoord ptO = displayXY();
|
||||||
DisplayCoord ptDst = ptO;
|
DisplayCoord ptDst = ptO;
|
||||||
ptDst.Row+=DY;
|
if (!isSelection && selAvail()) {
|
||||||
|
if (deltaY<0)
|
||||||
|
ptDst = bufferToDisplayPos(blockBegin());
|
||||||
|
else
|
||||||
|
ptDst = bufferToDisplayPos(blockEnd());
|
||||||
|
}
|
||||||
|
ptDst.Row+=deltaY;
|
||||||
|
|
||||||
if (DY >= 0) {
|
if (deltaY >= 0) {
|
||||||
if (rowToLine(ptDst.Row) > mDocument->count()) {
|
if (rowToLine(ptDst.Row) > mDocument->count()) {
|
||||||
ptDst.Row = std::max(1, displayLineCount());
|
ptDst.Row = std::max(1, displayLineCount());
|
||||||
}
|
}
|
||||||
|
@ -4824,7 +4836,7 @@ void QSynEdit::moveCaretVert(int DY, bool isSelection)
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferCoord vDstLineChar;
|
BufferCoord vDstLineChar;
|
||||||
if (ptDst.Row == ptO.Row && isSelection && DY!=0) {
|
if (ptDst.Row == ptO.Row && isSelection && deltaY!=0) {
|
||||||
if (ptDst.Row==1) {
|
if (ptDst.Row==1) {
|
||||||
vDstLineChar.ch=1;
|
vDstLineChar.ch=1;
|
||||||
vDstLineChar.line=1;
|
vDstLineChar.line=1;
|
||||||
|
|
|
@ -536,8 +536,8 @@ private:
|
||||||
* @param DX
|
* @param DX
|
||||||
* @param SelectionCommand
|
* @param SelectionCommand
|
||||||
*/
|
*/
|
||||||
void moveCaretHorz(int DX, bool isSelection);
|
void moveCaretHorz(int deltaX, bool isSelection);
|
||||||
void moveCaretVert(int DY, bool isSelection);
|
void moveCaretVert(int deltaY, bool isSelection);
|
||||||
void moveCaretAndSelection(const BufferCoord& ptBefore, const BufferCoord& ptAfter,
|
void moveCaretAndSelection(const BufferCoord& ptBefore, const BufferCoord& ptAfter,
|
||||||
bool isSelection);
|
bool isSelection);
|
||||||
void moveCaretToLineStart(bool isSelection);
|
void moveCaretToLineStart(bool isSelection);
|
||||||
|
|
Loading…
Reference in New Issue