1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// SPDX-FileCopyrightText: Copyright (c) Kitware Inc.
// SPDX-FileCopyrightText: Copyright (c) Sandia Corporation
// SPDX-License-Identifier: BSD-3-Clause
#include "pqPythonUndoCommand.h"
#include "pqPythonSyntaxHighlighter.h"
//-----------------------------------------------------------------------------
pqPythonUndoCommand::pqPythonUndoCommand(QTextEdit& text, pqPythonSyntaxHighlighter* highlighter,
pqPythonTextHistoryEntry& lastHistoryEntry, const pqPythonTextHistoryEntry&& currentHistoryEntry)
: Text(text)
, Highlighter(highlighter)
, TextLastHystoryEntry(lastHistoryEntry)
, LastHistoryEntry(lastHistoryEntry)
, CurrentHistoryEntry(currentHistoryEntry)
{
}
//-----------------------------------------------------------------------------
void pqPythonUndoCommand::swapImpl(const pqPythonTextHistoryEntry& h)
{
// We block all text signals (this is done to avoid pushing twice
// the text in the undo stack)
const bool oldState = this->Text.blockSignals(true);
const QString highlightedText = this->Highlighter->Highlight(h.content);
if (!highlightedText.isEmpty())
{
this->Text.setHtml(highlightedText);
}
else
{
this->Text.setText(h.content);
}
// Move the cursor
if (!h.isEmpty())
{
QTextCursor cursor = this->Text.textCursor();
cursor.setPosition(h.cursorPosition);
this->Text.setTextCursor(cursor);
}
// re-enable the signals
this->Text.blockSignals(oldState);
};
//-----------------------------------------------------------------------------
void pqPythonUndoCommand::undo()
{
this->swapImpl(this->LastHistoryEntry);
this->TextLastHystoryEntry = this->LastHistoryEntry;
this->Text.document()->setModified(true);
}
//-----------------------------------------------------------------------------
void pqPythonUndoCommand::redo()
{
this->swapImpl(this->CurrentHistoryEntry);
this->Text.document()->setModified(true);
}
|