| Index: fpdfsdk/fxedit/fxet_list.cpp
|
| diff --git a/fpdfsdk/fxedit/fxet_list.cpp b/fpdfsdk/fxedit/fxet_list.cpp
|
| index 662a64b00abef4c70a58b537abc5ffca0edea70f..b4d5473f6c869018ca69ea433d4a2d146c73e5d9 100644
|
| --- a/fpdfsdk/fxedit/fxet_list.cpp
|
| +++ b/fpdfsdk/fxedit/fxet_list.cpp
|
| @@ -8,9 +8,10 @@
|
|
|
| #include "core/fpdfdoc/include/cpvt_word.h"
|
| #include "fpdfsdk/fxedit/include/fxet_edit.h"
|
| +#include "fpdfsdk/pdfwindow/PWL_ListBox.h"
|
|
|
| CFX_ListItem::CFX_ListItem()
|
| - : m_pEdit(IFX_Edit::NewEdit()),
|
| + : m_pEdit(new CFX_Edit),
|
| m_bSelected(FALSE),
|
| m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) {
|
| m_pEdit->SetAlignmentV(1);
|
| @@ -18,18 +19,17 @@ CFX_ListItem::CFX_ListItem()
|
| }
|
|
|
| CFX_ListItem::~CFX_ListItem() {
|
| - IFX_Edit::DelEdit(m_pEdit);
|
| }
|
|
|
| void CFX_ListItem::SetFontMap(IPVT_FontMap* pFontMap) {
|
| m_pEdit->SetFontMap(pFontMap);
|
| }
|
|
|
| -IFX_Edit* CFX_ListItem::GetEdit() const {
|
| - return m_pEdit;
|
| +CFX_Edit* CFX_ListItem::GetEdit() const {
|
| + return m_pEdit.get();
|
| }
|
|
|
| -IFX_Edit_Iterator* CFX_ListItem::GetIterator() const {
|
| +CFX_Edit_Iterator* CFX_ListItem::GetIterator() const {
|
| return m_pEdit->GetIterator();
|
| }
|
|
|
| @@ -63,7 +63,7 @@ FX_FLOAT CFX_ListItem::GetItemHeight() const {
|
|
|
| uint16_t CFX_ListItem::GetFirstChar() const {
|
| CPVT_Word word;
|
| - IFX_Edit_Iterator* pIterator = GetIterator();
|
| + CFX_Edit_Iterator* pIterator = GetIterator();
|
| pIterator->SetAt(1);
|
| pIterator->GetWord(word);
|
| return word.Word;
|
| @@ -81,203 +81,6 @@ void CFX_ListContainer::SetPlateRect(const CFX_FloatRect& rect) {
|
| m_rcPlate = rect;
|
| }
|
|
|
| -CFX_List::CFX_List()
|
| - : m_fFontSize(0.0f), m_pFontMap(nullptr), m_bMultiple(FALSE) {}
|
| -
|
| -CFX_List::~CFX_List() {
|
| - Empty();
|
| -}
|
| -
|
| -void CFX_List::Empty() {
|
| - for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++)
|
| - delete m_aListItems.GetAt(i);
|
| -
|
| - m_aListItems.RemoveAll();
|
| -}
|
| -
|
| -void CFX_List::SetFontMap(IPVT_FontMap* pFontMap) {
|
| - m_pFontMap = pFontMap;
|
| -}
|
| -
|
| -void CFX_List::SetFontSize(FX_FLOAT fFontSize) {
|
| - m_fFontSize = fFontSize;
|
| -}
|
| -
|
| -void CFX_List::AddItem(const FX_WCHAR* str) {
|
| - CFX_ListItem* pListItem = new CFX_ListItem();
|
| - pListItem->SetFontMap(m_pFontMap);
|
| - pListItem->SetFontSize(m_fFontSize);
|
| - pListItem->SetText(str);
|
| - m_aListItems.Add(pListItem);
|
| -}
|
| -
|
| -void CFX_List::ReArrange(int32_t nItemIndex) {
|
| - FX_FLOAT fPosY = 0.0f;
|
| -
|
| - if (CFX_ListItem* pPrevItem = m_aListItems.GetAt(nItemIndex - 1))
|
| - fPosY = pPrevItem->GetRect().bottom;
|
| -
|
| - for (int32_t i = nItemIndex, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| - FX_FLOAT fListItemHeight = pListItem->GetItemHeight();
|
| - pListItem->SetRect(CLST_Rect(0.0f, fPosY, 0.0f, fPosY + fListItemHeight));
|
| - fPosY += fListItemHeight;
|
| - }
|
| - }
|
| -
|
| - SetContentRect(CLST_Rect(0.0f, 0.0f, 0.0f, fPosY));
|
| -}
|
| -
|
| -IFX_Edit* CFX_List::GetItemEdit(int32_t nIndex) const {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| - return pListItem->GetEdit();
|
| - }
|
| -
|
| - return nullptr;
|
| -}
|
| -
|
| -int32_t CFX_List::GetCount() const {
|
| - return m_aListItems.GetSize();
|
| -}
|
| -
|
| -CFX_FloatRect CFX_List::GetPlateRect() const {
|
| - return CFX_ListContainer::GetPlateRect();
|
| -}
|
| -
|
| -CFX_FloatRect CFX_List::GetContentRect() const {
|
| - return InnerToOuter(CFX_ListContainer::GetContentRect());
|
| -}
|
| -
|
| -FX_FLOAT CFX_List::GetFontSize() const {
|
| - return m_fFontSize;
|
| -}
|
| -
|
| -int32_t CFX_List::GetItemIndex(const CFX_FloatPoint& point) const {
|
| - CFX_FloatPoint pt = OuterToInner(point);
|
| -
|
| - FX_BOOL bFirst = TRUE;
|
| - FX_BOOL bLast = TRUE;
|
| -
|
| - for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| - CLST_Rect rcListItem = pListItem->GetRect();
|
| -
|
| - if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top)) {
|
| - bFirst = FALSE;
|
| - }
|
| -
|
| - if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom)) {
|
| - bLast = FALSE;
|
| - }
|
| -
|
| - if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) {
|
| - return i;
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (bFirst)
|
| - return 0;
|
| - if (bLast)
|
| - return m_aListItems.GetSize() - 1;
|
| -
|
| - return -1;
|
| -}
|
| -
|
| -FX_FLOAT CFX_List::GetFirstHeight() const {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(0)) {
|
| - return pListItem->GetItemHeight();
|
| - }
|
| -
|
| - return 1.0f;
|
| -}
|
| -
|
| -int32_t CFX_List::GetFirstSelected() const {
|
| - for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| - if (pListItem->IsSelected())
|
| - return i;
|
| - }
|
| - }
|
| - return -1;
|
| -}
|
| -
|
| -int32_t CFX_List::GetLastSelected() const {
|
| - for (int32_t i = m_aListItems.GetSize() - 1; i >= 0; i--) {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| - if (pListItem->IsSelected())
|
| - return i;
|
| - }
|
| - }
|
| - return -1;
|
| -}
|
| -
|
| -FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const {
|
| - if ((c >= 'a') && (c <= 'z'))
|
| - c = c - ('a' - 'A');
|
| - return c;
|
| -}
|
| -
|
| -int32_t CFX_List::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
|
| - int32_t nCircleIndex = nIndex;
|
| -
|
| - for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| - nCircleIndex++;
|
| - if (nCircleIndex >= sz)
|
| - nCircleIndex = 0;
|
| -
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) {
|
| - if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
|
| - return nCircleIndex;
|
| - }
|
| - }
|
| -
|
| - return nCircleIndex;
|
| -}
|
| -
|
| -CFX_FloatRect CFX_List::GetItemRect(int32_t nIndex) const {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| - CFX_FloatRect rcItem = pListItem->GetRect();
|
| - rcItem.left = 0.0f;
|
| - rcItem.right = GetPlateRect().Width();
|
| - return InnerToOuter(CLST_Rect(rcItem));
|
| - }
|
| -
|
| - return CFX_FloatRect();
|
| -}
|
| -
|
| -FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex))
|
| - return pListItem->IsSelected();
|
| - return FALSE;
|
| -}
|
| -
|
| -void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
|
| - pListItem->SetSelect(bSelected);
|
| - }
|
| -}
|
| -
|
| -void CFX_List::SetMultipleSel(FX_BOOL bMultiple) {
|
| - m_bMultiple = bMultiple;
|
| -}
|
| -
|
| -FX_BOOL CFX_List::IsMultipleSel() const {
|
| - return m_bMultiple;
|
| -}
|
| -
|
| -FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const {
|
| - return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
|
| -}
|
| -
|
| -CFX_WideString CFX_List::GetItemText(int32_t nIndex) const {
|
| - if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| - return pListItem->GetText();
|
| - }
|
| -
|
| - return L"";
|
| -}
|
| -
|
| CPLST_Select::CPLST_Select() {}
|
|
|
| CPLST_Select::~CPLST_Select() {
|
| @@ -392,11 +195,16 @@ CFX_ListCtrl::CFX_ListCtrl()
|
| m_nSelItem(-1),
|
| m_nFootIndex(-1),
|
| m_bCtrlSel(FALSE),
|
| - m_nCaretIndex(-1) {}
|
| + m_nCaretIndex(-1),
|
| + m_fFontSize(0.0f),
|
| + m_pFontMap(nullptr),
|
| + m_bMultiple(FALSE) {}
|
|
|
| -CFX_ListCtrl::~CFX_ListCtrl() {}
|
| +CFX_ListCtrl::~CFX_ListCtrl() {
|
| + Empty();
|
| +}
|
|
|
| -void CFX_ListCtrl::SetNotify(IFX_List_Notify* pNotify) {
|
| +void CFX_ListCtrl::SetNotify(CPWL_List_Notify* pNotify) {
|
| m_pNotify = pNotify;
|
| }
|
|
|
| @@ -566,7 +374,18 @@ void CFX_ListCtrl::SetPlateRect(const CFX_FloatRect& rect) {
|
| }
|
|
|
| CFX_FloatRect CFX_ListCtrl::GetItemRect(int32_t nIndex) const {
|
| - return InToOut(CFX_List::GetItemRect(nIndex));
|
| + return InToOut(GetItemRectInternal(nIndex));
|
| +}
|
| +
|
| +CFX_FloatRect CFX_ListCtrl::GetItemRectInternal(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + CFX_FloatRect rcItem = pListItem->GetRect();
|
| + rcItem.left = 0.0f;
|
| + rcItem.right = GetPlateRect().Width();
|
| + return InnerToOuter(CLST_Rect(rcItem));
|
| + }
|
| +
|
| + return CFX_FloatRect();
|
| }
|
|
|
| int32_t CFX_ListCtrl::GetCaret() const {
|
| @@ -695,7 +514,7 @@ void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) {
|
| return;
|
|
|
| CFX_FloatRect rcPlate = GetPlateRect();
|
| - CFX_FloatRect rcItem = CFX_List::GetItemRect(nItemIndex);
|
| + CFX_FloatRect rcItem = GetItemRectInternal(nItemIndex);
|
| CFX_FloatRect rcItemCtrl = GetItemRect(nItemIndex);
|
|
|
| if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom)) {
|
| @@ -712,7 +531,7 @@ void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) {
|
| void CFX_ListCtrl::SetScrollInfo() {
|
| if (m_pNotify) {
|
| CFX_FloatRect rcPlate = GetPlateRect();
|
| - CFX_FloatRect rcContent = CFX_List::GetContentRect();
|
| + CFX_FloatRect rcContent = GetContentRectInternal();
|
|
|
| if (!m_bNotifyFlag) {
|
| m_bNotifyFlag = TRUE;
|
| @@ -731,7 +550,7 @@ void CFX_ListCtrl::SetScrollPos(const CFX_FloatPoint& point) {
|
| void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) {
|
| if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
|
| CFX_FloatRect rcPlate = GetPlateRect();
|
| - CFX_FloatRect rcContent = CFX_List::GetContentRect();
|
| + CFX_FloatRect rcContent = GetContentRectInternal();
|
|
|
| if (rcPlate.Height() > rcContent.Height()) {
|
| fy = rcPlate.top;
|
| @@ -756,19 +575,36 @@ void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) {
|
| }
|
| }
|
|
|
| +CFX_FloatRect CFX_ListCtrl::GetContentRectInternal() const {
|
| + return InnerToOuter(CFX_ListContainer::GetContentRect());
|
| +}
|
| +
|
| CFX_FloatRect CFX_ListCtrl::GetContentRect() const {
|
| - return InToOut(CFX_List::GetContentRect());
|
| + return InToOut(GetContentRectInternal());
|
| }
|
|
|
| void CFX_ListCtrl::ReArrange(int32_t nItemIndex) {
|
| - CFX_List::ReArrange(nItemIndex);
|
| + FX_FLOAT fPosY = 0.0f;
|
| +
|
| + if (CFX_ListItem* pPrevItem = m_aListItems.GetAt(nItemIndex - 1))
|
| + fPosY = pPrevItem->GetRect().bottom;
|
| +
|
| + for (int32_t i = nItemIndex, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| + FX_FLOAT fListItemHeight = pListItem->GetItemHeight();
|
| + pListItem->SetRect(CLST_Rect(0.0f, fPosY, 0.0f, fPosY + fListItemHeight));
|
| + fPosY += fListItemHeight;
|
| + }
|
| + }
|
| +
|
| + SetContentRect(CLST_Rect(0.0f, 0.0f, 0.0f, fPosY));
|
| SetScrollInfo();
|
| }
|
|
|
| void CFX_ListCtrl::SetTopItem(int32_t nIndex) {
|
| if (IsValid(nIndex)) {
|
| GetPlateRect();
|
| - CFX_FloatRect rcItem = CFX_List::GetItemRect(nIndex);
|
| + CFX_FloatRect rcItem = GetItemRectInternal(nIndex);
|
| SetScrollPosY(rcItem.top);
|
| }
|
| }
|
| @@ -783,7 +619,11 @@ int32_t CFX_ListCtrl::GetTopItem() const {
|
| }
|
|
|
| void CFX_ListCtrl::Empty() {
|
| - CFX_List::Empty();
|
| + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++)
|
| + delete m_aListItems.GetAt(i);
|
| +
|
| + m_aListItems.RemoveAll();
|
| +
|
| InvalidateItem(-1);
|
| }
|
|
|
| @@ -792,7 +632,35 @@ void CFX_ListCtrl::Cancel() {
|
| }
|
|
|
| int32_t CFX_ListCtrl::GetItemIndex(const CFX_FloatPoint& point) const {
|
| - return CFX_List::GetItemIndex(OutToIn(point));
|
| + CFX_FloatPoint pt = OuterToInner(OutToIn(point));
|
| +
|
| + FX_BOOL bFirst = TRUE;
|
| + FX_BOOL bLast = TRUE;
|
| +
|
| + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| + CLST_Rect rcListItem = pListItem->GetRect();
|
| +
|
| + if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top)) {
|
| + bFirst = FALSE;
|
| + }
|
| +
|
| + if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom)) {
|
| + bLast = FALSE;
|
| + }
|
| +
|
| + if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) {
|
| + return i;
|
| + }
|
| + }
|
| + }
|
| +
|
| + if (bFirst)
|
| + return 0;
|
| + if (bLast)
|
| + return m_aListItems.GetSize() - 1;
|
| +
|
| + return -1;
|
| }
|
|
|
| CFX_WideString CFX_ListCtrl::GetText() const {
|
| @@ -800,3 +668,122 @@ CFX_WideString CFX_ListCtrl::GetText() const {
|
| return GetItemText(m_nCaretIndex);
|
| return GetItemText(m_nSelItem);
|
| }
|
| +
|
| +void CFX_ListCtrl::SetFontMap(IPVT_FontMap* pFontMap) {
|
| + m_pFontMap = pFontMap;
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetFontSize(FX_FLOAT fFontSize) {
|
| + m_fFontSize = fFontSize;
|
| +}
|
| +
|
| +void CFX_ListCtrl::AddItem(const FX_WCHAR* str) {
|
| + CFX_ListItem* pListItem = new CFX_ListItem();
|
| + pListItem->SetFontMap(m_pFontMap);
|
| + pListItem->SetFontSize(m_fFontSize);
|
| + pListItem->SetText(str);
|
| + m_aListItems.Add(pListItem);
|
| +}
|
| +
|
| +CFX_Edit* CFX_ListCtrl::GetItemEdit(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + return pListItem->GetEdit();
|
| + }
|
| +
|
| + return nullptr;
|
| +}
|
| +
|
| +int32_t CFX_ListCtrl::GetCount() const {
|
| + return m_aListItems.GetSize();
|
| +}
|
| +
|
| +CFX_FloatRect CFX_ListCtrl::GetPlateRect() const {
|
| + return CFX_ListContainer::GetPlateRect();
|
| +}
|
| +
|
| +FX_FLOAT CFX_ListCtrl::GetFontSize() const {
|
| + return m_fFontSize;
|
| +}
|
| +
|
| +FX_FLOAT CFX_ListCtrl::GetFirstHeight() const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(0)) {
|
| + return pListItem->GetItemHeight();
|
| + }
|
| +
|
| + return 1.0f;
|
| +}
|
| +
|
| +int32_t CFX_ListCtrl::GetFirstSelected() const {
|
| + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| + if (pListItem->IsSelected())
|
| + return i;
|
| + }
|
| + }
|
| + return -1;
|
| +}
|
| +
|
| +int32_t CFX_ListCtrl::GetLastSelected() const {
|
| + for (int32_t i = m_aListItems.GetSize() - 1; i >= 0; i--) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) {
|
| + if (pListItem->IsSelected())
|
| + return i;
|
| + }
|
| + }
|
| + return -1;
|
| +}
|
| +
|
| +FX_WCHAR CFX_ListCtrl::Toupper(FX_WCHAR c) const {
|
| + if ((c >= 'a') && (c <= 'z'))
|
| + c = c - ('a' - 'A');
|
| + return c;
|
| +}
|
| +
|
| +int32_t CFX_ListCtrl::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
|
| + int32_t nCircleIndex = nIndex;
|
| +
|
| + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| + nCircleIndex++;
|
| + if (nCircleIndex >= sz)
|
| + nCircleIndex = 0;
|
| +
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) {
|
| + if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
|
| + return nCircleIndex;
|
| + }
|
| + }
|
| +
|
| + return nCircleIndex;
|
| +}
|
| +
|
| +FX_BOOL CFX_ListCtrl::IsItemSelected(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex))
|
| + return pListItem->IsSelected();
|
| + return FALSE;
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
|
| + pListItem->SetSelect(bSelected);
|
| + }
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetMultipleSel(FX_BOOL bMultiple) {
|
| + m_bMultiple = bMultiple;
|
| +}
|
| +
|
| +FX_BOOL CFX_ListCtrl::IsMultipleSel() const {
|
| + return m_bMultiple;
|
| +}
|
| +
|
| +FX_BOOL CFX_ListCtrl::IsValid(int32_t nItemIndex) const {
|
| + return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
|
| +}
|
| +
|
| +CFX_WideString CFX_ListCtrl::GetItemText(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + return pListItem->GetText();
|
| + }
|
| +
|
| + return L"";
|
| +}
|
|
|