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_ListCtrl.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_IconList.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h" 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_ScrollBar.h" 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Label.h" 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PWL_IconList_ITEM_WIDTH 20.0f 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PWL_IconList_ITEM_HEIGHT 20.0f 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PWL_IconList_ITEM_SPACE 4.0f 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------ CPWL_IconList_Item ------------------- */ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList_Item::CPWL_IconList_Item() : 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_nIconIndex(-1), 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pData(NULL), 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bSelected(FALSE), 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText(NULL) 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList_Item::~CPWL_IconList_Item() 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_IconList_Item::GetClassName() const 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return "CPWL_IconList_Item"; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth) 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return PWL_IconList_ITEM_HEIGHT; 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device) 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcClient = GetClientRect(); 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bSelected) 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (this->IsEnabled()) 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient, 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR,this->GetTransparency())); 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient, 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR,this->GetTransparency())); 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcIcon = rcClient; 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon, 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_crIcon, m_pText->GetTextColor(), this->GetTransparency()); 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::SetSelect(FX_BOOL bSelected) 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bSelected = bSelected; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bSelected) 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR); 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_IconList_Item::IsSelected() const 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bSelected; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM & cp) 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText = new CPWL_Label; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWL_CREATEPARAM lcp = cp; 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lcp.pParentWnd = this; 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER; 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR; 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov lcp.fFontSize = 12; 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->Create(lcp); 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::SetData(void* pData) 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pData = pData; 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::SetIcon(FX_INT32 nIconIndex) 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_nIconIndex = nIconIndex; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::SetText(const CFX_WideString& str) 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->SetText(str); 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPWL_IconList_Item::GetText() const 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pText->GetText(); 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::RePosChildWnd() 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcClient = GetClientRect(); 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov rcClient.left += (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH + PWL_IconList_ITEM_ICON_LEFTMARGIN); 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->Move(rcClient, TRUE, FALSE); 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color) 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_crIcon = color; 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::OnEnabled() 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bSelected) 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR); 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->InvalidateRect(); 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Item::OnDisabled() 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR); 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->InvalidateRect(); 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ----------------- CPWL_IconList_Content ----------------- */ 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList_Content::CPWL_IconList_Content(FX_INT32 nListCount) : 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_nSelectIndex(-1), 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pNotify(NULL), 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bEnableNotify(TRUE), 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bMouseDown(FALSE), 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_nListCount(nListCount) 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList_Content::~CPWL_IconList_Content() 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM & cp) 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0; i<m_nListCount; i++) 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item(); 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWL_CREATEPARAM icp = cp; 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov icp.pParentWnd = this; 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP; 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNewItem->Create(icp); 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->SetItemSpace(PWL_IconList_ITEM_SPACE); 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->ResetContent(0); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd * pParent = this->GetParentWindow()) 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcScroll = this->GetScrollArea(); 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->GetScrollPos(); 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWL_SCROLL_INFO sInfo; 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sInfo.fContentMin = rcScroll.bottom; 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sInfo.fContentMax = rcScroll.top; 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sInfo.fPlateWidth = GetClientRect().Height(); 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sInfo.fSmallStep = 13.0f; 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sInfo.fBigStep = sInfo.fPlateWidth; 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (FX_INTPTR)&sInfo); 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point & point) 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetFocus(); 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetCapture(); 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bMouseDown = TRUE; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nItemIndex = FindItemIndex(point); 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetSelect(nItemIndex); 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ScrollToItem(nItemIndex); 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point & point) 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bMouseDown = FALSE; 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ReleaseCapture(); 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point & point) 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bMouseDown) 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nItemIndex = FindItemIndex(point); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetSelect(nItemIndex); 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ScrollToItem(nItemIndex); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar) 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (nChar) 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Up: 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_nSelectIndex > 0) 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nItemIndex = m_nSelectIndex - 1; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetSelect(nItemIndex); 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ScrollToItem(nItemIndex); 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Down: 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_nSelectIndex < m_nListCount-1) 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nItemIndex = m_nSelectIndex + 1; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetSelect(nItemIndex); 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ScrollToItem(nItemIndex); 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point) 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_INT32 nIndex = 0; 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_aChildren.GetSize(); i<sz; i++) 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd * pChild = m_aChildren.GetAt(i)) 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcWnd = pChild->ChildToParent(pChild->GetWindowRect()); 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (point.y < rcWnd.top) 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov nIndex = i; 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return nIndex; 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::ScrollToItem(FX_INT32 nItemIndex) 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcClient = GetClientRect(); 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcOrigin = pItem->GetWindowRect(); 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin); 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top)) 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point ptScroll = GetScrollPos(); 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (rcWnd.top > rcClient.top) 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptScroll.y = rcOrigin.top; 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else if (rcWnd.bottom < rcClient.bottom) 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptScroll.y = rcOrigin.bottom + rcClient.Height(); 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->SetScrollPos(ptScroll); 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->ResetFace(); 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov this->InvalidateRect(); 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd* pParent = this->GetParentWindow()) 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (FX_INTPTR)&ptScroll.y); 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SetSelect(FX_INT32 nIndex) 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_nSelectIndex != nIndex) 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SelectItem(m_nSelectIndex, FALSE); 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SelectItem(nIndex, TRUE); 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_nSelectIndex = nIndex; 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IPWL_IconList_Notify* pNotify = GetNotify()) 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pNotify->OnNoteListSelChanged(nIndex); 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_IconList_Content::GetSelect() const 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_nSelectIndex; 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_bEnableNotify) 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pNotify; 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify) 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pNotify = pNotify; 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify) 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bEnableNotify = bNotify; 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SelectItem(FX_INT32 nItemIndex, FX_BOOL bSelect) 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->SetSelect(bSelect); 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->InvalidateRect(); 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList_Item* CPWL_IconList_Content::GetListItem(FX_INT32 nItemIndex) const 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (nItemIndex >= 0 && nItemIndex<m_aChildren.GetSize()) 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd * pChild = m_aChildren.GetAt(nItemIndex)) 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pChild->GetClassName() == "CPWL_IconList_Item") 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (CPWL_IconList_Item*)pChild; 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SetListData(FX_INT32 nItemIndex, void* pData) 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->SetData(pData); 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SetListIcon(FX_INT32 nItemIndex, FX_INT32 nIconIndex) 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->SetIcon(nIconIndex); 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SetListString(FX_INT32 nItemIndex, const CFX_WideString& str) 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->SetText(str); 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPWL_IconList_Content::GetListString(FX_INT32 nItemIndex) const 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pItem->GetText(); 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return L""; 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color) 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=m_aChildren.GetSize(); i<sz; i++) 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_Wnd * pChild = m_aChildren.GetAt(i)) 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pChild->GetClassName() == "CPWL_IconList_Item") 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild; 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->SetIconFillColor(color); 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pItem->InvalidateRect(); 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* -------------------- CPWL_IconList --------------------- */ 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList::CPWL_IconList(FX_INT32 nListCount) : 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent(NULL), 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_nListCount(nListCount) 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_IconList::~CPWL_IconList() 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::RePosChildWnd() 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::RePosChildWnd(); 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pListContent) 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->Move(GetClientRect(), TRUE, FALSE); 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM & cp) 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent = new CPWL_IconList_Content(m_nListCount); 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PWL_CREATEPARAM ccp = cp; 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ccp.pParentWnd = this; 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ccp.dwFlags = PWS_CHILD | PWS_VISIBLE; 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->Create(ccp); 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::OnCreated() 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ScrollBar* pScrollBar = this->GetVScrollBar()) 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT); 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->SetTransparency(255); 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->SetNotifyForever(TRUE); 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX_INTPTR lParam) 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (wParam == SBT_VSCROLL) 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (msg) 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case PNM_SETSCROLLINFO: 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ScrollBar* pScrollBar = this->GetVScrollBar()) 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pScrollBar->IsVisible()) 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->SetVisible(TRUE); 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RePosChildWnd(); 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pScrollBar->IsVisible()) 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->SetVisible(FALSE); 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov RePosChildWnd(); 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pListContent) 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetScrollPos(CPDF_Point(0.0f,0.0f)); 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam); 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case PNM_SCROLLWINDOW: 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pListContent) 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam)); 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->ResetFace(); 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->InvalidateRect(NULL); 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case PNM_SETSCROLLPOS: 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ScrollBar* pScrollBar = this->GetVScrollBar()) 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam); 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetSelect(FX_INT32 nIndex) 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetSelect(nIndex); 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetTopItem(FX_INT32 nIndex) 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->ScrollToItem(nIndex); 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_INT32 CPWL_IconList::GetSelect() const 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pListContent->GetSelect(); 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify) 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetNotify(pNotify); 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::EnableNotify(FX_BOOL bNotify) 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->EnableNotify(bNotify); 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetListData(FX_INT32 nItemIndex, void* pData) 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetListData(nItemIndex, pData); 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetListIcon(FX_INT32 nItemIndex, FX_INT32 nIconIndex) 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetListIcon(nItemIndex, nIconIndex); 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetListString(FX_INT32 nItemIndex, const CFX_WideString& str) 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetListString(nItemIndex, str); 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPWL_IconList::GetListString(FX_INT32 nItemIndex) const 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pListContent->GetListString(nItemIndex); 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_IconList::SetIconFillColor(const CPWL_Color& color) 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetIconFillColor(color); 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_IconList::OnMouseWheel(short zDelta, const CPDF_Point & point) 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point ptScroll = m_pListContent->GetScrollPos(); 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcScroll = m_pListContent->GetScrollArea(); 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Rect rcContents = m_pListContent->GetClientRect(); 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (rcScroll.top - rcScroll.bottom > rcContents.Height()) 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point ptNew = ptScroll; 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (zDelta > 0) 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptNew.y += 30; 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptNew.y -= 30; 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (ptNew.y > rcScroll.top) 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptNew.y = rcScroll.top; 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (ptNew.y < rcScroll.bottom + rcContents.Height()) 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptNew.y = rcScroll.bottom + rcContents.Height(); 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (ptNew.y < rcScroll.bottom) 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ptNew.y = rcScroll.bottom; 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (ptNew.y != ptScroll.y) 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->SetScrollPos(ptNew); 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->ResetFace(); 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pListContent->InvalidateRect(NULL); 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_ScrollBar* pScrollBar = this->GetVScrollBar()) 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (FX_INTPTR)&ptNew.y); 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 593