| Index: fpdfsdk/src/pdfwindow/PWL_IconList.cpp
|
| diff --git a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
|
| index 157eba633db534e96aecea154c6802024aa12776..24d2dad5fa9c6b3f5ee6cc7ac96232fac88b162a 100644
|
| --- a/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
|
| +++ b/fpdfsdk/src/pdfwindow/PWL_IconList.cpp
|
| @@ -12,581 +12,494 @@
|
| #include "../../include/pdfwindow/PWL_ScrollBar.h"
|
| #include "../../include/pdfwindow/PWL_Label.h"
|
|
|
| -#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f
|
| -#define PWL_IconList_ITEM_WIDTH 20.0f
|
| -#define PWL_IconList_ITEM_HEIGHT 20.0f
|
| -#define PWL_IconList_ITEM_SPACE 4.0f
|
| +#define PWL_IconList_ITEM_ICON_LEFTMARGIN 10.0f
|
| +#define PWL_IconList_ITEM_WIDTH 20.0f
|
| +#define PWL_IconList_ITEM_HEIGHT 20.0f
|
| +#define PWL_IconList_ITEM_SPACE 4.0f
|
|
|
| /* ------------------ CPWL_IconList_Item ------------------- */
|
|
|
| -CPWL_IconList_Item::CPWL_IconList_Item() :
|
| - m_nIconIndex(-1),
|
| - m_pData(NULL),
|
| - m_bSelected(FALSE),
|
| - m_pText(NULL)
|
| -{
|
| -}
|
| +CPWL_IconList_Item::CPWL_IconList_Item()
|
| + : m_nIconIndex(-1), m_pData(NULL), m_bSelected(FALSE), m_pText(NULL) {}
|
| +
|
| +CPWL_IconList_Item::~CPWL_IconList_Item() {}
|
|
|
| -CPWL_IconList_Item::~CPWL_IconList_Item()
|
| -{
|
| +CFX_ByteString CPWL_IconList_Item::GetClassName() const {
|
| + return "CPWL_IconList_Item";
|
| }
|
|
|
| -CFX_ByteString CPWL_IconList_Item::GetClassName() const
|
| -{
|
| - return "CPWL_IconList_Item";
|
| +FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth) {
|
| + return PWL_IconList_ITEM_HEIGHT;
|
| }
|
|
|
| -FX_FLOAT CPWL_IconList_Item::GetItemHeight(FX_FLOAT fLimitWidth)
|
| -{
|
| - return PWL_IconList_ITEM_HEIGHT;
|
| +void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice,
|
| + CPDF_Matrix* pUser2Device) {
|
| + CPDF_Rect rcClient = GetClientRect();
|
| +
|
| + if (m_bSelected) {
|
| + if (IsEnabled()) {
|
| + CPWL_Utils::DrawFillRect(
|
| + pDevice, pUser2Device, rcClient,
|
| + CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR,
|
| + GetTransparency()));
|
| + } else {
|
| + CPWL_Utils::DrawFillRect(
|
| + pDevice, pUser2Device, rcClient,
|
| + CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR,
|
| + GetTransparency()));
|
| + }
|
| + }
|
| +
|
| + CPDF_Rect rcIcon = rcClient;
|
| + rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN;
|
| + rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH;
|
| +
|
| + CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon,
|
| + m_crIcon, m_pText->GetTextColor(),
|
| + GetTransparency());
|
| }
|
|
|
| -void CPWL_IconList_Item::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
|
| -{
|
| - CPDF_Rect rcClient = GetClientRect();
|
| +void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected) {
|
| + m_bSelected = bSelected;
|
| +
|
| + if (bSelected)
|
| + m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
|
| + else
|
| + m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
|
| +}
|
|
|
| - if (m_bSelected)
|
| - {
|
| - if (IsEnabled())
|
| - {
|
| - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient,
|
| - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_SELBACKCOLOR, GetTransparency()));
|
| - }
|
| - else
|
| - {
|
| - CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rcClient,
|
| - CPWL_Utils::PWLColorToFXColor(PWL_DEFAULT_LIGHTGRAYCOLOR, GetTransparency()));
|
| - }
|
| - }
|
| +FX_BOOL CPWL_IconList_Item::IsSelected() const {
|
| + return m_bSelected;
|
| +}
|
|
|
| - CPDF_Rect rcIcon = rcClient;
|
| - rcIcon.left += PWL_IconList_ITEM_ICON_LEFTMARGIN;
|
| - rcIcon.right = rcIcon.left + PWL_IconList_ITEM_WIDTH;
|
| +void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM& cp) {
|
| + m_pText = new CPWL_Label;
|
|
|
| - CPWL_Utils::DrawIconAppStream(pDevice, pUser2Device, m_nIconIndex, rcIcon,
|
| - m_crIcon, m_pText->GetTextColor(), GetTransparency());
|
| + PWL_CREATEPARAM lcp = cp;
|
| + lcp.pParentWnd = this;
|
| + lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER;
|
| + lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR;
|
| + lcp.fFontSize = 12;
|
| + m_pText->Create(lcp);
|
| }
|
|
|
| -void CPWL_IconList_Item::SetSelect(FX_BOOL bSelected)
|
| -{
|
| - m_bSelected = bSelected;
|
| +void CPWL_IconList_Item::SetData(void* pData) {
|
| + m_pData = pData;
|
| +}
|
|
|
| - if (bSelected)
|
| - m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
|
| - else
|
| - m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
|
| +void CPWL_IconList_Item::SetIcon(int32_t nIconIndex) {
|
| + m_nIconIndex = nIconIndex;
|
| +}
|
|
|
| +void CPWL_IconList_Item::SetText(const CFX_WideString& str) {
|
| + m_pText->SetText(str.c_str());
|
| }
|
|
|
| -FX_BOOL CPWL_IconList_Item::IsSelected() const
|
| -{
|
| - return m_bSelected;
|
| +CFX_WideString CPWL_IconList_Item::GetText() const {
|
| + return m_pText->GetText();
|
| }
|
|
|
| -void CPWL_IconList_Item::CreateChildWnd(const PWL_CREATEPARAM & cp)
|
| -{
|
| - m_pText = new CPWL_Label;
|
| +void CPWL_IconList_Item::RePosChildWnd() {
|
| + CPDF_Rect rcClient = GetClientRect();
|
|
|
| - PWL_CREATEPARAM lcp = cp;
|
| - lcp.pParentWnd = this;
|
| - lcp.dwFlags = PWS_CHILD | PWS_VISIBLE | PES_LEFT | PES_CENTER;
|
| - lcp.sTextColor = PWL_DEFAULT_BLACKCOLOR;
|
| - lcp.fFontSize = 12;
|
| - m_pText->Create(lcp);
|
| + rcClient.left +=
|
| + (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH +
|
| + PWL_IconList_ITEM_ICON_LEFTMARGIN);
|
| +
|
| + m_pText->Move(rcClient, TRUE, FALSE);
|
| }
|
|
|
| -void CPWL_IconList_Item::SetData(void* pData)
|
| -{
|
| - m_pData = pData;
|
| +void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color) {
|
| + m_crIcon = color;
|
| }
|
|
|
| -void CPWL_IconList_Item::SetIcon(int32_t nIconIndex)
|
| -{
|
| - m_nIconIndex = nIconIndex;
|
| +void CPWL_IconList_Item::OnEnabled() {
|
| + if (m_bSelected)
|
| + m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
|
| + else
|
| + m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
|
| +
|
| + InvalidateRect();
|
| }
|
|
|
| -void CPWL_IconList_Item::SetText(const CFX_WideString& str)
|
| -{
|
| - m_pText->SetText(str.c_str());
|
| +void CPWL_IconList_Item::OnDisabled() {
|
| + m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR);
|
| +
|
| + InvalidateRect();
|
| }
|
|
|
| -CFX_WideString CPWL_IconList_Item::GetText() const
|
| -{
|
| - return m_pText->GetText();
|
| +/* ----------------- CPWL_IconList_Content ----------------- */
|
| +
|
| +CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount)
|
| + : m_nSelectIndex(-1),
|
| + m_pNotify(NULL),
|
| + m_bEnableNotify(TRUE),
|
| + m_bMouseDown(FALSE),
|
| + m_nListCount(nListCount) {}
|
| +
|
| +CPWL_IconList_Content::~CPWL_IconList_Content() {}
|
| +
|
| +void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM& cp) {
|
| + for (int32_t i = 0; i < m_nListCount; i++) {
|
| + CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item();
|
| +
|
| + PWL_CREATEPARAM icp = cp;
|
| + icp.pParentWnd = this;
|
| + icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP;
|
| + pNewItem->Create(icp);
|
| + }
|
| +
|
| + SetItemSpace(PWL_IconList_ITEM_SPACE);
|
| + ResetContent(0);
|
| +
|
| + if (CPWL_Wnd* pParent = GetParentWindow()) {
|
| + CPDF_Rect rcScroll = GetScrollArea();
|
| + GetScrollPos();
|
| +
|
| + PWL_SCROLL_INFO sInfo;
|
| + sInfo.fContentMin = rcScroll.bottom;
|
| + sInfo.fContentMax = rcScroll.top;
|
| + sInfo.fPlateWidth = GetClientRect().Height();
|
| + sInfo.fSmallStep = 13.0f;
|
| + sInfo.fBigStep = sInfo.fPlateWidth;
|
| +
|
| + pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo);
|
| + }
|
| }
|
|
|
| -void CPWL_IconList_Item::RePosChildWnd()
|
| -{
|
| - CPDF_Rect rcClient = GetClientRect();
|
| +FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point& point,
|
| + FX_DWORD nFlag) {
|
| + SetFocus();
|
| +
|
| + SetCapture();
|
| + m_bMouseDown = TRUE;
|
| +
|
| + int32_t nItemIndex = FindItemIndex(point);
|
| + SetSelect(nItemIndex);
|
| + ScrollToItem(nItemIndex);
|
|
|
| - rcClient.left += (PWL_IconList_ITEM_ICON_LEFTMARGIN + PWL_IconList_ITEM_WIDTH + PWL_IconList_ITEM_ICON_LEFTMARGIN);
|
| + return TRUE;
|
| +}
|
| +
|
| +FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point& point,
|
| + FX_DWORD nFlag) {
|
| + m_bMouseDown = FALSE;
|
| + ReleaseCapture();
|
|
|
| - m_pText->Move(rcClient, TRUE, FALSE);
|
| + return TRUE;
|
| }
|
|
|
| -void CPWL_IconList_Item::SetIconFillColor(const CPWL_Color& color)
|
| -{
|
| - m_crIcon = color;
|
| +FX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point& point,
|
| + FX_DWORD nFlag) {
|
| + if (m_bMouseDown) {
|
| + int32_t nItemIndex = FindItemIndex(point);
|
| + SetSelect(nItemIndex);
|
| + ScrollToItem(nItemIndex);
|
| + }
|
| +
|
| + return TRUE;
|
| }
|
|
|
| -void CPWL_IconList_Item::OnEnabled()
|
| -{
|
| - if (m_bSelected)
|
| - m_pText->SetTextColor(PWL_DEFAULT_WHITECOLOR);
|
| - else
|
| - m_pText->SetTextColor(PWL_DEFAULT_BLACKCOLOR);
|
| +FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag) {
|
| + switch (nChar) {
|
| + case FWL_VKEY_Up:
|
| + if (m_nSelectIndex > 0) {
|
| + int32_t nItemIndex = m_nSelectIndex - 1;
|
| + SetSelect(nItemIndex);
|
| + ScrollToItem(nItemIndex);
|
| + }
|
| + return TRUE;
|
| + case FWL_VKEY_Down:
|
| + if (m_nSelectIndex < m_nListCount - 1) {
|
| + int32_t nItemIndex = m_nSelectIndex + 1;
|
| + SetSelect(nItemIndex);
|
| + ScrollToItem(nItemIndex);
|
| + }
|
| + return TRUE;
|
| + }
|
|
|
| - InvalidateRect();
|
| + return FALSE;
|
| }
|
|
|
| -void CPWL_IconList_Item::OnDisabled()
|
| -{
|
| - m_pText->SetTextColor(PWL_DEFAULT_HEAVYGRAYCOLOR);
|
| +int32_t CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point) {
|
| + int32_t nIndex = 0;
|
| + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
|
| + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
|
| + CPDF_Rect rcWnd = pChild->ChildToParent(pChild->GetWindowRect());
|
| +
|
| + if (point.y < rcWnd.top) {
|
| + nIndex = i;
|
| + }
|
| + }
|
| + }
|
|
|
| - InvalidateRect();
|
| + return nIndex;
|
| }
|
|
|
| -/* ----------------- CPWL_IconList_Content ----------------- */
|
| +void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex) {
|
| + CPDF_Rect rcClient = GetClientRect();
|
| +
|
| + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) {
|
| + CPDF_Rect rcOrigin = pItem->GetWindowRect();
|
| + CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin);
|
| +
|
| + if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top)) {
|
| + CPDF_Point ptScroll = GetScrollPos();
|
| +
|
| + if (rcWnd.top > rcClient.top) {
|
| + ptScroll.y = rcOrigin.top;
|
| + } else if (rcWnd.bottom < rcClient.bottom) {
|
| + ptScroll.y = rcOrigin.bottom + rcClient.Height();
|
| + }
|
|
|
| -CPWL_IconList_Content::CPWL_IconList_Content(int32_t nListCount) :
|
| - m_nSelectIndex(-1),
|
| - m_pNotify(NULL),
|
| - m_bEnableNotify(TRUE),
|
| - m_bMouseDown(FALSE),
|
| - m_nListCount(nListCount)
|
| -{
|
| -}
|
| -
|
| -CPWL_IconList_Content::~CPWL_IconList_Content()
|
| -{
|
| -}
|
| -
|
| -void CPWL_IconList_Content::CreateChildWnd(const PWL_CREATEPARAM & cp)
|
| -{
|
| - for (int32_t i=0; i<m_nListCount; i++)
|
| - {
|
| - CPWL_IconList_Item* pNewItem = new CPWL_IconList_Item();
|
| -
|
| - PWL_CREATEPARAM icp = cp;
|
| - icp.pParentWnd = this;
|
| - icp.dwFlags = PWS_CHILD | PWS_VISIBLE | PWS_NOREFRESHCLIP;
|
| - pNewItem->Create(icp);
|
| - }
|
| -
|
| - SetItemSpace(PWL_IconList_ITEM_SPACE);
|
| - ResetContent(0);
|
| -
|
| - if (CPWL_Wnd * pParent = GetParentWindow())
|
| - {
|
| - CPDF_Rect rcScroll = GetScrollArea();
|
| - GetScrollPos();
|
| -
|
| - PWL_SCROLL_INFO sInfo;
|
| - sInfo.fContentMin = rcScroll.bottom;
|
| - sInfo.fContentMax = rcScroll.top;
|
| - sInfo.fPlateWidth = GetClientRect().Height();
|
| - sInfo.fSmallStep = 13.0f;
|
| - sInfo.fBigStep = sInfo.fPlateWidth;
|
| -
|
| - pParent->OnNotify(this, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&sInfo);
|
| - }
|
| -}
|
| -
|
| -FX_BOOL CPWL_IconList_Content::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
|
| -{
|
| - SetFocus();
|
| -
|
| - SetCapture();
|
| - m_bMouseDown = TRUE;
|
| -
|
| - int32_t nItemIndex = FindItemIndex(point);
|
| - SetSelect(nItemIndex);
|
| - ScrollToItem(nItemIndex);
|
| -
|
| - return TRUE;
|
| -}
|
| -
|
| -FX_BOOL CPWL_IconList_Content::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
|
| -{
|
| - m_bMouseDown = FALSE;
|
| - ReleaseCapture();
|
| -
|
| - return TRUE;
|
| -}
|
| -
|
| -FX_BOOL CPWL_IconList_Content::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
|
| -{
|
| - if (m_bMouseDown)
|
| - {
|
| - int32_t nItemIndex = FindItemIndex(point);
|
| - SetSelect(nItemIndex);
|
| - ScrollToItem(nItemIndex);
|
| - }
|
| -
|
| - return TRUE;
|
| -}
|
| -
|
| -FX_BOOL CPWL_IconList_Content::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
|
| -{
|
| - switch (nChar)
|
| - {
|
| - case FWL_VKEY_Up:
|
| - if (m_nSelectIndex > 0)
|
| - {
|
| - int32_t nItemIndex = m_nSelectIndex - 1;
|
| - SetSelect(nItemIndex);
|
| - ScrollToItem(nItemIndex);
|
| - }
|
| - return TRUE;
|
| - case FWL_VKEY_Down:
|
| - if (m_nSelectIndex < m_nListCount-1)
|
| - {
|
| - int32_t nItemIndex = m_nSelectIndex + 1;
|
| - SetSelect(nItemIndex);
|
| - ScrollToItem(nItemIndex);
|
| - }
|
| - return TRUE;
|
| - }
|
| -
|
| - return FALSE;
|
| -}
|
| -
|
| -int32_t CPWL_IconList_Content::FindItemIndex(const CPDF_Point& point)
|
| -{
|
| - int32_t nIndex = 0;
|
| - for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
|
| - {
|
| - if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
|
| - {
|
| - CPDF_Rect rcWnd = pChild->ChildToParent(pChild->GetWindowRect());
|
| -
|
| - if (point.y < rcWnd.top)
|
| - {
|
| - nIndex = i;
|
| - }
|
| - }
|
| - }
|
| -
|
| - return nIndex;
|
| -}
|
| -
|
| -void CPWL_IconList_Content::ScrollToItem(int32_t nItemIndex)
|
| -{
|
| - CPDF_Rect rcClient = GetClientRect();
|
| -
|
| - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| - {
|
| - CPDF_Rect rcOrigin = pItem->GetWindowRect();
|
| - CPDF_Rect rcWnd = pItem->ChildToParent(rcOrigin);
|
| -
|
| - if (!(rcWnd.bottom > rcClient.bottom && rcWnd.top < rcClient.top))
|
| - {
|
| - CPDF_Point ptScroll = GetScrollPos();
|
| -
|
| - if (rcWnd.top > rcClient.top)
|
| - {
|
| - ptScroll.y = rcOrigin.top;
|
| - }
|
| - else if (rcWnd.bottom < rcClient.bottom)
|
| - {
|
| - ptScroll.y = rcOrigin.bottom + rcClient.Height();
|
| - }
|
| + SetScrollPos(ptScroll);
|
| + ResetFace();
|
| + InvalidateRect();
|
| + if (CPWL_Wnd* pParent = GetParentWindow()) {
|
| + pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
|
| + (intptr_t)&ptScroll.y);
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +void CPWL_IconList_Content::SetSelect(int32_t nIndex) {
|
| + if (m_nSelectIndex != nIndex) {
|
| + SelectItem(m_nSelectIndex, FALSE);
|
| + SelectItem(nIndex, TRUE);
|
| + m_nSelectIndex = nIndex;
|
|
|
| - SetScrollPos(ptScroll);
|
| - ResetFace();
|
| - InvalidateRect();
|
| - if (CPWL_Wnd* pParent = GetParentWindow())
|
| - {
|
| - pParent->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptScroll.y);
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CPWL_IconList_Content::SetSelect(int32_t nIndex)
|
| -{
|
| - if (m_nSelectIndex != nIndex)
|
| - {
|
| - SelectItem(m_nSelectIndex, FALSE);
|
| - SelectItem(nIndex, TRUE);
|
| - m_nSelectIndex = nIndex;
|
| -
|
| - if (IPWL_IconList_Notify* pNotify = GetNotify())
|
| - pNotify->OnNoteListSelChanged(nIndex);
|
| - }
|
| -}
|
| -
|
| -int32_t CPWL_IconList_Content::GetSelect() const
|
| -{
|
| - return m_nSelectIndex;
|
| -}
|
| -
|
| -IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const
|
| -{
|
| - if (m_bEnableNotify)
|
| - return m_pNotify;
|
| - return NULL;
|
| -}
|
| -
|
| -void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify)
|
| -{
|
| - m_pNotify = pNotify;
|
| -}
|
| -
|
| -void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify)
|
| -{
|
| - m_bEnableNotify = bNotify;
|
| -}
|
| -
|
| -void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect)
|
| -{
|
| - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| - {
|
| - pItem->SetSelect(bSelect);
|
| - pItem->InvalidateRect();
|
| - }
|
| + if (IPWL_IconList_Notify* pNotify = GetNotify())
|
| + pNotify->OnNoteListSelChanged(nIndex);
|
| + }
|
| }
|
|
|
| -CPWL_IconList_Item* CPWL_IconList_Content::GetListItem(int32_t nItemIndex) const
|
| -{
|
| - if (nItemIndex >= 0 && nItemIndex<m_aChildren.GetSize())
|
| - {
|
| - if (CPWL_Wnd * pChild = m_aChildren.GetAt(nItemIndex))
|
| - {
|
| - if (pChild->GetClassName() == "CPWL_IconList_Item")
|
| - {
|
| - return (CPWL_IconList_Item*)pChild;
|
| - }
|
| - }
|
| - }
|
| +int32_t CPWL_IconList_Content::GetSelect() const {
|
| + return m_nSelectIndex;
|
| +}
|
|
|
| - return NULL;
|
| +IPWL_IconList_Notify* CPWL_IconList_Content::GetNotify() const {
|
| + if (m_bEnableNotify)
|
| + return m_pNotify;
|
| + return NULL;
|
| }
|
|
|
| -void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData)
|
| -{
|
| - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| - pItem->SetData(pData);
|
| +void CPWL_IconList_Content::SetNotify(IPWL_IconList_Notify* pNotify) {
|
| + m_pNotify = pNotify;
|
| }
|
|
|
| -void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex, int32_t nIconIndex)
|
| -{
|
| - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| - pItem->SetIcon(nIconIndex);
|
| +void CPWL_IconList_Content::EnableNotify(FX_BOOL bNotify) {
|
| + m_bEnableNotify = bNotify;
|
| }
|
|
|
| -void CPWL_IconList_Content::SetListString(int32_t nItemIndex, const CFX_WideString& str)
|
| -{
|
| - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| - pItem->SetText(str);
|
| +void CPWL_IconList_Content::SelectItem(int32_t nItemIndex, FX_BOOL bSelect) {
|
| + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex)) {
|
| + pItem->SetSelect(bSelect);
|
| + pItem->InvalidateRect();
|
| + }
|
| }
|
|
|
| -CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const
|
| -{
|
| - if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| - return pItem->GetText();
|
| +CPWL_IconList_Item* CPWL_IconList_Content::GetListItem(
|
| + int32_t nItemIndex) const {
|
| + if (nItemIndex >= 0 && nItemIndex < m_aChildren.GetSize()) {
|
| + if (CPWL_Wnd* pChild = m_aChildren.GetAt(nItemIndex)) {
|
| + if (pChild->GetClassName() == "CPWL_IconList_Item") {
|
| + return (CPWL_IconList_Item*)pChild;
|
| + }
|
| + }
|
| + }
|
| +
|
| + return NULL;
|
| +}
|
|
|
| - return L"";
|
| +void CPWL_IconList_Content::SetListData(int32_t nItemIndex, void* pData) {
|
| + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| + pItem->SetData(pData);
|
| }
|
|
|
| -void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color)
|
| -{
|
| - for (int32_t i=0,sz=m_aChildren.GetSize(); i<sz; i++)
|
| - {
|
| - if (CPWL_Wnd * pChild = m_aChildren.GetAt(i))
|
| - {
|
| - if (pChild->GetClassName() == "CPWL_IconList_Item")
|
| - {
|
| - CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild;
|
| - pItem->SetIconFillColor(color);
|
| - pItem->InvalidateRect();
|
| - }
|
| - }
|
| - }
|
| +void CPWL_IconList_Content::SetListIcon(int32_t nItemIndex,
|
| + int32_t nIconIndex) {
|
| + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| + pItem->SetIcon(nIconIndex);
|
| +}
|
|
|
| +void CPWL_IconList_Content::SetListString(int32_t nItemIndex,
|
| + const CFX_WideString& str) {
|
| + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| + pItem->SetText(str);
|
| }
|
|
|
| -/* -------------------- CPWL_IconList --------------------- */
|
| +CFX_WideString CPWL_IconList_Content::GetListString(int32_t nItemIndex) const {
|
| + if (CPWL_IconList_Item* pItem = GetListItem(nItemIndex))
|
| + return pItem->GetText();
|
| +
|
| + return L"";
|
| +}
|
|
|
| -CPWL_IconList::CPWL_IconList(int32_t nListCount) :
|
| - m_pListContent(NULL),
|
| - m_nListCount(nListCount)
|
| -{
|
| -}
|
| -
|
| -CPWL_IconList::~CPWL_IconList()
|
| -{
|
| -}
|
| -
|
| -void CPWL_IconList::RePosChildWnd()
|
| -{
|
| - CPWL_Wnd::RePosChildWnd();
|
| -
|
| - if (m_pListContent)
|
| - m_pListContent->Move(GetClientRect(), TRUE, FALSE);
|
| -}
|
| -
|
| -void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM & cp)
|
| -{
|
| - m_pListContent = new CPWL_IconList_Content(m_nListCount);
|
| -
|
| - PWL_CREATEPARAM ccp = cp;
|
| - ccp.pParentWnd = this;
|
| - ccp.dwFlags = PWS_CHILD | PWS_VISIBLE;
|
| - m_pListContent->Create(ccp);
|
| -}
|
| -
|
| -void CPWL_IconList::OnCreated()
|
| -{
|
| - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
|
| - {
|
| - pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT);
|
| - pScrollBar->SetTransparency(255);
|
| - pScrollBar->SetNotifyForever(TRUE);
|
| - }
|
| +void CPWL_IconList_Content::SetIconFillColor(const CPWL_Color& color) {
|
| + for (int32_t i = 0, sz = m_aChildren.GetSize(); i < sz; i++) {
|
| + if (CPWL_Wnd* pChild = m_aChildren.GetAt(i)) {
|
| + if (pChild->GetClassName() == "CPWL_IconList_Item") {
|
| + CPWL_IconList_Item* pItem = (CPWL_IconList_Item*)pChild;
|
| + pItem->SetIconFillColor(color);
|
| + pItem->InvalidateRect();
|
| + }
|
| + }
|
| + }
|
| }
|
|
|
| -void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, intptr_t wParam, intptr_t lParam)
|
| -{
|
| - CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
|
| +/* -------------------- CPWL_IconList --------------------- */
|
| +
|
| +CPWL_IconList::CPWL_IconList(int32_t nListCount)
|
| + : m_pListContent(NULL), m_nListCount(nListCount) {}
|
| +
|
| +CPWL_IconList::~CPWL_IconList() {}
|
|
|
| - if (wParam == SBT_VSCROLL)
|
| - {
|
| - switch (msg)
|
| - {
|
| - case PNM_SETSCROLLINFO:
|
| - if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam)
|
| - {
|
| - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
|
| - {
|
| - if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth)
|
| - {
|
| - if (!pScrollBar->IsVisible())
|
| - {
|
| - pScrollBar->SetVisible(TRUE);
|
| - RePosChildWnd();
|
| - }
|
| - else
|
| - {
|
| - }
|
| - }
|
| - else
|
| - {
|
| - if (pScrollBar->IsVisible())
|
| - {
|
| - pScrollBar->SetVisible(FALSE);
|
| - RePosChildWnd();
|
| - }
|
| +void CPWL_IconList::RePosChildWnd() {
|
| + CPWL_Wnd::RePosChildWnd();
|
|
|
| - if (m_pListContent)
|
| - m_pListContent->SetScrollPos(CPDF_Point(0.0f,0.0f));
|
| - }
|
| + if (m_pListContent)
|
| + m_pListContent->Move(GetClientRect(), TRUE, FALSE);
|
| +}
|
| +
|
| +void CPWL_IconList::CreateChildWnd(const PWL_CREATEPARAM& cp) {
|
| + m_pListContent = new CPWL_IconList_Content(m_nListCount);
|
|
|
| - pScrollBar->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam);
|
| - }
|
| - }
|
| - return;
|
| - case PNM_SCROLLWINDOW:
|
| - if (m_pListContent)
|
| - {
|
| - m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam));
|
| - m_pListContent->ResetFace();
|
| - m_pListContent->InvalidateRect(NULL);
|
| - }
|
| - return;
|
| - case PNM_SETSCROLLPOS:
|
| - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
|
| - pScrollBar->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam);
|
| - return;
|
| - }
|
| - }
|
| + PWL_CREATEPARAM ccp = cp;
|
| + ccp.pParentWnd = this;
|
| + ccp.dwFlags = PWS_CHILD | PWS_VISIBLE;
|
| + m_pListContent->Create(ccp);
|
| }
|
|
|
| -void CPWL_IconList::SetSelect(int32_t nIndex)
|
| -{
|
| - m_pListContent->SetSelect(nIndex);
|
| +void CPWL_IconList::OnCreated() {
|
| + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) {
|
| + pScrollBar->RemoveFlag(PWS_AUTOTRANSPARENT);
|
| + pScrollBar->SetTransparency(255);
|
| + pScrollBar->SetNotifyForever(TRUE);
|
| + }
|
| }
|
|
|
| -void CPWL_IconList::SetTopItem(int32_t nIndex)
|
| -{
|
| - m_pListContent->ScrollToItem(nIndex);
|
| +void CPWL_IconList::OnNotify(CPWL_Wnd* pWnd,
|
| + FX_DWORD msg,
|
| + intptr_t wParam,
|
| + intptr_t lParam) {
|
| + CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam);
|
| +
|
| + if (wParam == SBT_VSCROLL) {
|
| + switch (msg) {
|
| + case PNM_SETSCROLLINFO:
|
| + if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) {
|
| + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar()) {
|
| + if (pInfo->fContentMax - pInfo->fContentMin > pInfo->fPlateWidth) {
|
| + if (!pScrollBar->IsVisible()) {
|
| + pScrollBar->SetVisible(TRUE);
|
| + RePosChildWnd();
|
| + } else {
|
| + }
|
| + } else {
|
| + if (pScrollBar->IsVisible()) {
|
| + pScrollBar->SetVisible(FALSE);
|
| + RePosChildWnd();
|
| + }
|
| +
|
| + if (m_pListContent)
|
| + m_pListContent->SetScrollPos(CPDF_Point(0.0f, 0.0f));
|
| + }
|
| +
|
| + pScrollBar->OnNotify(pWnd, PNM_SETSCROLLINFO, wParam, lParam);
|
| + }
|
| + }
|
| + return;
|
| + case PNM_SCROLLWINDOW:
|
| + if (m_pListContent) {
|
| + m_pListContent->SetScrollPos(CPDF_Point(0.0f, *(FX_FLOAT*)lParam));
|
| + m_pListContent->ResetFace();
|
| + m_pListContent->InvalidateRect(NULL);
|
| + }
|
| + return;
|
| + case PNM_SETSCROLLPOS:
|
| + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
|
| + pScrollBar->OnNotify(pWnd, PNM_SETSCROLLPOS, wParam, lParam);
|
| + return;
|
| + }
|
| + }
|
| }
|
|
|
| -int32_t CPWL_IconList::GetSelect() const
|
| -{
|
| - return m_pListContent->GetSelect();
|
| +void CPWL_IconList::SetSelect(int32_t nIndex) {
|
| + m_pListContent->SetSelect(nIndex);
|
| }
|
|
|
| -void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify)
|
| -{
|
| - m_pListContent->SetNotify(pNotify);
|
| +void CPWL_IconList::SetTopItem(int32_t nIndex) {
|
| + m_pListContent->ScrollToItem(nIndex);
|
| }
|
|
|
| -void CPWL_IconList::EnableNotify(FX_BOOL bNotify)
|
| -{
|
| - m_pListContent->EnableNotify(bNotify);
|
| -}
|
| -
|
| -void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData)
|
| -{
|
| - m_pListContent->SetListData(nItemIndex, pData);
|
| -}
|
| -
|
| -void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex)
|
| -{
|
| - m_pListContent->SetListIcon(nItemIndex, nIconIndex);
|
| -}
|
| -
|
| -void CPWL_IconList::SetListString(int32_t nItemIndex, const CFX_WideString& str)
|
| -{
|
| - m_pListContent->SetListString(nItemIndex, str);
|
| -}
|
| -
|
| -CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const
|
| -{
|
| - return m_pListContent->GetListString(nItemIndex);
|
| -}
|
| -
|
| -void CPWL_IconList::SetIconFillColor(const CPWL_Color& color)
|
| -{
|
| - m_pListContent->SetIconFillColor(color);
|
| -}
|
| -
|
| -FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
|
| -{
|
| - CPDF_Point ptScroll = m_pListContent->GetScrollPos();
|
| - CPDF_Rect rcScroll = m_pListContent->GetScrollArea();
|
| - CPDF_Rect rcContents = m_pListContent->GetClientRect();
|
| +int32_t CPWL_IconList::GetSelect() const {
|
| + return m_pListContent->GetSelect();
|
| +}
|
|
|
| - if (rcScroll.top - rcScroll.bottom > rcContents.Height())
|
| - {
|
| - CPDF_Point ptNew = ptScroll;
|
| +void CPWL_IconList::SetNotify(IPWL_IconList_Notify* pNotify) {
|
| + m_pListContent->SetNotify(pNotify);
|
| +}
|
|
|
| - if (zDelta > 0)
|
| - ptNew.y += 30;
|
| - else
|
| - ptNew.y -= 30;
|
| +void CPWL_IconList::EnableNotify(FX_BOOL bNotify) {
|
| + m_pListContent->EnableNotify(bNotify);
|
| +}
|
|
|
| - if (ptNew.y > rcScroll.top)
|
| - ptNew.y = rcScroll.top;
|
| - if (ptNew.y < rcScroll.bottom + rcContents.Height())
|
| - ptNew.y = rcScroll.bottom + rcContents.Height();
|
| - if (ptNew.y < rcScroll.bottom)
|
| - ptNew.y = rcScroll.bottom;
|
| +void CPWL_IconList::SetListData(int32_t nItemIndex, void* pData) {
|
| + m_pListContent->SetListData(nItemIndex, pData);
|
| +}
|
|
|
| - if (ptNew.y != ptScroll.y)
|
| - {
|
| - m_pListContent->SetScrollPos(ptNew);
|
| - m_pListContent->ResetFace();
|
| - m_pListContent->InvalidateRect(NULL);
|
| +void CPWL_IconList::SetListIcon(int32_t nItemIndex, int32_t nIconIndex) {
|
| + m_pListContent->SetListIcon(nItemIndex, nIconIndex);
|
| +}
|
|
|
| - if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
|
| - pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&ptNew.y);
|
| +void CPWL_IconList::SetListString(int32_t nItemIndex,
|
| + const CFX_WideString& str) {
|
| + m_pListContent->SetListString(nItemIndex, str);
|
| +}
|
|
|
| - return TRUE;
|
| - }
|
| - }
|
| +CFX_WideString CPWL_IconList::GetListString(int32_t nItemIndex) const {
|
| + return m_pListContent->GetListString(nItemIndex);
|
| +}
|
|
|
| - return FALSE;
|
| +void CPWL_IconList::SetIconFillColor(const CPWL_Color& color) {
|
| + m_pListContent->SetIconFillColor(color);
|
| }
|
|
|
| +FX_BOOL CPWL_IconList::OnMouseWheel(short zDelta,
|
| + const CPDF_Point& point,
|
| + FX_DWORD nFlag) {
|
| + CPDF_Point ptScroll = m_pListContent->GetScrollPos();
|
| + CPDF_Rect rcScroll = m_pListContent->GetScrollArea();
|
| + CPDF_Rect rcContents = m_pListContent->GetClientRect();
|
| +
|
| + if (rcScroll.top - rcScroll.bottom > rcContents.Height()) {
|
| + CPDF_Point ptNew = ptScroll;
|
| +
|
| + if (zDelta > 0)
|
| + ptNew.y += 30;
|
| + else
|
| + ptNew.y -= 30;
|
| +
|
| + if (ptNew.y > rcScroll.top)
|
| + ptNew.y = rcScroll.top;
|
| + if (ptNew.y < rcScroll.bottom + rcContents.Height())
|
| + ptNew.y = rcScroll.bottom + rcContents.Height();
|
| + if (ptNew.y < rcScroll.bottom)
|
| + ptNew.y = rcScroll.bottom;
|
| +
|
| + if (ptNew.y != ptScroll.y) {
|
| + m_pListContent->SetScrollPos(ptNew);
|
| + m_pListContent->ResetFace();
|
| + m_pListContent->InvalidateRect(NULL);
|
| +
|
| + if (CPWL_ScrollBar* pScrollBar = GetVScrollBar())
|
| + pScrollBar->OnNotify(this, PNM_SETSCROLLPOS, SBT_VSCROLL,
|
| + (intptr_t)&ptNew.y);
|
| +
|
| + return TRUE;
|
| + }
|
| + }
|
| +
|
| + return FALSE;
|
| +}
|
|
|