diff options
author | weili <weili@chromium.org> | 2016-08-08 17:30:37 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-08-08 17:30:37 -0700 |
commit | 5d8e5aa882fe8d37d32b71137f039165581ddb82 (patch) | |
tree | a0a2b0efa1ee6f8fd06c964f4b9cda5f551c74ae /xfa/fwl/lightwidget/cfwl_listbox.cpp | |
parent | b6befb2ed2485a3805cddea86dc7574510178ea9 (diff) | |
download | pdfium-5d8e5aa882fe8d37d32b71137f039165581ddb82.tar.xz |
Use virtual function to retrieve interface pointer
Use virtual function to return the actual interface type instead
of the base interface type to avoid a lot of casts.
Also tidy up CFWL_Widget by encapsulating variables, and use
smart pointers for class owned member variables.
Review-Url: https://codereview.chromium.org/2209153002
Diffstat (limited to 'xfa/fwl/lightwidget/cfwl_listbox.cpp')
-rw-r--r-- | xfa/fwl/lightwidget/cfwl_listbox.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/xfa/fwl/lightwidget/cfwl_listbox.cpp b/xfa/fwl/lightwidget/cfwl_listbox.cpp index e85e773813..d5ea8797ba 100644 --- a/xfa/fwl/lightwidget/cfwl_listbox.cpp +++ b/xfa/fwl/lightwidget/cfwl_listbox.cpp @@ -10,6 +10,14 @@ #include "third_party/base/stl_util.h" +IFWL_ListBox* CFWL_ListBox::GetWidget() { + return static_cast<IFWL_ListBox*>(m_pIface.get()); +} + +const IFWL_ListBox* CFWL_ListBox::GetWidget() const { + return static_cast<IFWL_ListBox*>(m_pIface.get()); +} + CFWL_ListBox* CFWL_ListBox::Create() { return new CFWL_ListBox; } @@ -26,7 +34,7 @@ FWL_Error CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { if (ret != FWL_Error::Succeeded) { return ret; } - m_pIface = pListBox.release(); + m_pIface = std::move(pListBox); CFWL_Widget::Initialize(); return FWL_Error::Succeeded; } @@ -52,7 +60,7 @@ FX_BOOL CFWL_ListBox::DeleteString(IFWL_ListItem* pItem) { static_cast<size_t>(nIndex) >= m_ListBoxDP.m_ItemArray.size()) { return FALSE; } - int32_t iCount = m_ListBoxDP.CountItems(m_pIface); + int32_t iCount = m_ListBoxDP.CountItems(m_pIface.get()); int32_t iSel = nIndex + 1; if (iSel >= iCount) { iSel = nIndex - 1; @@ -62,7 +70,7 @@ FX_BOOL CFWL_ListBox::DeleteString(IFWL_ListItem* pItem) { } if (iSel >= 0) { CFWL_ListItem* pSel = - static_cast<CFWL_ListItem*>(m_ListBoxDP.GetItem(m_pIface, iSel)); + static_cast<CFWL_ListItem*>(m_ListBoxDP.GetItem(m_pIface.get(), iSel)); pSel->m_dwStates |= FWL_ITEMSTATE_LTB_Selected; } m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex); @@ -74,40 +82,40 @@ void CFWL_ListBox::DeleteAll() { } int32_t CFWL_ListBox::CountSelItems() { - if (!m_pIface) + if (!GetWidget()) return 0; - return static_cast<IFWL_ListBox*>(m_pIface)->CountSelItems(); + return GetWidget()->CountSelItems(); } IFWL_ListItem* CFWL_ListBox::GetSelItem(int32_t nIndexSel) { - if (!m_pIface) + if (!GetWidget()) return nullptr; - return static_cast<IFWL_ListBox*>(m_pIface)->GetSelItem(nIndexSel); + return GetWidget()->GetSelItem(nIndexSel); } int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) { - if (!m_pIface) + if (!GetWidget()) return 0; - return static_cast<IFWL_ListBox*>(m_pIface)->GetSelIndex(nIndex); + return GetWidget()->GetSelIndex(nIndex); } FWL_Error CFWL_ListBox::SetSelItem(IFWL_ListItem* pItem, FX_BOOL bSelect) { - if (!m_pIface) + if (!GetWidget()) return FWL_Error::Indefinite; - return static_cast<IFWL_ListBox*>(m_pIface)->SetSelItem(pItem, bSelect); + return GetWidget()->SetSelItem(pItem, bSelect); } FWL_Error CFWL_ListBox::GetItemText(IFWL_ListItem* pItem, CFX_WideString& wsText) { - if (!m_pIface) + if (!GetWidget()) return FWL_Error::Indefinite; - return static_cast<IFWL_ListBox*>(m_pIface)->GetItemText(pItem, wsText); + return GetWidget()->GetItemText(pItem, wsText); } FWL_Error CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { - if (!m_pIface) + if (!GetWidget()) return FWL_Error::Indefinite; - return static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fPos, bVert); + return GetWidget()->GetScrollPos(fPos, bVert); } FWL_Error CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) { @@ -169,13 +177,13 @@ void* CFWL_ListBox::GetItemData(IFWL_ListItem* pItem) { IFWL_ListItem* CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { CFX_RectF rtClient; - m_pIface->GetClientRect(rtClient); + GetWidget()->GetClientRect(rtClient); fx -= rtClient.left; fy -= rtClient.top; FX_FLOAT fPosX = 0; FX_FLOAT fPosY = 0; - static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fx); - static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fy, FALSE); + GetWidget()->GetScrollPos(fx); + GetWidget()->GetScrollPos(fy, FALSE); int32_t nCount = m_ListBoxDP.CountItems(nullptr); for (int32_t i = 0; i < nCount; i++) { IFWL_ListItem* pItem = m_ListBoxDP.GetItem(nullptr, i); |