| Index: fpdfsdk/src/fxedit/fxet_list.cpp
|
| diff --git a/fpdfsdk/src/fxedit/fxet_list.cpp b/fpdfsdk/src/fxedit/fxet_list.cpp
|
| index d94cc16c868cf6aa77a9abcec954bcc2b422759c..70dc8d52624895392c05b6b7b53b92857eb2d1fe 100644
|
| --- a/fpdfsdk/src/fxedit/fxet_list.cpp
|
| +++ b/fpdfsdk/src/fxedit/fxet_list.cpp
|
| @@ -8,1004 +8,829 @@
|
| #include "../../include/fxedit/fxet_edit.h"
|
| #include "../../include/fxedit/fxet_list.h"
|
|
|
| -/* ------------------------------- CFX_ListItem ---------------------------------- */
|
| +/* ------------------------------- CFX_ListItem
|
| + * ---------------------------------- */
|
|
|
| -CFX_ListItem::CFX_ListItem() : m_pEdit(NULL),
|
| - m_bSelected(FALSE),
|
| - m_bCaret(FALSE),
|
| - m_rcListItem(0.0f,0.0f,0.0f,0.0f)
|
| -{
|
| - m_pEdit = IFX_Edit::NewEdit();
|
| - ASSERT(m_pEdit != NULL);
|
| +CFX_ListItem::CFX_ListItem()
|
| + : m_pEdit(NULL),
|
| + m_bSelected(FALSE),
|
| + m_bCaret(FALSE),
|
| + m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) {
|
| + m_pEdit = IFX_Edit::NewEdit();
|
| + ASSERT(m_pEdit != NULL);
|
|
|
| - m_pEdit->SetAlignmentV(1);
|
| - m_pEdit->Initialize();
|
| + m_pEdit->SetAlignmentV(1);
|
| + m_pEdit->Initialize();
|
| }
|
|
|
| -CFX_ListItem::~CFX_ListItem()
|
| -{
|
| - IFX_Edit::DelEdit(m_pEdit);
|
| +CFX_ListItem::~CFX_ListItem() {
|
| + IFX_Edit::DelEdit(m_pEdit);
|
| }
|
|
|
| -void CFX_ListItem::SetFontMap(IFX_Edit_FontMap * pFontMap)
|
| -{
|
| - if (m_pEdit)
|
| - m_pEdit->SetFontMap(pFontMap);
|
| +void CFX_ListItem::SetFontMap(IFX_Edit_FontMap* pFontMap) {
|
| + if (m_pEdit)
|
| + m_pEdit->SetFontMap(pFontMap);
|
| }
|
|
|
| -IFX_Edit* CFX_ListItem::GetEdit() const
|
| -{
|
| - return m_pEdit;
|
| +IFX_Edit* CFX_ListItem::GetEdit() const {
|
| + return m_pEdit;
|
| }
|
|
|
| -IFX_Edit_Iterator* CFX_ListItem::GetIterator() const
|
| -{
|
| - if (m_pEdit)
|
| - return m_pEdit->GetIterator();
|
| +IFX_Edit_Iterator* CFX_ListItem::GetIterator() const {
|
| + if (m_pEdit)
|
| + return m_pEdit->GetIterator();
|
|
|
| - return NULL;
|
| + return NULL;
|
| }
|
|
|
| -void CFX_ListItem::SetRect(const CLST_Rect & rect)
|
| -{
|
| - m_rcListItem = rect;
|
| +void CFX_ListItem::SetRect(const CLST_Rect& rect) {
|
| + m_rcListItem = rect;
|
| }
|
|
|
| -CLST_Rect CFX_ListItem::GetRect() const
|
| -{
|
| - return m_rcListItem;
|
| +CLST_Rect CFX_ListItem::GetRect() const {
|
| + return m_rcListItem;
|
| }
|
|
|
| -FX_BOOL CFX_ListItem::IsSelected() const
|
| -{
|
| - return m_bSelected;
|
| +FX_BOOL CFX_ListItem::IsSelected() const {
|
| + return m_bSelected;
|
| }
|
|
|
| -void CFX_ListItem::SetSelect(FX_BOOL bSelected)
|
| -{
|
| - m_bSelected = bSelected;
|
| +void CFX_ListItem::SetSelect(FX_BOOL bSelected) {
|
| + m_bSelected = bSelected;
|
| }
|
|
|
| -FX_BOOL CFX_ListItem::IsCaret() const
|
| -{
|
| - return m_bCaret;
|
| +FX_BOOL CFX_ListItem::IsCaret() const {
|
| + return m_bCaret;
|
| }
|
|
|
| -void CFX_ListItem::SetCaret(FX_BOOL bCaret)
|
| -{
|
| - m_bCaret = bCaret;
|
| +void CFX_ListItem::SetCaret(FX_BOOL bCaret) {
|
| + m_bCaret = bCaret;
|
| }
|
|
|
| -void CFX_ListItem::SetText(const FX_WCHAR* text)
|
| -{
|
| - if (m_pEdit)
|
| - m_pEdit->SetText(text);
|
| +void CFX_ListItem::SetText(const FX_WCHAR* text) {
|
| + if (m_pEdit)
|
| + m_pEdit->SetText(text);
|
| }
|
|
|
| -void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize)
|
| -{
|
| - if (m_pEdit)
|
| - m_pEdit->SetFontSize(fFontSize);
|
| +void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) {
|
| + if (m_pEdit)
|
| + m_pEdit->SetFontSize(fFontSize);
|
| }
|
|
|
| -FX_FLOAT CFX_ListItem::GetItemHeight() const
|
| -{
|
| - if (m_pEdit)
|
| - return m_pEdit->GetContentRect().Height();
|
| +FX_FLOAT CFX_ListItem::GetItemHeight() const {
|
| + if (m_pEdit)
|
| + return m_pEdit->GetContentRect().Height();
|
|
|
| - return 0.0f;
|
| + return 0.0f;
|
| }
|
|
|
| -FX_WORD CFX_ListItem::GetFirstChar() const
|
| -{
|
| - CPVT_Word word;
|
| +FX_WORD CFX_ListItem::GetFirstChar() const {
|
| + CPVT_Word word;
|
|
|
| - if (IFX_Edit_Iterator* pIterator = GetIterator())
|
| - {
|
| - pIterator->SetAt(1);
|
| - pIterator->GetWord(word);
|
| - }
|
| + if (IFX_Edit_Iterator* pIterator = GetIterator()) {
|
| + pIterator->SetAt(1);
|
| + pIterator->GetWord(word);
|
| + }
|
|
|
| - return word.Word;
|
| + return word.Word;
|
| }
|
|
|
| -CFX_WideString CFX_ListItem::GetText() const
|
| -{
|
| - if (m_pEdit)
|
| - return m_pEdit->GetText();
|
| +CFX_WideString CFX_ListItem::GetText() const {
|
| + if (m_pEdit)
|
| + return m_pEdit->GetText();
|
|
|
| - return L"";
|
| + return L"";
|
| }
|
|
|
| -/* ------------------------------------ CFX_List --------------------------------- */
|
| +/* ------------------------------------ CFX_List
|
| + * --------------------------------- */
|
|
|
| -CFX_List::CFX_List() : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE)
|
| -{
|
| +CFX_List::CFX_List()
|
| + : m_fFontSize(0.0f), m_pFontMap(NULL), m_bMultiple(FALSE) {}
|
| +
|
| +CFX_List::~CFX_List() {
|
| + Empty();
|
| }
|
|
|
| -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::Empty()
|
| -{
|
| - for (int32_t i=0,sz=m_aListItems.GetSize(); i<sz; i++)
|
| - delete m_aListItems.GetAt(i);
|
| +void CFX_List::SetFontMap(IFX_Edit_FontMap* pFontMap) {
|
| + m_pFontMap = pFontMap;
|
| +}
|
|
|
| - m_aListItems.RemoveAll();
|
| +void CFX_List::SetFontSize(FX_FLOAT fFontSize) {
|
| + m_fFontSize = fFontSize;
|
| }
|
|
|
| -void CFX_List::SetFontMap(IFX_Edit_FontMap * pFontMap)
|
| -{
|
| - m_pFontMap = pFontMap;
|
| +void CFX_List::AddItem(const FX_WCHAR* str) {
|
| + if (CFX_ListItem* pListItem = new CFX_ListItem()) {
|
| + pListItem->SetFontMap(m_pFontMap);
|
| + pListItem->SetFontSize(m_fFontSize);
|
| + pListItem->SetText(str);
|
| + m_aListItems.Add(pListItem);
|
| + }
|
| }
|
|
|
| -void CFX_List::SetFontSize(FX_FLOAT fFontSize)
|
| -{
|
| - m_fFontSize = fFontSize;
|
| +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));
|
| }
|
|
|
| -void CFX_List::AddItem(const FX_WCHAR* str)
|
| -{
|
| - if (CFX_ListItem * pListItem = new CFX_ListItem())
|
| - {
|
| - pListItem->SetFontMap(m_pFontMap);
|
| - pListItem->SetFontSize(m_fFontSize);
|
| - pListItem->SetText(str);
|
| - m_aListItems.Add(pListItem);
|
| - }
|
| +IFX_Edit* CFX_List::GetItemEdit(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + return pListItem->GetEdit();
|
| + }
|
| +
|
| + return NULL;
|
| }
|
|
|
| -void CFX_List::ReArrange(int32_t nItemIndex)
|
| -{
|
| - FX_FLOAT fPosY = 0.0f;
|
| +int32_t CFX_List::GetCount() const {
|
| + return m_aListItems.GetSize();
|
| +}
|
|
|
| - if (CFX_ListItem * pPrevItem = m_aListItems.GetAt(nItemIndex - 1))
|
| - fPosY = pPrevItem->GetRect().bottom;
|
| +CPDF_Rect CFX_List::GetPlateRect() const {
|
| + return CFX_ListContainer::GetPlateRect();
|
| +}
|
|
|
| - 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;
|
| - }
|
| - }
|
| +CPDF_Rect CFX_List::GetContentRect() const {
|
| + return InnerToOuter(CFX_ListContainer::GetContentRect());
|
| +}
|
|
|
| - SetContentRect(CLST_Rect(0.0f,0.0f,0.0f,fPosY));
|
| +FX_FLOAT CFX_List::GetFontSize() const {
|
| + return m_fFontSize;
|
| }
|
|
|
| -IFX_Edit * CFX_List::GetItemEdit(int32_t nIndex) const
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
|
| - {
|
| - return pListItem->GetEdit();
|
| - }
|
| +int32_t CFX_List::GetItemIndex(const CPDF_Point& point) const {
|
| + CPDF_Point pt = OuterToInner(point);
|
| +
|
| + FX_BOOL bFirst = TRUE;
|
| + FX_BOOL bLast = TRUE;
|
|
|
| - return NULL;
|
| + 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;
|
| }
|
|
|
| -int32_t CFX_List::GetCount() const
|
| -{
|
| - return m_aListItems.GetSize();
|
| +FX_FLOAT CFX_List::GetFirstHeight() const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(0)) {
|
| + return pListItem->GetItemHeight();
|
| + }
|
| +
|
| + return 1.0f;
|
| }
|
|
|
| -CPDF_Rect CFX_List::GetPlateRect() const
|
| -{
|
| - return CFX_ListContainer::GetPlateRect();
|
| +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;
|
| }
|
|
|
| -CPDF_Rect CFX_List::GetContentRect() const
|
| -{
|
| - return InnerToOuter(CFX_ListContainer::GetContentRect());
|
| +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_FLOAT CFX_List::GetFontSize() const
|
| -{
|
| - return m_fFontSize;
|
| +FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const {
|
| + if ((c >= 'a') && (c <= 'z'))
|
| + c = c - ('a' - 'A');
|
| + return c;
|
| }
|
|
|
| -int32_t CFX_List::GetItemIndex(const CPDF_Point & point) const
|
| -{
|
| - CPDF_Point pt = OuterToInner(point);
|
| +int32_t CFX_List::FindNext(int32_t nIndex, FX_WCHAR nChar) const {
|
| + int32_t nCircleIndex = nIndex;
|
|
|
| - FX_BOOL bFirst = TRUE;
|
| - FX_BOOL bLast = TRUE;
|
| + for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) {
|
| + nCircleIndex++;
|
| + if (nCircleIndex >= sz)
|
| + nCircleIndex = 0;
|
|
|
| - 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 (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) {
|
| + if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
|
| + return nCircleIndex;
|
| + }
|
| + }
|
|
|
| - if (FX_EDIT_IsFloatBigger(pt.y, rcListItem.top))
|
| - {
|
| - bFirst = FALSE;
|
| - }
|
| + return nCircleIndex;
|
| +}
|
|
|
| - if (FX_EDIT_IsFloatSmaller(pt.y, rcListItem.bottom))
|
| - {
|
| - bLast = FALSE;
|
| - }
|
| +CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + CPDF_Rect rcItem = pListItem->GetRect();
|
| + rcItem.left = 0.0f;
|
| + rcItem.right = GetPlateRect().Width();
|
| + return InnerToOuter(rcItem);
|
| + }
|
|
|
| - if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom)
|
| - {
|
| - return i;
|
| - }
|
| - }
|
| - }
|
| + return CPDF_Rect();
|
| +}
|
|
|
| - if (bFirst) return 0;
|
| - if (bLast) return m_aListItems.GetSize()-1;
|
| +FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + return pListItem->IsSelected();
|
| + }
|
| +
|
| + return FALSE;
|
| +}
|
|
|
| - return -1;
|
| +void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
|
| + pListItem->SetSelect(bSelected);
|
| + }
|
| }
|
|
|
| -FX_FLOAT CFX_List::GetFirstHeight() const
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(0))
|
| - {
|
| - return pListItem->GetItemHeight();
|
| - }
|
| +void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret) {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) {
|
| + pListItem->SetCaret(bCaret);
|
| + }
|
| +}
|
|
|
| - return 1.0f;
|
| +void CFX_List::SetMultipleSel(FX_BOOL bMultiple) {
|
| + m_bMultiple = bMultiple;
|
| }
|
|
|
| -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;
|
| +FX_BOOL CFX_List::IsMultipleSel() const {
|
| + return m_bMultiple;
|
| }
|
|
|
| -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_BOOL CFX_List::IsValid(int32_t nItemIndex) const {
|
| + return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
|
| }
|
|
|
| -FX_WCHAR CFX_List::Toupper(FX_WCHAR c) const
|
| -{
|
| - if ( (c >= 'a') && (c <= 'z') )
|
| - c = c - ('a' - 'A');
|
| - return c;
|
| +CFX_WideString CFX_List::GetItemText(int32_t nIndex) const {
|
| + if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) {
|
| + return pListItem->GetText();
|
| + }
|
| +
|
| + return L"";
|
| }
|
|
|
| -int32_t CFX_List::FindNext(int32_t nIndex,FX_WCHAR nChar) const
|
| -{
|
| - int32_t nCircleIndex = nIndex;
|
| +/* ------------------------------------ CPLST_Select
|
| + * ---------------------------------- */
|
|
|
| - for (int32_t i=0,sz=m_aListItems.GetSize(); i<sz; i++)
|
| - {
|
| - nCircleIndex ++;
|
| - if (nCircleIndex >= sz) nCircleIndex = 0;
|
| +CPLST_Select::CPLST_Select() {}
|
|
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nCircleIndex))
|
| - {
|
| - if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar))
|
| - return nCircleIndex;
|
| - }
|
| - }
|
| +CPLST_Select::~CPLST_Select() {
|
| + for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++)
|
| + delete m_aItems.GetAt(i);
|
|
|
| - return nCircleIndex;
|
| + m_aItems.RemoveAll();
|
| }
|
|
|
| -CPDF_Rect CFX_List::GetItemRect(int32_t nIndex) const
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
|
| - {
|
| - CPDF_Rect rcItem = pListItem->GetRect();
|
| - rcItem.left = 0.0f;
|
| - rcItem.right = GetPlateRect().Width();
|
| - return InnerToOuter(rcItem);
|
| - }
|
| +void CPLST_Select::Add(int32_t nItemIndex) {
|
| + int32_t nIndex = Find(nItemIndex);
|
|
|
| - return CPDF_Rect();
|
| + if (nIndex < 0)
|
| + m_aItems.Add(new CPLST_Select_Item(nItemIndex, 1));
|
| + else {
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) {
|
| + pItem->nState = 1;
|
| + }
|
| + }
|
| }
|
|
|
| -FX_BOOL CFX_List::IsItemSelected(int32_t nIndex) const
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
|
| - {
|
| - return pListItem->IsSelected();
|
| - }
|
| +void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex) {
|
| + if (nBeginIndex > nEndIndex) {
|
| + int32_t nTemp = nEndIndex;
|
| + nEndIndex = nBeginIndex;
|
| + nBeginIndex = nTemp;
|
| + }
|
|
|
| - return FALSE;
|
| + for (int32_t i = nBeginIndex; i <= nEndIndex; i++)
|
| + Add(i);
|
| }
|
|
|
| -void CFX_List::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected)
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nItemIndex))
|
| - {
|
| - pListItem->SetSelect(bSelected);
|
| - }
|
| +void CPLST_Select::Sub(int32_t nItemIndex) {
|
| + for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) {
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i))
|
| + if (pItem->nItemIndex == nItemIndex)
|
| + pItem->nState = -1;
|
| + }
|
| }
|
|
|
| -void CFX_List::SetItemCaret(int32_t nItemIndex, FX_BOOL bCaret)
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nItemIndex))
|
| - {
|
| - pListItem->SetCaret(bCaret);
|
| - }
|
| +void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex) {
|
| + if (nBeginIndex > nEndIndex) {
|
| + int32_t nTemp = nEndIndex;
|
| + nEndIndex = nBeginIndex;
|
| + nBeginIndex = nTemp;
|
| + }
|
| +
|
| + for (int32_t i = nBeginIndex; i <= nEndIndex; i++)
|
| + Sub(i);
|
| }
|
|
|
| -void CFX_List::SetMultipleSel(FX_BOOL bMultiple)
|
| -{
|
| - m_bMultiple = bMultiple;
|
| +int32_t CPLST_Select::Find(int32_t nItemIndex) const {
|
| + for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) {
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
|
| + if (pItem->nItemIndex == nItemIndex)
|
| + return i;
|
| + }
|
| + }
|
| +
|
| + return -1;
|
| }
|
|
|
| -FX_BOOL CFX_List::IsMultipleSel() const
|
| -{
|
| - return m_bMultiple;
|
| +FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const {
|
| + return Find(nItemIndex) >= 0;
|
| }
|
|
|
| -FX_BOOL CFX_List::IsValid(int32_t nItemIndex) const
|
| -{
|
| - return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize();
|
| +int32_t CPLST_Select::GetCount() const {
|
| + return m_aItems.GetSize();
|
| }
|
|
|
| -CFX_WideString CFX_List::GetItemText(int32_t nIndex) const
|
| -{
|
| - if (CFX_ListItem * pListItem = m_aListItems.GetAt(nIndex))
|
| - {
|
| - return pListItem->GetText();
|
| - }
|
| +int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const {
|
| + if (nIndex >= 0 && nIndex < m_aItems.GetSize())
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex))
|
| + return pItem->nItemIndex;
|
|
|
| - return L"";
|
| + return -1;
|
| }
|
|
|
| -/* ------------------------------------ CPLST_Select ---------------------------------- */
|
| +int32_t CPLST_Select::GetState(int32_t nIndex) const {
|
| + if (nIndex >= 0 && nIndex < m_aItems.GetSize())
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex))
|
| + return pItem->nState;
|
|
|
| -CPLST_Select::CPLST_Select()
|
| -{
|
| + return 0;
|
| }
|
|
|
| -CPLST_Select::~CPLST_Select()
|
| -{
|
| - for (int32_t i=0,sz=m_aItems.GetSize(); i<sz; i++)
|
| - delete m_aItems.GetAt(i);
|
| +void CPLST_Select::DeselectAll() {
|
| + for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) {
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
|
| + pItem->nState = -1;
|
| + }
|
| + }
|
| +}
|
|
|
| - m_aItems.RemoveAll();
|
| +void CPLST_Select::Done() {
|
| + for (int32_t i = m_aItems.GetSize() - 1; i >= 0; i--) {
|
| + if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) {
|
| + if (pItem->nState == -1) {
|
| + delete pItem;
|
| + m_aItems.RemoveAt(i);
|
| + } else {
|
| + pItem->nState = 0;
|
| + }
|
| + }
|
| + }
|
| }
|
|
|
| -void CPLST_Select::Add(int32_t nItemIndex)
|
| -{
|
| - int32_t nIndex = Find(nItemIndex);
|
| +/* ------------------------------------ CFX_ListCtrl
|
| + * --------------------------------- */
|
| +
|
| +CFX_ListCtrl::CFX_ListCtrl()
|
| + : m_pNotify(NULL),
|
| + m_bNotifyFlag(FALSE),
|
| + m_ptScrollPos(0.0f, 0.0f),
|
| + m_nSelItem(-1),
|
| + m_nFootIndex(-1),
|
| + m_bCtrlSel(FALSE),
|
| + m_nCaretIndex(-1) {}
|
|
|
| - if (nIndex < 0)
|
| - m_aItems.Add(new CPLST_Select_Item(nItemIndex,1));
|
| - else
|
| - {
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex))
|
| - {
|
| - pItem->nState = 1;
|
| - }
|
| - }
|
| +CFX_ListCtrl::~CFX_ListCtrl() {}
|
| +
|
| +void CFX_ListCtrl::SetNotify(IFX_List_Notify* pNotify) {
|
| + m_pNotify = pNotify;
|
| }
|
|
|
| -void CPLST_Select::Add(int32_t nBeginIndex, int32_t nEndIndex)
|
| -{
|
| - if (nBeginIndex > nEndIndex)
|
| - {
|
| - int32_t nTemp = nEndIndex;
|
| - nEndIndex = nBeginIndex;
|
| - nBeginIndex = nTemp;
|
| - }
|
| +CPDF_Point CFX_ListCtrl::InToOut(const CPDF_Point& point) const {
|
| + CPDF_Rect rcPlate = GetPlateRect();
|
|
|
| - for (int32_t i=nBeginIndex; i<=nEndIndex; i++) Add(i);
|
| + return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
|
| + point.y - (m_ptScrollPos.y - rcPlate.top));
|
| }
|
|
|
| -void CPLST_Select::Sub(int32_t nItemIndex)
|
| -{
|
| - for (int32_t i=m_aItems.GetSize()-1; i>=0; i--)
|
| - {
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
|
| - if (pItem->nItemIndex == nItemIndex)
|
| - pItem->nState = -1;
|
| - }
|
| +CPDF_Point CFX_ListCtrl::OutToIn(const CPDF_Point& point) const {
|
| + CPDF_Rect rcPlate = GetPlateRect();
|
| +
|
| + return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
|
| + point.y + (m_ptScrollPos.y - rcPlate.top));
|
| }
|
|
|
| -void CPLST_Select::Sub(int32_t nBeginIndex, int32_t nEndIndex)
|
| -{
|
| - if (nBeginIndex > nEndIndex)
|
| - {
|
| - int32_t nTemp = nEndIndex;
|
| - nEndIndex = nBeginIndex;
|
| - nBeginIndex = nTemp;
|
| - }
|
| +CPDF_Rect CFX_ListCtrl::InToOut(const CPDF_Rect& rect) const {
|
| + CPDF_Point ptLeftBottom = InToOut(CPDF_Point(rect.left, rect.bottom));
|
| + CPDF_Point ptRightTop = InToOut(CPDF_Point(rect.right, rect.top));
|
|
|
| - for (int32_t i=nBeginIndex; i<=nEndIndex; i++) Sub(i);
|
| + return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y);
|
| }
|
|
|
| -int32_t CPLST_Select::Find(int32_t nItemIndex) const
|
| -{
|
| - for (int32_t i=0,sz=m_aItems.GetSize(); i<sz; i++)
|
| - {
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
|
| - {
|
| - if (pItem->nItemIndex == nItemIndex)
|
| - return i;
|
| - }
|
| - }
|
| +CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect& rect) const {
|
| + CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left, rect.bottom));
|
| + CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right, rect.top));
|
|
|
| - return -1;
|
| + return CPDF_Rect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, ptRightTop.y);
|
| }
|
|
|
| -FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const
|
| -{
|
| - return Find(nItemIndex) >= 0;
|
| +void CFX_ListCtrl::OnMouseDown(const CPDF_Point& point,
|
| + FX_BOOL bShift,
|
| + FX_BOOL bCtrl) {
|
| + int32_t nHitIndex = GetItemIndex(point);
|
| +
|
| + if (IsMultipleSel()) {
|
| + if (bCtrl) {
|
| + if (IsItemSelected(nHitIndex)) {
|
| + m_aSelItems.Sub(nHitIndex);
|
| + SelectItems();
|
| + m_bCtrlSel = FALSE;
|
| + } else {
|
| + m_aSelItems.Add(nHitIndex);
|
| + SelectItems();
|
| + m_bCtrlSel = TRUE;
|
| + }
|
| +
|
| + m_nFootIndex = nHitIndex;
|
| + } else if (bShift) {
|
| + m_aSelItems.DeselectAll();
|
| + m_aSelItems.Add(m_nFootIndex, nHitIndex);
|
| + SelectItems();
|
| + } else {
|
| + m_aSelItems.DeselectAll();
|
| + m_aSelItems.Add(nHitIndex);
|
| + SelectItems();
|
| +
|
| + m_nFootIndex = nHitIndex;
|
| + }
|
| +
|
| + SetCaret(nHitIndex);
|
| + } else {
|
| + SetSingleSelect(nHitIndex);
|
| + }
|
| +
|
| + if (!IsItemVisible(nHitIndex))
|
| + ScrollToListItem(nHitIndex);
|
| }
|
|
|
| -int32_t CPLST_Select::GetCount() const
|
| -{
|
| - return m_aItems.GetSize();
|
| +void CFX_ListCtrl::OnMouseMove(const CPDF_Point& point,
|
| + FX_BOOL bShift,
|
| + FX_BOOL bCtrl) {
|
| + int32_t nHitIndex = GetItemIndex(point);
|
| +
|
| + if (IsMultipleSel()) {
|
| + if (bCtrl) {
|
| + if (m_bCtrlSel)
|
| + m_aSelItems.Add(m_nFootIndex, nHitIndex);
|
| + else
|
| + m_aSelItems.Sub(m_nFootIndex, nHitIndex);
|
| +
|
| + SelectItems();
|
| + } else {
|
| + m_aSelItems.DeselectAll();
|
| + m_aSelItems.Add(m_nFootIndex, nHitIndex);
|
| + SelectItems();
|
| + }
|
| +
|
| + SetCaret(nHitIndex);
|
| + } else {
|
| + SetSingleSelect(nHitIndex);
|
| + }
|
| +
|
| + if (!IsItemVisible(nHitIndex))
|
| + ScrollToListItem(nHitIndex);
|
| }
|
|
|
| -int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const
|
| -{
|
| - if (nIndex >= 0 && nIndex < m_aItems.GetSize())
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex))
|
| - return pItem->nItemIndex;
|
| +void CFX_ListCtrl::OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + if (IsMultipleSel()) {
|
| + if (nItemIndex >= 0 && nItemIndex < GetCount()) {
|
| + if (bCtrl) {
|
| + } else if (bShift) {
|
| + m_aSelItems.DeselectAll();
|
| + m_aSelItems.Add(m_nFootIndex, nItemIndex);
|
| + SelectItems();
|
| + } else {
|
| + m_aSelItems.DeselectAll();
|
| + m_aSelItems.Add(nItemIndex);
|
| + SelectItems();
|
| + m_nFootIndex = nItemIndex;
|
| + }
|
| +
|
| + SetCaret(nItemIndex);
|
| + }
|
| + } else {
|
| + SetSingleSelect(nItemIndex);
|
| + }
|
|
|
| - return -1;
|
| + if (!IsItemVisible(nItemIndex))
|
| + ScrollToListItem(nItemIndex);
|
| }
|
|
|
| -int32_t CPLST_Select::GetState(int32_t nIndex) const
|
| -{
|
| - if (nIndex >= 0 && nIndex < m_aItems.GetSize())
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(nIndex))
|
| - return pItem->nState;
|
| +void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + OnVK(IsMultipleSel() ? GetCaret() - 1 : GetSelect() - 1, bShift, bCtrl);
|
| +}
|
|
|
| - return 0;
|
| +void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + OnVK(IsMultipleSel() ? GetCaret() + 1 : GetSelect() + 1, bShift, bCtrl);
|
| }
|
|
|
| -void CPLST_Select::DeselectAll()
|
| -{
|
| - for (int32_t i=0,sz=m_aItems.GetSize(); i<sz; i++)
|
| - {
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
|
| - {
|
| - pItem->nState = -1;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CPLST_Select::Done()
|
| -{
|
| - for (int32_t i=m_aItems.GetSize()-1; i>=0; i--)
|
| - {
|
| - if (CPLST_Select_Item * pItem = m_aItems.GetAt(i))
|
| - {
|
| - if (pItem->nState == -1)
|
| - {
|
| - delete pItem;
|
| - m_aItems.RemoveAt(i);
|
| - }
|
| - else
|
| - {
|
| - pItem->nState = 0;
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -/* ------------------------------------ CFX_ListCtrl --------------------------------- */
|
| +void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + OnVK(0, bShift, bCtrl);
|
| +}
|
|
|
| -CFX_ListCtrl::CFX_ListCtrl() : m_pNotify(NULL),
|
| - m_bNotifyFlag(FALSE),
|
| - m_ptScrollPos(0.0f,0.0f),
|
| - m_nSelItem(-1),
|
| - m_nFootIndex(-1),
|
| - m_bCtrlSel(FALSE),
|
| - m_nCaretIndex(-1)
|
| -{
|
| -}
|
| -
|
| -CFX_ListCtrl::~CFX_ListCtrl()
|
| -{
|
| +void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + OnVK(GetCount() - 1, bShift, bCtrl);
|
| }
|
| -
|
| -void CFX_ListCtrl::SetNotify(IFX_List_Notify * pNotify)
|
| -{
|
| - m_pNotify = pNotify;
|
| -}
|
| -
|
| -CPDF_Point CFX_ListCtrl::InToOut(const CPDF_Point & point) const
|
| -{
|
| - CPDF_Rect rcPlate = GetPlateRect();
|
| -
|
| - return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
|
| - point.y - (m_ptScrollPos.y - rcPlate.top));
|
| -}
|
| -
|
| -CPDF_Point CFX_ListCtrl::OutToIn(const CPDF_Point & point) const
|
| -{
|
| - CPDF_Rect rcPlate = GetPlateRect();
|
| -
|
| - return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
|
| - point.y + (m_ptScrollPos.y - rcPlate.top));
|
| -}
|
| -
|
| -CPDF_Rect CFX_ListCtrl::InToOut(const CPDF_Rect & rect) const
|
| -{
|
| - CPDF_Point ptLeftBottom = InToOut(CPDF_Point(rect.left,rect.bottom));
|
| - CPDF_Point ptRightTop = InToOut(CPDF_Point(rect.right,rect.top));
|
| -
|
| - return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
|
| -}
|
| -
|
| -CPDF_Rect CFX_ListCtrl::OutToIn(const CPDF_Rect & rect) const
|
| -{
|
| - CPDF_Point ptLeftBottom = OutToIn(CPDF_Point(rect.left,rect.bottom));
|
| - CPDF_Point ptRightTop = OutToIn(CPDF_Point(rect.right,rect.top));
|
| -
|
| - return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - int32_t nHitIndex = GetItemIndex(point);
|
| -
|
| - if (IsMultipleSel())
|
| - {
|
| - if (bCtrl)
|
| - {
|
| - if (IsItemSelected(nHitIndex))
|
| - {
|
| - m_aSelItems.Sub(nHitIndex);
|
| - SelectItems();
|
| - m_bCtrlSel = FALSE;
|
| - }
|
| - else
|
| - {
|
| - m_aSelItems.Add(nHitIndex);
|
| - SelectItems();
|
| - m_bCtrlSel = TRUE;
|
| - }
|
| -
|
| - m_nFootIndex = nHitIndex;
|
| - }
|
| - else if (bShift)
|
| - {
|
| - m_aSelItems.DeselectAll();
|
| - m_aSelItems.Add(m_nFootIndex,nHitIndex);
|
| - SelectItems();
|
| - }
|
| - else
|
| - {
|
| - m_aSelItems.DeselectAll();
|
| - m_aSelItems.Add(nHitIndex);
|
| - SelectItems();
|
| -
|
| - m_nFootIndex = nHitIndex;
|
| - }
|
| -
|
| - SetCaret(nHitIndex);
|
| - }
|
| - else
|
| - {
|
| - SetSingleSelect(nHitIndex);
|
| - }
|
| -
|
| - if (!IsItemVisible(nHitIndex))
|
| - ScrollToListItem(nHitIndex);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - int32_t nHitIndex = GetItemIndex(point);
|
| -
|
| - if (IsMultipleSel())
|
| - {
|
| - if (bCtrl)
|
| - {
|
| - if (m_bCtrlSel)
|
| - m_aSelItems.Add(m_nFootIndex,nHitIndex);
|
| - else
|
| - m_aSelItems.Sub(m_nFootIndex,nHitIndex);
|
| -
|
| - SelectItems();
|
| - }
|
| - else
|
| - {
|
| - m_aSelItems.DeselectAll();
|
| - m_aSelItems.Add(m_nFootIndex,nHitIndex);
|
| - SelectItems();
|
| - }
|
| -
|
| - SetCaret(nHitIndex);
|
| - }
|
| - else
|
| - {
|
| - SetSingleSelect(nHitIndex);
|
| - }
|
| -
|
| - if (!IsItemVisible(nHitIndex))
|
| - ScrollToListItem(nHitIndex);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK(int32_t nItemIndex,FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - if (IsMultipleSel())
|
| - {
|
| - if (nItemIndex >= 0 && nItemIndex < GetCount())
|
| - {
|
| - if (bCtrl)
|
| - {
|
| - }
|
| - else if (bShift)
|
| - {
|
| - m_aSelItems.DeselectAll();
|
| - m_aSelItems.Add(m_nFootIndex,nItemIndex);
|
| - SelectItems();
|
| - }
|
| - else
|
| - {
|
| - m_aSelItems.DeselectAll();
|
| - m_aSelItems.Add(nItemIndex);
|
| - SelectItems();
|
| - m_nFootIndex = nItemIndex;
|
| - }
|
| -
|
| - SetCaret(nItemIndex);
|
| - }
|
| - }
|
| - else
|
| - {
|
| - SetSingleSelect(nItemIndex);
|
| - }
|
| -
|
| - if (!IsItemVisible(nItemIndex))
|
| - ScrollToListItem(nItemIndex);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - OnVK(IsMultipleSel() ? GetCaret()-1 : GetSelect()-1, bShift, bCtrl);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - OnVK(IsMultipleSel() ? GetCaret()+1 : GetSelect()+1, bShift, bCtrl);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - OnVK(0, bShift, bCtrl);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - OnVK(GetCount()-1, bShift, bCtrl);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - OnVK(0, bShift, bCtrl);
|
| -}
|
| -
|
| -void CFX_ListCtrl::OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - OnVK(GetCount()-1, bShift, bCtrl);
|
| -}
|
| -
|
| -FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar,FX_BOOL bShift,FX_BOOL bCtrl)
|
| -{
|
| - int32_t nIndex = GetLastSelected();
|
| - int32_t nFindIndex = FindNext(nIndex,nChar);
|
| -
|
| - if (nFindIndex != nIndex)
|
| - {
|
| - OnVK(nFindIndex, bShift, bCtrl);
|
| - return TRUE;
|
| - }
|
| - return FALSE;
|
| +
|
| +void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + OnVK(0, bShift, bCtrl);
|
| +}
|
| +
|
| +void CFX_ListCtrl::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + OnVK(GetCount() - 1, bShift, bCtrl);
|
| +}
|
| +
|
| +FX_BOOL CFX_ListCtrl::OnChar(FX_WORD nChar, FX_BOOL bShift, FX_BOOL bCtrl) {
|
| + int32_t nIndex = GetLastSelected();
|
| + int32_t nFindIndex = FindNext(nIndex, nChar);
|
| +
|
| + if (nFindIndex != nIndex) {
|
| + OnVK(nFindIndex, bShift, bCtrl);
|
| + return TRUE;
|
| + }
|
| + return FALSE;
|
| }
|
|
|
| /* -------- inner methods ------- */
|
|
|
| -void CFX_ListCtrl::SetPlateRect(const CPDF_Rect & rect)
|
| -{
|
| - CFX_ListContainer::SetPlateRect(rect);
|
| - m_ptScrollPos.x = rect.left;
|
| - SetScrollPos(CPDF_Point(rect.left,rect.top));
|
| - ReArrange(0);
|
| - InvalidateItem(-1);
|
| -}
|
| -
|
| -CPDF_Rect CFX_ListCtrl::GetItemRect(int32_t nIndex) const
|
| -{
|
| - return InToOut(CFX_List::GetItemRect(nIndex));
|
| -}
|
| -
|
| -void CFX_ListCtrl::AddString(const FX_WCHAR* string)
|
| -{
|
| - AddItem(string);
|
| - ReArrange(GetCount() - 1);
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected)
|
| -{
|
| - if (!IsValid(nItemIndex)) return;
|
| -
|
| - if (bSelected != IsItemSelected(nItemIndex))
|
| - {
|
| - if (bSelected)
|
| - {
|
| - SetItemSelect(nItemIndex,TRUE);
|
| - InvalidateItem(nItemIndex);
|
| - }
|
| - else
|
| - {
|
| - SetItemSelect(nItemIndex,FALSE);
|
| - InvalidateItem(nItemIndex);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex)
|
| -{
|
| - if (!IsValid(nItemIndex)) return;
|
| -
|
| - if (m_nSelItem != nItemIndex)
|
| - {
|
| - if (m_nSelItem >= 0)
|
| - {
|
| - SetItemSelect(m_nSelItem,FALSE);
|
| - InvalidateItem(m_nSelItem);
|
| - }
|
| -
|
| - SetItemSelect(nItemIndex,TRUE);
|
| - InvalidateItem(nItemIndex);
|
| - m_nSelItem = nItemIndex;
|
| - }
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetCaret(int32_t nItemIndex)
|
| -{
|
| - if (!IsValid(nItemIndex)) return;
|
| -
|
| - if (IsMultipleSel())
|
| - {
|
| - int32_t nOldIndex = m_nCaretIndex;
|
| -
|
| - if (nOldIndex != nItemIndex)
|
| - {
|
| - m_nCaretIndex = nItemIndex;
|
| -
|
| - SetItemCaret(nOldIndex, FALSE);
|
| - SetItemCaret(nItemIndex,TRUE);
|
| -
|
| - InvalidateItem(nOldIndex);
|
| - InvalidateItem(nItemIndex);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex)
|
| -{
|
| - if (m_pNotify)
|
| - {
|
| - if (nItemIndex == -1)
|
| - {
|
| - if (!m_bNotifyFlag)
|
| - {
|
| - m_bNotifyFlag = TRUE;
|
| - CPDF_Rect rcRefresh = GetPlateRect();
|
| - m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| - }
|
| - else
|
| - {
|
| - if (!m_bNotifyFlag)
|
| - {
|
| - m_bNotifyFlag = TRUE;
|
| - CPDF_Rect rcRefresh = GetItemRect(nItemIndex);
|
| - rcRefresh.left -= 1.0f;
|
| - rcRefresh.right += 1.0f;
|
| - rcRefresh.bottom -= 1.0f;
|
| - rcRefresh.top += 1.0f;
|
| -
|
| - m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CFX_ListCtrl::SelectItems()
|
| -{
|
| - for (int32_t i=0,sz=m_aSelItems.GetCount(); i<sz; i++)
|
| - {
|
| - int32_t nItemIndex = m_aSelItems.GetItemIndex(i);
|
| - int32_t nState = m_aSelItems.GetState(i);
|
| -
|
| - switch(nState)
|
| - {
|
| - case 1:
|
| - SetMultipleSelect(nItemIndex, TRUE);
|
| - break;
|
| - case -1:
|
| - SetMultipleSelect(nItemIndex, FALSE);
|
| - break;
|
| - }
|
| - }
|
| -
|
| - m_aSelItems.Done();
|
| -}
|
| -
|
| -void CFX_ListCtrl::Select(int32_t nItemIndex)
|
| -{
|
| - if (!IsValid(nItemIndex)) return;
|
| -
|
| - if (IsMultipleSel())
|
| - {
|
| - m_aSelItems.Add(nItemIndex);
|
| - SelectItems();
|
| - }
|
| - else
|
| - SetSingleSelect(nItemIndex);
|
| -}
|
| -
|
| -FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const
|
| -{
|
| - CPDF_Rect rcPlate = GetPlateRect();
|
| - CPDF_Rect rcItem = GetItemRect(nItemIndex);
|
| -
|
| - return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top;
|
| -}
|
| -
|
| -void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex)
|
| -{
|
| - if (!IsValid(nItemIndex)) return;
|
| -
|
| - CPDF_Rect rcPlate = GetPlateRect();
|
| - CPDF_Rect rcItem = CFX_List::GetItemRect(nItemIndex);
|
| - CPDF_Rect rcItemCtrl = GetItemRect(nItemIndex);
|
| -
|
| - if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom))
|
| - {
|
| - if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top))
|
| - {
|
| - SetScrollPosY(rcItem.bottom + rcPlate.Height());
|
| - }
|
| - }
|
| - else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top))
|
| - {
|
| - if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom))
|
| - {
|
| - SetScrollPosY(rcItem.top);
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetScrollInfo()
|
| -{
|
| - if (m_pNotify)
|
| - {
|
| - CPDF_Rect rcPlate = GetPlateRect();
|
| - CPDF_Rect rcContent = CFX_List::GetContentRect();
|
| -
|
| - if (!m_bNotifyFlag)
|
| - {
|
| - m_bNotifyFlag = TRUE;
|
| - m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
|
| - rcContent.bottom, rcContent.top, GetFirstHeight(), rcPlate.Height());
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetScrollPos(const CPDF_Point & point)
|
| -{
|
| - SetScrollPosY(point.y);
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy)
|
| -{
|
| - if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y,fy))
|
| - {
|
| - CPDF_Rect rcPlate = GetPlateRect();
|
| - CPDF_Rect rcContent = CFX_List::GetContentRect();
|
| -
|
| - if (rcPlate.Height() > rcContent.Height())
|
| - {
|
| - fy = rcPlate.top;
|
| - }
|
| - else
|
| - {
|
| - if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom))
|
| - {
|
| - fy = rcContent.bottom + rcPlate.Height();
|
| - }
|
| - else if (FX_EDIT_IsFloatBigger(fy, rcContent.top))
|
| - {
|
| - fy = rcContent.top;
|
| - }
|
| - }
|
| -
|
| - m_ptScrollPos.y = fy;
|
| - InvalidateItem(-1);
|
| +void CFX_ListCtrl::SetPlateRect(const CPDF_Rect& rect) {
|
| + CFX_ListContainer::SetPlateRect(rect);
|
| + m_ptScrollPos.x = rect.left;
|
| + SetScrollPos(CPDF_Point(rect.left, rect.top));
|
| + ReArrange(0);
|
| + InvalidateItem(-1);
|
| +}
|
| +
|
| +CPDF_Rect CFX_ListCtrl::GetItemRect(int32_t nIndex) const {
|
| + return InToOut(CFX_List::GetItemRect(nIndex));
|
| +}
|
| +
|
| +void CFX_ListCtrl::AddString(const FX_WCHAR* string) {
|
| + AddItem(string);
|
| + ReArrange(GetCount() - 1);
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected) {
|
| + if (!IsValid(nItemIndex))
|
| + return;
|
|
|
| - if (m_pNotify)
|
| - {
|
| - if (!m_bNotifyFlag)
|
| - {
|
| - m_bNotifyFlag = TRUE;
|
| - m_pNotify->IOnSetScrollPosY(fy);
|
| - m_bNotifyFlag = FALSE;
|
| - }
|
| - }
|
| - }
|
| -}
|
| -
|
| -CPDF_Rect CFX_ListCtrl::GetContentRect() const
|
| -{
|
| - return InToOut(CFX_List::GetContentRect());
|
| + if (bSelected != IsItemSelected(nItemIndex)) {
|
| + if (bSelected) {
|
| + SetItemSelect(nItemIndex, TRUE);
|
| + InvalidateItem(nItemIndex);
|
| + } else {
|
| + SetItemSelect(nItemIndex, FALSE);
|
| + InvalidateItem(nItemIndex);
|
| + }
|
| + }
|
| }
|
|
|
| -void CFX_ListCtrl::ReArrange(int32_t nItemIndex)
|
| -{
|
| - CFX_List::ReArrange(nItemIndex);
|
| - SetScrollInfo();
|
| -}
|
| -
|
| -void CFX_ListCtrl::SetTopItem(int32_t nIndex)
|
| -{
|
| - if (IsValid(nIndex))
|
| - {
|
| - GetPlateRect();
|
| - CPDF_Rect rcItem = CFX_List::GetItemRect(nIndex);
|
| - SetScrollPosY(rcItem.top);
|
| - }
|
| -}
|
| -
|
| -int32_t CFX_ListCtrl::GetTopItem() const
|
| -{
|
| - int32_t nItemIndex = GetItemIndex(GetBTPoint());
|
| -
|
| - if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1))
|
| - nItemIndex += 1;
|
| -
|
| - return nItemIndex;
|
| -}
|
| -
|
| -void CFX_ListCtrl::Empty()
|
| -{
|
| - CFX_List::Empty();
|
| - InvalidateItem(-1);
|
| +void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) {
|
| + if (!IsValid(nItemIndex))
|
| + return;
|
| +
|
| + if (m_nSelItem != nItemIndex) {
|
| + if (m_nSelItem >= 0) {
|
| + SetItemSelect(m_nSelItem, FALSE);
|
| + InvalidateItem(m_nSelItem);
|
| + }
|
| +
|
| + SetItemSelect(nItemIndex, TRUE);
|
| + InvalidateItem(nItemIndex);
|
| + m_nSelItem = nItemIndex;
|
| + }
|
| }
|
|
|
| -void CFX_ListCtrl::Cancel()
|
| -{
|
| - m_aSelItems.DeselectAll();
|
| +void CFX_ListCtrl::SetCaret(int32_t nItemIndex) {
|
| + if (!IsValid(nItemIndex))
|
| + return;
|
| +
|
| + if (IsMultipleSel()) {
|
| + int32_t nOldIndex = m_nCaretIndex;
|
| +
|
| + if (nOldIndex != nItemIndex) {
|
| + m_nCaretIndex = nItemIndex;
|
| +
|
| + SetItemCaret(nOldIndex, FALSE);
|
| + SetItemCaret(nItemIndex, TRUE);
|
| +
|
| + InvalidateItem(nOldIndex);
|
| + InvalidateItem(nItemIndex);
|
| + }
|
| + }
|
| }
|
|
|
| -int32_t CFX_ListCtrl::GetItemIndex(const CPDF_Point & point) const
|
| -{
|
| - return CFX_List::GetItemIndex(OutToIn(point));
|
| +void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) {
|
| + if (m_pNotify) {
|
| + if (nItemIndex == -1) {
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + CPDF_Rect rcRefresh = GetPlateRect();
|
| + m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| + m_bNotifyFlag = FALSE;
|
| + }
|
| + } else {
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + CPDF_Rect rcRefresh = GetItemRect(nItemIndex);
|
| + rcRefresh.left -= 1.0f;
|
| + rcRefresh.right += 1.0f;
|
| + rcRefresh.bottom -= 1.0f;
|
| + rcRefresh.top += 1.0f;
|
| +
|
| + m_pNotify->IOnInvalidateRect(&rcRefresh);
|
| + m_bNotifyFlag = FALSE;
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +void CFX_ListCtrl::SelectItems() {
|
| + for (int32_t i = 0, sz = m_aSelItems.GetCount(); i < sz; i++) {
|
| + int32_t nItemIndex = m_aSelItems.GetItemIndex(i);
|
| + int32_t nState = m_aSelItems.GetState(i);
|
| +
|
| + switch (nState) {
|
| + case 1:
|
| + SetMultipleSelect(nItemIndex, TRUE);
|
| + break;
|
| + case -1:
|
| + SetMultipleSelect(nItemIndex, FALSE);
|
| + break;
|
| + }
|
| + }
|
| +
|
| + m_aSelItems.Done();
|
| +}
|
| +
|
| +void CFX_ListCtrl::Select(int32_t nItemIndex) {
|
| + if (!IsValid(nItemIndex))
|
| + return;
|
| +
|
| + if (IsMultipleSel()) {
|
| + m_aSelItems.Add(nItemIndex);
|
| + SelectItems();
|
| + } else
|
| + SetSingleSelect(nItemIndex);
|
| }
|
|
|
| -CFX_WideString CFX_ListCtrl::GetText() const
|
| -{
|
| - if (IsMultipleSel())
|
| - return GetItemText(m_nCaretIndex);
|
| - return GetItemText(m_nSelItem);
|
| +FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const {
|
| + CPDF_Rect rcPlate = GetPlateRect();
|
| + CPDF_Rect rcItem = GetItemRect(nItemIndex);
|
| +
|
| + return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top;
|
| }
|
|
|
| +void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) {
|
| + if (!IsValid(nItemIndex))
|
| + return;
|
| +
|
| + CPDF_Rect rcPlate = GetPlateRect();
|
| + CPDF_Rect rcItem = CFX_List::GetItemRect(nItemIndex);
|
| + CPDF_Rect rcItemCtrl = GetItemRect(nItemIndex);
|
| +
|
| + if (FX_EDIT_IsFloatSmaller(rcItemCtrl.bottom, rcPlate.bottom)) {
|
| + if (FX_EDIT_IsFloatSmaller(rcItemCtrl.top, rcPlate.top)) {
|
| + SetScrollPosY(rcItem.bottom + rcPlate.Height());
|
| + }
|
| + } else if (FX_EDIT_IsFloatBigger(rcItemCtrl.top, rcPlate.top)) {
|
| + if (FX_EDIT_IsFloatBigger(rcItemCtrl.bottom, rcPlate.bottom)) {
|
| + SetScrollPosY(rcItem.top);
|
| + }
|
| + }
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetScrollInfo() {
|
| + if (m_pNotify) {
|
| + CPDF_Rect rcPlate = GetPlateRect();
|
| + CPDF_Rect rcContent = CFX_List::GetContentRect();
|
| +
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
|
| + rcContent.bottom, rcContent.top,
|
| + GetFirstHeight(), rcPlate.Height());
|
| + m_bNotifyFlag = FALSE;
|
| + }
|
| + }
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetScrollPos(const CPDF_Point& point) {
|
| + SetScrollPosY(point.y);
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) {
|
| + if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y, fy)) {
|
| + CPDF_Rect rcPlate = GetPlateRect();
|
| + CPDF_Rect rcContent = CFX_List::GetContentRect();
|
| +
|
| + if (rcPlate.Height() > rcContent.Height()) {
|
| + fy = rcPlate.top;
|
| + } else {
|
| + if (FX_EDIT_IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) {
|
| + fy = rcContent.bottom + rcPlate.Height();
|
| + } else if (FX_EDIT_IsFloatBigger(fy, rcContent.top)) {
|
| + fy = rcContent.top;
|
| + }
|
| + }
|
| +
|
| + m_ptScrollPos.y = fy;
|
| + InvalidateItem(-1);
|
| +
|
| + if (m_pNotify) {
|
| + if (!m_bNotifyFlag) {
|
| + m_bNotifyFlag = TRUE;
|
| + m_pNotify->IOnSetScrollPosY(fy);
|
| + m_bNotifyFlag = FALSE;
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +CPDF_Rect CFX_ListCtrl::GetContentRect() const {
|
| + return InToOut(CFX_List::GetContentRect());
|
| +}
|
| +
|
| +void CFX_ListCtrl::ReArrange(int32_t nItemIndex) {
|
| + CFX_List::ReArrange(nItemIndex);
|
| + SetScrollInfo();
|
| +}
|
| +
|
| +void CFX_ListCtrl::SetTopItem(int32_t nIndex) {
|
| + if (IsValid(nIndex)) {
|
| + GetPlateRect();
|
| + CPDF_Rect rcItem = CFX_List::GetItemRect(nIndex);
|
| + SetScrollPosY(rcItem.top);
|
| + }
|
| +}
|
| +
|
| +int32_t CFX_ListCtrl::GetTopItem() const {
|
| + int32_t nItemIndex = GetItemIndex(GetBTPoint());
|
| +
|
| + if (!IsItemVisible(nItemIndex) && IsItemVisible(nItemIndex + 1))
|
| + nItemIndex += 1;
|
| +
|
| + return nItemIndex;
|
| +}
|
| +
|
| +void CFX_ListCtrl::Empty() {
|
| + CFX_List::Empty();
|
| + InvalidateItem(-1);
|
| +}
|
| +
|
| +void CFX_ListCtrl::Cancel() {
|
| + m_aSelItems.DeselectAll();
|
| +}
|
| +
|
| +int32_t CFX_ListCtrl::GetItemIndex(const CPDF_Point& point) const {
|
| + return CFX_List::GetItemIndex(OutToIn(point));
|
| +}
|
| +
|
| +CFX_WideString CFX_ListCtrl::GetText() const {
|
| + if (IsMultipleSel())
|
| + return GetItemText(m_nCaretIndex);
|
| + return GetItemText(m_nSelItem);
|
| +}
|
|
|