summaryrefslogtreecommitdiff
path: root/xfa/src/fee/src/fee/fde_txtedtengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fee/src/fee/fde_txtedtengine.cpp')
-rw-r--r--xfa/src/fee/src/fee/fde_txtedtengine.cpp1098
1 files changed, 5 insertions, 1093 deletions
diff --git a/xfa/src/fee/src/fee/fde_txtedtengine.cpp b/xfa/src/fee/src/fee/fde_txtedtengine.cpp
index ed67442f07..f8b5444b70 100644
--- a/xfa/src/fee/src/fee/fde_txtedtengine.cpp
+++ b/xfa/src/fee/src/fee/fde_txtedtengine.cpp
@@ -15,24 +15,12 @@
#include "xfa/src/fdp/include/fde_tto.h"
#include "xfa/src/foxitlib.h"
-#ifdef FDE_USEFORMATBLOCK
-#include "xfa/src/fee/src/fee/fde_txtedtblock.h"
-#endif
-
#define FDE_PAGEWIDTH_MAX 0xFFFF
#define FDE_TXTPLATESIZE (1024 * 12)
#define FDE_UNICODE_PARAGRAPH_SPERATOR (0x2029)
#define FDE_TXTEDT_DORECORD_INS 0
#define FDE_TXTEDT_DORECORD_DEL 1
-#ifdef FDE_USEFORMATBLOCK
-#define FDE_TXTEDT_DORECORD_FORMATINS 3
-#define FDE_TXTEDT_DORECORD_FORMATDEL 4
-#define FDE_TXTEDT_DORECORD_FORMATREP 5
-#define FDE_TXTEDT_FORMATBLOCK_BGN 0xFFF9
-#define FDE_TXTEDT_FORMATBLOCK_END 0xFFFB
-#endif
-
IFDE_TxtEdtEngine* IFDE_TxtEdtEngine::Create() {
return new CFDE_TxtEdtEngine();
}
@@ -50,9 +38,6 @@ CFDE_TxtEdtEngine::CFDE_TxtEdtEngine()
m_bLock(FALSE),
m_nLimit(0),
m_wcAliasChar(L'*'),
-#ifdef FDE_USEFORMATBLOCK
- m_nFixLength(-1), // FIXME: no such member => USEFORMATBLOCK can't work.
-#endif
m_nFirstLineEnd(FDE_TXTEDIT_LINEEND_Auto),
m_bAutoLineEnd(TRUE),
m_wLineEnd(FDE_UNICODE_PARAGRAPH_SPERATOR) {
@@ -69,17 +54,6 @@ CFDE_TxtEdtEngine::~CFDE_TxtEdtEngine() {
m_pTextBreak->Release();
m_pTextBreak = NULL;
}
-#ifdef FDE_USEFORMATBLOCK
- int32_t nBlockCount = m_BlockArray.GetSize();
- if (nBlockCount > 0) {
- int32_t i = 0;
- for (; i < nBlockCount; i++) {
- CFDE_TxtEdtBlock* pBlock = m_BlockArray[i];
- delete pBlock;
- }
- m_BlockArray.RemoveAll();
- }
-#endif
RemoveAllParags();
RemoveAllPages();
m_Param.pEventSink = NULL;
@@ -172,50 +146,8 @@ void CFDE_TxtEdtEngine::GetText(CFX_WideString& wsText,
if (nCount == -1) {
nCount = nTextBufLength - nStart;
}
-#ifdef FDE_USEFORMATBLOCK
- int32_t nBlockCount = m_BlockArray.GetSize();
- if (nBlockCount == 0 || m_wsFixText.IsEmpty()) {
- m_pTxtBuf->GetRange(wsText, nStart, nCount);
- return;
- }
- CFX_WideString wsTemp;
- const FX_WCHAR* lpFixBuffer = const FX_WCHAR * (m_wsFixText);
- FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nTextBufLength);
- int32_t nRealLength = 0;
- int32_t nPrePos = 0;
- for (int32_t i = 0; i < nBlockCount; i++) {
- CFDE_TxtEdtBlock* pBlock = m_BlockArray[i];
- int32_t nPos = pBlock->GetPos();
- int32_t nCopyLength = nPos - nPrePos;
- FXSYS_memcpy(lpBuffer + nRealLength, lpFixBuffer + nPrePos,
- nCopyLength * sizeof(FX_WCHAR));
- nRealLength += nCopyLength;
- nPrePos = nPos;
- CFX_WideString wsBlock;
- pBlock->GetRealText(wsBlock);
- nCopyLength = wsBlock.GetLength();
- FXSYS_memcpy(lpBuffer + nRealLength, const FX_WCHAR*(wsBlock),
- nCopyLength * sizeof(FX_WCHAR));
- nRealLength += nCopyLength;
- }
- int32_t nLeftLength = m_wsFixText.GetLength() - nPrePos;
- if (nLeftLength > 0) {
- FXSYS_memcpy(lpBuffer + nRealLength, lpFixBuffer + nPrePos,
- nLeftLength * sizeof(FX_WCHAR));
- nRealLength += nLeftLength;
- }
- wsTemp.ReleaseBuffer(nRealLength);
- int32_t nRealBgn = GetRealIndex(nStart);
- int32_t nRealEnd = GetRealIndex(nStart + nCount - 1);
- int32_t nRealCount = nRealEnd - nRealBgn;
- FX_WCHAR* lpDestBuf = wsText.GetBuffer(nRealCount);
- FXSYS_memcpy(lpDestBuf, const FX_WCHAR*(wsTemp) + nRealBgn,
- nRealCount * sizeof(FX_WCHAR));
- wsText.ReleaseBuffer();
-#else
m_pTxtBuf->GetRange(wsText, nStart, nCount);
RecoverParagEnd(wsText);
-#endif
}
void CFDE_TxtEdtEngine::ClearText() {
@@ -239,11 +171,6 @@ int32_t CFDE_TxtEdtEngine::SetCaretPos(int32_t nIndex, FX_BOOL bBefore) {
if (m_PagePtrArray.GetSize() <= m_nCaretPage) {
return 0;
}
-#ifdef FDE_USEFORMATBLOCK
- if (m_BlockArray.GetSize() > 0) {
- nIndex = NormalizeCaretPos(nIndex, FDE_FORMAT_CARET_MIDDLE, bBefore);
- }
-#endif
m_bBefore = bBefore;
m_nCaret = nIndex;
MovePage2Char(m_nCaret);
@@ -291,15 +218,6 @@ int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
} else {
FX_BOOL bBefore = TRUE;
int32_t nIndex = MoveBackward(bBefore);
-#ifdef FDE_USEFORMATBLOCK
- if (m_BlockArray.GetSize()) {
- nIndex =
- NormalizeCaretPos(nIndex, FDE_FORMAT_CARET_BACKWARD, bBefore);
- if (nIndex < 0) {
- return m_nCaret;
- }
- }
-#endif
if (nIndex >= 0) {
UpdateCaretRect(nIndex, bBefore);
}
@@ -314,14 +232,6 @@ int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
} else {
FX_BOOL bBefore = TRUE;
int32_t nIndex = MoveForward(bBefore);
-#ifdef FDE_USEFORMATBLOCK
- if (m_BlockArray.GetSize()) {
- if (nIndex == -1) {
- nIndex = GetTextBufLength();
- }
- nIndex = NormalizeCaretPos(nIndex, FDE_FORMAT_CARET_FORWARD, bBefore);
- }
-#endif
if (nIndex >= 0) {
UpdateCaretRect(nIndex, bBefore);
}
@@ -331,12 +241,6 @@ int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
if (bVertical) {
FX_BOOL bBefore = TRUE;
int32_t nIndex = MoveBackward(bBefore);
-#ifdef FDE_USEFORMATBLOCK
- if (m_BlockArray.GetSize()) {
- nIndex =
- NormalizeCaretPos(nIndex, FDE_FORMAT_CARET_BACKWARD, bBefore);
- }
-#endif
if (nIndex >= 0) {
UpdateCaretRect(nIndex, bBefore);
}
@@ -351,11 +255,6 @@ int32_t CFDE_TxtEdtEngine::MoveCaretPos(FDE_TXTEDTMOVECARET eMoveCaret,
if (bVertical) {
FX_BOOL bBefore = TRUE;
int32_t nIndex = MoveForward(bBefore);
-#ifdef FDE_USEFORMATBLOCK
- if (m_BlockArray.GetSize()) {
- nIndex = NormalizeCaretPos(nIndex, FDE_FORMAT_CARET_FORWARD, bBefore);
- }
-#endif
if (nIndex >= 0) {
UpdateCaretRect(nIndex, bBefore);
}
@@ -420,154 +319,6 @@ int32_t CFDE_TxtEdtEngine::Insert(int32_t nStart,
if (IsLocked()) {
return FDE_TXTEDT_MODIFY_RET_F_Locked;
}
-#ifdef FDE_USEFORMATBLOCK
- int32_t nBlockCount = m_BlockArray.GetSize();
- if (nBlockCount) {
- if (m_Param.dwMode & FDE_TEXTEDITMODE_FIELD_TAB && nLength == 1 &&
- lpText[0] == L'\t') {
- return Move2NextEditableField(nStart) ? FDE_TXTEDT_MODIFY_RET_T_Tab
- : FDE_TXTEDT_MODIFY_RET_F_Tab;
- }
- int32_t nSelRangeCount = CountSelRanges();
- if (nSelRangeCount > 0) {
- if (nSelRangeCount > 1) {
- return FDE_TXTEDT_MODIFY_RET_F_Boundary;
- }
- int32_t nSelStart;
- int32_t nSelCount;
- nSelCount = GetSelRange(0, nSelStart);
- int32_t nSelEnd = nSelStart + nSelCount;
- int32_t nBgn = 0;
- int32_t nEnd = 0;
- CFDE_TxtEdtField* pField = NULL;
- FX_BOOL bInField = GetFieldBoundary(nSelStart, nBgn, nEnd, pField);
- if (nSelEnd > nEnd) {
- return FDE_TXTEDT_MODIFY_RET_F_Boundary;
- }
- if (bInField) {
- pField->Backup();
- FX_BOOL bBefore = FALSE;
- CFX_WideString wsDel;
- int32_t nCaret;
- int32_t nIndexInField = nSelStart - nBgn;
- int32_t nRet = pField->Replace(nSelStart - nBgn, nSelCount,
- CFX_WideStringC(lpText, nLength), wsDel,
- nCaret, bBefore);
- switch (nRet) {
- case FDE_FORMAT_FIELD_INSERT_RET_F_FULL:
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Full;
- case FDE_FORMAT_FIELD_INSERT_RET_F_INVALIDATE:
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
- default:
- break;
- }
- CFX_WideString wsField;
- pField->GetFieldText(wsField);
- if (!m_Param.pEventSink->On_ValidateField(this, pField->GetBlockIndex(),
- pField->GetIndex(), wsField,
- 0)) {
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
- }
- CFX_WideString wsDisplay;
- pField->GetDisplayText(wsDisplay);
- if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) ||
- (m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz)) {
- CFX_WideString wsText;
- GetPreReplaceText(wsText, nBgn, nEnd - nBgn + 1,
- const FX_WCHAR*(wsDisplay), wsDisplay.GetLength());
- if (!IsFitArea(wsText)) {
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Full;
- }
- }
- Replace(nBgn, nEnd - nBgn + 1, wsDisplay);
- int32_t nNewCaret = nBgn + nCaret;
- if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
- IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_FieldReplace(
- this, m_nCaret, nNewCaret, pField, nIndexInField, nBgn,
- wsDisplay.GetLength(), wsDel, CFX_WideStringC(lpText, nLength),
- TRUE);
- CFX_ByteString bsDoRecord;
- pRecord->Serialize(bsDoRecord);
- m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord);
- pRecord->Release();
- }
- SetCaretPos(nBgn + nCaret, bBefore);
- return FDE_TXTEDT_MODIFY_RET_S_Normal;
- }
- }
- int32_t nBgn = 0;
- int32_t nEnd = 0;
- CFDE_TxtEdtField* pField = NULL;
- FX_BOOL bInField = GetFieldBoundary(m_nCaret, nBgn, nEnd, pField);
- int32_t nCaretInField = m_nCaret - nBgn;
- FX_BOOL bBefore = FALSE;
- if (bInField) {
- pField->Backup();
- CFX_WideStringC wsIns(lpText, nLength);
- int32_t nRet =
- pField->Insert(nCaretInField, wsIns, nCaretInField, bBefore);
- FX_BOOL bFull = FALSE;
- switch (nRet) {
- case FDE_FORMAT_FIELD_INSERT_RET_S_NORMAL:
- break;
- case FDE_FORMAT_FIELD_INSERT_RET_S_FULL:
- bFull = TRUE;
- break;
- case FDE_FORMAT_FIELD_INSERT_RET_F_FULL:
- return FDE_TXTEDT_MODIFY_RET_F_Full;
- case FDE_FORMAT_FIELD_INSERT_RET_F_INVALIDATE:
- return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
- default:
- return FDE_TXTEDT_MODIFY_RET_F_Normal;
- }
- CFX_WideString wsField;
- pField->GetFieldText(wsField);
- if (!m_Param.pEventSink->On_ValidateField(
- this, pField->GetBlockIndex(), pField->GetIndex(), wsField, 0)) {
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
- }
- CFX_WideString wsDisplay;
- pField->GetDisplayText(wsDisplay);
- if ((m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Vert) ||
- (m_Param.dwMode & FDE_TEXTEDITMODE_LimitArea_Horz)) {
- CFX_WideString wsText;
- GetPreReplaceText(wsText, nBgn, nEnd - nBgn + 1,
- const FX_WCHAR*(wsDisplay), wsDisplay.GetLength());
- if (!IsFitArea(wsText)) {
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Full;
- }
- }
- Replace(nBgn, nEnd - nBgn + 1, wsDisplay);
- if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
- IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_FieldInsert(
- this, m_nCaret, pField, m_nCaret - nBgn, nBgn, nEnd - nBgn + 1,
- wsDisplay.GetLength(), CFX_WideStringC(lpText, nLength), FALSE);
- CFX_ByteString bsDoRecord;
- pRecord->Serialize(bsDoRecord);
- m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord);
- pRecord->Release();
- }
- int32_t nCaretPos = nBgn + nCaretInField;
- if (m_Param.dwMode & FDE_TEXTEDITMODE_FIELD_AUTO && bFull &&
- nCaretPos == nEnd) {
- if (Move2NextEditableField(nEnd, TRUE, FALSE)) {
- return TRUE;
- }
- }
- SetCaretPos(nCaretPos, bBefore);
- return bFull ? FDE_TXTEDT_MODIFY_RET_S_Full
- : FDE_TXTEDT_MODIFY_RET_S_Normal;
- }
- FXSYS_assert(0);
- return FDE_TXTEDT_MODIFY_RET_F_Normal;
- }
-#endif
CFX_WideString wsTemp;
FX_WCHAR* lpBuffer = wsTemp.GetBuffer(nLength);
FXSYS_memcpy(lpBuffer, lpText, nLength * sizeof(FX_WCHAR));
@@ -667,62 +418,7 @@ int32_t CFDE_TxtEdtEngine::Delete(int32_t nStart, FX_BOOL bBackspace) {
DeleteSelect();
return FDE_TXTEDT_MODIFY_RET_S_Normal;
}
-#ifdef FDE_USEFORMATBLOCK
- int32_t nBlockCount = m_BlockArray.GetSize();
- if (nBlockCount > 0) {
- if (bBackspace) {
- nStart--;
- }
- int32_t nCount = 1;
- int32_t nBgn = 0;
- int32_t nEnd = 0;
- CFDE_TxtEdtField* pField = NULL;
- FX_BOOL bInField = GetFieldBoundary(nStart, nBgn, nEnd, pField);
- int32_t nCaretInField = nStart - nBgn;
- FX_BOOL bBefore = FALSE;
- if (bInField && !pField->IsFix()) {
- pField->Backup();
- CFX_WideString wsDel;
- int32_t nCaret = 0;
- int32_t nRet =
- pField->Delete(nCaretInField, nCount, wsDel, nCaret, bBefore);
- nCaret += nBgn;
- switch (nRet) {
- case FDE_FORMAT_FIELD_DELETE_RET_S:
- break;
- case FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE:
- return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
- case FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY:
- return FDE_TXTEDT_MODIFY_RET_F_Boundary;
- default:
- FXSYS_assert(0);
- break;
- }
- CFX_WideString wsField;
- pField->GetFieldText(wsField);
- if (!m_Param.pEventSink->On_ValidateField(
- this, pField->GetBlockIndex(), pField->GetIndex(), wsField, 0)) {
- pField->Restore();
- return FDE_TXTEDT_MODIFY_RET_F_Invalidate;
- }
- CFX_WideString wsDisplay;
- pField->GetDisplayText(wsDisplay);
- Replace(nBgn, nEnd - nBgn + 1, wsDisplay);
- if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
- IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_FieldDelete(
- this, nStart, pField, nCaretInField, nBgn, nEnd - nBgn + 1,
- wsDisplay.GetLength(), wsDel, FALSE);
- CFX_ByteString bsDoRecord;
- pRecord->Serialize(bsDoRecord);
- m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord);
- pRecord->Release();
- }
- SetCaretPos(nStart, bBefore);
- return FDE_TXTEDT_MODIFY_RET_S_Normal;
- }
- return FDE_TXTEDT_MODIFY_RET_F_Boundary;
- }
-#endif
+
int32_t nCount = 1;
if (bBackspace) {
if (nStart == 0) {
@@ -840,93 +536,7 @@ void CFDE_TxtEdtEngine::SetLimit(int32_t nLimit) {
void CFDE_TxtEdtEngine::SetAliasChar(FX_WCHAR wcAlias) {
m_wcAliasChar = wcAlias;
}
-void CFDE_TxtEdtEngine::SetFormatBlock(int32_t nIndex,
- const CFX_WideString& wsBlockFormat) {
-#ifdef FDE_USEFORMATBLOCK
- if (m_nFixLength == -1) {
- m_nFixLength = GetTextLength();
- FXSYS_assert(m_wsFixText.IsEmpty());
- GetText(m_wsFixText, 0, -1);
- }
- FX_BOOL bInBlock = FALSE;
- int32_t nCharIndex = 0;
- int32_t nBlockIndex = 0;
- int32_t nBlockPos = -1;
- FX_WCHAR wc;
- CFDE_TxtEdtBufIter* pIter =
- new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf, FALSE);
- pIter->SetAt(0);
- do {
- wc = pIter->GetChar();
- if (bInBlock) {
- if (wc == FDE_TXTEDT_FORMATBLOCK_END) {
- nBlockIndex++;
- bInBlock = FALSE;
- }
- } else {
- if (wc == FDE_TXTEDT_FORMATBLOCK_BGN) {
- bInBlock = TRUE;
- } else {
- if (nCharIndex++ == nIndex) {
- nBlockPos = pIter->GetAt();
- break;
- }
- }
- }
- } while (pIter->Next());
- pIter->Release();
- if (nBlockPos == -1) {
- nBlockPos = GetTextBufLength();
- }
- CFDE_TxtEdtBlock* pEditBlock =
- new CFDE_TxtEdtBlock(this, wsBlockFormat, nIndex);
- m_BlockArray.InsertAt(m_BlockArray.GetSize(), pEditBlock);
- CFX_WideString wsDisplay;
- pEditBlock->GetDisplayText(wsDisplay);
- m_nCaret = nBlockPos;
- if (wsDisplay.GetLength() > 0) {
- RawInsert(nBlockPos, const FX_WCHAR*(wsDisplay), wsDisplay.GetLength());
- }
-#endif
-}
-int32_t CFDE_TxtEdtEngine::CountEditBlocks() const {
-#ifdef FDE_USEFORMATBLOCK
- return m_BlockArray.GetSize();
-#else
- return 0;
-#endif
-}
-void CFDE_TxtEdtEngine::GetEditBlockText(int32_t nIndex,
- CFX_WideString& wsBlockText) const {
-#ifdef FDE_USEFORMATBLOCK
- CFDE_TxtEdtBlock* pBlock = m_BlockArray[nIndex];
- pBlock->GetBlockText(wsBlockText);
-#endif
-}
-int32_t CFDE_TxtEdtEngine::CountEditFields(int32_t nBlockIndex) const {
-#ifdef FDE_USEFORMATBLOCK
- CFDE_TxtEdtBlock* pBlock = m_BlockArray[nBlockIndex];
- return pBlock->CountField();
-#else
- return 0;
-#endif
-}
-void CFDE_TxtEdtEngine::GetEditFieldText(int32_t nBlockIndex,
- int32_t nFieldIndex,
- CFX_WideString& wsFieldText) const {
-#ifdef FDE_USEFORMATBLOCK
- CFDE_TxtEdtBlock* pBlock = m_BlockArray[nBlockIndex];
- pBlock->GetFieldText(nFieldIndex, wsFieldText);
-#endif
-}
-void CFDE_TxtEdtEngine::StartEdit() {
-#ifdef FDE_USEFORMATBLOCK
-#endif
-}
-void CFDE_TxtEdtEngine::EndEdit() {
-#ifdef FDE_USEFORMATBLOCK
-#endif
-}
+
void CFDE_TxtEdtEngine::RemoveSelRange(int32_t nStart, int32_t nCount) {
FDE_LPTXTEDTSELRANGE lpTemp = NULL;
int32_t nRangeCount = m_SelRangePtrArr.GetSize();
@@ -1262,61 +872,7 @@ void CFDE_TxtEdtEngine::Inner_Insert(int32_t nStart,
m_Param.pEventSink->On_PageLoad(this, m_nCaretPage, 0);
UpdatePages();
}
-#ifdef FDE_USEFORMATBLOCK
-void CFDE_TxtEdtEngine::RawInsert(int32_t nStart,
- const FX_WCHAR* lpText,
- int32_t nLength) {
- FXSYS_assert(nLength > 0);
- FDE_TXTEDTPARAGPOS ParagPos;
- TextPos2ParagPos(nStart, ParagPos);
- int32_t nParagCount = m_ParagPtrArray.GetSize();
- int32_t i = 0;
- for (i = ParagPos.nParagIndex + 1; i < nParagCount; i++) {
- m_ParagPtrArray[i]->m_nCharStart += nLength;
- }
- CFDE_TxtEdtParag* pParag = m_ParagPtrArray[ParagPos.nParagIndex];
- int32_t nReserveLineCount = pParag->m_nLineCount;
- int32_t nReserveCharStart = pParag->m_nCharStart;
- int32_t nLeavePart = ParagPos.nCharIndex;
- int32_t nCutPart = pParag->m_nCharCount - ParagPos.nCharIndex;
- int32_t nTextStart = 0;
- FX_WCHAR wCurChar = L' ';
- const FX_WCHAR* lpPos = lpText;
- FX_BOOL bFirst = TRUE;
- int32_t nParagIndex = ParagPos.nParagIndex;
- for (i = 0; i < nLength; i++, lpPos++) {
- wCurChar = *lpPos;
- if (wCurChar == m_wLineEnd) {
- if (bFirst) {
- pParag->m_nCharCount = nLeavePart + (i - nTextStart + 1);
- pParag->m_nLineCount = -1;
- nReserveCharStart += pParag->m_nCharCount;
- bFirst = FALSE;
- } else {
- pParag = new CFDE_TxtEdtParag(this);
- pParag->m_nLineCount = -1;
- pParag->m_nCharCount = i - nTextStart + 1;
- pParag->m_nCharStart = nReserveCharStart;
- m_ParagPtrArray.InsertAt(++nParagIndex, pParag);
- nReserveCharStart += pParag->m_nCharCount;
- }
- nTextStart = i + 1;
- }
- }
- if (bFirst) {
- pParag->m_nCharCount += nLength;
- pParag->m_nLineCount = -1;
- bFirst = FALSE;
- } else {
- pParag = new CFDE_TxtEdtParag(this);
- pParag->m_nLineCount = -1;
- pParag->m_nCharCount = nLength - nTextStart + nCutPart;
- pParag->m_nCharStart = nReserveCharStart;
- m_ParagPtrArray.InsertAt(++nParagIndex, pParag);
- }
- m_pTxtBuf->Insert(nStart, lpText, nLength);
-}
-#endif
+
void CFDE_TxtEdtEngine::Inner_DeleteRange(int32_t nStart, int32_t nCount) {
if (nCount == -1) {
nCount = m_pTxtBuf->GetTextLength() - nStart;
@@ -1380,11 +936,7 @@ void CFDE_TxtEdtEngine::DeleteRange_DoRecord(int32_t nStart,
nCount = GetTextLength() - nStart;
}
FXSYS_assert((nStart + nCount) <= m_pTxtBuf->GetTextLength());
-#ifdef FDE_USEFORMATBLOCK
- int32_t nBlockCount = m_BlockArray.GetSize();
- if (nBlockCount > 0) {
- }
-#endif
+
if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
CFX_WideString wsRange;
m_pTxtBuf->GetRange(wsRange, nStart, nCount);
@@ -1955,285 +1507,7 @@ FX_BOOL CFDE_TxtEdtEngine::MoveEnd() {
UpdateCaretRect(GetTextBufLength(), TRUE);
return TRUE;
}
-#ifdef FDE_USEFORMATBLOCK
-int32_t CFDE_TxtEdtEngine::NormalizeCaretPos(int32_t nIndex,
- int32_t nFlags,
- FX_BOOL& bBefore) {
- bBefore = TRUE;
- int32_t nBgn = 0, nEnd = 0;
- int32_t nRecord = -1;
- CFDE_TxtEdtField* pField = NULL;
- FX_BOOL bRet = GetFieldBoundary(nIndex, nBgn, nEnd, pField);
- int32_t nDelta = 0;
- if (bRet && !pField->IsFix()) {
- if (nIndex - nBgn < FDE_FORMAT_EDIT_FIELD_HADERSIZE) {
- if (nFlags == FDE_FORMAT_CARET_BACKWARD) {
- CFDE_TxtEdtField* pEditableField = NULL;
- if (FindEditableField(nIndex, nBgn, nEnd, pEditableField, FALSE)) {
- return pEditableField->NormalizeCaretPos(nEnd - nBgn,
- FDE_FORMAT_CARET_BACKWARD) +
- nBgn;
- }
- }
- nIndex = nBgn + FDE_FORMAT_EDIT_FIELD_HADERSIZE;
- }
- int32_t nRet = pField->NormalizeCaretPos(
- nIndex - nBgn, (FDE_FORMAT_CARET_DIRECTION)nFlags);
- if (nRet >= 0) {
- return nRet + nBgn;
- }
- if (nRet == -2) {
- int32_t nEditablePosBgn = 0, nEditablePosEnd = 0;
- pField->GetEditableRange(nEditablePosBgn, nEditablePosEnd);
- nRecord = nBgn + nEditablePosBgn;
- nFlags = FDE_FORMAT_CARET_BACKWARD;
- } else {
- FXSYS_assert(nRet == -1);
- int32_t nEditablePosBgn = 0, nEditablePosEnd = 0;
- pField->GetEditableRange(nEditablePosBgn, nEditablePosEnd);
- nRecord = nBgn + nEditablePosEnd;
- nFlags = FDE_FORMAT_CARET_FORWARD;
- }
- } else if (!bRet) {
- nDelta = FDE_FORMAT_EDIT_FIELD_HADERSIZE - FDE_FORMAT_EDIT_FIELD_TAILSIZE;
- }
- switch (nFlags) {
- case FDE_FORMAT_CARET_FORWARD: {
- if (FindEditableField(nIndex, nBgn, nEnd, pField)) {
- return pField->NormalizeCaretPos(FDE_FORMAT_EDIT_FIELD_HADERSIZE,
- FDE_FORMAT_CARET_FORWARD) +
- nBgn;
- } else {
- if (nRecord != -1) {
- return nRecord;
- }
- bRet = FindEditableField(nIndex, nBgn, nEnd, pField, FALSE);
- FXSYS_assert(bRet);
- return pField->NormalizeCaretPos(nEnd - nBgn,
- FDE_FORMAT_CARET_BACKWARD) +
- nBgn;
- }
- } break;
- case FDE_FORMAT_CARET_MIDDLE: {
- int32_t nBgn1 = 0, nEnd1 = 0, nBgn2 = 0, nEnd2 = 0;
- CFDE_TxtEdtField* pEditableField1 = NULL;
- CFDE_TxtEdtField* pEditableField2 = NULL;
- FX_BOOL bRet1 =
- FindEditableField(nIndex, nBgn1, nEnd1, pEditableField1, FALSE);
- FX_BOOL bRet2 = FindEditableField(nIndex, nBgn2, nEnd2, pEditableField2);
- if (bRet1 == FALSE) {
- FXSYS_assert(bRet2);
- return pEditableField2->NormalizeCaretPos(
- FDE_FORMAT_EDIT_FIELD_HADERSIZE, FDE_FORMAT_CARET_FORWARD) +
- nBgn2;
- } else if (bRet2 == FALSE) {
- FXSYS_assert(bRet1);
- return pEditableField1->NormalizeCaretPos(nEnd1 - nBgn1,
- FDE_FORMAT_CARET_BACKWARD) +
- nBgn1;
- } else {
- int32_t nEditablePosBgn = 0, nEditablePosEnd = 0;
- if (nIndex - nEnd1 < nBgn2 + nDelta - nIndex) {
- pEditableField1->GetEditableRange(nEditablePosBgn, nEditablePosEnd);
- return nEditablePosEnd + nBgn1;
- } else {
- pEditableField2->GetEditableRange(nEditablePosBgn, nEditablePosEnd);
- return nEditablePosBgn + nBgn2;
- }
- }
- } break;
- case FDE_FORMAT_CARET_BACKWARD: {
- if (FindEditableField(nIndex, nBgn, nEnd, pField, FALSE)) {
- return pField->NormalizeCaretPos(nEnd - nBgn,
- FDE_FORMAT_CARET_BACKWARD) +
- nBgn;
- } else {
- if (nRecord != -1) {
- return nRecord;
- }
- bRet = FindEditableField(nIndex, nBgn, nEnd, pField);
- FXSYS_assert(bRet);
- return pField->NormalizeCaretPos(FDE_FORMAT_EDIT_FIELD_HADERSIZE,
- FDE_FORMAT_CARET_FORWARD) +
- nBgn;
- }
- } break;
- default:
- FXSYS_assert(0);
- return nIndex;
- }
-}
-FX_BOOL CFDE_TxtEdtEngine::GetFieldBoundary(int32_t nIndex,
- int32_t& nBgn,
- int32_t& nEnd,
- CFDE_TxtEdtField*& pField) {
- CFDE_TxtEdtBufIter* pIter =
- new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf, FALSE);
- pIter->SetAt(nIndex);
- FX_BOOL bFind = FALSE;
- do {
- FX_WCHAR wc = pIter->GetChar();
- if (wc == FDE_TXTEDT_FORMATBLOCK_END) {
- nEnd = pIter->GetAt();
- bFind = TRUE;
- nIndex--;
- break;
- }
- if (wc == FDE_TXTEDT_FORMATBLOCK_BGN) {
- pIter->Release();
- return FALSE;
- }
- } while (pIter->Next());
- if (!bFind) {
- pIter->Release();
- return FALSE;
- }
- pIter->SetAt(nIndex);
- do {
- FX_WCHAR wc = pIter->GetChar();
- if (wc == FDE_TXTEDT_FORMATBLOCK_BGN) {
- nBgn = pIter->GetAt();
- pIter->Next();
- FX_DWORD dwPre = (FX_DWORD)pIter->GetChar();
- pIter->Next();
- FX_DWORD dwCur = (FX_DWORD)pIter->GetChar();
- pField = (CFDE_TxtEdtField*)((dwCur << 16) | dwPre);
- pIter->Release();
- return TRUE;
- }
- if (wc == FDE_TXTEDT_FORMATBLOCK_END) {
- pIter->Release();
- return FALSE;
- }
- } while (pIter->Next(TRUE));
- pIter->Release();
- return FALSE;
-}
-FX_BOOL CFDE_TxtEdtEngine::FindEditableField(int32_t nIndex,
- int32_t& nBgn,
- int32_t& nEnd,
- CFDE_TxtEdtField*& pField,
- FX_BOOL bForward) {
- FX_WCHAR wcFirst = FDE_TXTEDT_FORMATBLOCK_BGN;
- FX_WCHAR wcSecond = FDE_TXTEDT_FORMATBLOCK_END;
- if (!bForward) {
- wcFirst = FDE_TXTEDT_FORMATBLOCK_END;
- wcSecond = FDE_TXTEDT_FORMATBLOCK_BGN;
- }
- CFDE_TxtEdtBufIter* pIter =
- new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf, FALSE);
- pIter->SetAt(nIndex);
- int32_t bFind = FALSE;
- do {
- FX_WCHAR wc = pIter->GetChar();
- if (wc == wcFirst) {
- nBgn = pIter->GetAt();
- bFind = TRUE;
- break;
- }
- } while (pIter->Next(!bForward));
- if (!bFind) {
- pIter->Release();
- return FALSE;
- }
- bFind = FALSE;
- do {
- FX_WCHAR wc = pIter->GetChar();
- if (wc == wcSecond) {
- nEnd = pIter->GetAt();
- bFind = TRUE;
- break;
- }
- } while (pIter->Next(!bForward));
- FXSYS_assert(bFind);
- if (!bForward) {
- int32_t nTemp = nBgn;
- nBgn = nEnd;
- nEnd = nTemp;
- }
- pIter->SetAt(nBgn + 1);
- FX_DWORD dwPre = (FX_DWORD)pIter->GetChar();
- pIter->Next();
- FX_DWORD dwCur = (FX_DWORD)pIter->GetChar();
- pField = (CFDE_TxtEdtField*)((dwCur << 16) | dwPre);
- pIter->Release();
- if (!pField->IsFix()) {
- return TRUE;
- }
- return FindEditableField((bForward ? nEnd : nBgn), nBgn, nEnd, pField,
- bForward);
-}
-FX_BOOL CFDE_TxtEdtEngine::Move2NextEditableField(int32_t nIndex,
- FX_BOOL bForward,
- FX_BOOL bSelect) {
- if (m_SelRangePtrArr.GetSize() > 0) {
- ClearSelection();
- m_Param.pEventSink->On_SelChanged(this);
- }
- int32_t nBgn = 0, nEnd = 0;
- CFDE_TxtEdtField* pField = NULL;
- FX_BOOL bRet = FindEditableField(nIndex, nBgn, nEnd, pField, bForward);
- if (!bRet) {
- return FALSE;
- }
- int32_t nEditableBgn = 0, nEditableEnd = 0;
- pField->GetEditableRange(nEditableBgn, nEditableEnd);
- nEditableBgn += nBgn;
- nEditableEnd += nBgn;
- if (bSelect) {
- int32_t nRangeCount = nEditableEnd - nEditableBgn;
- if (nRangeCount > 0) {
- AddSelRange(nEditableBgn, nEditableEnd - nEditableBgn);
- }
- }
- SetCaretPos(nEditableEnd, TRUE);
- return TRUE;
-}
-int32_t CFDE_TxtEdtEngine::GetRealIndex(int32_t nIndex) const {
- CFDE_TxtEdtBufIter* pIter =
- new CFDE_TxtEdtBufIter((CFDE_TxtEdtBuf*)m_pTxtBuf, FALSE);
- pIter->SetAt(0);
- FX_BOOL bInField = FALSE;
- int32_t nFieldBgn = 0;
- int32_t nRealIndex = 0;
- for (int32_t i = 0; i <= nIndex; i++) {
- FX_WCHAR wc = pIter->GetChar();
- if (bInField) {
- if (wc == FDE_TXTEDT_FORMATBLOCK_END) {
- FX_DWORD dwPre = (FX_DWORD)m_pTxtBuf->GetCharByIndex(nFieldBgn + 1);
- FX_DWORD dwCur = (FX_DWORD)m_pTxtBuf->GetCharByIndex(nFieldBgn + 2);
- CFDE_TxtEdtField* pField = (CFDE_TxtEdtField*)((dwCur << 16) | dwPre);
- nRealIndex += pField->GetFieldTextLength();
- bInField = FALSE;
- }
- } else {
- if (wc == FDE_TXTEDT_FORMATBLOCK_BGN) {
- bInField = TRUE;
- nFieldBgn = pIter->GetAt();
- } else {
- nRealIndex++;
- }
- }
- pIter->Next();
- }
- if (!bInField) {
- pIter->Release();
- return nRealIndex;
- }
- pIter->SetAt(nFieldBgn + 1);
- FX_DWORD dwPre = (FX_DWORD)pIter->GetChar();
- pIter->Next();
- FX_DWORD dwCur = (FX_DWORD)pIter->GetChar();
- CFDE_TxtEdtField* pField = (CFDE_TxtEdtField*)((dwCur << 16) | dwPre);
- pIter->Release();
- if (pField->IsFix()) {
- int32_t nDelta = nIndex - nFieldBgn - FDE_FORMAT_EDIT_FIELD_HADERSIZE + 1;
- return nRealIndex + (nDelta > 0 ? nDelta : 0);
- } else {
- return nRealIndex + pField->GetRealIndex(nIndex - nFieldBgn);
- }
-}
-#endif
+
FX_BOOL CFDE_TxtEdtEngine::IsFitArea(CFX_WideString& wsText) {
IFDE_TextOut* pTextOut = IFDE_TextOut::Create();
pTextOut->SetLineSpace(m_Param.fLineSpace);
@@ -2332,64 +1606,6 @@ FX_BOOL CFDE_TxtEdtEngine::IsSelect() {
void CFDE_TxtEdtEngine::DeleteSelect() {
int32_t nCountRange = CountSelRanges();
if (nCountRange > 0) {
-#ifdef FDE_USEFORMATBLOCK
- int32_t nBlockCount = m_BlockArray.GetSize();
- if (nBlockCount > 0) {
- if (nCountRange > 1) {
- return;
- }
- int32_t nSelStart;
- int32_t nSelCount;
- nSelCount = GetSelRange(0, nSelStart);
- int32_t nSelEnd = nSelStart + nSelCount;
- int32_t nBgn = 0;
- int32_t nEnd = 0;
- CFDE_TxtEdtField* pField = NULL;
- FX_BOOL bInField = GetFieldBoundary(nSelStart, nBgn, nEnd, pField);
- int32_t nCaretInField = nSelStart - nBgn;
- FX_BOOL bBefore = FALSE;
- if (!bInField || pField->IsFix() || nSelEnd > nEnd) {
- return;
- }
- pField->Backup();
- CFX_WideString wsDel;
- int32_t nCaret = 0;
- int32_t nRet =
- pField->Delete(nCaretInField, nSelCount, wsDel, nCaret, bBefore);
- nCaret += nBgn;
- switch (nRet) {
- case FDE_FORMAT_FIELD_DELETE_RET_S:
- break;
- case FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE:
- case FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY:
- return;
- default:
- FXSYS_assert(0);
- break;
- }
- CFX_WideString wsField;
- pField->GetFieldText(wsField);
- if (!m_Param.pEventSink->On_ValidateField(
- this, pField->GetBlockIndex(), pField->GetIndex(), wsField, 0)) {
- pField->Restore();
- return;
- }
- CFX_WideString wsDisplay;
- pField->GetDisplayText(wsDisplay);
- Replace(nBgn, nEnd - nBgn + 1, wsDisplay);
- if (!(m_Param.dwMode & FDE_TEXTEDITMODE_NoRedoUndo)) {
- IFDE_TxtEdtDoRecord* pRecord = new CFDE_TxtEdtDoRecord_FieldDelete(
- this, nSelStart, pField, nCaretInField, nBgn, nEnd - nBgn + 1,
- wsDisplay.GetLength(), wsDel, FALSE);
- CFX_ByteString bsDoRecord;
- pRecord->Serialize(bsDoRecord);
- m_Param.pEventSink->On_AddDoRecord(this, bsDoRecord);
- pRecord->Release();
- }
- SetCaretPos(nSelStart, bBefore);
- return;
- }
-#endif
int32_t nSelStart;
int32_t nSelCount;
while (nCountRange > 0) {
@@ -2415,14 +1631,6 @@ IFDE_TxtEdtDoRecord* IFDE_TxtEdtDoRecord::Create(
return new CFDE_TxtEdtDoRecord_Insert(bsDoRecord);
case FDE_TXTEDT_DORECORD_DEL:
return new CFDE_TxtEdtDoRecord_DeleteRange(bsDoRecord);
-#ifdef FDE_USEFORMATBLOCK
- case FDE_TXTEDT_DORECORD_FORMATINS:
- return new CFDE_TxtEdtDoRecord_FieldInsert(bsDoRecord);
- case FDE_TXTEDT_DORECORD_FORMATDEL:
- return new CFDE_TxtEdtDoRecord_FieldDelete(bsDoRecord);
- case FDE_TXTEDT_DORECORD_FORMATREP:
- return new CFDE_TxtEdtDoRecord_FieldReplace(bsDoRecord);
-#endif
default:
break;
}
@@ -2573,299 +1781,3 @@ void CFDE_TxtEdtDoRecord_DeleteRange::Deserialize(
ArchiveLoader >> m_nCaret;
ArchiveLoader >> m_wsRange;
}
-#ifdef FDE_USEFORMATBLOCK
-CFDE_TxtEdtDoRecord_FieldInsert::CFDE_TxtEdtDoRecord_FieldInsert(
- const CFX_ByteStringC& bsDoRecord) {
- Deserialize(bsDoRecord);
-}
-CFDE_TxtEdtDoRecord_FieldInsert::CFDE_TxtEdtDoRecord_FieldInsert(
- CFDE_TxtEdtEngine* pEngine,
- int32_t nCaret,
- CFDE_TxtEdtField* pField,
- int32_t nIndexInField,
- int32_t nFieldBgn,
- int32_t nOldFieldLength,
- int32_t nNewFieldLength,
- const CFX_WideString& wsIns,
- FX_BOOL bSel)
- : m_pEngine(pEngine),
- m_nCaret(nCaret),
- m_pField(pField),
- m_nIndexInField(nIndexInField),
- m_nFieldBgn(nFieldBgn),
- m_nOldFieldLength(nOldFieldLength),
- m_nNewFieldLength(nNewFieldLength),
- m_wsIns(wsIns),
- m_bSel(bSel) {
- FXSYS_assert(pEngine);
- FXSYS_assert(pField);
-}
-CFDE_TxtEdtDoRecord_FieldInsert::~CFDE_TxtEdtDoRecord_FieldInsert() {}
-void CFDE_TxtEdtDoRecord_FieldInsert::Release() {
- delete this;
-}
-FX_BOOL CFDE_TxtEdtDoRecord_FieldInsert::Undo() {
- CFX_WideString wsDel;
- int32_t nCaret = 0;
- FX_BOOL bBefore = FALSE;
- int32_t nRet = m_pField->Delete(m_nIndexInField, m_wsIns.GetLength(), wsDel,
- nCaret, bBefore);
- FXSYS_assert(nRet != FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE &&
- nRet != FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY);
- CFX_WideString wsDisplay;
- m_pField->GetDisplayText(wsDisplay);
- m_pEngine->Replace(m_nFieldBgn, m_nNewFieldLength, wsDisplay);
- m_pEngine->SetCaretPos(m_nCaret, TRUE);
- return TRUE;
-}
-FX_BOOL CFDE_TxtEdtDoRecord_FieldInsert::Redo() {
- int32_t nCaret = 0;
- FX_BOOL bBefore = FALSE;
- int32_t nRet = m_pField->Insert(m_nIndexInField, m_wsIns, nCaret, bBefore);
- FXSYS_assert(nRet != FDE_FORMAT_FIELD_INSERT_RET_F_FULL &&
- nRet != FDE_FORMAT_FIELD_INSERT_RET_F_INVALIDATE);
- CFX_WideString wsDisplay;
- m_pField->GetDisplayText(wsDisplay);
- m_pEngine->Replace(m_nFieldBgn, m_nOldFieldLength, wsDisplay);
- m_pEngine->SetCaretPos(m_nCaret + m_wsIns.GetLength(), TRUE);
- return TRUE;
-}
-void CFDE_TxtEdtDoRecord_FieldInsert::Serialize(
- CFX_ByteString& bsDoRecord) const {
- CFX_ArchiveSaver ArchiveSaver;
- ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_FORMATINS);
- ArchiveSaver << int32_t(m_pEngine);
- ArchiveSaver << m_nCaret;
- ArchiveSaver << int32_t(m_pField);
- ArchiveSaver << m_nIndexInField;
- ArchiveSaver << m_nFieldBgn;
- ArchiveSaver << m_nOldFieldLength;
- ArchiveSaver << m_nNewFieldLength;
- ArchiveSaver << m_wsIns;
- ArchiveSaver << m_bSel;
- 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_FieldInsert::Deserialize(
- const CFX_ByteStringC& bsDoRecord) {
- CFX_ArchiveLoader ArchiveLoader((const uint8_t*)bsDoRecord.GetCStr(),
- bsDoRecord.GetLength());
- int32_t nType = 0;
- ArchiveLoader >> nType;
- FXSYS_assert(nType == FDE_TXTEDT_DORECORD_FORMATINS);
- int32_t nEngine = 0;
- ArchiveLoader >> nEngine;
- m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
- ArchiveLoader >> m_nCaret;
- int32_t nField = 0;
- ArchiveLoader >> nField;
- m_pField = (CFDE_TxtEdtField*)nField;
- ArchiveLoader >> m_nIndexInField;
- ArchiveLoader >> m_nFieldBgn;
- ArchiveLoader >> m_nOldFieldLength;
- ArchiveLoader >> m_nNewFieldLength;
- ArchiveLoader >> m_wsIns;
- ArchiveLoader >> m_bSel;
-}
-CFDE_TxtEdtDoRecord_FieldDelete::CFDE_TxtEdtDoRecord_FieldDelete(
- const CFX_ByteStringC& bsDoRecord) {
- Deserialize(bsDoRecord);
-}
-CFDE_TxtEdtDoRecord_FieldDelete::CFDE_TxtEdtDoRecord_FieldDelete(
- CFDE_TxtEdtEngine* pEngine,
- int32_t nCaret,
- CFDE_TxtEdtField* pField,
- int32_t nIndexInField,
- int32_t nFieldBgn,
- int32_t nOldLength,
- int32_t nNewLength,
- const CFX_WideString& wsDel,
- FX_BOOL bSel)
- : m_pEngine(pEngine),
- m_nCaret(nCaret),
- m_pField(pField),
- m_nIndexInField(nIndexInField),
- m_nFieldBgn(nFieldBgn),
- m_nOldFieldLength(nOldLength),
- m_nNewFieldLength(nNewLength),
- m_wsDel(wsDel),
- m_bSel(bSel) {
- FXSYS_assert(m_pEngine);
- FXSYS_assert(m_pField);
-}
-CFDE_TxtEdtDoRecord_FieldDelete::~CFDE_TxtEdtDoRecord_FieldDelete() {}
-void CFDE_TxtEdtDoRecord_FieldDelete::Release() {
- delete this;
-}
-FX_BOOL CFDE_TxtEdtDoRecord_FieldDelete::Undo() {
- int32_t nCaret = 0;
- FX_BOOL bBefore = FALSE;
- int32_t nRet = m_pField->Insert(m_nIndexInField, m_wsDel, nCaret, bBefore);
- FXSYS_assert(nRet != FDE_FORMAT_FIELD_INSERT_RET_F_FULL &&
- nRet != FDE_FORMAT_FIELD_INSERT_RET_F_INVALIDATE);
- CFX_WideString wsDisplay;
- m_pField->GetDisplayText(wsDisplay);
- m_pEngine->Replace(m_nFieldBgn, m_nNewFieldLength, wsDisplay);
- m_pEngine->SetCaretPos(m_nCaret, TRUE);
- return TRUE;
-}
-FX_BOOL CFDE_TxtEdtDoRecord_FieldDelete::Redo() {
- int32_t nCaret = 0;
- FX_BOOL bBefore = 0;
- CFX_WideString wsDel;
- int32_t nRet = m_pField->Delete(m_nIndexInField, m_wsDel.GetLength(), wsDel,
- nCaret, bBefore);
- FXSYS_assert(nRet != FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE &&
- nRet != FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY);
- CFX_WideString wsDisplay;
- m_pField->GetDisplayText(wsDisplay);
- m_pEngine->Replace(m_nFieldBgn, m_nOldFieldLength, wsDisplay);
- m_pEngine->SetCaretPos(m_nCaret - m_wsDel.GetLength(), TRUE);
- return TRUE;
-}
-void CFDE_TxtEdtDoRecord_FieldDelete::Serialize(
- CFX_ByteString& bsDoRecord) const {
- CFX_ArchiveSaver ArchiveSaver;
- ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_FORMATDEL);
- ArchiveSaver << int32_t(m_pEngine);
- ArchiveSaver << m_nCaret;
- ArchiveSaver << int32_t(m_pField);
- ArchiveSaver << m_nIndexInField;
- ArchiveSaver << m_nFieldBgn;
- ArchiveSaver << m_nOldFieldLength;
- ArchiveSaver << m_nNewFieldLength;
- ArchiveSaver << m_wsDel;
- ArchiveSaver << m_bSel;
- 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_FieldDelete::Deserialize(
- const CFX_ByteStringC& bsDoRecord) {
- CFX_ArchiveLoader ArchiveLoader((const uint8_t*)bsDoRecord.GetCStr(),
- bsDoRecord.GetLength());
- int32_t nType = 0;
- ArchiveLoader >> nType;
- FXSYS_assert(nType == FDE_TXTEDT_DORECORD_FORMATDEL);
- int32_t nEngine = 0;
- ArchiveLoader >> nEngine;
- m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
- ArchiveLoader >> m_nCaret;
- int32_t nField = 0;
- ArchiveLoader >> nField;
- m_pField = (CFDE_TxtEdtField*)nField;
- ArchiveLoader >> m_nIndexInField;
- ArchiveLoader >> m_nFieldBgn;
- ArchiveLoader >> m_nOldFieldLength;
- ArchiveLoader >> m_nNewFieldLength;
- ArchiveLoader >> m_wsDel;
- ArchiveLoader >> m_bSel;
-}
-CFDE_TxtEdtDoRecord_FieldReplace::CFDE_TxtEdtDoRecord_FieldReplace(
- const CFX_ByteStringC& bsDoRecord) {
- Deserialize(bsDoRecord);
-}
-CFDE_TxtEdtDoRecord_FieldReplace::CFDE_TxtEdtDoRecord_FieldReplace(
- CFDE_TxtEdtEngine* pEngine,
- int32_t nCaret,
- int32_t nNewCaret,
- CFDE_TxtEdtField* pField,
- int32_t nIndexInField,
- int32_t nFieldBgn,
- int32_t nFieldNewLength,
- const CFX_WideString& wsDel,
- const CFX_WideString& wsIns,
- FX_BOOL bSel)
- : m_pEngine(pEngine),
- m_nCaret(nCaret),
- m_nNewCaret(nNewCaret),
- m_pField(pField),
- m_nIndexInField(nIndexInField),
- m_nFieldBgn(nFieldBgn),
- m_nFieldNewLength(nFieldNewLength),
- m_wsDel(wsDel),
- m_wsIns(wsIns),
- m_bSel(bSel) {
- FXSYS_assert(m_pEngine);
- FXSYS_assert(m_pField);
-}
-CFDE_TxtEdtDoRecord_FieldReplace::~CFDE_TxtEdtDoRecord_FieldReplace() {}
-void CFDE_TxtEdtDoRecord_FieldReplace::Release() {
- delete this;
-}
-FX_BOOL CFDE_TxtEdtDoRecord_FieldReplace::Undo() {
- CFX_WideString wsDel;
- int32_t nCaret = 0;
- FX_BOOL bBefore = FALSE;
- int32_t nRet = m_pField->Replace(m_nIndexInField, m_wsIns.GetLength(),
- m_wsDel, wsDel, nCaret, bBefore);
- FXSYS_assert(nRet != FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE &&
- nRet != FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY);
- CFX_WideString wsDisplay;
- m_pField->GetDisplayText(wsDisplay);
- m_pEngine->Replace(m_nFieldBgn, m_nFieldNewLength, wsDisplay);
- m_pEngine->SetCaretPos(m_nCaret, TRUE);
- return TRUE;
-}
-FX_BOOL CFDE_TxtEdtDoRecord_FieldReplace::Redo() {
- CFX_WideString wsDel;
- int32_t nCaret = 0;
- FX_BOOL bBefore = FALSE;
- int32_t nRet = m_pField->Replace(m_nIndexInField, m_wsDel.GetLength(),
- m_wsIns, wsDel, nCaret, bBefore);
- FXSYS_assert(nRet != FDE_FORMAT_FIELD_DELETE_RET_F_INVALIDATE &&
- nRet != FDE_FORMAT_FIELD_DELETE_RET_F_BOUNDARY);
- CFX_WideString wsDisplay;
- m_pField->GetDisplayText(wsDisplay);
- m_pEngine->Replace(m_nFieldBgn, m_nFieldNewLength, wsDisplay);
- m_pEngine->SetCaretPos(m_nNewCaret, TRUE);
- return TRUE;
-}
-void CFDE_TxtEdtDoRecord_FieldReplace::Serialize(
- CFX_ByteString& bsDoRecord) const {
- CFX_ArchiveSaver ArchiveSaver;
- ArchiveSaver << int32_t(FDE_TXTEDT_DORECORD_FORMATREP);
- ArchiveSaver << int32_t(m_pEngine);
- ArchiveSaver << m_nCaret;
- ArchiveSaver << m_nNewCaret;
- ArchiveSaver << int32_t(m_pField);
- ArchiveSaver << m_nIndexInField;
- ArchiveSaver << m_nFieldBgn;
- ArchiveSaver << m_nFieldNewLength;
- ArchiveSaver << m_wsDel;
- ArchiveSaver << m_wsIns;
- ArchiveSaver << m_bSel;
- 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_FieldReplace::Deserialize(
- const CFX_ByteStringC& bsDoRecord) {
- CFX_ArchiveLoader ArchiveLoader((const uint8_t*)bsDoRecord.GetCStr(),
- bsDoRecord.GetLength());
- int32_t nType = 0;
- ArchiveLoader >> nType;
- FXSYS_assert(nType == FDE_TXTEDT_DORECORD_FORMATREP);
- int32_t nEngine = 0;
- ArchiveLoader >> nEngine;
- m_pEngine = (CFDE_TxtEdtEngine*)(uintptr_t)nEngine;
- ArchiveLoader >> m_nCaret;
- ArchiveLoader >> m_nNewCaret;
- int32_t nField = 0;
- ArchiveLoader >> nField;
- m_pField = (CFDE_TxtEdtField*)nField;
- ArchiveLoader >> m_nIndexInField;
- ArchiveLoader >> m_nFieldBgn;
- ArchiveLoader >> m_nFieldNewLength;
- ArchiveLoader >> m_wsDel;
- ArchiveLoader >> m_wsIns;
- ArchiveLoader >> m_bSel;
-}
-#endif