1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_EditCtrl.h" 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpvt_section.h" 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fpdfdoc/cpvt_word.h" 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "core/fxge/fx_font.h" 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/fxedit/fxet_edit.h" 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_Caret.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_FontMap.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_ScrollBar.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_Utils.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/pdfwindow/PWL_Wnd.h" 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "public/fpdf_fwlevent.h" 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPWL_EditCtrl::CPWL_EditCtrl() 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann : m_pEdit(new CFX_Edit), 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEditCaret(nullptr), 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown(false), 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_nCharSet(FXFONT_DEFAULT_CHARSET), 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_nCodePage(0) {} 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCPWL_EditCtrl::~CPWL_EditCtrl() {} 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM& cp) { 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cp.eCursorType = FXCT_VBEAM; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::OnCreated() { 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetFontSize(GetCreationParam().fFontSize); 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->SetFontMap(GetFontMap()); 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->SetNotify(this); 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->Initialize(); 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPWL_EditCtrl::IsWndHorV() { 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix mt = GetWindowMatrix(); 4333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann return mt.Transform(CFX_PointF(1, 1)).y == mt.Transform(CFX_PointF(0, 1)).y; 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::SetCursor() { 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsValid()) { 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (CFX_SystemHandler* pSH = GetSystemHandler()) { 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsWndHorV()) 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSH->SetCursor(FXCT_VBEAM); 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pSH->SetCursor(FXCT_HBEAM); 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::RePosChildWnd() { 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->SetPlateRect(GetClientRect()); 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint32_t msg, 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann intptr_t wParam, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann intptr_t lParam) { 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (msg) { 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_SETSCROLLINFO: 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (wParam) { 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPWL_Wnd* pChild = GetVScrollBar()) { 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChild->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam); 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_SETSCROLLPOS: 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (wParam) { 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPWL_Wnd* pChild = GetVScrollBar()) { 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pChild->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam); 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_SCROLLWINDOW: { 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fPos = *(FX_FLOAT*)lParam; 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (wParam) { 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case SBT_VSCROLL: 9033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_pEdit->SetScrollPos(CFX_PointF(m_pEdit->GetScrollPos().x, fPos)); 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PNM_SETCARETINFO: { 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (PWL_CARET_INFO* pCaretInfo = (PWL_CARET_INFO*)wParam) { 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetCaret(pCaretInfo->bVisible, pCaretInfo->ptHead, pCaretInfo->ptFoot); 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } break; 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM& cp) { 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CreateEditCaret(cp); 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM& cp) { 1084d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (m_pEditCaret) 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return; 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEditCaret = new CPWL_Caret; 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEditCaret->SetInvalidRect(GetClientRect()); 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann PWL_CREATEPARAM ecp = cp; 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ecp.pParentWnd = this; 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP; 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ecp.dwBorderWidth = 0; 1184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ecp.nBorderStyle = BorderStyle::SOLID; 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ecp.rcRectWnd = CFX_FloatRect(0, 0, 0, 0); 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEditCaret->Create(ecp); 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize) { 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->SetFontSize(fFontSize); 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPWL_EditCtrl::GetFontSize() const { 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pEdit->GetFontSize(); 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPWL_EditCtrl::OnKeyDown(uint16_t nChar, uint32_t nFlag) { 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bRet = CPWL_Wnd::OnKeyDown(nChar, nFlag); 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // FILTER 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (nChar) { 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 1414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Delete: 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Up: 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Down: 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Left: 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Right: 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Home: 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_End: 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Insert: 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'C': 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'V': 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'X': 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'A': 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'Z': 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'c': 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'v': 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'x': 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'a': 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'z': 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (nChar == FWL_VKEY_Delete && m_pEdit->IsSelected()) 1644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nChar = FWL_VKEY_Unknown; 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (nChar) { 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Delete: 168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Delete(); 1694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Insert: 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsSHIFTpressed(nFlag)) 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PasteText(); 1734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Up: 1754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag), false); 1764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Down: 1784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag), false); 1794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Left: 1814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag), false); 1824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Right: 1844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag), false); 1854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Home: 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); 1884d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_End: 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); 1914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Unknown: 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsSHIFTpressed(nFlag)) 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Clear(); 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CutText(); 1974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return bRet; 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPWL_EditCtrl::OnChar(uint16_t nChar, uint32_t nFlag) { 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) 2074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnChar(nChar, nFlag); 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // FILTER 212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (nChar) { 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 0x0A: 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 0x1B: 2154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bCtrl = IsCTRLpressed(nFlag); 2214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bAlt = IsALTpressed(nFlag); 2224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bShift = IsSHIFTpressed(nFlag); 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann uint16_t word = nChar; 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bCtrl && !bAlt) { 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (nChar) { 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'C' - 'A' + 1: 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CopyText(); 2304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'V' - 'A' + 1: 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PasteText(); 2334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'X' - 'A' + 1: 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CutText(); 2364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'A' - 'A' + 1: 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SelectAll(); 2394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case 'Z' - 'A' + 1: 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bShift) 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Redo(); 243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Undo(); 2454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nChar < 32) 2484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return false; 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsReadOnly()) 2534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEdit->IsSelected() && word == FWL_VKEY_Back) 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann word = FWL_VKEY_Unknown; 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Clear(); 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (word) { 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Back: 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Backspace(); 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Return: 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InsertReturn(); 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case FWL_VKEY_Unknown: 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann default: 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InsertWord(word, GetCharSet()); 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 2744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 27733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmannbool CPWL_EditCtrl::OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) { 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnLButtonDown(point, nFlag); 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ClientHitTest(point)) { 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InvalidateRect(); 283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 2844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = true; 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetCapture(); 286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 2904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 29333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmannbool CPWL_EditCtrl::OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) { 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnLButtonUp(point, nFlag); 295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) { 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // can receive keybord message 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ClientHitTest(point) && !IsFocused()) 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetFocus(); 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ReleaseCapture(); 3024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = false; 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 3054d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 30833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmannbool CPWL_EditCtrl::OnMouseMove(const CFX_PointF& point, uint32_t nFlag) { 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPWL_Wnd::OnMouseMove(point, nFlag); 310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) 3124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->OnMouseMove(point, false, false); 313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 3144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return true; 315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 3174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. MoltmannCFX_FloatRect CPWL_EditCtrl::GetContentRect() const { 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pEdit->GetContentRect(); 319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 3214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::SetEditCaret(bool bVisible) { 32233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF ptHead; 32333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFX_PointF ptFoot; 3244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (bVisible) 32533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann GetCaretInfo(&ptHead, &ptFoot); 326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace(); 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IOnSetCaret(bVisible, ptHead, ptFoot, wpTemp); 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 33133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmannvoid CPWL_EditCtrl::GetCaretInfo(CFX_PointF* ptHead, CFX_PointF* ptFoot) const { 3324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); 3334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pIterator->SetAt(m_pEdit->GetCaret()); 3344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Word word; 3354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Line line; 3364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetWord(word)) { 33733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptHead->x = word.ptWord.x + word.fWidth; 33833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptHead->y = word.ptWord.y + word.fAscent; 33933357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptFoot->x = word.ptWord.x + word.fWidth; 34033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptFoot->y = word.ptWord.y + word.fDescent; 3414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else if (pIterator->GetLine(line)) { 34233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptHead->x = line.ptLine.x; 34333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptHead->y = line.ptLine.y + line.fLineAscent; 34433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptFoot->x = line.ptLine.x; 34533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann ptFoot->y = line.ptLine.y + line.fLineDescent; 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 3494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::SetCaret(bool bVisible, 35033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const CFX_PointF& ptHead, 35133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const CFX_PointF& ptFoot) { 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pEditCaret) { 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsFocused() || m_pEdit->IsSelected()) 3544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bVisible = false; 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot); 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPWL_EditCtrl::GetText() const { 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pEdit->GetText(); 362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::SetSel(int32_t nStartChar, int32_t nEndChar) { 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->SetSel(nStartChar, nEndChar); 366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::GetSel(int32_t& nStartChar, int32_t& nEndChar) const { 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->GetSel(nStartChar, nEndChar); 370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::Clear() { 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->Clear(); 375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::SelectAll() { 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->SelectAll(); 379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::Paint() { 3824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->Paint(); 383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 3854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::EnableRefresh(bool bRefresh) { 3864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->EnableRefresh(bRefresh); 387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CPWL_EditCtrl::GetCaret() const { 3904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pEdit->GetCaret(); 391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::SetCaret(int32_t nPos) { 3944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->SetCaret(nPos); 395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CPWL_EditCtrl::GetTotalWords() const { 3984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pEdit->GetTotalWords(); 399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 40133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmannvoid CPWL_EditCtrl::SetScrollPos(const CFX_PointF& point) { 4024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->SetScrollPos(point); 403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 40533357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. MoltmannCFX_PointF CPWL_EditCtrl::GetScrollPos() const { 4064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_pEdit->GetScrollPos(); 407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* CPWL_EditCtrl::GetCaretFont() const { 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t nFontIndex = 0; 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 4124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); 4134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pIterator->SetAt(m_pEdit->GetCaret()); 4144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Word word; 4154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Section section; 4164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetWord(word)) { 4174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nFontIndex = word.nFontIndex; 4184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else if (HasFlag(PES_RICH)) { 4194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetSection(section)) { 4204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann nFontIndex = section.WordProps.nFontIndex; 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (IPVT_FontMap* pFontMap = GetFontMap()) 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFontMap->GetPDFFont(nFontIndex); 426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return nullptr; 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const { 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fFontSize = GetFontSize(); 432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_Edit_Iterator* pIterator = m_pEdit->GetIterator(); 4344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann pIterator->SetAt(m_pEdit->GetCaret()); 4354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Word word; 4364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CPVT_Section section; 4374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetWord(word)) { 4384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fFontSize = word.fFontSize; 4394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann } else if (HasFlag(PES_RICH)) { 4404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann if (pIterator->GetSection(section)) { 4414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann fFontSize = section.WordProps.fFontSize; 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return fFontSize; 446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::SetText(const CFX_WideString& wsText) { 4494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->SetText(wsText); 450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::CopyText() {} 453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::PasteText() {} 455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::CutText() {} 457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::ShowVScrollBar(bool bShow) {} 459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::InsertText(const CFX_WideString& wsText) { 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 4624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_pEdit->InsertText(wsText, FXFONT_DEFAULT_CHARSET); 463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::InsertWord(uint16_t word, int32_t nCharset) { 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->InsertWord(word, nCharset); 468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::InsertReturn() { 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->InsertReturn(); 473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::Delete() { 476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->Delete(); 478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::Backspace() { 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!IsReadOnly()) 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->Backspace(); 483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPWL_EditCtrl::CanUndo() const { 486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return !IsReadOnly() && m_pEdit->CanUndo(); 487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 4894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannbool CPWL_EditCtrl::CanRedo() const { 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return !IsReadOnly() && m_pEdit->CanRedo(); 491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::Redo() { 494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CanRedo()) 495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->Redo(); 496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::Undo() { 499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CanUndo()) 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pEdit->Undo(); 501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin, 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fPlateMax, 505ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fContentMin, 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fContentMax, 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fSmallStep, 508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fBigStep) { 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_SCROLL_INFO Info; 510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Info.fPlateWidth = fPlateMax - fPlateMin; 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Info.fContentMin = fContentMin; 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Info.fContentMax = fContentMax; 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Info.fSmallStep = fSmallStep; 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Info.fBigStep = fBigStep; 516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info); 518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) || 520ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) { 5214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ShowVScrollBar(false); 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 5234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ShowVScrollBar(true); 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy) { 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy); 529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::IOnSetCaret(bool bVisible, 53233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const CFX_PointF& ptHead, 53333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann const CFX_PointF& ptFoot, 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPVT_WordPlace& place) { 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PWL_CARET_INFO cInfo; 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cInfo.bVisible = bVisible; 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cInfo.ptHead = ptHead; 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann cInfo.ptFoot = ptFoot; 539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann OnNotify(this, PNM_SETCARETINFO, (intptr_t)&cInfo, (intptr_t) nullptr); 541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 543ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps& secProps, 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CPVT_WordProps& wordProps) {} 545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::IOnContentChange(const CFX_FloatRect& rcContent) {} 547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::IOnInvalidateRect(CFX_FloatRect* pRect) { 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann InvalidateRect(pRect); 550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint32_t CPWL_EditCtrl::GetCharSet() const { 5534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann return m_nCharSet < 0 ? FXFONT_DEFAULT_CHARSET : m_nCharSet; 554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannvoid CPWL_EditCtrl::GetTextRange(const CFX_FloatRect& rect, 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t& nStartChar, 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t& nEndChar) const { 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nStartChar = m_pEdit->WordPlaceToWordIndex( 56033357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_pEdit->SearchWordPlace(CFX_PointF(rect.left, rect.top))); 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nEndChar = m_pEdit->WordPlaceToWordIndex( 56233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann m_pEdit->SearchWordPlace(CFX_PointF(rect.right, rect.bottom))); 563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_WideString CPWL_EditCtrl::GetText(int32_t& nStartChar, 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int32_t& nEndChar) const { 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar); 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar); 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd)); 570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPWL_EditCtrl::SetReadyToInput() { 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_bMouseDown) { 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ReleaseCapture(); 5754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann m_bMouseDown = false; 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 578