John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 1 | // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 4 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
Tom Sepez | 19922bb | 2015-05-28 13:23:12 -0700 | [diff] [blame] | 7 | #ifndef FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_ |
| 8 | #define FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_ |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 9 | |
Lei Zhang | a688a04 | 2015-11-09 13:57:49 -0800 | [diff] [blame] | 10 | #include "core/include/fpdfdoc/fpdf_vt.h" |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 11 | #include "fpdfsdk/include/fxedit/fx_edit.h" |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 12 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 13 | class CFX_Edit; |
| 14 | class CFX_Edit_Iterator; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 15 | class CFX_Edit_Provider; |
| 16 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 17 | #define FX_EDIT_IsFloatZero(f) (f < 0.0001 && f > -0.0001) |
| 18 | #define FX_EDIT_IsFloatEqual(fa, fb) FX_EDIT_IsFloatZero(fa - fb) |
| 19 | #define FX_EDIT_IsFloatBigger(fa, fb) (fa > fb && !FX_EDIT_IsFloatEqual(fa, fb)) |
| 20 | #define FX_EDIT_IsFloatSmaller(fa, fb) \ |
| 21 | (fa < fb && !FX_EDIT_IsFloatEqual(fa, fb)) |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 22 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 23 | /* ------------------------- CFX_Edit_Refresh ---------------------------- */ |
| 24 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 25 | enum REFRESH_PLAN_E { RP_ANALYSE, RP_NOANALYSE, RP_OPTIONAL }; |
| 26 | |
| 27 | enum EDIT_PROPS_E { |
| 28 | EP_LINELEADING, |
| 29 | EP_LINEINDENT, |
| 30 | EP_ALIGNMENT, |
| 31 | EP_FONTINDEX, |
| 32 | EP_FONTSIZE, |
| 33 | EP_WORDCOLOR, |
| 34 | EP_SCRIPTTYPE, |
| 35 | EP_UNDERLINE, |
| 36 | EP_CROSSOUT, |
| 37 | EP_CHARSPACE, |
| 38 | EP_HORZSCALE, |
| 39 | EP_BOLD, |
| 40 | EP_ITALIC |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 41 | }; |
| 42 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 43 | struct CFX_Edit_LineRect { |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 44 | CFX_Edit_LineRect(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine) |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 45 | : m_wrLine(wrLine), m_rcLine(rcLine) {} |
| 46 | |
| 47 | FX_BOOL operator!=(const CFX_Edit_LineRect& linerect) const { |
| 48 | return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0; |
| 49 | } |
| 50 | |
| 51 | FX_BOOL IsSameHeight(const CFX_Edit_LineRect& linerect) const { |
| 52 | return FX_EDIT_IsFloatZero( |
| 53 | (m_rcLine.top - m_rcLine.bottom) - |
| 54 | (linerect.m_rcLine.top - linerect.m_rcLine.bottom)); |
| 55 | } |
| 56 | |
| 57 | FX_BOOL IsSameTop(const CFX_Edit_LineRect& linerect) const { |
| 58 | return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top); |
| 59 | } |
| 60 | |
| 61 | FX_BOOL IsSameLeft(const CFX_Edit_LineRect& linerect) const { |
| 62 | return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left); |
| 63 | } |
| 64 | |
| 65 | FX_BOOL IsSameRight(const CFX_Edit_LineRect& linerect) const { |
| 66 | return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right); |
| 67 | } |
| 68 | |
| 69 | CPVT_WordRange m_wrLine; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 70 | CFX_FloatRect m_rcLine; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 71 | }; |
| 72 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 73 | class CFX_Edit_LineRectArray { |
| 74 | public: |
| 75 | CFX_Edit_LineRectArray() {} |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 76 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 77 | virtual ~CFX_Edit_LineRectArray() { Empty(); } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 78 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 79 | void Empty() { |
| 80 | for (int32_t i = 0, sz = m_LineRects.GetSize(); i < sz; i++) |
| 81 | delete m_LineRects.GetAt(i); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 82 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 83 | m_LineRects.RemoveAll(); |
| 84 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 85 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 86 | void RemoveAll() { m_LineRects.RemoveAll(); } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 87 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 88 | void operator=(CFX_Edit_LineRectArray& rects) { |
| 89 | Empty(); |
| 90 | for (int32_t i = 0, sz = rects.GetSize(); i < sz; i++) |
| 91 | m_LineRects.Add(rects.GetAt(i)); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 92 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 93 | rects.RemoveAll(); |
| 94 | } |
| 95 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 96 | void Add(const CPVT_WordRange& wrLine, const CFX_FloatRect& rcLine) { |
Lei Zhang | e00660b | 2015-08-13 15:40:18 -0700 | [diff] [blame] | 97 | m_LineRects.Add(new CFX_Edit_LineRect(wrLine, rcLine)); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 98 | } |
| 99 | |
| 100 | int32_t GetSize() const { return m_LineRects.GetSize(); } |
| 101 | |
| 102 | CFX_Edit_LineRect* GetAt(int32_t nIndex) const { |
| 103 | if (nIndex < 0 || nIndex >= m_LineRects.GetSize()) |
| 104 | return NULL; |
| 105 | |
| 106 | return m_LineRects.GetAt(nIndex); |
| 107 | } |
| 108 | |
| 109 | CFX_ArrayTemplate<CFX_Edit_LineRect*> m_LineRects; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 110 | }; |
| 111 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 112 | class CFX_Edit_RectArray { |
| 113 | public: |
| 114 | CFX_Edit_RectArray() {} |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 115 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 116 | virtual ~CFX_Edit_RectArray() { Empty(); } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 117 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 118 | void Empty() { |
| 119 | for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) |
| 120 | delete m_Rects.GetAt(i); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 121 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 122 | m_Rects.RemoveAll(); |
| 123 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 124 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 125 | void Add(const CFX_FloatRect& rect) { |
Lei Zhang | e00660b | 2015-08-13 15:40:18 -0700 | [diff] [blame] | 126 | // check for overlapped area |
| 127 | for (int32_t i = 0, sz = m_Rects.GetSize(); i < sz; i++) { |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 128 | CFX_FloatRect* pRect = m_Rects.GetAt(i); |
Lei Zhang | e00660b | 2015-08-13 15:40:18 -0700 | [diff] [blame] | 129 | if (pRect && pRect->Contains(rect)) |
| 130 | return; |
| 131 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 132 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 133 | m_Rects.Add(new CFX_FloatRect(rect)); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 134 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 135 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 136 | int32_t GetSize() const { return m_Rects.GetSize(); } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 137 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 138 | CFX_FloatRect* GetAt(int32_t nIndex) const { |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 139 | if (nIndex < 0 || nIndex >= m_Rects.GetSize()) |
| 140 | return NULL; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 141 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 142 | return m_Rects.GetAt(nIndex); |
| 143 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 144 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 145 | CFX_ArrayTemplate<CFX_FloatRect*> m_Rects; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 146 | }; |
| 147 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 148 | class CFX_Edit_Refresh { |
| 149 | public: |
| 150 | CFX_Edit_Refresh(); |
| 151 | virtual ~CFX_Edit_Refresh(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 152 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 153 | void BeginRefresh(); |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 154 | void Push(const CPVT_WordRange& linerange, const CFX_FloatRect& rect); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 155 | void NoAnalyse(); |
| 156 | void Analyse(int32_t nAlignment); |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 157 | void AddRefresh(const CFX_FloatRect& rect); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 158 | const CFX_Edit_RectArray* GetRefreshRects() const; |
| 159 | void EndRefresh(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 160 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 161 | private: |
| 162 | CFX_Edit_LineRectArray m_NewLineRects; |
| 163 | CFX_Edit_LineRectArray m_OldLineRects; |
| 164 | CFX_Edit_RectArray m_RefreshRects; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 165 | }; |
| 166 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 167 | /* ------------------------- CFX_Edit_Select ---------------------------- */ |
| 168 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 169 | class CFX_Edit_Select { |
| 170 | public: |
| 171 | CFX_Edit_Select() {} |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 172 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 173 | CFX_Edit_Select(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { |
| 174 | Set(begin, end); |
| 175 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 176 | |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 177 | explicit CFX_Edit_Select(const CPVT_WordRange& range) { |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 178 | Set(range.BeginPos, range.EndPos); |
| 179 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 180 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 181 | CPVT_WordRange ConvertToWordRange() const { |
| 182 | return CPVT_WordRange(BeginPos, EndPos); |
| 183 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 184 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 185 | void Default() { |
| 186 | BeginPos.Default(); |
| 187 | EndPos.Default(); |
| 188 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 189 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 190 | void Set(const CPVT_WordPlace& begin, const CPVT_WordPlace& end) { |
| 191 | BeginPos = begin; |
| 192 | EndPos = end; |
| 193 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 194 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 195 | void SetBeginPos(const CPVT_WordPlace& begin) { BeginPos = begin; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 196 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 197 | void SetEndPos(const CPVT_WordPlace& end) { EndPos = end; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 198 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 199 | FX_BOOL IsExist() const { return BeginPos != EndPos; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 200 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 201 | FX_BOOL operator!=(const CPVT_WordRange& wr) const { |
| 202 | return wr.BeginPos != BeginPos || wr.EndPos != EndPos; |
| 203 | } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 204 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 205 | CPVT_WordPlace BeginPos, EndPos; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 206 | }; |
| 207 | |
| 208 | /* ------------------------- CFX_Edit_Undo ---------------------------- */ |
| 209 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 210 | class CFX_Edit_Undo { |
| 211 | public: |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 212 | explicit CFX_Edit_Undo(int32_t nBufsize); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 213 | virtual ~CFX_Edit_Undo(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 214 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 215 | void Undo(); |
| 216 | void Redo(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 217 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 218 | void AddItem(IFX_Edit_UndoItem* pItem); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 219 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 220 | FX_BOOL CanUndo() const; |
| 221 | FX_BOOL CanRedo() const; |
| 222 | FX_BOOL IsModified() const; |
| 223 | FX_BOOL IsWorking() const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 224 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 225 | void Reset(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 226 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 227 | IFX_Edit_UndoItem* GetItem(int32_t nIndex); |
| 228 | int32_t GetItemCount() { return m_UndoItemStack.GetSize(); } |
| 229 | int32_t GetCurUndoPos() { return m_nCurUndoPos; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 230 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 231 | private: |
| 232 | void SetBufSize(int32_t nSize) { m_nBufSize = nSize; } |
| 233 | int32_t GetBufSize() { return m_nBufSize; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 234 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 235 | void RemoveHeads(); |
| 236 | void RemoveTails(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 237 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 238 | private: |
| 239 | CFX_ArrayTemplate<IFX_Edit_UndoItem*> m_UndoItemStack; |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 240 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 241 | int32_t m_nCurUndoPos; |
| 242 | int32_t m_nBufSize; |
| 243 | FX_BOOL m_bModified; |
| 244 | FX_BOOL m_bVirgin; |
| 245 | FX_BOOL m_bWorking; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 246 | }; |
| 247 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 248 | class CFX_Edit_UndoItem : public IFX_Edit_UndoItem { |
| 249 | public: |
| 250 | CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {} |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 251 | ~CFX_Edit_UndoItem() override {} |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 252 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 253 | CFX_WideString GetUndoTitle() override { return L""; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 254 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 255 | void SetFirst(FX_BOOL bFirst) { m_bFirst = bFirst; } |
| 256 | FX_BOOL IsFirst() { return m_bFirst; } |
| 257 | void SetLast(FX_BOOL bLast) { m_bLast = bLast; } |
| 258 | FX_BOOL IsLast() { return m_bLast; } |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 259 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 260 | private: |
| 261 | FX_BOOL m_bFirst; |
| 262 | FX_BOOL m_bLast; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 263 | }; |
| 264 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 265 | class CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem { |
| 266 | public: |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 267 | explicit CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 268 | ~CFX_Edit_GroupUndoItem() override; |
Tom Sepez | ced4c2b | 2015-04-20 16:33:30 -0700 | [diff] [blame] | 269 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 270 | void Undo() override; |
| 271 | void Redo() override; |
| 272 | CFX_WideString GetUndoTitle() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 273 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 274 | void AddUndoItem(CFX_Edit_UndoItem* pUndoItem); |
| 275 | void UpdateItems(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 276 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 277 | private: |
| 278 | CFX_WideString m_sTitle; |
| 279 | CFX_ArrayTemplate<CFX_Edit_UndoItem*> m_Items; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 280 | }; |
| 281 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 282 | /* ------------------------- CFX_Edit_UndoItem derived classes |
| 283 | * ---------------------------- */ |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 284 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 285 | class CFXEU_InsertWord : public CFX_Edit_UndoItem { |
| 286 | public: |
| 287 | CFXEU_InsertWord(CFX_Edit* pEdit, |
| 288 | const CPVT_WordPlace& wpOldPlace, |
| 289 | const CPVT_WordPlace& wpNewPlace, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 290 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 291 | int32_t charset, |
| 292 | const CPVT_WordProps* pWordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 293 | ~CFXEU_InsertWord() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 294 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 295 | // CFX_Edit_UndoItem |
| 296 | void Redo() override; |
| 297 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 298 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 299 | private: |
| 300 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 301 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 302 | CPVT_WordPlace m_wpOld; |
| 303 | CPVT_WordPlace m_wpNew; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 304 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 305 | int32_t m_nCharset; |
| 306 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 307 | }; |
| 308 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 309 | class CFXEU_InsertReturn : public CFX_Edit_UndoItem { |
| 310 | public: |
| 311 | CFXEU_InsertReturn(CFX_Edit* pEdit, |
| 312 | const CPVT_WordPlace& wpOldPlace, |
| 313 | const CPVT_WordPlace& wpNewPlace, |
| 314 | const CPVT_SecProps* pSecProps, |
| 315 | const CPVT_WordProps* pWordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 316 | ~CFXEU_InsertReturn() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 317 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 318 | // CFX_Edit_UndoItem |
| 319 | void Redo() override; |
| 320 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 321 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 322 | private: |
| 323 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 324 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 325 | CPVT_WordPlace m_wpOld; |
| 326 | CPVT_WordPlace m_wpNew; |
| 327 | CPVT_SecProps m_SecProps; |
| 328 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 329 | }; |
| 330 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 331 | class CFXEU_Backspace : public CFX_Edit_UndoItem { |
| 332 | public: |
| 333 | CFXEU_Backspace(CFX_Edit* pEdit, |
| 334 | const CPVT_WordPlace& wpOldPlace, |
| 335 | const CPVT_WordPlace& wpNewPlace, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 336 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 337 | int32_t charset, |
| 338 | const CPVT_SecProps& SecProps, |
| 339 | const CPVT_WordProps& WordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 340 | ~CFXEU_Backspace() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 341 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 342 | // CFX_Edit_UndoItem |
| 343 | void Redo() override; |
| 344 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 345 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 346 | private: |
| 347 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 348 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 349 | CPVT_WordPlace m_wpOld; |
| 350 | CPVT_WordPlace m_wpNew; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 351 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 352 | int32_t m_nCharset; |
| 353 | CPVT_SecProps m_SecProps; |
| 354 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 355 | }; |
| 356 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 357 | class CFXEU_Delete : public CFX_Edit_UndoItem { |
| 358 | public: |
| 359 | CFXEU_Delete(CFX_Edit* pEdit, |
| 360 | const CPVT_WordPlace& wpOldPlace, |
| 361 | const CPVT_WordPlace& wpNewPlace, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 362 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 363 | int32_t charset, |
| 364 | const CPVT_SecProps& SecProps, |
| 365 | const CPVT_WordProps& WordProps, |
| 366 | FX_BOOL bSecEnd); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 367 | ~CFXEU_Delete() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 368 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 369 | // CFX_Edit_UndoItem |
| 370 | void Redo() override; |
| 371 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 372 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 373 | private: |
| 374 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 375 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 376 | CPVT_WordPlace m_wpOld; |
| 377 | CPVT_WordPlace m_wpNew; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 378 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 379 | int32_t m_nCharset; |
| 380 | CPVT_SecProps m_SecProps; |
| 381 | CPVT_WordProps m_WordProps; |
| 382 | FX_BOOL m_bSecEnd; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 383 | }; |
| 384 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 385 | class CFXEU_Clear : public CFX_Edit_UndoItem { |
| 386 | public: |
| 387 | CFXEU_Clear(CFX_Edit* pEdit, |
| 388 | const CPVT_WordRange& wrSel, |
| 389 | const CFX_WideString& swText); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 390 | ~CFXEU_Clear() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 391 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 392 | // CFX_Edit_UndoItem |
| 393 | void Redo() override; |
| 394 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 395 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 396 | private: |
| 397 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 398 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 399 | CPVT_WordRange m_wrSel; |
| 400 | CFX_WideString m_swText; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 401 | }; |
| 402 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 403 | class CFXEU_ClearRich : public CFX_Edit_UndoItem { |
| 404 | public: |
| 405 | CFXEU_ClearRich(CFX_Edit* pEdit, |
| 406 | const CPVT_WordPlace& wpOldPlace, |
| 407 | const CPVT_WordPlace& wpNewPlace, |
| 408 | const CPVT_WordRange& wrSel, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 409 | uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 410 | int32_t charset, |
| 411 | const CPVT_SecProps& SecProps, |
| 412 | const CPVT_WordProps& WordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 413 | ~CFXEU_ClearRich() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 414 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 415 | // CFX_Edit_UndoItem |
| 416 | void Redo() override; |
| 417 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 418 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 419 | private: |
| 420 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 421 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 422 | CPVT_WordPlace m_wpOld; |
| 423 | CPVT_WordPlace m_wpNew; |
| 424 | CPVT_WordRange m_wrSel; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 425 | uint16_t m_Word; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 426 | int32_t m_nCharset; |
| 427 | CPVT_SecProps m_SecProps; |
| 428 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 429 | }; |
| 430 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 431 | class CFXEU_InsertText : public CFX_Edit_UndoItem { |
| 432 | public: |
| 433 | CFXEU_InsertText(CFX_Edit* pEdit, |
| 434 | const CPVT_WordPlace& wpOldPlace, |
| 435 | const CPVT_WordPlace& wpNewPlace, |
| 436 | const CFX_WideString& swText, |
| 437 | int32_t charset, |
| 438 | const CPVT_SecProps* pSecProps, |
| 439 | const CPVT_WordProps* pWordProps); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 440 | ~CFXEU_InsertText() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 441 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 442 | // CFX_Edit_UndoItem |
| 443 | void Redo() override; |
| 444 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 445 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 446 | private: |
| 447 | CFX_Edit* m_pEdit; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 448 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 449 | CPVT_WordPlace m_wpOld; |
| 450 | CPVT_WordPlace m_wpNew; |
| 451 | CFX_WideString m_swText; |
| 452 | int32_t m_nCharset; |
| 453 | CPVT_SecProps m_SecProps; |
| 454 | CPVT_WordProps m_WordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 455 | }; |
| 456 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 457 | class CFXEU_SetSecProps : public CFX_Edit_UndoItem { |
| 458 | public: |
| 459 | CFXEU_SetSecProps(CFX_Edit* pEdit, |
| 460 | const CPVT_WordPlace& place, |
| 461 | EDIT_PROPS_E ep, |
| 462 | const CPVT_SecProps& oldsecprops, |
| 463 | const CPVT_WordProps& oldwordprops, |
| 464 | const CPVT_SecProps& newsecprops, |
| 465 | const CPVT_WordProps& newwordprops, |
| 466 | const CPVT_WordRange& range); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 467 | ~CFXEU_SetSecProps() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 468 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 469 | // CFX_Edit_UndoItem |
| 470 | void Redo() override; |
| 471 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 472 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 473 | private: |
| 474 | CFX_Edit* m_pEdit; |
| 475 | CPVT_WordPlace m_wpPlace; |
| 476 | CPVT_WordRange m_wrPlace; |
| 477 | EDIT_PROPS_E m_eProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 478 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 479 | CPVT_SecProps m_OldSecProps; |
| 480 | CPVT_SecProps m_NewSecProps; |
| 481 | CPVT_WordProps m_OldWordProps; |
| 482 | CPVT_WordProps m_NewWordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 483 | }; |
| 484 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 485 | class CFXEU_SetWordProps : public CFX_Edit_UndoItem { |
| 486 | public: |
| 487 | CFXEU_SetWordProps(CFX_Edit* pEdit, |
| 488 | const CPVT_WordPlace& place, |
| 489 | EDIT_PROPS_E ep, |
| 490 | const CPVT_WordProps& oldprops, |
| 491 | const CPVT_WordProps& newprops, |
| 492 | const CPVT_WordRange& range); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 493 | ~CFXEU_SetWordProps() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 494 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 495 | // CFX_Edit_UndoItem |
| 496 | void Redo() override; |
| 497 | void Undo() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 498 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 499 | private: |
| 500 | CFX_Edit* m_pEdit; |
| 501 | CPVT_WordPlace m_wpPlace; |
| 502 | CPVT_WordRange m_wrPlace; |
| 503 | EDIT_PROPS_E m_eProps; |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 504 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 505 | CPVT_WordProps m_OldWordProps; |
| 506 | CPVT_WordProps m_NewWordProps; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 507 | }; |
| 508 | |
| 509 | /* ------------------------- CFX_Edit ---------------------------- */ |
| 510 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 511 | class CFX_Edit : public IFX_Edit { |
| 512 | friend class CFX_Edit_Iterator; |
| 513 | friend class CFXEU_InsertWord; |
| 514 | friend class CFXEU_InsertReturn; |
| 515 | friend class CFXEU_Backspace; |
| 516 | friend class CFXEU_Delete; |
| 517 | friend class CFXEU_Clear; |
| 518 | friend class CFXEU_ClearRich; |
| 519 | friend class CFXEU_SetSecProps; |
| 520 | friend class CFXEU_SetWordProps; |
| 521 | friend class CFXEU_InsertText; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 522 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 523 | public: |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 524 | explicit CFX_Edit(IPDF_VariableText* pVT); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 525 | ~CFX_Edit() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 526 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 527 | // IFX_Edit |
| 528 | void SetFontMap(IFX_Edit_FontMap* pFontMap) override; |
| 529 | void SetVTProvider(IPDF_VariableText_Provider* pProvider) override; |
| 530 | void SetNotify(IFX_Edit_Notify* pNotify) override; |
| 531 | void SetOprNotify(IFX_Edit_OprNotify* pOprNotify) override; |
| 532 | IFX_Edit_Iterator* GetIterator() override; |
| 533 | IPDF_VariableText* GetVariableText() override; |
| 534 | IFX_Edit_FontMap* GetFontMap() override; |
| 535 | void Initialize() override; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 536 | void SetPlateRect(const CFX_FloatRect& rect, FX_BOOL bPaint = TRUE) override; |
| 537 | void SetScrollPos(const CFX_FloatPoint& point) override; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 538 | void SetAlignmentH(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) override; |
| 539 | void SetAlignmentV(int32_t nFormat = 0, FX_BOOL bPaint = TRUE) override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 540 | void SetPasswordChar(uint16_t wSubWord = '*', FX_BOOL bPaint = TRUE) override; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 541 | void SetLimitChar(int32_t nLimitChar = 0, FX_BOOL bPaint = TRUE) override; |
| 542 | void SetCharArray(int32_t nCharArray = 0, FX_BOOL bPaint = TRUE) override; |
| 543 | void SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE) override; |
| 544 | void SetHorzScale(int32_t nHorzScale = 100, FX_BOOL bPaint = TRUE) override; |
| 545 | void SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE) override; |
| 546 | void SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE) override; |
| 547 | void SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) override; |
| 548 | void SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) override; |
| 549 | void SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE) override; |
| 550 | void SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE) override; |
| 551 | void SetTextOverflow(FX_BOOL bAllowed = FALSE, |
| 552 | FX_BOOL bPaint = TRUE) override; |
| 553 | FX_BOOL IsRichText() const override; |
| 554 | void SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE) override; |
| 555 | FX_BOOL SetRichFontSize(FX_FLOAT fFontSize) override; |
| 556 | FX_BOOL SetRichFontIndex(int32_t nFontIndex) override; |
| 557 | FX_BOOL SetRichTextColor(FX_COLORREF dwColor) override; |
| 558 | FX_BOOL SetRichTextScript(int32_t nScriptType) override; |
| 559 | FX_BOOL SetRichTextBold(FX_BOOL bBold = TRUE) override; |
| 560 | FX_BOOL SetRichTextItalic(FX_BOOL bItalic = TRUE) override; |
| 561 | FX_BOOL SetRichTextUnderline(FX_BOOL bUnderline = TRUE) override; |
| 562 | FX_BOOL SetRichTextCrossout(FX_BOOL bCrossout = TRUE) override; |
| 563 | FX_BOOL SetRichTextCharSpace(FX_FLOAT fCharSpace) override; |
| 564 | FX_BOOL SetRichTextHorzScale(int32_t nHorzScale = 100) override; |
| 565 | FX_BOOL SetRichTextLineLeading(FX_FLOAT fLineLeading) override; |
| 566 | FX_BOOL SetRichTextLineIndent(FX_FLOAT fLineIndent) override; |
| 567 | FX_BOOL SetRichTextAlignment(int32_t nAlignment) override; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 568 | void OnMouseDown(const CFX_FloatPoint& point, |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 569 | FX_BOOL bShift, |
| 570 | FX_BOOL bCtrl) override; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 571 | void OnMouseMove(const CFX_FloatPoint& point, |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 572 | FX_BOOL bShift, |
| 573 | FX_BOOL bCtrl) override; |
| 574 | void OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) override; |
| 575 | void OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) override; |
| 576 | void OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) override; |
| 577 | void OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) override; |
| 578 | void OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) override; |
| 579 | void OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) override; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 580 | void SetText(const FX_WCHAR* text, |
| 581 | int32_t charset = DEFAULT_CHARSET, |
| 582 | const CPVT_SecProps* pSecProps = NULL, |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 583 | const CPVT_WordProps* pWordProps = NULL) override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 584 | FX_BOOL InsertWord(uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 585 | int32_t charset = DEFAULT_CHARSET, |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 586 | const CPVT_WordProps* pWordProps = NULL) override; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 587 | FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps = NULL, |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 588 | const CPVT_WordProps* pWordProps = NULL) override; |
| 589 | FX_BOOL Backspace() override; |
| 590 | FX_BOOL Delete() override; |
| 591 | FX_BOOL Clear() override; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 592 | FX_BOOL InsertText(const FX_WCHAR* text, |
| 593 | int32_t charset = DEFAULT_CHARSET, |
| 594 | const CPVT_SecProps* pSecProps = NULL, |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 595 | const CPVT_WordProps* pWordProps = NULL) override; |
| 596 | FX_BOOL Redo() override; |
| 597 | FX_BOOL Undo() override; |
| 598 | int32_t WordPlaceToWordIndex(const CPVT_WordPlace& place) const override; |
| 599 | CPVT_WordPlace WordIndexToWordPlace(int32_t index) const override; |
| 600 | CPVT_WordPlace GetLineBeginPlace(const CPVT_WordPlace& place) const override; |
| 601 | CPVT_WordPlace GetLineEndPlace(const CPVT_WordPlace& place) const override; |
| 602 | CPVT_WordPlace GetSectionBeginPlace( |
| 603 | const CPVT_WordPlace& place) const override; |
| 604 | CPVT_WordPlace GetSectionEndPlace(const CPVT_WordPlace& place) const override; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 605 | CPVT_WordPlace SearchWordPlace(const CFX_FloatPoint& point) const override; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 606 | int32_t GetCaret() const override; |
| 607 | CPVT_WordPlace GetCaretWordPlace() const override; |
| 608 | CFX_WideString GetSelText() const override; |
| 609 | CFX_WideString GetText() const override; |
| 610 | FX_FLOAT GetFontSize() const override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 611 | uint16_t GetPasswordChar() const override; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 612 | CFX_FloatPoint GetScrollPos() const override; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 613 | int32_t GetCharArray() const override; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 614 | CFX_FloatRect GetPlateRect() const override; |
| 615 | CFX_FloatRect GetContentRect() const override; |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 616 | CFX_WideString GetRangeText(const CPVT_WordRange& range) const override; |
| 617 | int32_t GetHorzScale() const override; |
| 618 | FX_FLOAT GetCharSpace() const override; |
| 619 | int32_t GetTotalWords() const override; |
| 620 | void SetSel(int32_t nStartChar, int32_t nEndChar) override; |
| 621 | void GetSel(int32_t& nStartChar, int32_t& nEndChar) const override; |
| 622 | void SelectAll() override; |
| 623 | void SelectNone() override; |
| 624 | FX_BOOL IsSelected() const override; |
| 625 | void Paint() override; |
| 626 | void EnableNotify(FX_BOOL bNotify) override; |
| 627 | void EnableRefresh(FX_BOOL bRefresh) override; |
| 628 | void RefreshWordRange(const CPVT_WordRange& wr) override; |
| 629 | void SetCaret(int32_t nPos) override; |
| 630 | CPVT_WordRange GetWholeWordRange() const override; |
| 631 | CPVT_WordRange GetSelectWordRange() const override; |
| 632 | void EnableUndo(FX_BOOL bUndo) override; |
| 633 | void EnableOprNotify(FX_BOOL bNotify) override; |
| 634 | FX_BOOL IsTextFull() const override; |
| 635 | FX_BOOL IsTextOverflow() const; |
| 636 | FX_BOOL CanUndo() const override; |
| 637 | FX_BOOL CanRedo() const override; |
| 638 | FX_BOOL IsModified() const override; |
| 639 | CPVT_WordRange GetVisibleWordRange() const override; |
| 640 | void AddUndoItem(IFX_Edit_UndoItem* pUndoItem) override; |
| 641 | |
| 642 | FX_BOOL Empty(); |
| 643 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 644 | CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place, |
| 645 | const FX_WCHAR* text, |
| 646 | int32_t charset, |
| 647 | const CPVT_SecProps* pSecProps, |
| 648 | const CPVT_WordProps* pWordProps); |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 649 | int32_t GetCharSetFromUnicode(uint16_t word, int32_t nOldCharset); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 650 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 651 | int32_t GetTotalLines() const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 652 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 653 | private: |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 654 | void SetSel(const CPVT_WordPlace& begin, const CPVT_WordPlace& end); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 655 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 656 | void RearrangeAll(); |
| 657 | void RearrangePart(const CPVT_WordRange& range); |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 658 | void ScrollToCaret(); |
| 659 | void SetScrollInfo(); |
| 660 | void SetScrollPosX(FX_FLOAT fx); |
| 661 | void SetScrollPosY(FX_FLOAT fy); |
| 662 | void SetScrollLimit(); |
| 663 | void SetContentChanged(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 664 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 665 | void SetText(const FX_WCHAR* text, |
| 666 | int32_t charset, |
| 667 | const CPVT_SecProps* pSecProps, |
| 668 | const CPVT_WordProps* pWordProps, |
| 669 | FX_BOOL bAddUndo, |
| 670 | FX_BOOL bPaint); |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 671 | FX_BOOL InsertWord(uint16_t word, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 672 | int32_t charset, |
| 673 | const CPVT_WordProps* pWordProps, |
| 674 | FX_BOOL bAddUndo, |
| 675 | FX_BOOL bPaint); |
| 676 | FX_BOOL InsertReturn(const CPVT_SecProps* pSecProps, |
| 677 | const CPVT_WordProps* pWordProps, |
| 678 | FX_BOOL bAddUndo, |
| 679 | FX_BOOL bPaint); |
| 680 | FX_BOOL Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint); |
| 681 | FX_BOOL Delete(FX_BOOL bAddUndo, FX_BOOL bPaint); |
| 682 | FX_BOOL Clear(FX_BOOL bAddUndo, FX_BOOL bPaint); |
| 683 | FX_BOOL InsertText(const FX_WCHAR* text, |
| 684 | int32_t charset, |
| 685 | const CPVT_SecProps* pSecProps, |
| 686 | const CPVT_WordProps* pWordProps, |
| 687 | FX_BOOL bAddUndo, |
| 688 | FX_BOOL bPaint); |
| 689 | FX_BOOL SetRichTextProps(EDIT_PROPS_E eProps, |
| 690 | const CPVT_SecProps* pSecProps, |
| 691 | const CPVT_WordProps* pWordProps); |
| 692 | FX_BOOL SetSecProps(EDIT_PROPS_E eProps, |
| 693 | const CPVT_WordPlace& place, |
| 694 | const CPVT_SecProps* pSecProps, |
| 695 | const CPVT_WordProps* pWordProps, |
| 696 | const CPVT_WordRange& wr, |
| 697 | FX_BOOL bAddUndo); |
| 698 | FX_BOOL SetWordProps(EDIT_PROPS_E eProps, |
| 699 | const CPVT_WordPlace& place, |
| 700 | const CPVT_WordProps* pWordProps, |
| 701 | const CPVT_WordRange& wr, |
| 702 | FX_BOOL bAddUndo); |
| 703 | void PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange& wr); |
| 704 | void PaintInsertText(const CPVT_WordPlace& wpOld, |
| 705 | const CPVT_WordPlace& wpNew); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 706 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 707 | inline CFX_FloatPoint VTToEdit(const CFX_FloatPoint& point) const; |
| 708 | inline CFX_FloatPoint EditToVT(const CFX_FloatPoint& point) const; |
| 709 | inline CFX_FloatRect VTToEdit(const CFX_FloatRect& rect) const; |
| 710 | inline CFX_FloatRect EditToVT(const CFX_FloatRect& rect) const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 711 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 712 | void Refresh(REFRESH_PLAN_E ePlan, |
| 713 | const CPVT_WordRange* pRange1 = NULL, |
| 714 | const CPVT_WordRange* pRange2 = NULL); |
| 715 | void RefreshPushLineRects(const CPVT_WordRange& wr); |
| 716 | void RefreshPushRandomRects(const CPVT_WordRange& wr); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 717 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 718 | void SetCaret(const CPVT_WordPlace& place); |
| 719 | void SetCaretInfo(); |
| 720 | void SetCaretOrigin(); |
| 721 | void SetCaretChange(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 722 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 723 | CPVT_WordRange GetLatinWordsRange(const CPVT_WordPlace& place) const; |
| 724 | CPVT_WordRange CombineWordRange(const CPVT_WordRange& wr1, |
| 725 | const CPVT_WordRange& wr2); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 726 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 727 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 728 | void BeginGroupUndo(const CFX_WideString& sTitle); |
| 729 | void EndGroupUndo(); |
| 730 | void AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 731 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 732 | void SetPageInfo(const CPVT_WordPlace& place); |
| 733 | CPVT_WordPlace SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin, |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 734 | const CFX_FloatPoint& point) const; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 735 | FX_FLOAT GetLineTop(const CPVT_WordPlace& place) const; |
| 736 | FX_FLOAT GetLineBottom(const CPVT_WordPlace& place) const; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 737 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 738 | private: |
| 739 | IPDF_VariableText* m_pVT; |
| 740 | IFX_Edit_Notify* m_pNotify; |
| 741 | IFX_Edit_OprNotify* m_pOprNotify; |
| 742 | CFX_Edit_Provider* m_pVTProvide; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 743 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 744 | CPVT_WordPlace m_wpCaret; |
| 745 | CPVT_WordPlace m_wpOldCaret; |
| 746 | CFX_Edit_Select m_SelState; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 747 | |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 748 | CFX_FloatPoint m_ptScrollPos; |
| 749 | CFX_FloatPoint m_ptRefreshScrollPos; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 750 | FX_BOOL m_bEnableScroll; |
| 751 | IFX_Edit_Iterator* m_pIterator; |
| 752 | CFX_Edit_Refresh m_Refresh; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 753 | CFX_FloatPoint m_ptCaret; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 754 | CFX_Edit_Undo m_Undo; |
| 755 | int32_t m_nAlignment; |
| 756 | FX_BOOL m_bNotifyFlag; |
| 757 | FX_BOOL m_bEnableOverflow; |
| 758 | FX_BOOL m_bEnableRefresh; |
Tom Sepez | 281a9ea | 2016-02-26 14:24:28 -0800 | [diff] [blame] | 759 | CFX_FloatRect m_rcOldContent; |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 760 | FX_BOOL m_bEnableUndo; |
| 761 | FX_BOOL m_bNotify; |
| 762 | FX_BOOL m_bOprNotify; |
| 763 | CFX_Edit_GroupUndoItem* m_pGroupUndoItem; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 764 | }; |
| 765 | |
| 766 | /* ------------------------- CFX_Edit_Iterator ---------------------------- */ |
| 767 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 768 | class CFX_Edit_Iterator : public IFX_Edit_Iterator { |
| 769 | public: |
| 770 | CFX_Edit_Iterator(CFX_Edit* pEdit, IPDF_VariableText_Iterator* pVTIterator); |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 771 | ~CFX_Edit_Iterator() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 772 | |
Lei Zhang | 2b1a2d5 | 2015-08-14 22:16:22 -0700 | [diff] [blame] | 773 | // IFX_Edit_Iterator |
| 774 | FX_BOOL NextWord() override; |
| 775 | FX_BOOL NextLine() override; |
| 776 | FX_BOOL NextSection() override; |
| 777 | FX_BOOL PrevWord() override; |
| 778 | FX_BOOL PrevLine() override; |
| 779 | FX_BOOL PrevSection() override; |
| 780 | FX_BOOL GetWord(CPVT_Word& word) const override; |
| 781 | FX_BOOL GetLine(CPVT_Line& line) const override; |
| 782 | FX_BOOL GetSection(CPVT_Section& section) const override; |
| 783 | void SetAt(int32_t nWordIndex) override; |
| 784 | void SetAt(const CPVT_WordPlace& place) override; |
| 785 | const CPVT_WordPlace& GetAt() const override; |
| 786 | IFX_Edit* GetEdit() const override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 787 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 788 | private: |
| 789 | CFX_Edit* m_pEdit; |
| 790 | IPDF_VariableText_Iterator* m_pVTIterator; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 791 | }; |
| 792 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 793 | class CFX_Edit_Provider : public IPDF_VariableText_Provider { |
| 794 | public: |
Lei Zhang | 375a864 | 2016-01-11 11:59:17 -0800 | [diff] [blame] | 795 | explicit CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap); |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 796 | ~CFX_Edit_Provider() override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 797 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 798 | IFX_Edit_FontMap* GetFontMap(); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 799 | |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 800 | // IPDF_VariableText_Provider: |
| 801 | int32_t GetCharWidth(int32_t nFontIndex, |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 802 | uint16_t word, |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 803 | int32_t nWordStyle) override; |
| 804 | int32_t GetTypeAscent(int32_t nFontIndex) override; |
| 805 | int32_t GetTypeDescent(int32_t nFontIndex) override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 806 | int32_t GetWordFontIndex(uint16_t word, |
Lei Zhang | 5fd907b | 2015-11-19 22:20:59 -0800 | [diff] [blame] | 807 | int32_t charset, |
| 808 | int32_t nFontIndex) override; |
| 809 | int32_t GetDefaultFontIndex() override; |
Tom Sepez | 62a70f9 | 2016-03-21 15:00:20 -0700 | [diff] [blame^] | 810 | FX_BOOL IsLatinWord(uint16_t word) override; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 811 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 812 | private: |
| 813 | IFX_Edit_FontMap* m_pFontMap; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 814 | }; |
| 815 | |
Tom Sepez | 19922bb | 2015-05-28 13:23:12 -0700 | [diff] [blame] | 816 | #endif // FPDFSDK_INCLUDE_FXEDIT_FXET_EDIT_H_ |