Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: xfa/fee/fde_txtedtengine.cpp

Issue 1980293004: Pass objects instead of strings for undo/redo records. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fee/fde_txtedtengine.h" 7 #include "xfa/fee/fde_txtedtengine.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { 376 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
377 CFX_WideString wsText; 377 CFX_WideString wsText;
378 GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength); 378 GetPreInsertText(wsText, m_nCaret, lpBuffer, nLength);
379 if (!m_Param.pEventSink->On_Validate(this, wsText)) { 379 if (!m_Param.pEventSink->On_Validate(this, wsText)) {
380 return FDE_TXTEDT_MODIFY_RET_F_Invalidate; 380 return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
381 } 381 }
382 } 382 }
383 if (IsSelect()) { 383 if (IsSelect()) {
384 DeleteSelect(); 384 DeleteSelect();
385 } 385 }
386 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { 386 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo))
387 IFDE_TxtEdtDoRecord* pRecord = 387 m_Param.pEventSink->On_AddDoRecord(
388 new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength); 388 this,
389 CFX_ByteString bsDoRecord; 389 new CFDE_TxtEdtDoRecord_Insert(this, m_nCaret, lpBuffer, nLength));
390 pRecord->Serialize(bsDoRecord); 390
391 m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord.AsStringC());
392 pRecord->Release();
393 }
394 GetText(m_ChangeInfo.wsPrevText, 0); 391 GetText(m_ChangeInfo.wsPrevText, 0);
395 Inner_Insert(m_nCaret, lpBuffer, nLength); 392 Inner_Insert(m_nCaret, lpBuffer, nLength);
396 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; 393 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
397 m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength); 394 m_ChangeInfo.wsInsert = CFX_WideString(lpBuffer, nLength);
398 nStart = m_nCaret; 395 nStart = m_nCaret;
399 nStart += nLength; 396 nStart += nLength;
400 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1); 397 FX_WCHAR wChar = m_pTxtBuf->GetCharByIndex(nStart - 1);
401 FX_BOOL bBefore = TRUE; 398 FX_BOOL bBefore = TRUE;
402 if (wChar != L'\n' && wChar != L'\r') { 399 if (wChar != L'\n' && wChar != L'\r') {
403 nStart--; 400 nStart--;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) { 437 if (m_Param.dwMode & FDE_TEXTEDITMODE_Validate) {
441 CFX_WideString wsText; 438 CFX_WideString wsText;
442 GetPreDeleteText(wsText, nStart, nCount); 439 GetPreDeleteText(wsText, nStart, nCount);
443 if (!m_Param.pEventSink->On_Validate(this, wsText)) { 440 if (!m_Param.pEventSink->On_Validate(this, wsText)) {
444 return FDE_TXTEDT_MODIFY_RET_F_Invalidate; 441 return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
445 } 442 }
446 } 443 }
447 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { 444 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
448 CFX_WideString wsRange; 445 CFX_WideString wsRange;
449 m_pTxtBuf->GetRange(wsRange, nStart, nCount); 446 m_pTxtBuf->GetRange(wsRange, nStart, nCount);
450 IFDE_TxtEdtDoRecord* pRecord = 447 m_Param.pEventSink->On_AddDoRecord(
451 new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange); 448 this,
452 CFX_ByteString bsDoRecord; 449 new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret, wsRange));
453 pRecord->Serialize(bsDoRecord);
454 m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord.AsStringC());
455 pRecord->Release();
456 } 450 }
457 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; 451 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
458 GetText(m_ChangeInfo.wsDelete, nStart, nCount); 452 GetText(m_ChangeInfo.wsDelete, nStart, nCount);
459 Inner_DeleteRange(nStart, nCount); 453 Inner_DeleteRange(nStart, nCount);
460 SetCaretPos(nStart + ((!bBackspace && nStart > 0) ? -1 : 0), 454 SetCaretPos(nStart + ((!bBackspace && nStart > 0) ? -1 : 0),
461 (bBackspace || nStart == 0)); 455 (bBackspace || nStart == 0));
462 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); 456 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
463 return FDE_TXTEDT_MODIFY_RET_S_Normal; 457 return FDE_TXTEDT_MODIFY_RET_S_Normal;
464 } 458 }
465 int32_t CFDE_TxtEdtEngine::DeleteRange(int32_t nStart, int32_t nCount) { 459 int32_t CFDE_TxtEdtEngine::DeleteRange(int32_t nStart, int32_t nCount) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
627 621
628 void CFDE_TxtEdtEngine::ClearSelection() { 622 void CFDE_TxtEdtEngine::ClearSelection() {
629 int32_t nCount = m_SelRangePtrArr.GetSize(); 623 int32_t nCount = m_SelRangePtrArr.GetSize();
630 for (int i = 0; i < nCount; ++i) 624 for (int i = 0; i < nCount; ++i)
631 delete m_SelRangePtrArr[i]; 625 delete m_SelRangePtrArr[i];
632 m_SelRangePtrArr.RemoveAll(); 626 m_SelRangePtrArr.RemoveAll();
633 if (nCount && m_Param.pEventSink) 627 if (nCount && m_Param.pEventSink)
634 m_Param.pEventSink->On_SelChanged(this); 628 m_Param.pEventSink->On_SelChanged(this);
635 } 629 }
636 630
637 FX_BOOL CFDE_TxtEdtEngine::Redo(const CFX_ByteStringC& bsRedo) { 631 FX_BOOL CFDE_TxtEdtEngine::Redo(const IFDE_TxtEdtDoRecord* pDoRecord) {
638 if (IsLocked()) { 632 if (IsLocked())
639 return FALSE; 633 return FALSE;
640 } 634 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
641 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) {
642 return FALSE; 635 return FALSE;
643 } 636 return pDoRecord->Redo();
644 IFDE_TxtEdtDoRecord* pDoRecord = IFDE_TxtEdtDoRecord::Create(bsRedo); 637 }
645 ASSERT(pDoRecord); 638
646 if (pDoRecord == NULL) { 639 FX_BOOL CFDE_TxtEdtEngine::Undo(const IFDE_TxtEdtDoRecord* pDoRecord) {
640 if (IsLocked())
647 return FALSE; 641 return FALSE;
648 } 642 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)
649 FX_BOOL bOK = pDoRecord->Redo(); 643 return FALSE;
650 pDoRecord->Release(); 644 return pDoRecord->Undo();
651 return bOK;
652 } 645 }
653 FX_BOOL CFDE_TxtEdtEngine::Undo(const CFX_ByteStringC& bsUndo) { 646
654 if (IsLocked()) {
655 return FALSE;
656 }
657 if (m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo) {
658 return FALSE;
659 }
660 IFDE_TxtEdtDoRecord* pDoRecord = IFDE_TxtEdtDoRecord::Create(bsUndo);
661 ASSERT(pDoRecord);
662 if (pDoRecord == NULL) {
663 return FALSE;
664 }
665 FX_BOOL bOK = pDoRecord->Undo();
666 pDoRecord->Release();
667 return bOK;
668 }
669 int32_t CFDE_TxtEdtEngine::StartLayout() { 647 int32_t CFDE_TxtEdtEngine::StartLayout() {
670 Lock(); 648 Lock();
671 RemoveAllPages(); 649 RemoveAllPages();
672 m_nLayoutPos = 0; 650 m_nLayoutPos = 0;
673 m_nLineCount = 0; 651 m_nLineCount = 0;
674 return 0; 652 return 0;
675 } 653 }
676 int32_t CFDE_TxtEdtEngine::DoLayout(IFX_Pause* pPause) { 654 int32_t CFDE_TxtEdtEngine::DoLayout(IFX_Pause* pPause) {
677 int32_t nCount = m_ParagPtrArray.GetSize(); 655 int32_t nCount = m_ParagPtrArray.GetSize();
678 CFDE_TxtEdtParag* pParag = NULL; 656 CFDE_TxtEdtParag* pParag = NULL;
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 FX_BOOL bSel) { 901 FX_BOOL bSel) {
924 ASSERT(nStart >= 0); 902 ASSERT(nStart >= 0);
925 if (nCount == -1) { 903 if (nCount == -1) {
926 nCount = GetTextLength() - nStart; 904 nCount = GetTextLength() - nStart;
927 } 905 }
928 ASSERT((nStart + nCount) <= m_pTxtBuf->GetTextLength()); 906 ASSERT((nStart + nCount) <= m_pTxtBuf->GetTextLength());
929 907
930 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) { 908 if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
931 CFX_WideString wsRange; 909 CFX_WideString wsRange;
932 m_pTxtBuf->GetRange(wsRange, nStart, nCount); 910 m_pTxtBuf->GetRange(wsRange, nStart, nCount);
933 IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_DeleteRange( 911 m_Param.pEventSink->On_AddDoRecord(
934 this, nStart, m_nCaret, wsRange, bSel); 912 this, new CFDE_TxtEdtDoRecord_DeleteRange(this, nStart, m_nCaret,
935 CFX_ByteString bsDoRecord; 913 wsRange, bSel));
936 pRecord->Serialize(bsDoRecord);
937 m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord.AsStringC());
938 pRecord->Release();
939 } 914 }
940 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; 915 m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
941 GetText(m_ChangeInfo.wsDelete, nStart, nCount); 916 GetText(m_ChangeInfo.wsDelete, nStart, nCount);
942 Inner_DeleteRange(nStart, nCount); 917 Inner_DeleteRange(nStart, nCount);
943 } 918 }
944 void CFDE_TxtEdtEngine::ResetEngine() { 919 void CFDE_TxtEdtEngine::ResetEngine() {
945 RemoveAllPages(); 920 RemoveAllPages();
946 RemoveAllParags(); 921 RemoveAllParags();
947 ClearSelection(); 922 ClearSelection();
948 m_nCaret = 0; 923 m_nCaret = 0;
(...skipping 645 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE); 1569 DeleteRange_DoRecord(nSelStart, nSelCount, TRUE);
1595 } 1570 }
1596 ClearSelection(); 1571 ClearSelection();
1597 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo); 1572 m_Param.pEventSink->On_TextChanged(this, m_ChangeInfo);
1598 m_Param.pEventSink->On_SelChanged(this); 1573 m_Param.pEventSink->On_SelChanged(this);
1599 SetCaretPos(nSelStart, TRUE); 1574 SetCaretPos(nSelStart, TRUE);
1600 return; 1575 return;
1601 } 1576 }
1602 } 1577 }
1603 1578
1604 IFDE_TxtEdtDoRecord* IFDE_TxtEdtDoRecord::Create(
1605 const CFX_ByteStringC& bsDoRecord) {
1606 const uint32_t* lpBuf =
1607 reinterpret_cast<const uint32_t*>(bsDoRecord.raw_str());
1608 switch (*lpBuf) {
1609 case FDE_TXTEDT_DORECORD_INS:
1610 return new CFDE_TxtEdtDoRecord_Insert(bsDoRecord);
1611 case FDE_TXTEDT_DORECORD_DEL:
1612 return new CFDE_TxtEdtDoRecord_DeleteRange(bsDoRecord);
1613 default:
1614 return nullptr;
1615 }
1616 }
1617
1618 CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert( 1579 CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert(
1619 const CFX_ByteStringC& bsDoRecord) {
1620 Deserialize(bsDoRecord);
1621 }
1622 CFDE_TxtEdtDoRecord_Insert::CFDE_TxtEdtDoRecord_Insert(
1623 CFDE_TxtEdtEngine* pEngine, 1580 CFDE_TxtEdtEngine* pEngine,
1624 int32_t nCaret, 1581 int32_t nCaret,
1625 const FX_WCHAR* lpText, 1582 const FX_WCHAR* lpText,
1626 int32_t nLength) 1583 int32_t nLength)
1627 : m_pEngine(pEngine), m_nCaret(nCaret) { 1584 : m_pEngine(pEngine), m_nCaret(nCaret) {
1628 ASSERT(pEngine); 1585 ASSERT(pEngine);
1629 FX_WCHAR* lpBuffer = m_wsInsert.GetBuffer(nLength); 1586 FX_WCHAR* lpBuffer = m_wsInsert.GetBuffer(nLength);
1630 FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR)); 1587 FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR));
1631 m_wsInsert.ReleaseBuffer(); 1588 m_wsInsert.ReleaseBuffer();
1632 } 1589 }
1590
1633 CFDE_TxtEdtDoRecord_Insert::~CFDE_TxtEdtDoRecord_Insert() {} 1591 CFDE_TxtEdtDoRecord_Insert::~CFDE_TxtEdtDoRecord_Insert() {}
1634 void CFDE_TxtEdtDoRecord_Insert::Release() { 1592
1635 delete this; 1593 FX_BOOL CFDE_TxtEdtDoRecord_Insert::Undo() const {
1636 }
1637 FX_BOOL CFDE_TxtEdtDoRecord_Insert::Undo() {
1638 if (m_pEngine->IsSelect()) { 1594 if (m_pEngine->IsSelect()) {
1639 m_pEngine->ClearSelection(); 1595 m_pEngine->ClearSelection();
1640 } 1596 }
1641 m_pEngine->Inner_DeleteRange(m_nCaret, m_wsInsert.GetLength()); 1597 m_pEngine->Inner_DeleteRange(m_nCaret, m_wsInsert.GetLength());
1642 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; 1598 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
1643 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete; 1599 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Delete;
1644 m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert; 1600 m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert;
1645 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); 1601 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
1646 m_pEngine->SetCaretPos(m_nCaret, TRUE); 1602 m_pEngine->SetCaretPos(m_nCaret, TRUE);
1647 return TRUE; 1603 return TRUE;
1648 } 1604 }
1649 FX_BOOL CFDE_TxtEdtDoRecord_Insert::Redo() { 1605
1606 FX_BOOL CFDE_TxtEdtDoRecord_Insert::Redo() const {
1650 m_pEngine->Inner_Insert(m_nCaret, m_wsInsert.c_str(), m_wsInsert.GetLength()); 1607 m_pEngine->Inner_Insert(m_nCaret, m_wsInsert.c_str(), m_wsInsert.GetLength());
1651 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; 1608 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
1652 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; 1609 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
1653 m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert; 1610 m_pEngine->m_ChangeInfo.wsDelete = m_wsInsert;
1654 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); 1611 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
1655 m_pEngine->SetCaretPos(m_nCaret, FALSE); 1612 m_pEngine->SetCaretPos(m_nCaret, FALSE);
1656 return TRUE; 1613 return TRUE;
1657 } 1614 }
1658 void CFDE_TxtEdtDoRecord_Insert::Serialize(CFX_ByteString& bsDoRecord) const { 1615
1659 CFX_ArchiveSaver ArchiveSaver;
1660 ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_INS);
1661 ArchiveSaver << (int32_t)(uintptr_t)m_pEngine;
1662 ArchiveSaver << m_nCaret;
1663 ArchiveSaver << m_wsInsert;
1664 int32_t nLength = ArchiveSaver.GetLength();
1665 const uint8_t* lpSrcBuf = ArchiveSaver.GetBuffer();
1666 FX_CHAR* lpDstBuf = bsDoRecord.GetBuffer(nLength);
1667 FXSYS_memcpy(lpDstBuf, lpSrcBuf, nLength);
1668 bsDoRecord.ReleaseBuffer(nLength);
1669 }
1670 void CFDE_TxtEdtDoRecord_Insert::Deserialize(
1671 const CFX_ByteStringC& bsDoRecord) {
1672 CFX_ArchiveLoader ArchiveLoader(bsDoRecord.raw_str(), bsDoRecord.GetLength());
1673 int32_t nType = 0;
1674 ArchiveLoader >> nType;
1675 ASSERT(nType == FDE_TXTEDT_DORECORD_INS);
1676 int32_t nEngine = 0;
1677 ArchiveLoader >> nEngine;
1678 m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
1679 ArchiveLoader >> m_nCaret;
1680 ArchiveLoader >> m_wsInsert;
1681 }
1682 CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange(
1683 const CFX_ByteStringC& bsDoRecord) {
1684 Deserialize(bsDoRecord);
1685 }
1686 CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange( 1616 CFDE_TxtEdtDoRecord_DeleteRange::CFDE_TxtEdtDoRecord_DeleteRange(
1687 CFDE_TxtEdtEngine* pEngine, 1617 CFDE_TxtEdtEngine* pEngine,
1688 int32_t nIndex, 1618 int32_t nIndex,
1689 int32_t nCaret, 1619 int32_t nCaret,
1690 const CFX_WideString& wsRange, 1620 const CFX_WideString& wsRange,
1691 FX_BOOL bSel) 1621 FX_BOOL bSel)
1692 : m_pEngine(pEngine), 1622 : m_pEngine(pEngine),
1693 m_bSel(bSel), 1623 m_bSel(bSel),
1694 m_nIndex(nIndex), 1624 m_nIndex(nIndex),
1695 m_nCaret(nCaret), 1625 m_nCaret(nCaret),
1696 m_wsRange(wsRange) { 1626 m_wsRange(wsRange) {
1697 ASSERT(pEngine); 1627 ASSERT(pEngine);
1698 } 1628 }
1629
1699 CFDE_TxtEdtDoRecord_DeleteRange::~CFDE_TxtEdtDoRecord_DeleteRange() {} 1630 CFDE_TxtEdtDoRecord_DeleteRange::~CFDE_TxtEdtDoRecord_DeleteRange() {}
1700 void CFDE_TxtEdtDoRecord_DeleteRange::Release() { 1631
1701 delete this; 1632 FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Undo() const {
1702 }
1703 FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Undo() {
1704 if (m_pEngine->IsSelect()) { 1633 if (m_pEngine->IsSelect()) {
1705 m_pEngine->ClearSelection(); 1634 m_pEngine->ClearSelection();
1706 } 1635 }
1707 m_pEngine->Inner_Insert(m_nIndex, m_wsRange.c_str(), m_wsRange.GetLength()); 1636 m_pEngine->Inner_Insert(m_nIndex, m_wsRange.c_str(), m_wsRange.GetLength());
1708 if (m_bSel) { 1637 if (m_bSel) {
1709 m_pEngine->AddSelRange(m_nIndex, m_wsRange.GetLength()); 1638 m_pEngine->AddSelRange(m_nIndex, m_wsRange.GetLength());
1710 } 1639 }
1711 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; 1640 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
1712 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; 1641 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
1713 m_pEngine->m_ChangeInfo.wsDelete = m_wsRange; 1642 m_pEngine->m_ChangeInfo.wsDelete = m_wsRange;
1714 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); 1643 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
1715 m_pEngine->SetCaretPos(m_nCaret, TRUE); 1644 m_pEngine->SetCaretPos(m_nCaret, TRUE);
1716 return TRUE; 1645 return TRUE;
1717 } 1646 }
1718 FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Redo() { 1647
1648 FX_BOOL CFDE_TxtEdtDoRecord_DeleteRange::Redo() const {
1719 m_pEngine->Inner_DeleteRange(m_nIndex, m_wsRange.GetLength()); 1649 m_pEngine->Inner_DeleteRange(m_nIndex, m_wsRange.GetLength());
1720 if (m_bSel) { 1650 if (m_bSel) {
1721 m_pEngine->RemoveSelRange(m_nIndex, m_wsRange.GetLength()); 1651 m_pEngine->RemoveSelRange(m_nIndex, m_wsRange.GetLength());
1722 } 1652 }
1723 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param; 1653 FDE_TXTEDTPARAMS& Param = m_pEngine->m_Param;
1724 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert; 1654 m_pEngine->m_ChangeInfo.nChangeType = FDE_TXTEDT_TEXTCHANGE_TYPE_Insert;
1725 m_pEngine->m_ChangeInfo.wsDelete = m_wsRange; 1655 m_pEngine->m_ChangeInfo.wsDelete = m_wsRange;
1726 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo); 1656 Param.pEventSink->On_TextChanged(m_pEngine, m_pEngine->m_ChangeInfo);
1727 m_pEngine->SetCaretPos(m_nIndex, TRUE); 1657 m_pEngine->SetCaretPos(m_nIndex, TRUE);
1728 return TRUE; 1658 return TRUE;
1729 } 1659 }
1730 void CFDE_TxtEdtDoRecord_DeleteRange::Serialize(
1731 CFX_ByteString& bsDoRecord) const {
1732 CFX_ArchiveSaver ArchiveSaver;
1733 ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_DEL);
1734 ArchiveSaver << (int32_t)(uintptr_t)m_pEngine;
1735 ArchiveSaver << (int32_t)m_bSel;
1736 ArchiveSaver << m_nIndex;
1737 ArchiveSaver << m_nCaret;
1738 ArchiveSaver << m_wsRange;
1739 int32_t nLength = ArchiveSaver.GetLength();
1740 const uint8_t* lpSrcBuf = ArchiveSaver.GetBuffer();
1741 FX_CHAR* lpDstBuf = bsDoRecord.GetBuffer(nLength);
1742 FXSYS_memcpy(lpDstBuf, lpSrcBuf, nLength);
1743 bsDoRecord.ReleaseBuffer(nLength);
1744 }
1745 void CFDE_TxtEdtDoRecord_DeleteRange::Deserialize(
1746 const CFX_ByteStringC& bsDoRecord) {
1747 CFX_ArchiveLoader ArchiveLoader(bsDoRecord.raw_str(), bsDoRecord.GetLength());
1748 int32_t nType = 0;
1749 ArchiveLoader >> nType;
1750 ASSERT(nType == FDE_TXTEDT_DORECORD_DEL);
1751 int32_t nEngine = 0;
1752 ArchiveLoader >> nEngine;
1753 m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
1754 int32_t iSel = 0;
1755 ArchiveLoader >> iSel;
1756 m_bSel = !!iSel;
1757 ArchiveLoader >> m_nIndex;
1758 ArchiveLoader >> m_nCaret;
1759 ArchiveLoader >> m_wsRange;
1760 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698