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