Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 32 additions & 10 deletions src/editor/deletetextundocommand.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "deletetextundocommand.h"
#include "dtextedit.h"
#include "editwrapper.h"
#include <QDebug>

Check warning on line 8 in src/editor/deletetextundocommand.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: <QDebug> not found. Please note: Cppcheck does not need standard library headers to get proper results.
#include <QTextBlock>

Check warning on line 9 in src/editor/deletetextundocommand.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Include file: <QTextBlock> not found. Please note: Cppcheck does not need standard library headers to get proper results.

DeleteTextUndoCommand::DeleteTextUndoCommand(QTextCursor textcursor, QPlainTextEdit *edit, QUndoCommand *parent)
: QUndoCommand(parent)
Expand Down Expand Up @@ -36,6 +37,7 @@
{
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_originalPositions.append(m_ColumnEditSelections[i].cursor.position());
QTextCursor textCursor = m_ColumnEditSelections[i].cursor;
if (textCursor.hasSelection()) {
m_selectTextList.append(textCursor.selectedText());
Expand Down Expand Up @@ -67,11 +69,15 @@
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_ColumnEditSelections[i].cursor.insertText(m_selectTextList[i]);
m_ColumnEditSelections[i].cursor.setPosition(
m_ColumnEditSelections[i].cursor.position() - m_selectTextList[i].length(), QTextCursor::KeepAnchor);
m_ColumnEditSelections[i].cursor.setPosition(m_originalPositions[i] - m_selectTextList[i].length(), QTextCursor::MoveAnchor);
m_ColumnEditSelections[i].cursor.setPosition(m_originalPositions[i], QTextCursor::KeepAnchor);
}

if (m_edit && !m_ColumnEditSelections.isEmpty()) {
TextEdit *pEdit = qobject_cast<TextEdit*>(m_edit);
if (pEdit) {
pEdit->syncColumnEditSelections(m_ColumnEditSelections);
}
m_edit->setTextCursor(m_ColumnEditSelections.last().cursor);
}
}
Expand All @@ -89,7 +95,10 @@
} else {
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_ColumnEditSelections[i].cursor.deletePreviousChar();
QTextCursor tempCursor(m_edit->document());
tempCursor.setPosition(m_ColumnEditSelections[i].cursor.selectionStart());
tempCursor.setPosition(m_ColumnEditSelections[i].cursor.selectionEnd(), QTextCursor::KeepAnchor);
tempCursor.deletePreviousChar();
}

if (m_edit && !m_ColumnEditSelections.isEmpty()) {
Expand Down Expand Up @@ -119,6 +128,7 @@
m_sInsertText.replace("\r\n", "\n");
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_originalPositions.append(m_ColumnEditSelections[i].cursor.position());
QTextCursor textCursor = m_ColumnEditSelections[i].cursor;
if (textCursor.hasSelection()) {
m_selectTextList.append(textCursor.selectedText());
Expand All @@ -144,10 +154,17 @@
} else {
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_ColumnEditSelections[i].cursor.setPosition(m_beginPostion);
m_ColumnEditSelections[i].cursor.insertText(m_selectTextList[i]);
m_ColumnEditSelections[i].cursor.setPosition(m_beginPostion);
m_edit->setTextCursor(m_ColumnEditSelections[i].cursor);
m_ColumnEditSelections[i].cursor.setPosition(m_originalPositions[i] - m_selectTextList[i].length(), QTextCursor::MoveAnchor);
m_ColumnEditSelections[i].cursor.setPosition(m_originalPositions[i], QTextCursor::KeepAnchor);
}

if (m_edit && !m_ColumnEditSelections.isEmpty()) {
TextEdit *pEdit = qobject_cast<TextEdit*>(m_edit);
if (pEdit) {
pEdit->syncColumnEditSelections(m_ColumnEditSelections);
}
m_edit->setTextCursor(m_ColumnEditSelections.last().cursor);
}
}
}
Expand Down Expand Up @@ -185,9 +202,14 @@
} else {
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_beginPostion = m_ColumnEditSelections[i].cursor.selectionStart();
m_ColumnEditSelections[i].cursor.deletePreviousChar();
m_edit->setTextCursor(m_ColumnEditSelections[i].cursor);
QTextCursor tempCursor(m_edit->document());
tempCursor.setPosition(m_ColumnEditSelections[i].cursor.selectionStart());
tempCursor.setPosition(m_ColumnEditSelections[i].cursor.selectionEnd(), QTextCursor::KeepAnchor);
tempCursor.deletePreviousChar();
}

if (m_edit && !m_ColumnEditSelections.isEmpty()) {
m_edit->setTextCursor(m_ColumnEditSelections.last().cursor);
}
}
}
4 changes: 3 additions & 1 deletion src/editor/deletetextundocommand.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

Expand All @@ -25,6 +25,7 @@ class DeleteTextUndoCommand : public QUndoCommand
QString m_sInsertText;
QList<QString> m_selectTextList;
QList<QTextEdit::ExtraSelection> m_ColumnEditSelections;
QList<int> m_originalPositions;
int m_beginPos; // 记录光标删除前位置
};

