| Index: xfa/fee/fde_txtedtengine.cpp
|
| diff --git a/xfa/fee/fde_txtedtengine.cpp b/xfa/fee/fde_txtedtengine.cpp
|
| index 71f510205be4b5cc21a5f0c6456850fb605fe2c9..21035ae49bade3a9c6bfb90926cde3792e9e26ca 100644
|
| --- a/xfa/fee/fde_txtedtengine.cpp
|
| +++ b/xfa/fee/fde_txtedtengine.cpp
|
| @@ -383,14 +383,11 @@ int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart,
|
| if (IsSelect()) {
|
| DeleteSelect();
|
| }
|
| - if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
|
| - IFDE_TxtEdtDoRecord* pRecord =
|
| - new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength);
|
| - CFX_ByteString bsDoRecord;
|
| - pRecord->Serialize(bsDoRecord);
|
| - m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord.AsStringC());
|
| - pRecord->Release();
|
| - }
|
| + if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo))
|
| + m_Param.pEventSink->On_AddDoRecord(
|
| + this,
|
| + new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength));
|
| +
|
| GetText(m_ChangeInfo.wsPrevText, 0);
|
| Inner_Insert(m_nCaret, lpBuffer, nLength);
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
|
| @@ -447,12 +444,9 @@ int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, FX_BOOL bBackspace) {
|
| if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
|
| CFX_WideString wsRange;
|
| m_pTxtBuf->GetRange(wsRange, nStart, nCount);
|
| - IFDE_TxtEdtDoRecord* pRecord =
|
| - new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange);
|
| - CFX_ByteString bsDoRecord;
|
| - pRecord->Serialize(bsDoRecord);
|
| - m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord.AsStringC());
|
| - pRecord->Release();
|
| + m_Param.pEventSink->On_AddDoRecord(
|
| + this,
|
| + new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange));
|
| }
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
|
| GetText(m_ChangeInfo.wsDelete, nStart, nCount);
|
| @@ -634,38 +628,22 @@ void CFDE_TxtEdtEngine::ClearSelection() {
|
| m_Param.pEventSink->On_SelChanged(this);
|
| }
|
|
|
| -FX_BOOL CFDE_TxtEdtEngine::Redo(const CFX_ByteStringC& bsRedo) {
|
| - if (IsLocked()) {
|
| +FX_BOOL CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) {
|
| + if (IsLocked())
|
| return FALSE;
|
| - }
|
| - if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) {
|
| + if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
|
| return FALSE;
|
| - }
|
| - IFDE_TxtEdtDoRecord* pDoRecord = IFDE_TxtEdtDoRecord::Create(bsRedo);
|
| - ASSERT(pDoRecord);
|
| - if (pDoRecord == NULL) {
|
| - return FALSE;
|
| - }
|
| - FX_BOOL bOK = pDoRecord->Redo();
|
| - pDoRecord->Release();
|
| - return bOK;
|
| + return pDoRecord->Redo();
|
| }
|
| -FX_BOOL CFDE_TxtEdtEngine::Undo(const CFX_ByteStringC& bsUndo) {
|
| - if (IsLocked()) {
|
| +
|
| +FX_BOOL CFDE_TxtEdtEngine::Undo(const IFDE_TxtEdtDoRecord* pDoRecord) {
|
| + if (IsLocked())
|
| return FALSE;
|
| - }
|
| - if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) {
|
| + if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
|
| return FALSE;
|
| - }
|
| - IFDE_TxtEdtDoRecord* pDoRecord = IFDE_TxtEdtDoRecord::Create(bsUndo);
|
| - ASSERT(pDoRecord);
|
| - if (pDoRecord == NULL) {
|
| - return FALSE;
|
| - }
|
| - FX_BOOL bOK = pDoRecord->Undo();
|
| - pDoRecord->Release();
|
| - return bOK;
|
| + return pDoRecord->Undo();
|
| }
|
| +
|
| int32_t CFDE_TxtEdtEngine::StartLayout() {
|
| Lock();
|
| RemoveAllPages();
|
| @@ -930,12 +908,9 @@ void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
|
| if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
|
| CFX_WideString wsRange;
|
| m_pTxtBuf->GetRange(wsRange, nStart, nCount);
|
| - IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_DeleteRange(
|
| - this, nStart, m_nCaret, wsRange, bSel);
|
| - CFX_ByteString bsDoRecord;
|
| - pRecord->Serialize(bsDoRecord);
|
| - m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord.AsStringC());
|
| - pRecord->Release();
|
| + m_Param.pEventSink->On_AddDoRecord(
|
| + this, new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret,
|
| + wsRange, bSel));
|
| }
|
| m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
|
| GetText(m_ChangeInfo.wsDelete, nStart, nCount);
|
| @@ -1601,24 +1576,6 @@ void CFDE_TxtEdtEngine::DeleteSelect() {
|
| }
|
| }
|
|
|
| -IFDE_TxtEdtDoRecord* IFDE_TxtEdtDoRecord::Create(
|
| - const CFX_ByteStringC& bsDoRecord) {
|
| - const uint32_t* lpBuf =
|
| - reinterpret_cast<const uint32_t*>(bsDoRecord.raw_str());
|
| - switch (*lpBuf) {
|
| - case FDE_TXTEDT_DORECORD_INS:
|
| - return new CFDE_TxtEdtDoRecord_Insert(bsDoRecord);
|
| - case FDE_TXTEDT_DORECORD_DEL:
|
| - return new CFDE_TxtEdtDoRecord_DeleteRange(bsDoRecord);
|
| - default:
|
| - return nullptr;
|
| - }
|
| -}
|
| -
|
| -CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert(
|
| - const CFX_ByteStringC& bsDoRecord) {
|
| - Deserialize(bsDoRecord);
|
| -}
|
| CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert(
|
| CFDE_TxtEdtEngine* pEngine,
|
| int32_t nCaret,
|
| @@ -1630,11 +1587,10 @@ CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert(
|
| FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR));
|
| m_wsInsert.ReleaseBuffer();
|
| }
|
| +
|
| CFDE_TxtEdtDoRecord_Insert::~CFDE_TxtEdtDoRecord_Insert() {}
|
| -void CFDE_TxtEdtDoRecord_Insert::Release() {
|
| - delete this;
|
| -}
|
| -FX_BOOL CFDE_TxtEdtDoRecord_Insert::Undo() {
|
| +
|
| +FX_BOOL CFDE_TxtEdtDoRecord_Insert::Undo() const {
|
| if (m_pEngine->IsSelect()) {
|
| m_pEngine->ClearSelection();
|
| }
|
| @@ -1646,7 +1602,8 @@ FX_BOOL CFDE_TxtEdtDoRecord_Insert::Undo() {
|
| m_pEngine->SetCaretPos(m_nCaret, TRUE);
|
| return TRUE;
|
| }
|
| -FX_BOOL CFDE_TxtEdtDoRecord_Insert::Redo() {
|
| +
|
| +FX_BOOL CFDE_TxtEdtDoRecord_Insert::Redo() const {
|
| m_pEngine->Inner_Insert(m_nCaret, m_wsInsert.c_str(), m_wsInsert.GetLength());
|
| FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
|
| m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
|
| @@ -1655,34 +1612,7 @@ FX_BOOL CFDE_TxtEdtDoRecord_Insert::Redo() {
|
| m_pEngine->SetCaretPos(m_nCaret, FALSE);
|
| return TRUE;
|
| }
|
| -void CFDE_TxtEdtDoRecord_Insert::Serialize(CFX_ByteString& bsDoRecord) const {
|
| - CFX_ArchiveSaver ArchiveSaver;
|
| - ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_INS);
|
| - ArchiveSaver << (int32_t)(uintptr_t)m_pEngine;
|
| - ArchiveSaver << m_nCaret;
|
| - ArchiveSaver << m_wsInsert;
|
| - int32_t nLength = ArchiveSaver.GetLength();
|
| - const uint8_t* lpSrcBuf = ArchiveSaver.GetBuffer();
|
| - FX_CHAR* lpDstBuf = bsDoRecord.GetBuffer(nLength);
|
| - FXSYS_memcpy(lpDstBuf, lpSrcBuf, nLength);
|
| - bsDoRecord.ReleaseBuffer(nLength);
|
| -}
|
| -void CFDE_TxtEdtDoRecord_Insert::Deserialize(
|
| - const CFX_ByteStringC& bsDoRecord) {
|
| - CFX_ArchiveLoader ArchiveLoader(bsDoRecord.raw_str(), bsDoRecord.GetLength());
|
| - int32_t nType = 0;
|
| - ArchiveLoader >> nType;
|
| - ASSERT(nType == FDE_TXTEDT_DORECORD_INS);
|
| - int32_t nEngine = 0;
|
| - ArchiveLoader >> nEngine;
|
| - m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
|
| - ArchiveLoader >> m_nCaret;
|
| - ArchiveLoader >> m_wsInsert;
|
| -}
|
| -CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange(
|
| - const CFX_ByteStringC& bsDoRecord) {
|
| - Deserialize(bsDoRecord);
|
| -}
|
| +
|
| CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange(
|
| CFDE_TxtEdtEngine* pEngine,
|
| int32_t nIndex,
|
| @@ -1696,11 +1626,10 @@ CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange(
|
| m_wsRange(wsRange) {
|
| ASSERT(pEngine);
|
| }
|
| +
|
| CFDE_TxtEdtDoRecord_DeleteRange::~CFDE_TxtEdtDoRecord_DeleteRange() {}
|
| -void CFDE_TxtEdtDoRecord_DeleteRange::Release() {
|
| - delete this;
|
| -}
|
| -FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Undo() {
|
| +
|
| +FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Undo() const {
|
| if (m_pEngine->IsSelect()) {
|
| m_pEngine->ClearSelection();
|
| }
|
| @@ -1715,7 +1644,8 @@ FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Undo() {
|
| m_pEngine->SetCaretPos(m_nCaret, TRUE);
|
| return TRUE;
|
| }
|
| -FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Redo() {
|
| +
|
| +FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Redo() const {
|
| m_pEngine->Inner_DeleteRange(m_nIndex, m_wsRange.GetLength());
|
| if (m_bSel) {
|
| m_pEngine->RemoveSelRange(m_nIndex, m_wsRange.GetLength());
|
| @@ -1727,34 +1657,3 @@ FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Redo() {
|
| m_pEngine->SetCaretPos(m_nIndex, TRUE);
|
| return TRUE;
|
| }
|
| -void CFDE_TxtEdtDoRecord_DeleteRange::Serialize(
|
| - CFX_ByteString& bsDoRecord) const {
|
| - CFX_ArchiveSaver ArchiveSaver;
|
| - ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_DEL);
|
| - ArchiveSaver << (int32_t)(uintptr_t)m_pEngine;
|
| - ArchiveSaver << (int32_t)m_bSel;
|
| - ArchiveSaver << m_nIndex;
|
| - ArchiveSaver << m_nCaret;
|
| - ArchiveSaver << m_wsRange;
|
| - int32_t nLength = ArchiveSaver.GetLength();
|
| - const uint8_t* lpSrcBuf = ArchiveSaver.GetBuffer();
|
| - FX_CHAR* lpDstBuf = bsDoRecord.GetBuffer(nLength);
|
| - FXSYS_memcpy(lpDstBuf, lpSrcBuf, nLength);
|
| - bsDoRecord.ReleaseBuffer(nLength);
|
| -}
|
| -void CFDE_TxtEdtDoRecord_DeleteRange::Deserialize(
|
| - const CFX_ByteStringC& bsDoRecord) {
|
| - CFX_ArchiveLoader ArchiveLoader(bsDoRecord.raw_str(), bsDoRecord.GetLength());
|
| - int32_t nType = 0;
|
| - ArchiveLoader >> nType;
|
| - ASSERT(nType == FDE_TXTEDT_DORECORD_DEL);
|
| - int32_t nEngine = 0;
|
| - ArchiveLoader >> nEngine;
|
| - m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
|
| - int32_t iSel = 0;
|
| - ArchiveLoader >> iSel;
|
| - m_bSel = !!iSel;
|
| - ArchiveLoader >> m_nIndex;
|
| - ArchiveLoader >> m_nCaret;
|
| - ArchiveLoader >> m_wsRange;
|
| -}
|
|
|