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. 4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PDFWindow.h" 8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h" 9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_EditCtrl.h" 10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_ScrollBar.h" 11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h" 12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_Caret.h" 13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_FontMap.h" 14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) 16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) 17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) 18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) 19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ---------------------------- CPWL_EditCtrl ------------------------------ */ 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_EditCtrl::CPWL_EditCtrl() : 23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit(NULL), 24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditCaret(NULL), 25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bMouseDown(FALSE), 26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditNotify(NULL), 27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_nCharSet(DEFAULT_CHARSET), 28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_nCodePage(0) 29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit = IFX_Edit::NewEdit(); 31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ASSERT(m_pEdit != NULL); 32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_EditCtrl::~CPWL_EditCtrl() 35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov IFX_Edit::DelEdit(m_pEdit); 37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM & cp) 40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov cp.eCursorType = FXCT_VBEAM; 42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::OnCreated() 45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov SetFontSize(this->GetCreationParam().fFontSize); 47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetFontMap(this->GetFontMap()); 49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetNotify(this); 50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Initialize(); 51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::IsWndHorV() 54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Matrix mt = GetWindowMatrix(); 56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point point1(0,1); 57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point point2(1,1); 58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov mt.Transform(point1.x, point1.y); 60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov mt.Transform(point2.x, point2.y); 61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return point2.y == point1.y; 63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetCursor() 66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsValid()) 68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IFX_SystemHandler* pSH = GetSystemHandler()) 70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsWndHorV()) 72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pSH->SetCursor(FXCT_VBEAM); 73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pSH->SetCursor(FXCT_HBEAM); 75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::RePosChildWnd() 80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetPlateRect(GetClientRect()); 82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX_INTPTR lParam) 85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); 87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (msg) 89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case PNM_SETSCROLLINFO: 91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (wParam) 92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case SBT_VSCROLL: 94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CPWL_Wnd * pChild = GetVScrollBar()) 95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); 97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case PNM_SETSCROLLPOS: 102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (wParam) 103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case SBT_VSCROLL: 105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CPWL_Wnd * pChild = GetVScrollBar()) 106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); 108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case PNM_SCROLLWINDOW: 113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fPos = *(FX_FLOAT*)lParam; 115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (wParam) 116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case SBT_VSCROLL: 118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x,fPos)); 119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case PNM_SETCARETINFO: 124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (PWL_CARET_INFO * pCaretInfo = (PWL_CARET_INFO *)wParam) 126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->SetCaret(pCaretInfo->bVisible, 128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pCaretInfo->ptHead, 129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pCaretInfo->ptFoot); 130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM & cp) 137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CreateEditCaret(cp); 140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM & cp) 143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!m_pEditCaret) 145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditCaret = new CPWL_Caret; 147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditCaret->SetInvalidRect(GetClientRect()); 148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PWL_CREATEPARAM ecp = cp; 150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ecp.pParentWnd = this; 151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP; 152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ecp.dwBorderWidth = 0; 153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ecp.nBorderStyle = PBS_SOLID; 154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ecp.rcRectWnd = CPDF_Rect(0,0,0,0); 155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditCaret->Create(ecp); 157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize) 161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetFontSize(fFontSize); 163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CPWL_EditCtrl::GetFontSize() const 166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetFontSize(); 168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) 171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_bMouseDown) return TRUE; 173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar,nFlag); 175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //FILTER 177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (nChar) 178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Delete: 182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Up: 183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Down: 184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Left: 185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Right: 186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Home: 187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_End: 188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Insert: 189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'C': 190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'V': 191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'X': 192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'A': 193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'Z': 194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'c': 195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'v': 196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'x': 197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'a': 198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'z': 199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (nChar == FWL_VKEY_Delete) 203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit->IsSelected()) 205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nChar = FWL_VKEY_Unknown; 206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (nChar) 209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Delete: 211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Delete(); 212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Insert: 214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsSHIFTpressed(nFlag)) 215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PasteText(); 216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Up: 218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag),FALSE); 219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Down: 221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag),FALSE); 222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Left: 224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag),FALSE); 225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Right: 227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag),FALSE); 228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Home: 230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_End: 233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Unknown: 236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsSHIFTpressed(nFlag)) 237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Clear(); 238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CutText(); 240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return bRet; 246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag) 249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_bMouseDown) return TRUE; 251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Wnd::OnChar(nChar,nFlag); 253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //FILTER 255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (nChar) 256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 0x0A: 258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 0x1B: 259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bCtrl = IsCTRLpressed(nFlag); 265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bAlt = IsALTpressed(nFlag); 266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_BOOL bShift = IsSHIFTpressed(nFlag); 267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_WORD word = nChar; 269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bCtrl && !bAlt) 271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (nChar) 273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'C' - 'A' + 1: 275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->CopyText(); 276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'V' - 'A' + 1: 278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->PasteText(); 279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'X' - 'A' + 1: 281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->CutText(); 282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'A' - 'A' + 1: 284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->SelectAll(); 285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case 'Z' - 'A' + 1: 287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bShift) 288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Redo(); 289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Undo(); 291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (nChar < 32) 294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return FALSE; 295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsReadOnly()) return TRUE; 299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit->IsSelected() && word == FWL_VKEY_Back) 301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov word = FWL_VKEY_Unknown; 302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Clear(); 304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov switch (word) 306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Back: 308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Backspace(); 309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Return: 311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov InsertReturn(); 312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov case FWL_VKEY_Unknown: 314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov default: 316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsINSERTpressed(nFlag)) 317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Delete(); 318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov InsertWord(word, this->GetCharSet()); 319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov break; 320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) 326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Wnd::OnLButtonDown(point,nFlag); 328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (ClientHitTest(point)) 330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_bMouseDown) 332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->InvalidateRect(); 333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bMouseDown = TRUE; 335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov SetCapture(); 336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) 344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Wnd::OnLButtonUp(point,nFlag); 346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_bMouseDown) 348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov //can receive keybord message 350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (ClientHitTest(point) && !this->IsFocused()) 351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov SetFocus(); 352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ReleaseCapture(); 354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bMouseDown = FALSE; 355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) 361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPWL_Wnd::OnMouseMove(point,nFlag); 363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_bMouseDown) 365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->OnMouseMove(point,FALSE,FALSE); 366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return TRUE; 368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CPWL_EditCtrl::GetContentRect() const 371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetContentRect(); 373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible) 376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point ptHead(0,0),ptFoot(0,0); 378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (bVisible) 380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov GetCaretInfo(ptHead,ptFoot); 382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace(); 385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->IOnSetCaret(bVisible,ptHead,ptFoot,wpTemp); 386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const 389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) 391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pIterator->SetAt(m_pEdit->GetCaret()); 393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Word word; 394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Line line; 395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pIterator->GetWord(word)) 396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptHead.x = word.ptWord.x + word.fWidth; 398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptHead.y = word.ptWord.y + word.fAscent; 399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptFoot.x = word.ptWord.x + word.fWidth; 400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptFoot.y = word.ptWord.y + word.fDescent; 401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else if (pIterator->GetLine(line)) 403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptHead.x = line.ptLine.x; 405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptHead.y = line.ptLine.y + line.fLineAscent; 406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptFoot.x = line.ptLine.x; 407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ptFoot.y = line.ptLine.y + line.fLineDescent; 408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetCaretPos(FX_INT32& x, FX_INT32& y) const 413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Point ptHead(0,0), ptFoot(0,0); 415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov GetCaretInfo(ptHead,ptFoot); 417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PWLtoWnd(ptHead, x, y); 419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot) 422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEditCaret) 424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsFocused() || m_pEdit->IsSelected()) 426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov bVisible = FALSE; 427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot); 429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::IsModified() const 433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->IsModified(); 435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPWL_EditCtrl::GetText() const 438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetText(); 440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar) 443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetSel(nStartChar, nEndChar); 445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar ) const 448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->GetSel(nStartChar, nEndChar); 450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Clear() 453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Clear(); 456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SelectAll() 459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SelectAll(); 461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Paint() 464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Paint(); 467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh) 470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->EnableRefresh(bRefresh); 473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPWL_EditCtrl::GetCaret() const 476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetCaret(); 479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return -1; 481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetCaret(FX_INT32 nPos) 484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetCaret(nPos); 487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPWL_EditCtrl::GetTotalWords() const 490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetTotalWords(); 493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetScrollPos(const CPDF_Point& point) 498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetScrollPos(point); 501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Point CPWL_EditCtrl::GetScrollPos() const 504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEdit) 506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetScrollPos(); 507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return CPDF_Point(0.0f, 0.0f); 509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Font * CPWL_EditCtrl::GetCaretFont() const 512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_INT32 nFontIndex = 0; 514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) 516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pIterator->SetAt(m_pEdit->GetCaret()); 518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Word word; 519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Section section; 520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pIterator->GetWord(word)) 521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nFontIndex = word.nFontIndex; 523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else if (HasFlag(PES_RICH)) 525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pIterator->GetSection(section)) 527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nFontIndex = section.WordProps.nFontIndex; 529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IFX_Edit_FontMap * pFontMap = GetFontMap()) 534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pFontMap->GetPDFFont(nFontIndex); 535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return NULL; 537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const 540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fFontSize = GetFontSize(); 542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator()) 544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov pIterator->SetAt(m_pEdit->GetCaret()); 546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Word word; 547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_Section section; 548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pIterator->GetWord(word)) 549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFontSize = word.fFontSize; 551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else if (HasFlag(PES_RICH)) 553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (pIterator->GetSection(section)) 555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov fFontSize = section.WordProps.fFontSize; 557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return fFontSize; 562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetText(FX_LPCWSTR csText) 565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->SetText(csText); 567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CopyText() 570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::PasteText() 574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CutText() 578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow) 582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::InsertText(FX_LPCWSTR csText) 586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->InsertText(csText); 589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::InsertWord(FX_WORD word, FX_INT32 nCharset) 592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->InsertWord(word, nCharset); 595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::InsertReturn() 598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->InsertReturn(); 601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Delete() 604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Delete(); 607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Backspace() 610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (!IsReadOnly()) 612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Backspace(); 613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::CanUndo() const 616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return !IsReadOnly() && m_pEdit->CanUndo(); 618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::CanRedo() const 621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return !IsReadOnly() && m_pEdit->CanRedo(); 623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Redo() 626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CanRedo()) 628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Redo(); 629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Undo() 632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (CanUndo()) 634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEdit->Undo(); 635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, 638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fContentMin, FX_FLOAT fContentMax, 639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov FX_FLOAT fSmallStep, FX_FLOAT fBigStep) 640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PWL_SCROLL_INFO Info; 642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Info.fPlateWidth = fPlateMax - fPlateMin; 644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Info.fContentMin = fContentMin; 645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Info.fContentMax = fContentMax; 646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Info.fSmallStep = fSmallStep; 647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov Info.fBigStep = fBigStep; 648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->OnNotify(this,PNM_SETSCROLLINFO,SBT_VSCROLL,(FX_INTPTR)&Info); 650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// PWL_TRACE("set scroll info:%f\n",fContentMax - fContentMin); 652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin) 654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)) 655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->ShowVScrollBar(FALSE); 657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->ShowVScrollBar(TRUE); 661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy) 665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// PWL_TRACE("set scroll position:%f\n",fy); 667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->OnNotify(this,PNM_SETSCROLLPOS,SBT_VSCROLL,(FX_INTPTR)&fy); 668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot, const CPVT_WordPlace& place) 671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov PWL_CARET_INFO cInfo; 673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov cInfo.bVisible = bVisible; 674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov cInfo.ptHead = ptHead; 675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov cInfo.ptFoot = ptFoot; 676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->OnNotify(this,PNM_SETCARETINFO,(FX_INTPTR)&cInfo,(FX_INTPTR)NULL); 678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps) 681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnContentChange(const CPDF_Rect& rcContent) 685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (this->IsValid()) 687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_pEditNotify) 689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_pEditNotify->OnContentChange(rcContent); 691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnInvalidateRect(CPDF_Rect * pRect) 696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov this->InvalidateRect(pRect); 698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPWL_EditCtrl::GetCharSet() const 701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_nCharSet < 0) 703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return DEFAULT_CHARSET; 704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov else 705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_nCharSet; 706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetTextRange(const CPDF_Rect& rect, FX_INT32 & nStartChar, FX_INT32 & nEndChar) const 709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nStartChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.left, rect.top))); 711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov nEndChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.right, rect.bottom))); 712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPWL_EditCtrl::GetText(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const 715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar); 717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar); 718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd)); 719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetReadyToInput() 722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{ 723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_bMouseDown) 724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov { 725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov ReleaseCapture(); 726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_bMouseDown = FALSE; 727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 729