Expand All @@ -42,6 +43,7 @@ class DeleteTextUndoCommand2 : public QUndoCommand
QString m_sInsertText;
QList<QString> m_selectTextList;
QList<QTextEdit::ExtraSelection> m_ColumnEditSelections;
QList<int> m_originalPositions;
QPlainTextEdit* m_edit;
int m_beginPostion {0};
bool m_iscurrLine {false};
Expand Down
6 changes: 6 additions & 0 deletions src/editor/dtextedit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2231,6 +2231,12 @@ void TextEdit::renderAllSelections()
setExtraSelections(finalSelections);
}

void TextEdit::syncColumnEditSelections(const QList<QTextEdit::ExtraSelection> &selections)
{
m_altModSelections = selections;
renderAllSelections();
}

void TextEdit::updateMarkAllSelectColor()
{
isMarkAllLine(m_bIsMarkAllLine, m_strMarkAllLineColorName);
Expand Down
1 change: 1 addition & 0 deletions src/editor/dtextedit.h
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,7 @@ class TextEdit : public DPlainTextEdit
Qt::CaseSensitivity caseFlag = Qt::CaseInsensitive);
bool searchKeywordSeletion(QString keyword, QTextCursor cursor, bool findNext);
void renderAllSelections();
void syncColumnEditSelections(const QList<QTextEdit::ExtraSelection> &selections);

bool clearMarkOperationForCursor(QTextCursor cursor);
bool clearMarksForTextCursor();
Expand Down
24 changes: 18 additions & 6 deletions src/editor/inserttextundocommand.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

#include "inserttextundocommand.h"
#include "dtextedit.h"

InsertTextUndoCommand::InsertTextUndoCommand(const QTextCursor &textcursor, const QString &text, QPlainTextEdit *edit, QUndoCommand *parent)
: QUndoCommand(parent)
Expand All @@ -23,6 +24,9 @@ InsertTextUndoCommand::InsertTextUndoCommand(QList<QTextEdit::ExtraSelection> &s
, m_ColumnEditSelections(selections)
{
m_sInsertText.replace("\r\n", "\n");
for (int i = 0; i < m_ColumnEditSelections.size(); i++) {
m_originalPositions.append(m_ColumnEditSelections[i].cursor.position());
}
}

void InsertTextUndoCommand::undo()
Expand All @@ -44,10 +48,18 @@ void InsertTextUndoCommand::undo()
} else {
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_ColumnEditSelections[i].cursor.deleteChar();
int pos = m_ColumnEditSelections[i].cursor.position();
m_ColumnEditSelections[i].cursor.setPosition(pos - m_sInsertText.length(), QTextCursor::MoveAnchor);
m_ColumnEditSelections[i].cursor.setPosition(pos, QTextCursor::KeepAnchor);
m_ColumnEditSelections[i].cursor.removeSelectedText();
m_ColumnEditSelections[i].cursor.setPosition(m_originalPositions[i]);
}

if (m_pEdit && !m_ColumnEditSelections.isEmpty()) {
TextEdit *pEdit = qobject_cast<TextEdit*>(m_pEdit);
if (pEdit) {
pEdit->syncColumnEditSelections(m_ColumnEditSelections);
}
m_pEdit->setTextCursor(m_ColumnEditSelections.last().cursor);
}
}
Expand Down Expand Up @@ -75,14 +87,14 @@ void InsertTextUndoCommand::redo()
} else {
int cnt = m_ColumnEditSelections.size();
for (int i = 0; i < cnt; i++) {
m_ColumnEditSelections[i].cursor.insertText(m_sInsertText);
m_ColumnEditSelections[i].cursor.setPosition(m_ColumnEditSelections[i].cursor.position() - m_sInsertText.length() + 1,
QTextCursor::KeepAnchor);
QTextCursor tempCursor(m_pEdit->document());
tempCursor.setPosition(m_ColumnEditSelections[i].cursor.position());
tempCursor.insertText(m_sInsertText);
}

if (m_pEdit && !m_ColumnEditSelections.isEmpty()) {
QTextCursor curCursor = m_pEdit->textCursor();
curCursor.setPosition(m_ColumnEditSelections.last().cursor.selectionEnd());
curCursor.setPosition(m_ColumnEditSelections.last().cursor.position());
m_pEdit->setTextCursor(curCursor);
}
}
Expand Down
3 changes: 2 additions & 1 deletion src/editor/inserttextundocommand.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd.
// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: GPL-3.0-or-later

Expand Down Expand Up @@ -29,6 +29,7 @@ class InsertTextUndoCommand : public QUndoCommand
int m_endPostion{0};
QString m_sInsertText;
QList<QTextEdit::ExtraSelection> m_ColumnEditSelections;
QList<int> m_originalPositions;
QString m_selectText = QString();
};

Expand Down
Loading