1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PDFWindow.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_ListBox.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_ScrollBar.h" 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_EditCtrl.h" 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Edit.h" 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define IsFloatEqual(fa,fb) IsFloatZero((fa)-(fb)) 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------ CPWL_List_Notify ----------------------- */ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_List_Notify::CPWL_List_Notify(CPWL_ListBox* pList) : m_pList(pList) 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pList != NULL); 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_List_Notify::~CPWL_List_Notify() 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_List_Notify::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax, 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT fContentMin, FX_FLOAT fContentMax, 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT fSmallStep, FX_FLOAT fBigStep) 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWL_SCROLL_INFO Info; 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Info.fPlateWidth = fPlateMax - fPlateMin; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Info.fContentMin = fContentMin; 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Info.fContentMax = fContentMax; 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Info.fSmallStep = fSmallStep; 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Info.fBigStep = fBigStep; 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnNotify(m_pList,PNM_SETSCROLLINFO,SBT_VSCROLL,(FX_INTPTR)&Info); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ScrollBar * pScroll = m_pList->GetVScrollBar()) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin) 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov || IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)) 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pScroll->IsVisible()) 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScroll->SetVisible(FALSE); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->RePosChildWnd(); 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pScroll->IsVisible()) 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScroll->SetVisible(TRUE); 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->RePosChildWnd(); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnNotify(m_pList,PNM_SETSCROLLPOS,SBT_VSCROLL,(FX_INTPTR)&fy); 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_List_Notify::IOnInvalidateRect(CPDF_Rect * pRect) 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->InvalidateRect(pRect); 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* --------------------------- CPWL_ListBox ---------------------------- */ 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_ListBox::CPWL_ListBox() : 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList(NULL), 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListNotify(NULL), 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bMouseDown(FALSE), 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bHoverSel(FALSE), 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFillerNotify(NULL) 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList = IFX_List::NewList(); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pList != NULL); 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_ListBox::~CPWL_ListBox() 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_List::DelList(m_pList); 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pListNotify) 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete m_pListNotify; 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListNotify = NULL; 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_ListBox::GetClassName() const 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return "CPWL_ListBox"; 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::OnCreated() 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pListNotify) delete m_pListNotify; 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetFontMap(GetFontMap()); 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetNotify(m_pListNotify = new CPWL_List_Notify(this)); 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetHoverSel(HasFlag(PLBS_HOVERSEL)); 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetMultipleSel(HasFlag(PLBS_MULTIPLESEL)); 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetFontSize(this->GetCreationParam().fFontSize); 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bHoverSel = HasFlag(PLBS_HOVERSEL); 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::OnDestroy() 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pListNotify) 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete m_pListNotify; 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListNotify = NULL; 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::GetThisAppearanceStream(sAppStream); 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteTextBuf sListItems; 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcPlate = m_pList->GetPlateRect(); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_pList->GetCount(); i<sz; i++) 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcItem = m_pList->GetItemRect(i); 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue; 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList->IsItemSelected(i)) 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sListItems << CPWL_Utils::GetRectFillAppStream(rcItem,PWL_DEFAULT_SELBACKCOLOR); 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sItem = CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sItem.GetLength() > 0) 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELTEXTCOLOR) << sItem << "ET\n"; 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString sItem = CPWL_Utils::GetEditAppStream(m_pList->GetItemEdit(i), ptOffset); 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sItem.GetLength() > 0) 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sListItems << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sItem << "ET\n"; 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (sListItems.GetLength() > 0) 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteTextBuf sClip; 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcClient = this->GetClientRect(); 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sClip << "q\n"; 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sClip << rcClient.left << " " << rcClient.bottom << " " 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov << rcClient.right - rcClient.left << " " << rcClient.top - rcClient.bottom << " re W n\n"; 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sClip << sListItems << "Q\n"; 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sAppStream << "/Tx BMC\n" << sClip << "EMC\n"; 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcPlate = m_pList->GetPlateRect(); 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcList = GetListRect(); 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcClient = GetClientRect(); 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_pList->GetCount(); i<sz; i++) 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcItem = m_pList->GetItemRect(i); 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (rcItem.bottom > rcPlate.top || rcItem.top < rcPlate.bottom) continue; 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point ptOffset(rcItem.left, (rcItem.top + rcItem.bottom) * 0.5f); 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IFX_Edit* pEdit = m_pList->GetItemEdit(i)) 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcContent = pEdit->GetContentRect(); 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (rcContent.Width() > rcClient.Width()) 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcItem.Intersect(rcList); 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcItem.Intersect(rcClient); 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList->IsItemSelected(i)) 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255,0,51,113)); 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_SystemHandler* pSysHandler = GetSystemHandler(); 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(pSysHandler && pSysHandler->IsSelectionImplemented()) 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), CPWL_Utils::PWLColorToFXColor(GetTextColor()), CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcList, ptOffset, NULL,pSysHandler, m_pFormFiller); 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pSysHandler->OutputSelectedRect(m_pFormFiller, rcItem); 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcItem, ArgbEncode(255,0,51,113)); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), ArgbEncode(255,255,255,255), 0, 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcList, ptOffset, NULL, pSysHandler, m_pFormFiller); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_SystemHandler* pSysHandler = GetSystemHandler(); 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::PWLColorToFXColor(GetTextColor()), 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcList, ptOffset, NULL,pSysHandler, NULL); 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnKeyDown(nChar, nFlag); 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_pList) return FALSE; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (nChar) 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Up: 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Down: 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Home: 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Left: 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_End: 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Right: 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (nChar) 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Up: 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Down: 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Home: 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Left: 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_LEFT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_End: 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Right: 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Delete: 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bExit = FALSE; 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OnNotifySelChanged(TRUE,bExit,nFlag); 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::OnChar(FX_WORD nChar, FX_DWORD nFlag) 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnChar(nChar,nFlag); 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_pList) return FALSE; 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_pList->OnChar(nChar,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag))) return FALSE; 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bExit = FALSE; 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OnNotifySelChanged(TRUE,bExit, nFlag); 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnLButtonDown(point,nFlag); 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (ClientHitTest(point)) 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bMouseDown = TRUE; 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetFocus(); 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetCapture(); 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnLButtonUp(point,nFlag); 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bMouseDown) 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ReleaseCapture(); 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bMouseDown = FALSE; 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bExit = FALSE; 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OnNotifySelChanged(FALSE,bExit,nFlag); 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bHoverSel = bHoverSel; 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnMouseMove(point, nFlag); 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->Select(m_pList->GetItemIndex(point)); 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bMouseDown) 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnMouseMove(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX_INTPTR lParam) 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT fPos; 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (msg) 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case PNM_SETSCROLLINFO: 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (wParam) 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case SBT_VSCROLL: 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd * pChild = GetVScrollBar()) 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case PNM_SETSCROLLPOS: 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (wParam) 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case SBT_VSCROLL: 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd * pChild = GetVScrollBar()) 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case PNM_SCROLLWINDOW: 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov fPos = *(FX_FLOAT*)lParam; 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (wParam) 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case SBT_VSCROLL: 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetScrollPos(CPDF_Point(0,fPos)); 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::KillFocus() 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::KillFocus(); 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (this->IsMultipleSel()) 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for(FX_INT32 i=0;i<this->GetCount();i++) 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (this->IsListItemSelected(i)) 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!IsListItemVisible(i)) 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->ScrollToListItem(i); 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!IsListItemVisible(this->GetCurSel())) 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->ScrollToListItem(this->GetCurSel()); 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetListItemCaret(m_nCaretIndex,FALSE); 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::RePosChildWnd() 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::RePosChildWnd(); 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetPlateRect(GetListRect()); 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, FX_BOOL & bExit, FX_DWORD nFlag) 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pFillerNotify) 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bRC = TRUE; 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString swChange = GetText(); 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString strChangeEx; 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nSelStart = 0; 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int nSelEnd = swChange.GetLength(); 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFillerNotify->OnBeforeKeyStroke(FALSE, GetAttachedData(), 0, swChange, strChangeEx, nSelStart, nSelEnd, bKeyDown, bRC, bExit, nFlag); 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bExit) return; 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFillerNotify->OnAfterKeyStroke(FALSE, GetAttachedData(), bExit,nFlag); 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_ListBox::GetFocusRect() const 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList && m_pList->IsMultipleSel()) 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcCaret = m_pList->GetItemRect(m_pList->GetCaret()); 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcCaret.Intersect(GetClientRect()); 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return rcCaret; 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CPWL_Wnd::GetFocusRect(); 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::AddString(FX_LPCWSTR string) 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->AddString(string); 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::SetText(FX_LPCWSTR csText,FX_BOOL bRefresh) 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov //return CPDF_List::SetText(csText,bRefresh); 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPWL_ListBox::GetText() const 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetText(); 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return L""; 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::SetFontSize(FX_FLOAT fFontSize) 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetFontSize(fFontSize); 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_ListBox::GetFontSize() const 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetFontSize(); 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0.0f; 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::Select(FX_INT32 nItemIndex) 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->Select(nItemIndex); 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::SetCaret(FX_INT32 nItemIndex) 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetCaret(nItemIndex); 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::SetTopVisibleIndex(FX_INT32 nItemIndex) 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->SetTopItem(nItemIndex); 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::ScrollToListItem(FX_INT32 nItemIndex) 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->ScrollToListItem(nItemIndex); 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::ResetContent() 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->Empty(); 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_ListBox::Reset() 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->Cancel(); 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::IsMultipleSel() const 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->IsMultipleSel(); 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_ListBox::GetCaretIndex() const 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetCaret(); 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_ListBox::GetCurSel() const 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetSelect(); 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::IsItemSelected(FX_INT32 nItemIndex) const 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->IsItemSelected(nItemIndex); 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_ListBox::GetTopVisibleIndex() const 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->ScrollToListItem(m_pList->GetFirstSelected()); 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetTopItem(); 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return -1; 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_ListBox::GetCount() const 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetCount(); 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_ListBox::FindNext(FX_INT32 nIndex,FX_WCHAR nChar) const 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->FindNext(nIndex,nChar); 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nIndex; 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_ListBox::GetContentRect() const 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetContentRect(); 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CPDF_Rect(); 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_ListBox::GetFirstHeight() const 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pList) 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pList->GetFirstHeight(); 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0.0f; 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_ListBox::GetListRect() const 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth())); 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag) 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!m_pList) return FALSE; 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (zDelta < 0) 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pList->OnVK_UP(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag)); 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bExit = FALSE; 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OnNotifySelChanged(FALSE,bExit, nFlag); 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 633