vcl/inc/listbox.hxx | 18 +- vcl/source/control/combobox.cxx | 106 ++++++------- vcl/source/control/imp_listbox.cxx | 298 ++++++++++++++++++------------------- vcl/source/control/listbox.cxx | 78 ++++----- 4 files changed, 254 insertions(+), 246 deletions(-)
New commits: commit 9a2d08cf16d4e0b2b45e9b687884acb729739608 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Jul 21 12:17:15 2021 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Jul 21 19:25:16 2021 +0200 flatten ImplListBoxWindow no need to allocate ImplEntryList separately Change-Id: I276e92895a00ebccff60f5067567a0ed066d4e66 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119328 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> diff --git a/vcl/inc/listbox.hxx b/vcl/inc/listbox.hxx index 29a570a17aa2..a949baf973ff 100644 --- a/vcl/inc/listbox.hxx +++ b/vcl/inc/listbox.hxx @@ -113,6 +113,7 @@ public: const ImplEntryType* GetEntryPtr( sal_Int32 nPos ) const { return GetEntry( nPos ); } ImplEntryType* GetMutableEntryPtr( sal_Int32 nPos ) const { return GetEntry( nPos ); } void Clear(); + void dispose(); sal_Int32 FindMatchingEntry( const OUString& rStr, sal_Int32 nStart, bool bLazy ) const; sal_Int32 FindEntry( std::u16string_view rStr, bool bSearchMRUArea = false ) const; @@ -174,7 +175,7 @@ public: class ImplListBoxWindow final : public Control, public vcl::ISearchableStringList { private: - std::unique_ptr<ImplEntryList> mpEntryList; ///< EntryList + ImplEntryList maEntryList; ///< EntryList tools::Rectangle maFocusRect; Size maUserItemSize; @@ -261,7 +262,8 @@ public: virtual ~ImplListBoxWindow() override; virtual void dispose() override; - ImplEntryList* GetEntryList() const { return mpEntryList.get(); } + const ImplEntryList& GetEntryList() const { return maEntryList; } + ImplEntryList& GetEntryList() { return maEntryList; } sal_Int32 InsertEntry( sal_Int32 nPos, ImplEntryType* pNewEntry ); // sorts using mbSort sal_Int32 InsertEntry( sal_Int32 nPos, ImplEntryType* pNewEntry, bool bSort ); // to insert ignoring mbSort, e.g. mru @@ -405,7 +407,7 @@ public: virtual ~ImplListBox() override; virtual void dispose() override; - const ImplEntryList* GetEntryList() const { return maLBWindow->GetEntryList(); } + const ImplEntryList& GetEntryList() const { return maLBWindow->GetEntryList(); } ImplListBoxWindow* GetMainWindow() { return maLBWindow.get(); } virtual void Resize() override; @@ -414,7 +416,7 @@ public: sal_Int32 InsertEntry( sal_Int32 nPos, const OUString& rStr ); sal_Int32 InsertEntry( sal_Int32 nPos, const OUString& rStr, const Image& rImage ); void RemoveEntry( sal_Int32 nPos ); - void SetEntryData( sal_Int32 nPos, void* pNewData ) { maLBWindow->GetEntryList()->SetEntryData( nPos, pNewData ); } + void SetEntryData( sal_Int32 nPos, void* pNewData ) { maLBWindow->GetEntryList().SetEntryData( nPos, pNewData ); } void Clear(); void SetEntryFlags( sal_Int32 nPos, ListBoxEntryFlags nFlags ); @@ -476,15 +478,15 @@ public: void SetUserDrawHdl( const Link<UserDrawEvent*, void>& rLink ) { maLBWindow->SetUserDrawHdl( rLink ); } void SetFocusHdl( const Link<sal_Int32,void>& rLink ) { maLBWindow->SetFocusHdl( rLink ); } void SetListItemSelectHdl( const Link<LinkParamNone*,void>& rLink ) { maLBWindow->SetListItemSelectHdl( rLink ); } - void SetSelectionChangedHdl( const Link<sal_Int32,void>& rLnk ) { maLBWindow->GetEntryList()->SetSelectionChangedHdl( rLnk ); } - void SetCallSelectionChangedHdl( bool bCall ) { maLBWindow->GetEntryList()->SetCallSelectionChangedHdl( bCall ); } + void SetSelectionChangedHdl( const Link<sal_Int32,void>& rLnk ) { maLBWindow->GetEntryList().SetSelectionChangedHdl( rLnk ); } + void SetCallSelectionChangedHdl( bool bCall ) { maLBWindow->GetEntryList().SetCallSelectionChangedHdl( bCall ); } bool IsSelectionChanged() const { return maLBWindow->IsSelectionChanged(); } sal_uInt16 GetSelectModifier() const { return maLBWindow->GetSelectModifier(); } void SetMRUEntries( const OUString& rEntries, sal_Unicode cSep ); OUString GetMRUEntries( sal_Unicode cSep ) const; - void SetMaxMRUCount( sal_Int32 n ) { maLBWindow->GetEntryList()->SetMaxMRUCount( n ); } - sal_Int32 GetMaxMRUCount() const { return maLBWindow->GetEntryList()->GetMaxMRUCount(); } + void SetMaxMRUCount( sal_Int32 n ) { maLBWindow->GetEntryList().SetMaxMRUCount( n ); } + sal_Int32 GetMaxMRUCount() const { return maLBWindow->GetEntryList().GetMaxMRUCount(); } sal_uInt16 GetDisplayLineCount() const { return maLBWindow->GetDisplayLineCount(); } diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 2f8143028422..cc4ca5465a63 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -95,14 +95,14 @@ struct ComboBox::Impl }; -static void lcl_GetSelectedEntries( ::std::set< sal_Int32 >& rSelectedPos, const OUString& rText, sal_Unicode cTokenSep, const ImplEntryList* pEntryList ) +static void lcl_GetSelectedEntries( ::std::set< sal_Int32 >& rSelectedPos, const OUString& rText, sal_Unicode cTokenSep, const ImplEntryList& rEntryList ) { if (rText.isEmpty()) return; sal_Int32 nIdx{0}; do { - const sal_Int32 nPos = pEntryList->FindEntry(comphelper::string::strip(rText.getToken(0, cTokenSep, nIdx), ' ')); + const sal_Int32 nPos = rEntryList.FindEntry(comphelper::string::strip(rText.getToken(0, cTokenSep, nIdx), ' ')); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) rSelectedPos.insert( nPos ); } while (nIdx>=0); @@ -280,7 +280,7 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplClickBtnHdl, void*, void) { m_rThis.CallEventListeners( VclEventId::DropdownPreOpen ); m_pSubEdit->GrabFocus(); - if (!m_pImplLB->GetEntryList()->GetMRUCount()) + if (!m_pImplLB->GetEntryList().GetMRUCount()) ImplUpdateFloatSelection(); else m_pImplLB->SelectEntry( 0 , true ); @@ -298,7 +298,7 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplPopupModeEndHdl, FloatingWindow*, void) { if (m_pFloatWin->IsPopupModeCanceled()) { - if (!m_pImplLB->GetEntryList()->IsEntryPosSelected( + if (!m_pImplLB->GetEntryList().IsEntryPosSelected( m_pFloatWin->GetPopupModeStartSaveSelection())) { m_pImplLB->SelectEntry(m_pFloatWin->GetPopupModeStartSaveSelection(), true); @@ -333,22 +333,22 @@ IMPL_LINK(ComboBox::Impl, ImplAutocompleteHdl, Edit&, rEdit, void) if (!m_isMatchCase) { // Try match case insensitive from current position - nPos = m_pImplLB->GetEntryList()->FindMatchingEntry(aStartText, nStart, true); + nPos = m_pImplLB->GetEntryList().FindMatchingEntry(aStartText, nStart, true); if ( nPos == LISTBOX_ENTRY_NOTFOUND ) // Try match case insensitive, but from start - nPos = m_pImplLB->GetEntryList()->FindMatchingEntry(aStartText, 0, true); + nPos = m_pImplLB->GetEntryList().FindMatchingEntry(aStartText, 0, true); } if ( nPos == LISTBOX_ENTRY_NOTFOUND ) // Try match full from current position - nPos = m_pImplLB->GetEntryList()->FindMatchingEntry(aStartText, nStart, false); + nPos = m_pImplLB->GetEntryList().FindMatchingEntry(aStartText, nStart, false); if ( nPos == LISTBOX_ENTRY_NOTFOUND ) // Match full, but from start - nPos = m_pImplLB->GetEntryList()->FindMatchingEntry(aStartText, 0, false); + nPos = m_pImplLB->GetEntryList().FindMatchingEntry(aStartText, 0, false); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) { - OUString aText = m_pImplLB->GetEntryList()->GetEntryText( nPos ); + OUString aText = m_pImplLB->GetEntryList().GetEntryText( nPos ); Selection aSelection( aText.getLength(), aStartText.getLength() ); rEdit.SetText( aText, aSelection ); } @@ -374,8 +374,8 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) OUString aToken = aText.getToken( 0, m_cMultiSep, nIndex ); sal_Int32 nTokenLen = aToken.getLength(); aToken = comphelper::string::strip(aToken, ' '); - sal_Int32 nP = m_pImplLB->GetEntryList()->FindEntry( aToken ); - if ((nP != LISTBOX_ENTRY_NOTFOUND) && (!m_pImplLB->GetEntryList()->IsEntryPosSelected(nP))) + sal_Int32 nP = m_pImplLB->GetEntryList().FindEntry( aToken ); + if ((nP != LISTBOX_ENTRY_NOTFOUND) && (!m_pImplLB->GetEntryList().IsEntryPosSelected(nP))) { aText = aText.replaceAt( nPrevIndex, nTokenLen, "" ); nIndex = nIndex - nTokenLen; @@ -393,17 +393,17 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) // attach missing entries ::std::set< sal_Int32 > aSelInText; lcl_GetSelectedEntries( aSelInText, aText, m_cMultiSep, m_pImplLB->GetEntryList() ); - sal_Int32 nSelectedEntries = m_pImplLB->GetEntryList()->GetSelectedEntryCount(); + sal_Int32 nSelectedEntries = m_pImplLB->GetEntryList().GetSelectedEntryCount(); for ( sal_Int32 n = 0; n < nSelectedEntries; n++ ) { - sal_Int32 nP = m_pImplLB->GetEntryList()->GetSelectedEntryPos( n ); + sal_Int32 nP = m_pImplLB->GetEntryList().GetSelectedEntryPos( n ); if ( !aSelInText.count( nP ) ) { if (!aText.isEmpty() && (aText[aText.getLength()-1] != m_cMultiSep)) aText += OUStringChar(m_cMultiSep); if ( !aText.isEmpty() ) aText += " "; // slightly loosen - aText += m_pImplLB->GetEntryList()->GetEntryText( nP ) + + aText += m_pImplLB->GetEntryList().GetEntryText( nP ) + OUStringChar(m_cMultiSep); } } @@ -411,7 +411,7 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) } else { - aText = m_pImplLB->GetEntryList()->GetSelectedEntry( 0 ); + aText = m_pImplLB->GetEntryList().GetSelectedEntry( 0 ); } m_pSubEdit->SetText( aText ); @@ -469,8 +469,8 @@ IMPL_LINK( ComboBox::Impl, ImplSelectionChangedHdl, sal_Int32, nChanged, void ) { if (!m_pImplLB->IsTrackingSelect()) { - if (!m_pSubEdit->IsReadOnly() && m_pImplLB->GetEntryList()->IsEntryPosSelected(nChanged)) - m_pSubEdit->SetText(m_pImplLB->GetEntryList()->GetEntryText(nChanged)); + if (!m_pSubEdit->IsReadOnly() && m_pImplLB->GetEntryList().IsEntryPosSelected(nChanged)) + m_pSubEdit->SetText(m_pImplLB->GetEntryList().GetEntryText(nChanged)); } } @@ -489,7 +489,7 @@ void ComboBox::ToggleDropDown() else { m_pImpl->m_pSubEdit->GrabFocus(); - if (!m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount()) + if (!m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()) m_pImpl->ImplUpdateFloatSelection(); else m_pImpl->m_pImplLB->SelectEntry( 0 , true ); @@ -736,7 +736,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt ) { CallEventListeners( VclEventId::DropdownPreOpen ); m_pImpl->m_pBtn->SetPressed( true ); - if (m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount()) + if (m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()) m_pImpl->m_pImplLB->SelectEntry( 0 , true ); SetSelection( Selection( 0, SELECTION_MAX ) ); m_pImpl->m_pFloatWin->StartFloat( false ); @@ -841,17 +841,17 @@ void ComboBox::Impl::ImplUpdateFloatSelection() if (m_pImplLB->GetCurrentPos() != LISTBOX_ENTRY_NOTFOUND) { - OUString aCurrent = m_pImplLB->GetEntryList()->GetEntryText( + OUString aCurrent = m_pImplLB->GetEntryList().GetEntryText( m_pImplLB->GetCurrentPos()); if ( aCurrent == aSearchStr ) nSelect = m_pImplLB->GetCurrentPos(); } if ( nSelect == LISTBOX_ENTRY_NOTFOUND ) - nSelect = m_pImplLB->GetEntryList()->FindEntry( aSearchStr ); + nSelect = m_pImplLB->GetEntryList().FindEntry( aSearchStr ); if ( nSelect == LISTBOX_ENTRY_NOTFOUND ) { - nSelect = m_pImplLB->GetEntryList()->FindMatchingEntry( aSearchStr, 0, true ); + nSelect = m_pImplLB->GetEntryList().FindMatchingEntry( aSearchStr, 0, true ); bSelect = false; } @@ -863,7 +863,7 @@ void ComboBox::Impl::ImplUpdateFloatSelection() } else { - nSelect = m_pImplLB->GetEntryList()->GetSelectedEntryPos( 0 ); + nSelect = m_pImplLB->GetEntryList().GetSelectedEntryPos( 0 ); if( nSelect != LISTBOX_ENTRY_NOTFOUND ) m_pImplLB->SelectEntry( nSelect, false ); m_pImplLB->ResetCurrentPos(); @@ -873,7 +873,7 @@ void ComboBox::Impl::ImplUpdateFloatSelection() { ::std::set< sal_Int32 > aSelInText; lcl_GetSelectedEntries(aSelInText, m_pSubEdit->GetText(), m_cMultiSep, m_pImplLB->GetEntryList()); - for (sal_Int32 n = 0; n < m_pImplLB->GetEntryList()->GetEntryCount(); n++) + for (sal_Int32 n = 0; n < m_pImplLB->GetEntryList().GetEntryCount(); n++) m_pImplLB->SelectEntry( n, aSelInText.count( n ) != 0 ); } m_pImplLB->SetCallSelectionChangedHdl( true ); @@ -881,20 +881,20 @@ void ComboBox::Impl::ImplUpdateFloatSelection() sal_Int32 ComboBox::InsertEntry(const OUString& rStr, sal_Int32 const nPos) { - assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > m_pImpl->m_pImplLB->GetEntryList()->GetEntryCount()); + assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > m_pImpl->m_pImplLB->GetEntryList().GetEntryCount()); sal_Int32 nRealPos; if (nPos == COMBOBOX_APPEND) nRealPos = nPos; else { - const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); assert(nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount); nRealPos = nPos + nMRUCount; } nRealPos = m_pImpl->m_pImplLB->InsertEntry( nRealPos, rStr ); - nRealPos -= m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + nRealPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); CallEventListeners( VclEventId::ComboboxItemAdded, reinterpret_cast<void*>(nRealPos) ); return nRealPos; } @@ -902,27 +902,27 @@ sal_Int32 ComboBox::InsertEntry(const OUString& rStr, sal_Int32 const nPos) sal_Int32 ComboBox::InsertEntryWithImage( const OUString& rStr, const Image& rImage, sal_Int32 const nPos) { - assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > m_pImpl->m_pImplLB->GetEntryList()->GetEntryCount()); + assert(nPos >= 0 && COMBOBOX_MAX_ENTRIES > m_pImpl->m_pImplLB->GetEntryList().GetEntryCount()); sal_Int32 nRealPos; if (nPos == COMBOBOX_APPEND) nRealPos = nPos; else { - const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); assert(nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount); nRealPos = nPos + nMRUCount; } nRealPos = m_pImpl->m_pImplLB->InsertEntry( nRealPos, rStr, rImage ); - nRealPos -= m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + nRealPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); CallEventListeners( VclEventId::ComboboxItemAdded, reinterpret_cast<void*>(nRealPos) ); return nRealPos; } void ComboBox::RemoveEntryAt(sal_Int32 const nPos) { - const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); assert(nPos >= 0 && nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount); m_pImpl->m_pImplLB->RemoveEntry( nPos + nMRUCount ); CallEventListeners( VclEventId::ComboboxItemRemoved, reinterpret_cast<void*>(nPos) ); @@ -938,33 +938,33 @@ void ComboBox::Clear() Image ComboBox::GetEntryImage( sal_Int32 nPos ) const { - if (m_pImpl->m_pImplLB->GetEntryList()->HasEntryImage(nPos)) - return m_pImpl->m_pImplLB->GetEntryList()->GetEntryImage( nPos ); + if (m_pImpl->m_pImplLB->GetEntryList().HasEntryImage(nPos)) + return m_pImpl->m_pImplLB->GetEntryList().GetEntryImage( nPos ); return Image(); } sal_Int32 ComboBox::GetEntryPos( std::u16string_view rStr ) const { - sal_Int32 nPos = m_pImpl->m_pImplLB->GetEntryList()->FindEntry( rStr ); + sal_Int32 nPos = m_pImpl->m_pImplLB->GetEntryList().FindEntry( rStr ); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) - nPos -= m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + nPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); return nPos; } OUString ComboBox::GetEntry( sal_Int32 nPos ) const { - const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + const sal_Int32 nMRUCount = m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); if (nPos < 0 || nPos > COMBOBOX_MAX_ENTRIES - nMRUCount) return OUString(); - return m_pImpl->m_pImplLB->GetEntryList()->GetEntryText( nPos + nMRUCount ); + return m_pImpl->m_pImplLB->GetEntryList().GetEntryText( nPos + nMRUCount ); } sal_Int32 ComboBox::GetEntryCount() const { if (!m_pImpl->m_pImplLB) return 0; - return m_pImpl->m_pImplLB->GetEntryList()->GetEntryCount() - m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(); + return m_pImpl->m_pImplLB->GetEntryList().GetEntryCount() - m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); } bool ComboBox::IsTravelSelect() const @@ -1029,7 +1029,7 @@ Size ComboBox::CalcMinimumSize() const if (!IsDropDownBox()) { - aSz = m_pImpl->m_pImplLB->CalcSize( m_pImpl->m_pImplLB->GetEntryList()->GetEntryCount() ); + aSz = m_pImpl->m_pImplLB->CalcSize( m_pImpl->m_pImplLB->GetEntryList().GetEntryCount() ); aSz.AdjustHeight(m_pImpl->m_nDDHeight ); } else @@ -1237,7 +1237,7 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& rPos, DrawFlags nFlags ) // the drawing starts here for ( sal_Int32 n = 0; n < nLines; ++n ) { - pDev->DrawText( aTextRect, m_pImpl->m_pImplLB->GetEntryList()->GetEntryText( n+nTEntry ), nTextStyle ); + pDev->DrawText( aTextRect, m_pImpl->m_pImplLB->GetEntryList().GetEntryText( n+nTEntry ), nTextStyle ); aTextRect.AdjustTop(nTextHeight ); aTextRect.AdjustBottom(nTextHeight ); } @@ -1313,19 +1313,19 @@ sal_uInt16 ComboBox::GetDisplayLineCount() const void ComboBox::SetEntryData( sal_Int32 nPos, void* pNewData ) { - m_pImpl->m_pImplLB->SetEntryData( nPos + m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(), pNewData ); + m_pImpl->m_pImplLB->SetEntryData( nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(), pNewData ); } void* ComboBox::GetEntryData( sal_Int32 nPos ) const { - return m_pImpl->m_pImplLB->GetEntryList()->GetEntryData( - nPos + m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount() ); + return m_pImpl->m_pImplLB->GetEntryList().GetEntryData( + nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount() ); } sal_Int32 ComboBox::GetTopEntry() const { sal_Int32 nPos = GetEntryCount() ? m_pImpl->m_pImplLB->GetTopEntry() : LISTBOX_ENTRY_NOTFOUND; - if (nPos < m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount()) + if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()) nPos = 0; return nPos; } @@ -1353,32 +1353,32 @@ const Wallpaper& ComboBox::GetDisplayBackground() const sal_Int32 ComboBox::GetSelectedEntryCount() const { - return m_pImpl->m_pImplLB->GetEntryList()->GetSelectedEntryCount(); + return m_pImpl->m_pImplLB->GetEntryList().GetSelectedEntryCount(); } sal_Int32 ComboBox::GetSelectedEntryPos( sal_Int32 nIndex ) const { - sal_Int32 nPos = m_pImpl->m_pImplLB->GetEntryList()->GetSelectedEntryPos( nIndex ); + sal_Int32 nPos = m_pImpl->m_pImplLB->GetEntryList().GetSelectedEntryPos( nIndex ); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) { - if (nPos < m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount()) - nPos = m_pImpl->m_pImplLB->GetEntryList()->FindEntry(m_pImpl->m_pImplLB->GetEntryList()->GetEntryText(nPos)); - nPos = sal::static_int_cast<sal_Int32>(nPos - m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount()); + if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()) + nPos = m_pImpl->m_pImplLB->GetEntryList().FindEntry(m_pImpl->m_pImplLB->GetEntryList().GetEntryText(nPos)); + nPos = sal::static_int_cast<sal_Int32>(nPos - m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()); } return nPos; } bool ComboBox::IsEntryPosSelected( sal_Int32 nPos ) const { - return m_pImpl->m_pImplLB->GetEntryList()->IsEntryPosSelected( - nPos + m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount() ); + return m_pImpl->m_pImplLB->GetEntryList().IsEntryPosSelected( + nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount() ); } void ComboBox::SelectEntryPos( sal_Int32 nPos, bool bSelect) { - if (nPos < m_pImpl->m_pImplLB->GetEntryList()->GetEntryCount()) + if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetEntryCount()) m_pImpl->m_pImplLB->SelectEntry( - nPos + m_pImpl->m_pImplLB->GetEntryList()->GetMRUCount(), bSelect); + nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(), bSelect); } void ComboBox::SetNoSelection() diff --git a/vcl/source/control/imp_listbox.cxx b/vcl/source/control/imp_listbox.cxx index e8315f85aec0..fab6e6f90c70 100644 --- a/vcl/source/control/imp_listbox.cxx +++ b/vcl/source/control/imp_listbox.cxx @@ -81,6 +81,12 @@ void ImplEntryList::Clear() maEntries.clear(); } +void ImplEntryList::dispose() +{ + Clear(); + mpWindow.clear(); +} + void ImplEntryList::SelectEntry( sal_Int32 nPos, bool bSelect ) { if (0 <= nPos && o3tl::make_unsigned(nPos) < maEntries.size()) @@ -443,9 +449,9 @@ sal_Int32 ImplEntryList::FindFirstSelectable( sal_Int32 nPos, bool bForward /* = ImplListBoxWindow::ImplListBoxWindow( vcl::Window* pParent, WinBits nWinStyle ) : Control( pParent, 0 ), + maEntryList( this ), maQuickSelectionEngine( *this ) { - mpEntryList.reset(new ImplEntryList( this )); mnTop = 0; mnLeft = 0; @@ -487,7 +493,7 @@ ImplListBoxWindow::~ImplListBoxWindow() void ImplListBoxWindow::dispose() { - mpEntryList.reset(); + maEntryList.dispose(); Control::dispose(); } @@ -521,22 +527,22 @@ void ImplListBoxWindow::ImplCalcMetrics() if ( maUserItemSize.Width() > mnMaxWidth ) mnMaxWidth= static_cast<sal_uInt16>(maUserItemSize.Width()); - for ( sal_Int32 n = mpEntryList->GetEntryCount(); n; ) + for ( sal_Int32 n = maEntryList.GetEntryCount(); n; ) { - ImplEntryType* pEntry = mpEntryList->GetMutableEntryPtr( --n ); + ImplEntryType* pEntry = maEntryList.GetMutableEntryPtr( --n ); ImplUpdateEntryMetrics( *pEntry ); } if( mnCurrentPos != LISTBOX_ENTRY_NOTFOUND ) { - Size aSz( GetOutputSizePixel().Width(), mpEntryList->GetEntryPtr( mnCurrentPos )->getHeightWithMargin() ); + Size aSz( GetOutputSizePixel().Width(), maEntryList.GetEntryPtr( mnCurrentPos )->getHeightWithMargin() ); maFocusRect.SetSize( aSz ); } } void ImplListBoxWindow::Clear() { - mpEntryList->Clear(); + maEntryList.Clear(); mnMaxHeight = mnMaxTxtHeight; mnMaxWidth = 0; @@ -681,13 +687,13 @@ void ImplListBoxWindow::ImplUpdateEntryMetrics( ImplEntryType& rEntry ) void ImplListBoxWindow::ImplCallSelect() { - if ( !IsTravelSelect() && GetEntryList()->GetMaxMRUCount() ) + if ( !IsTravelSelect() && GetEntryList().GetMaxMRUCount() ) { // Insert the selected entry as MRU, if not already first MRU - sal_Int32 nSelected = GetEntryList()->GetSelectedEntryPos( 0 ); - sal_Int32 nMRUCount = GetEntryList()->GetMRUCount(); - OUString aSelected = GetEntryList()->GetEntryText( nSelected ); - sal_Int32 nFirstMatchingEntryPos = GetEntryList()->FindEntry( aSelected, true ); + sal_Int32 nSelected = GetEntryList().GetSelectedEntryPos( 0 ); + sal_Int32 nMRUCount = GetEntryList().GetMRUCount(); + OUString aSelected = GetEntryList().GetEntryText( nSelected ); + sal_Int32 nFirstMatchingEntryPos = GetEntryList().FindEntry( aSelected, true ); if ( nFirstMatchingEntryPos || !nMRUCount ) { bool bSelectNewEntry = false; @@ -698,7 +704,7 @@ void ImplListBoxWindow::ImplCallSelect() if ( nFirstMatchingEntryPos == nSelected ) bSelectNewEntry = true; } - else if ( nMRUCount == GetEntryList()->GetMaxMRUCount() ) + else if ( nMRUCount == GetEntryList().GetMaxMRUCount() ) { RemoveEntry( nMRUCount - 1 ); nMRUCount--; @@ -708,9 +714,9 @@ void ImplListBoxWindow::ImplCallSelect() ImplEntryType* pNewEntry = new ImplEntryType( aSelected ); pNewEntry->mbIsSelected = bSelectNewEntry; - GetEntryList()->InsertEntry( 0, pNewEntry, false ); + GetEntryList().InsertEntry( 0, pNewEntry, false ); ImplUpdateEntryMetrics( *pNewEntry ); - GetEntryList()->SetMRUCount( ++nMRUCount ); + GetEntryList().SetMRUCount( ++nMRUCount ); SetSeparatorPos( nMRUCount ? nMRUCount-1 : 0 ); maMRUChangedHdl.Call( nullptr ); } @@ -723,10 +729,10 @@ void ImplListBoxWindow::ImplCallSelect() sal_Int32 ImplListBoxWindow::InsertEntry(sal_Int32 nPos, ImplEntryType* pNewEntry, bool bSort) { assert(nPos >= 0); - assert(mpEntryList->GetEntryCount() < LISTBOX_MAX_ENTRIES); + assert(maEntryList.GetEntryCount() < LISTBOX_MAX_ENTRIES); ImplClearLayoutData(); - sal_Int32 nNewPos = mpEntryList->InsertEntry( nPos, pNewEntry, bSort ); + sal_Int32 nNewPos = maEntryList.InsertEntry( nPos, pNewEntry, bSort ); if( GetStyle() & WB_WORDBREAK ) pNewEntry->mnFlags |= ListBoxEntryFlags::MultiLine; @@ -743,16 +749,16 @@ sal_Int32 ImplListBoxWindow::InsertEntry( sal_Int32 nPos, ImplEntryType* pNewEnt void ImplListBoxWindow::RemoveEntry( sal_Int32 nPos ) { ImplClearLayoutData(); - mpEntryList->RemoveEntry( nPos ); - if( mnCurrentPos >= mpEntryList->GetEntryCount() ) + maEntryList.RemoveEntry( nPos ); + if( mnCurrentPos >= maEntryList.GetEntryCount() ) mnCurrentPos = LISTBOX_ENTRY_NOTFOUND; ImplCalcMetrics(); } void ImplListBoxWindow::SetEntryFlags( sal_Int32 nPos, ListBoxEntryFlags nFlags ) { - mpEntryList->SetEntryFlags( nPos, nFlags ); - ImplEntryType* pEntry = mpEntryList->GetMutableEntryPtr( nPos ); + maEntryList.SetEntryFlags( nPos, nFlags ); + ImplEntryType* pEntry = maEntryList.GetMutableEntryPtr( nPos ); if( pEntry ) ImplUpdateEntryMetrics( *pEntry ); } @@ -779,14 +785,14 @@ sal_Int32 ImplListBoxWindow::GetEntryPosForPoint( const Point& rPoint ) const tools::Long nY = gnBorder; sal_Int32 nSelect = mnTop; - const ImplEntryType* pEntry = mpEntryList->GetEntryPtr( nSelect ); + const ImplEntryType* pEntry = maEntryList.GetEntryPtr( nSelect ); while (pEntry) { tools::Long nEntryHeight = pEntry->getHeightWithMargin(); if (rPoint.Y() <= nEntryHeight + nY) break; nY += nEntryHeight; - pEntry = mpEntryList->GetEntryPtr( ++nSelect ); + pEntry = maEntryList.GetEntryPtr( ++nSelect ); } if( pEntry == nullptr ) nSelect = LISTBOX_ENTRY_NOTFOUND; @@ -800,7 +806,7 @@ bool ImplListBoxWindow::IsVisible( sal_Int32 i_nEntry ) const if( i_nEntry >= mnTop ) { - if( mpEntryList->GetAddedHeight( i_nEntry, mnTop ) < + if( maEntryList.GetAddedHeight( i_nEntry, mnTop ) < PixelToLogic( GetSizePixel() ).Height() ) { bRet = true; @@ -820,9 +826,9 @@ sal_Int32 ImplListBoxWindow::GetLastVisibleEntry() const { sal_Int32 nPos = mnTop; tools::Long nWindowHeight = GetSizePixel().Height(); - sal_Int32 nCount = mpEntryList->GetEntryCount(); + sal_Int32 nCount = maEntryList.GetEntryCount(); tools::Long nDiff; - for( nDiff = 0; nDiff < nWindowHeight && nPos < nCount; nDiff = mpEntryList->GetAddedHeight( nPos, mnTop ) ) + for( nDiff = 0; nDiff < nWindowHeight && nPos < nCount; nDiff = maEntryList.GetAddedHeight( nPos, mnTop ) ) nPos++; if( nDiff > nWindowHeight && nPos > mnTop ) @@ -846,8 +852,8 @@ void ImplListBoxWindow::MouseButtonDown( const MouseEvent& rMEvt ) sal_Int32 nSelect = GetEntryPosForPoint( rMEvt.GetPosPixel() ); if( nSelect != LISTBOX_ENTRY_NOTFOUND ) { - if ( !mbMulti && GetEntryList()->GetSelectedEntryCount() ) - mnTrackingSaveSelection = GetEntryList()->GetSelectedEntryPos( 0 ); + if ( !mbMulti && GetEntryList().GetSelectedEntryCount() ) + mnTrackingSaveSelection = GetEntryList().GetSelectedEntryPos( 0 ); else mnTrackingSaveSelection = LISTBOX_ENTRY_NOTFOUND; @@ -875,7 +881,7 @@ void ImplListBoxWindow::MouseButtonDown( const MouseEvent& rMEvt ) void ImplListBoxWindow::MouseMove( const MouseEvent& rMEvt ) { - if (rMEvt.IsLeaveWindow() || mbMulti || !IsMouseMoveSelect() || !mpEntryList->GetEntryCount()) + if (rMEvt.IsLeaveWindow() || mbMulti || !IsMouseMoveSelect() || !maEntryList.GetEntryCount()) return; tools::Rectangle aRect( Point(), GetOutputSizePixel() ); @@ -886,13 +892,13 @@ void ImplListBoxWindow::MouseMove( const MouseEvent& rMEvt ) { sal_Int32 nSelect = GetEntryPosForPoint( rMEvt.GetPosPixel() ); if( nSelect == LISTBOX_ENTRY_NOTFOUND ) - nSelect = mpEntryList->GetEntryCount() - 1; + nSelect = maEntryList.GetEntryCount() - 1; nSelect = std::min( nSelect, GetLastVisibleEntry() ); - nSelect = std::min( nSelect, static_cast<sal_Int32>( mpEntryList->GetEntryCount() - 1 ) ); + nSelect = std::min( nSelect, static_cast<sal_Int32>( maEntryList.GetEntryCount() - 1 ) ); // Select only visible Entries with MouseMove, otherwise Tracking... if ( IsVisible( nSelect ) && - mpEntryList->IsEntrySelectable( nSelect ) && - ( ( nSelect != mnCurrentPos ) || !GetEntryList()->GetSelectedEntryCount() || ( nSelect != GetEntryList()->GetSelectedEntryPos( 0 ) ) ) ) + maEntryList.IsEntrySelectable( nSelect ) && + ( ( nSelect != mnCurrentPos ) || !GetEntryList().GetSelectedEntryCount() || ( nSelect != GetEntryList().GetSelectedEntryPos( 0 ) ) ) ) { mbTrackingSelect = true; if ( SelectEntries( nSelect, LET_TRACKING ) ) @@ -909,8 +915,8 @@ void ImplListBoxWindow::MouseMove( const MouseEvent& rMEvt ) // with the mouse button pressed... if ( rMEvt.IsLeft() && !rMEvt.IsSynthetic() ) { - if ( !mbMulti && GetEntryList()->GetSelectedEntryCount() ) - mnTrackingSaveSelection = GetEntryList()->GetSelectedEntryPos( 0 ); + if ( !mbMulti && GetEntryList().GetSelectedEntryCount() ) + mnTrackingSaveSelection = GetEntryList().GetSelectedEntryPos( 0 ); else mnTrackingSaveSelection = LISTBOX_ENTRY_NOTFOUND; @@ -920,16 +926,16 @@ void ImplListBoxWindow::MouseMove( const MouseEvent& rMEvt ) void ImplListBoxWindow::DeselectAll() { - while ( GetEntryList()->GetSelectedEntryCount() ) + while ( GetEntryList().GetSelectedEntryCount() ) { - sal_Int32 nS = GetEntryList()->GetSelectedEntryPos( 0 ); + sal_Int32 nS = GetEntryList().GetSelectedEntryPos( 0 ); SelectEntry( nS, false ); } } void ImplListBoxWindow::SelectEntry( sal_Int32 nPos, bool bSelect ) { - if( (mpEntryList->IsEntryPosSelected( nPos ) == bSelect) || !mpEntryList->IsEntrySelectable( nPos ) ) + if( (maEntryList.IsEntryPosSelected( nPos ) == bSelect) || !maEntryList.IsEntrySelectable( nPos ) ) return; ImplHideFocusRect(); @@ -938,16 +944,16 @@ void ImplListBoxWindow::SelectEntry( sal_Int32 nPos, bool bSelect ) if( !mbMulti ) { // deselect the selected entry - sal_Int32 nDeselect = GetEntryList()->GetSelectedEntryPos( 0 ); + sal_Int32 nDeselect = GetEntryList().GetSelectedEntryPos( 0 ); if( nDeselect != LISTBOX_ENTRY_NOTFOUND ) { //SelectEntryPos( nDeselect, false ); - GetEntryList()->SelectEntry( nDeselect, false ); + GetEntryList().SelectEntry( nDeselect, false ); if (IsUpdateMode() && IsReallyVisible()) Invalidate(); } } - mpEntryList->SelectEntry( nPos, true ); + maEntryList.SelectEntry( nPos, true ); mnCurrentPos = nPos; if ( ( nPos != LISTBOX_ENTRY_NOTFOUND ) && IsUpdateMode() ) { @@ -970,7 +976,7 @@ void ImplListBoxWindow::SelectEntry( sal_Int32 nPos, bool bSelect ) } else { - mpEntryList->SelectEntry( nPos, false ); + maEntryList.SelectEntry( nPos, false ); Invalidate(); } mbSelectionChanged = true; @@ -980,18 +986,18 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo { bool bSelectionChanged = false; - if( IsEnabled() && mpEntryList->IsEntrySelectable( nSelect ) ) + if( IsEnabled() && maEntryList.IsEntrySelectable( nSelect ) ) { bool bFocusChanged = false; // here (Single-ListBox) only one entry can be deselected if( !mbMulti ) { - sal_Int32 nDeselect = mpEntryList->GetSelectedEntryPos( 0 ); + sal_Int32 nDeselect = maEntryList.GetSelectedEntryPos( 0 ); if( nSelect != nDeselect ) { SelectEntry( nSelect, true ); - mpEntryList->SetLastSelected( nSelect ); + maEntryList.SetLastSelected( nSelect ); bFocusChanged = true; bSelectionChanged = true; } @@ -999,19 +1005,19 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo // MultiListBox without Modifier else if( mbSimpleMode && !bCtrl && !bShift ) { - sal_Int32 nEntryCount = mpEntryList->GetEntryCount(); + sal_Int32 nEntryCount = maEntryList.GetEntryCount(); for ( sal_Int32 nPos = 0; nPos < nEntryCount; nPos++ ) { bool bSelect = nPos == nSelect; - if ( mpEntryList->IsEntryPosSelected( nPos ) != bSelect ) + if ( maEntryList.IsEntryPosSelected( nPos ) != bSelect ) { SelectEntry( nPos, bSelect ); bFocusChanged = true; bSelectionChanged = true; } } - mpEntryList->SetLastSelected( nSelect ); - mpEntryList->SetSelectionAnchor( nSelect ); + maEntryList.SetLastSelected( nSelect ); + maEntryList.SetSelectionAnchor( nSelect ); } // MultiListBox only with CTRL/SHIFT or not in SimpleMode else if( ( !mbSimpleMode /* && !bShift */ ) || ( mbSimpleMode && ( bCtrl || bShift ) ) ) @@ -1019,12 +1025,12 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo // Space for selection change if( !bShift && ( ( eLET == LET_KEYSPACE ) || ( eLET == LET_MBDOWN ) ) ) { - bool bSelect = !mpEntryList->IsEntryPosSelected( nSelect ); + bool bSelect = !maEntryList.IsEntryPosSelected( nSelect ); SelectEntry( nSelect, bSelect ); - mpEntryList->SetLastSelected( nSelect ); - mpEntryList->SetSelectionAnchor( nSelect ); - if ( !mpEntryList->IsEntryPosSelected( nSelect ) ) - mpEntryList->SetSelectionAnchor( LISTBOX_ENTRY_NOTFOUND ); + maEntryList.SetLastSelected( nSelect ); + maEntryList.SetSelectionAnchor( nSelect ); + if ( !maEntryList.IsEntryPosSelected( nSelect ) ) + maEntryList.SetSelectionAnchor( LISTBOX_ENTRY_NOTFOUND ); bFocusChanged = true; bSelectionChanged = true; } @@ -1034,10 +1040,10 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo mnCurrentPos = nSelect; bFocusChanged = true; - sal_Int32 nAnchor = mpEntryList->GetSelectionAnchor(); - if( ( nAnchor == LISTBOX_ENTRY_NOTFOUND ) && mpEntryList->GetSelectedEntryCount() ) + sal_Int32 nAnchor = maEntryList.GetSelectionAnchor(); + if( ( nAnchor == LISTBOX_ENTRY_NOTFOUND ) && maEntryList.GetSelectedEntryCount() ) { - nAnchor = mpEntryList->GetSelectedEntryPos( mpEntryList->GetSelectedEntryCount() - 1 ); + nAnchor = maEntryList.GetSelectedEntryPos( maEntryList.GetSelectedEntryCount() - 1 ); } if( nAnchor != LISTBOX_ENTRY_NOTFOUND ) { @@ -1046,7 +1052,7 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo sal_Int32 nEnd = std::max( nSelect, nAnchor ); for ( sal_Int32 n = nStart; n <= nEnd; n++ ) { - if ( !mpEntryList->IsEntryPosSelected( n ) ) + if ( !maEntryList.IsEntryPosSelected( n ) ) { SelectEntry( n, true ); bSelectionChanged = true; @@ -1054,14 +1060,14 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo } // if appropriate some more has to be deselected... - sal_Int32 nLast = mpEntryList->GetLastSelected(); + sal_Int32 nLast = maEntryList.GetLastSelected(); if ( nLast != LISTBOX_ENTRY_NOTFOUND ) { if ( ( nLast > nSelect ) && ( nLast > nAnchor ) ) { for ( sal_Int32 n = nSelect+1; n <= nLast; n++ ) { - if ( mpEntryList->IsEntryPosSelected( n ) ) + if ( maEntryList.IsEntryPosSelected( n ) ) { SelectEntry( n, false ); bSelectionChanged = true; @@ -1072,7 +1078,7 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo { for ( sal_Int32 n = nLast; n < nSelect; n++ ) { - if ( mpEntryList->IsEntryPosSelected( n ) ) + if ( maEntryList.IsEntryPosSelected( n ) ) { SelectEntry( n, false ); bSelectionChanged = true; @@ -1080,7 +1086,7 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo } } } - mpEntryList->SetLastSelected( nSelect ); + maEntryList.SetLastSelected( nSelect ); } } else if( eLET != LET_TRACKING ) @@ -1100,10 +1106,10 @@ bool ImplListBoxWindow::SelectEntries( sal_Int32 nSelect, LB_EVENT_TYPE eLET, bo if( bFocusChanged ) { - tools::Long nHeightDiff = mpEntryList->GetAddedHeight( nSelect, mnTop ); + tools::Long nHeightDiff = maEntryList.GetAddedHeight( nSelect, mnTop ); maFocusRect.SetPos( Point( 0, nHeightDiff ) ); Size aSz( maFocusRect.GetWidth(), - mpEntryList->GetEntryHeight( nSelect ) ); + maEntryList.GetEntryHeight( nSelect ) ); maFocusRect.SetSize( aSz ); if( HasFocus() ) ImplShowFocusRect(); @@ -1139,10 +1145,10 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt ) mbTrackingSelect = false; if ( mnTrackingSaveSelection != LISTBOX_ENTRY_NOTFOUND ) { - tools::Long nHeightDiff = mpEntryList->GetAddedHeight( mnCurrentPos, mnTop ); + tools::Long nHeightDiff = maEntryList.GetAddedHeight( mnCurrentPos, mnTop ); maFocusRect.SetPos( Point( 0, nHeightDiff ) ); Size aSz( maFocusRect.GetWidth(), - mpEntryList->GetEntryHeight( mnCurrentPos ) ); + maEntryList.GetEntryHeight( mnCurrentPos ) ); maFocusRect.SetSize( aSz ); ImplShowFocusRect(); } @@ -1190,7 +1196,7 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt ) { if ( mnCurrentPos != LISTBOX_ENTRY_NOTFOUND ) { - nSelect = std::min( static_cast<sal_Int32>(mnCurrentPos+1), static_cast<sal_Int32>(mpEntryList->GetEntryCount()-1) ); + nSelect = std::min( static_cast<sal_Int32>(mnCurrentPos+1), static_cast<sal_Int32>(maEntryList.GetEntryCount()-1) ); if( nSelect >= GetLastVisibleEntry() ) SetTopEntry( mnTop+1 ); } @@ -1199,12 +1205,12 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt ) { nSelect = static_cast<sal_Int32>( ( aPt.Y() + gnBorder ) / mnMaxHeight ) + mnTop; nSelect = std::min( nSelect, GetLastVisibleEntry() ); - nSelect = std::min( nSelect, static_cast<sal_Int32>( mpEntryList->GetEntryCount() - 1 ) ); + nSelect = std::min( nSelect, static_cast<sal_Int32>( maEntryList.GetEntryCount() - 1 ) ); } if ( bInside ) { - if ( ( nSelect != mnCurrentPos ) || !GetEntryList()->GetSelectedEntryCount() ) + if ( ( nSelect != mnCurrentPos ) || !GetEntryList().GetSelectedEntryCount() ) { mbTrackingSelect = true; SelectEntries(nSelect, LET_TRACKING, bShift, bCtrl); @@ -1213,10 +1219,10 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt ) } else { - if ( !mbMulti && GetEntryList()->GetSelectedEntryCount() ) + if ( !mbMulti && GetEntryList().GetSelectedEntryCount() ) { mbTrackingSelect = true; - SelectEntry( GetEntryList()->GetSelectedEntryPos( 0 ), false ); + SelectEntry( GetEntryList().GetSelectedEntryPos( 0 ), false ); mbTrackingSelect = false; } } @@ -1227,9 +1233,9 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt ) } else { - tools::Long nHeightDiff = mpEntryList->GetAddedHeight( mnCurrentPos, mnTop ); + tools::Long nHeightDiff = maEntryList.GetAddedHeight( mnCurrentPos, mnTop ); maFocusRect.SetPos( Point( 0, nHeightDiff ) ); - Size aSz( maFocusRect.GetWidth(), mpEntryList->GetEntryHeight( mnCurrentPos ) ); + Size aSz( maFocusRect.GetWidth(), maEntryList.GetEntryHeight( mnCurrentPos ) ); maFocusRect.SetSize( aSz ); ImplShowFocusRect(); } @@ -1270,12 +1276,12 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) { if( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) { - nSelect = mpEntryList->FindFirstSelectable( 0 ); + nSelect = maEntryList.FindFirstSelectable( 0 ); } else if ( mnCurrentPos ) { // search first selectable above the current position - nSelect = mpEntryList->FindFirstSelectable( mnCurrentPos - 1, false ); + nSelect = maEntryList.FindFirstSelectable( mnCurrentPos - 1, false ); } if( ( nSelect != LISTBOX_ENTRY_NOTFOUND ) && ( nSelect < mnTop ) ) @@ -1297,12 +1303,12 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) { if( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) { - nSelect = mpEntryList->FindFirstSelectable( 0 ); + nSelect = maEntryList.FindFirstSelectable( 0 ); } - else if ( (mnCurrentPos+1) < mpEntryList->GetEntryCount() ) + else if ( (mnCurrentPos+1) < maEntryList.GetEntryCount() ) { // search first selectable below the current position - nSelect = mpEntryList->FindFirstSelectable( mnCurrentPos + 1 ); + nSelect = maEntryList.FindFirstSelectable( mnCurrentPos + 1 ); } if( ( nSelect != LISTBOX_ENTRY_NOTFOUND ) && ( nSelect >= GetLastVisibleEntry() ) ) @@ -1326,7 +1332,7 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) { if( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) { - nSelect = mpEntryList->FindFirstSelectable( 0 ); + nSelect = maEntryList.FindFirstSelectable( 0 ); } else if ( mnCurrentPos ) { @@ -1337,7 +1343,7 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) } // find first selectable starting from mnTop looking forward - nSelect = mpEntryList->FindFirstSelectable( mnTop ); + nSelect = maEntryList.FindFirstSelectable( mnTop ); } bDone = true; } @@ -1355,11 +1361,11 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) { if( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) { - nSelect = mpEntryList->FindFirstSelectable( 0 ); + nSelect = maEntryList.FindFirstSelectable( 0 ); } - else if ( (mnCurrentPos+1) < mpEntryList->GetEntryCount() ) + else if ( (mnCurrentPos+1) < maEntryList.GetEntryCount() ) { - sal_Int32 nCount = mpEntryList->GetEntryCount(); + sal_Int32 nCount = maEntryList.GetEntryCount(); sal_Int32 nCurVis = GetLastVisibleEntry() - mnTop; sal_Int32 nTmp = std::min( nCurVis, nCount ); nTmp += mnTop - 1; @@ -1371,7 +1377,7 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) SetTopEntry( static_cast<sal_Int32>(nTmp2) ); } // find first selectable starting from nTmp looking backwards - nSelect = mpEntryList->FindFirstSelectable( nTmp, false ); + nSelect = maEntryList.FindFirstSelectable( nTmp, false ); } bDone = true; } @@ -1387,7 +1393,7 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) } else if ( !bCtrl && !bMod2 && mnCurrentPos ) { - nSelect = mpEntryList->FindFirstSelectable( mpEntryList->GetEntryCount() ? 0 : LISTBOX_ENTRY_NOTFOUND ); + nSelect = maEntryList.FindFirstSelectable( maEntryList.GetEntryCount() ? 0 : LISTBOX_ENTRY_NOTFOUND ); if( mnTop != 0 ) SetTopEntry( 0 ); @@ -1407,12 +1413,12 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) { if( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) { - nSelect = mpEntryList->FindFirstSelectable( 0 ); + nSelect = maEntryList.FindFirstSelectable( 0 ); } - else if ( (mnCurrentPos+1) < mpEntryList->GetEntryCount() ) + else if ( (mnCurrentPos+1) < maEntryList.GetEntryCount() ) { - sal_Int32 nCount = mpEntryList->GetEntryCount(); - nSelect = mpEntryList->FindFirstSelectable( nCount - 1, false ); + sal_Int32 nCount = maEntryList.GetEntryCount(); + nSelect = maEntryList.FindFirstSelectable( nCount - 1, false ); sal_Int32 nCurVis = GetLastVisibleEntry() - mnTop + 1; if( nCount > nCurVis ) SetTopEntry( nCount - nCurVis ); @@ -1480,7 +1486,7 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) bool bUpdates = IsUpdateMode(); SetUpdateMode( false ); - sal_Int32 nEntryCount = mpEntryList->GetEntryCount(); + sal_Int32 nEntryCount = maEntryList.GetEntryCount(); for( sal_Int32 i = 0; i < nEntryCount; i++ ) SelectEntry( i, true ); @@ -1512,13 +1518,13 @@ bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt ) } if ( ( nSelect != LISTBOX_ENTRY_NOTFOUND ) - && ( ( !mpEntryList->IsEntryPosSelected( nSelect ) ) + && ( ( !maEntryList.IsEntryPosSelected( nSelect ) ) || ( eLET == LET_KEYSPACE ) ) ) { - SAL_WARN_IF( mpEntryList->IsEntryPosSelected( nSelect ) && !mbMulti, "vcl", "ImplListBox: Selecting same Entry" ); - sal_Int32 nCount = mpEntryList->GetEntryCount(); + SAL_WARN_IF( maEntryList.IsEntryPosSelected( nSelect ) && !mbMulti, "vcl", "ImplListBox: Selecting same Entry" ); + sal_Int32 nCount = maEntryList.GetEntryCount(); if (nSelect >= nCount) nSelect = nCount ? nCount-1 : LISTBOX_ENTRY_NOTFOUND; bool bCurPosChange = (mnCurrentPos != nSelect); @@ -1561,19 +1567,19 @@ namespace vcl::StringEntryIdentifier ImplListBoxWindow::CurrentEntry( OUString& _out_entryText ) const { - return lcl_getEntry( *GetEntryList(), ( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) ? 0 : mnCurrentPos, _out_entryText ); + return lcl_getEntry( GetEntryList(), ( mnCurrentPos == LISTBOX_ENTRY_NOTFOUND ) ? 0 : mnCurrentPos, _out_entryText ); } vcl::StringEntryIdentifier ImplListBoxWindow::NextEntry( vcl::StringEntryIdentifier _currentEntry, OUString& _out_entryText ) const { sal_Int32 nNextPos = lcl_getEntryPos( _currentEntry ) + 1; - return lcl_getEntry( *GetEntryList(), nNextPos, _out_entryText ); + return lcl_getEntry( GetEntryList(), nNextPos, _out_entryText ); } void ImplListBoxWindow::SelectEntry( vcl::StringEntryIdentifier _entry ) { sal_Int32 nSelect = lcl_getEntryPos( _entry ); - if ( mpEntryList->IsEntryPosSelected( nSelect ) ) + if ( maEntryList.IsEntryPosSelected( nSelect ) ) { // ignore that. This method is a callback from the QuickSelectionEngine, which means the user attempted // to select the given entry by typing its starting letters. No need to act. @@ -1581,8 +1587,8 @@ void ImplListBoxWindow::SelectEntry( vcl::StringEntryIdentifier _entry ) } // normalize - OSL_ENSURE( nSelect < mpEntryList->GetEntryCount(), "ImplListBoxWindow::SelectEntry: how that?" ); - sal_Int32 nCount = mpEntryList->GetEntryCount(); + OSL_ENSURE( nSelect < maEntryList.GetEntryCount(), "ImplListBoxWindow::SelectEntry: how that?" ); + sal_Int32 nCount = maEntryList.GetEntryCount(); if (nSelect >= nCount) nSelect = nCount ? nCount-1 : LISTBOX_ENTRY_NOTFOUND; @@ -1604,15 +1610,15 @@ void ImplListBoxWindow::ImplPaint(vcl::RenderContext& rRenderContext, sal_Int32 { const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings(); - const ImplEntryType* pEntry = mpEntryList->GetEntryPtr( nPos ); + const ImplEntryType* pEntry = maEntryList.GetEntryPtr( nPos ); if (!pEntry) return; tools::Long nWidth = GetOutputSizePixel().Width(); - tools::Long nY = mpEntryList->GetAddedHeight(nPos, mnTop); + tools::Long nY = maEntryList.GetAddedHeight(nPos, mnTop); tools::Rectangle aRect(Point(0, nY), Size(nWidth, pEntry->getHeightWithMargin())); - bool bSelected = mpEntryList->IsEntryPosSelected(nPos); + bool bSelected = maEntryList.IsEntryPosSelected(nPos); if (bSelected) { rRenderContext.SetTextColor(!IsEnabled() ? rStyleSettings.GetDisableColor() : rStyleSettings.GetHighlightTextColor()); @@ -1633,9 +1639,9 @@ void ImplListBoxWindow::ImplPaint(vcl::RenderContext& rRenderContext, sal_Int32 mbInUserDraw = true; mnUserDrawEntry = nPos; aRect.AdjustLeft( -mnLeft ); - if (nPos < GetEntryList()->GetMRUCount()) - nPos = GetEntryList()->FindEntry(GetEntryList()->GetEntryText(nPos)); - nPos = nPos - GetEntryList()->GetMRUCount(); + if (nPos < GetEntryList().GetMRUCount()) + nPos = GetEntryList().FindEntry(GetEntryList().GetEntryText(nPos)); + nPos = nPos - GetEntryList().GetMRUCount(); UserDrawEvent aUDEvt(&rRenderContext, aRect, nPos, bSelected); maUserDrawHdl.Call( &aUDEvt ); @@ -1649,7 +1655,7 @@ void ImplListBoxWindow::ImplPaint(vcl::RenderContext& rRenderContext, sal_Int32 void ImplListBoxWindow::DrawEntry(vcl::RenderContext& rRenderContext, sal_Int32 nPos, bool bDrawImage, bool bDrawText) { - const ImplEntryType* pEntry = mpEntryList->GetEntryPtr(nPos); + const ImplEntryType* pEntry = maEntryList.GetEntryPtr(nPos); if (!pEntry) return; @@ -1660,11 +1666,11 @@ void ImplListBoxWindow::DrawEntry(vcl::RenderContext& rRenderContext, sal_Int32 if (mbInUserDraw) nPos = mnUserDrawEntry; // real entry, not the matching entry from MRU - tools::Long nY = mpEntryList->GetAddedHeight(nPos, mnTop); + tools::Long nY = maEntryList.GetAddedHeight(nPos, mnTop); - if (bDrawImage && mpEntryList->HasImages()) + if (bDrawImage && maEntryList.HasImages()) { - Image aImage = mpEntryList->GetEntryImage(nPos); + Image aImage = maEntryList.GetEntryImage(nPos); if (!!aImage) { Size aImgSz = aImage.GetSizePixel(); @@ -1701,7 +1707,7 @@ void ImplListBoxWindow::DrawEntry(vcl::RenderContext& rRenderContext, sal_Int32 if (bDrawText) { - OUString aStr(mpEntryList->GetEntryText(nPos)); + OUString aStr(maEntryList.GetEntryText(nPos)); if (!aStr.isEmpty()) { tools::Long nMaxWidth = std::max(mnMaxWidth, GetOutputSizePixel().Width() - 2 * gnBorder); @@ -1712,7 +1718,7 @@ void ImplListBoxWindow::DrawEntry(vcl::RenderContext& rRenderContext, sal_Int32 tools::Rectangle aTextRect(Point(gnBorder - mnLeft, nY), Size(nMaxWidth, nEntryHeight)); - if (mpEntryList->HasEntryImage(nPos) || IsUserDrawEnabled()) + if (maEntryList.HasEntryImage(nPos) || IsUserDrawEnabled()) { tools::Long nImageWidth = std::max(mnMaxImgWidth, maUserItemSize.Width()); aTextRect.AdjustLeft(nImageWidth + IMG_TXT_DISTANCE ); @@ -1750,7 +1756,7 @@ void ImplListBoxWindow::FillLayoutData() const void ImplListBoxWindow::ImplDoPaint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) { - sal_Int32 nCount = mpEntryList->GetEntryCount(); + sal_Int32 nCount = maEntryList.GetEntryCount(); bool bShowFocusRect = mbHasFocusRect; if (mbHasFocusRect) @@ -1761,7 +1767,7 @@ void ImplListBoxWindow::ImplDoPaint(vcl::RenderContext& rRenderContext, const to for (sal_Int32 i = mnTop; i < nCount && nY < nHeight + mnMaxHeight; i++) { - const ImplEntryType* pEntry = mpEntryList->GetEntryPtr(i); + const ImplEntryType* pEntry = maEntryList.GetEntryPtr(i); tools::Long nEntryHeight = pEntry->getHeightWithMargin(); if (nY + nEntryHeight >= rRect.Top() && nY <= rRect.Bottom() + mnMaxHeight) @@ -1771,9 +1777,9 @@ void ImplListBoxWindow::ImplDoPaint(vcl::RenderContext& rRenderContext, const to nY += nEntryHeight; } - tools::Long nHeightDiff = mpEntryList->GetAddedHeight(mnCurrentPos, mnTop); + tools::Long nHeightDiff = maEntryList.GetAddedHeight(mnCurrentPos, mnTop); maFocusRect.SetPos(Point(0, nHeightDiff)); - Size aSz(maFocusRect.GetWidth(), mpEntryList->GetEntryHeight(mnCurrentPos)); + Size aSz(maFocusRect.GetWidth(), maEntryList.GetEntryHeight(mnCurrentPos)); maFocusRect.SetSize(aSz); if (HasFocus() && bShowFocusRect) ImplShowFocusRect(); @@ -1795,7 +1801,7 @@ sal_uInt16 ImplListBoxWindow::GetDisplayLineCount() const { // FIXME: ListBoxEntryFlags::MultiLine - const sal_Int32 nCount = mpEntryList->GetEntryCount()-mnTop; + const sal_Int32 nCount = maEntryList.GetEntryCount()-mnTop; tools::Long nHeight = GetOutputSizePixel().Height();// - mnMaxHeight + gnBorder; sal_uInt16 nEntries = static_cast< sal_uInt16 >( ( nHeight + mnMaxHeight - 1 ) / mnMaxHeight ); if( nEntries > nCount ) @@ -1814,7 +1820,7 @@ void ImplListBoxWindow::Resize() if( mnCurrentPos != LISTBOX_ENTRY_NOTFOUND ) { - Size aSz( GetOutputSizePixel().Width(), mpEntryList->GetEntryHeight( mnCurrentPos ) ); + Size aSz( GetOutputSizePixel().Width(), maEntryList.GetEntryHeight( mnCurrentPos ) ); maFocusRect.SetSize( aSz ); } @@ -1829,9 +1835,9 @@ void ImplListBoxWindow::GetFocus() sal_Int32 nPos = mnCurrentPos; if ( nPos == LISTBOX_ENTRY_NOTFOUND ) nPos = 0; - tools::Long nHeightDiff = mpEntryList->GetAddedHeight( nPos, mnTop ); + tools::Long nHeightDiff = maEntryList.GetAddedHeight( nPos, mnTop ); maFocusRect.SetPos( Point( 0, nHeightDiff ) ); - Size aSz( maFocusRect.GetWidth(), mpEntryList->GetEntryHeight( nPos ) ); + Size aSz( maFocusRect.GetWidth(), maEntryList.GetEntryHeight( nPos ) ); maFocusRect.SetSize( aSz ); ImplShowFocusRect(); Control::GetFocus(); @@ -1845,23 +1851,23 @@ void ImplListBoxWindow::LoseFocus() void ImplListBoxWindow::SetTopEntry( sal_Int32 nTop ) { - if( mpEntryList->GetEntryCount() == 0 ) + if( maEntryList.GetEntryCount() == 0 ) return; tools::Long nWHeight = PixelToLogic( GetSizePixel() ).Height(); - sal_Int32 nLastEntry = mpEntryList->GetEntryCount()-1; + sal_Int32 nLastEntry = maEntryList.GetEntryCount()-1; if( nTop > nLastEntry ) nTop = nLastEntry; - const ImplEntryType* pLast = mpEntryList->GetEntryPtr( nLastEntry ); - while( nTop > 0 && mpEntryList->GetAddedHeight( nLastEntry, nTop-1 ) + pLast->getHeightWithMargin() <= nWHeight ) + const ImplEntryType* pLast = maEntryList.GetEntryPtr( nLastEntry ); + while( nTop > 0 && maEntryList.GetAddedHeight( nLastEntry, nTop-1 ) + pLast->getHeightWithMargin() <= nWHeight ) nTop--; if ( nTop == mnTop ) return; ImplClearLayoutData(); - tools::Long nDiff = mpEntryList->GetAddedHeight( mnTop, nTop ); + tools::Long nDiff = maEntryList.GetAddedHeight( mnTop, nTop ); PaintImmediately(); ImplHideFocusRect(); mnTop = nTop; @@ -1949,9 +1955,9 @@ Size ImplListBoxWindow::CalcSize(sal_Int32 nMaxLines) const tools::Rectangle ImplListBoxWindow::GetBoundingRectangle( sal_Int32 nItem ) const { - const ImplEntryType* pEntry = mpEntryList->GetEntryPtr( nItem ); + const ImplEntryType* pEntry = maEntryList.GetEntryPtr( nItem ); Size aSz( GetSizePixel().Width(), pEntry ? pEntry->getHeightWithMargin() : GetEntryHeightWithMargin() ); - tools::Long nY = mpEntryList->GetAddedHeight( nItem, GetTopEntry() ) + GetEntryList()->GetMRUCount()*GetEntryHeightWithMargin(); + tools::Long nY = maEntryList.GetAddedHeight( nItem, GetTopEntry() ) + GetEntryList().GetMRUCount()*GetEntryHeightWithMargin(); tools::Rectangle aRect( Point( 0, nY ), aSz ); return aRect; } @@ -2015,7 +2021,7 @@ DrawTextFlags ImplListBoxWindow::ImplGetTextStyle() const { DrawTextFlags nTextStyle = DrawTextFlags::VCenter; - if (mpEntryList->HasImages()) + if (maEntryList.HasImages()) nTextStyle |= DrawTextFlags::Left; else if (mbCenter) nTextStyle |= DrawTextFlags::Center; @@ -2070,9 +2076,9 @@ void ImplListBox::dispose() void ImplListBox::Clear() { maLBWindow->Clear(); - if ( GetEntryList()->GetMRUCount() ) + if ( GetEntryList().GetMRUCount() ) { - maLBWindow->GetEntryList()->SetMRUCount( 0 ); + maLBWindow->GetEntryList().SetMRUCount( 0 ); maLBWindow->SetSeparatorPos( LISTBOX_ENTRY_NOTFOUND ); } mpVScrollBar->SetThumbPos( 0 ); @@ -2141,7 +2147,7 @@ IMPL_LINK_NOARG(ImplListBox, LBWindowScrolled, ImplListBoxWindow*, void) { tools::Long nSet = GetTopEntry(); if( nSet > mpVScrollBar->GetRangeMax() ) - mpVScrollBar->SetRangeMax( GetEntryList()->GetEntryCount() ); + mpVScrollBar->SetRangeMax( GetEntryList().GetEntryCount() ); mpVScrollBar->SetThumbPos( GetTopEntry() ); mpHScrollBar->SetThumbPos( GetLeftIndent() ); @@ -2165,7 +2171,7 @@ void ImplListBox::ImplCheckScrollBars() bool bArrange = false; Size aOutSz = GetOutputSizePixel(); - sal_Int32 nEntries = GetEntryList()->GetEntryCount(); + sal_Int32 nEntries = GetEntryList().GetEntryCount(); sal_uInt16 nMaxVisEntries = static_cast<sal_uInt16>(aOutSz.Height() / GetEntryHeightWithMargin()); // vertical ScrollBar @@ -2176,9 +2182,9 @@ void ImplListBox::ImplCheckScrollBars() mbVScroll = true; // check of the scrolled-out region - if( GetEntryList()->GetSelectedEntryCount() == 1 && - GetEntryList()->GetSelectedEntryPos( 0 ) != LISTBOX_ENTRY_NOTFOUND ) - ShowProminentEntry( GetEntryList()->GetSelectedEntryPos( 0 ) ); + if( GetEntryList().GetSelectedEntryCount() == 1 && + GetEntryList().GetSelectedEntryPos( 0 ) != LISTBOX_ENTRY_NOTFOUND ) + ShowProminentEntry( GetEntryList().GetSelectedEntryPos( 0 ) ); else SetTopEntry( GetTopEntry() ); // MaxTop is being checked... } @@ -2213,9 +2219,9 @@ void ImplListBox::ImplCheckScrollBars() mbVScroll = true; // check of the scrolled-out region - if( GetEntryList()->GetSelectedEntryCount() == 1 && - GetEntryList()->GetSelectedEntryPos( 0 ) != LISTBOX_ENTRY_NOTFOUND ) - ShowProminentEntry( GetEntryList()->GetSelectedEntryPos( 0 ) ); + if( GetEntryList().GetSelectedEntryCount() == 1 && + GetEntryList().GetSelectedEntryPos( 0 ) != LISTBOX_ENTRY_NOTFOUND ) + ShowProminentEntry( GetEntryList().GetSelectedEntryPos( 0 ) ); else SetTopEntry( GetTopEntry() ); // MaxTop is being checked... } @@ -2247,7 +2253,7 @@ void ImplListBox::ImplInitScrollBars() if ( mbVScroll ) { - sal_Int32 nEntries = GetEntryList()->GetEntryCount(); + sal_Int32 nEntries = GetEntryList().GetEntryCount(); sal_uInt16 nVisEntries = static_cast<sal_uInt16>(aOutSz.Height() / GetEntryHeightWithMargin()); mpVScrollBar->SetRangeMax( nEntries ); mpVScrollBar->SetVisibleSize( nVisEntries ); @@ -2420,10 +2426,10 @@ bool ImplListBox::HandleWheelAsCursorTravel(const CommandEvent& rCEvt, Control& void ImplListBox::SetMRUEntries( const OUString& rEntries, sal_Unicode cSep ) { - bool bChanges = GetEntryList()->GetMRUCount() != 0; + bool bChanges = GetEntryList().GetMRUCount() != 0; // Remove old MRU entries - for ( sal_Int32 n = GetEntryList()->GetMRUCount();n; ) + for ( sal_Int32 n = GetEntryList().GetMRUCount();n; ) maLBWindow->RemoveEntry( --n ); sal_Int32 nMRUCount = 0; @@ -2432,7 +2438,7 @@ void ImplListBox::SetMRUEntries( const OUString& rEntries, sal_Unicode cSep ) { OUString aEntry = rEntries.getToken( 0, cSep, nIndex ); // Accept only existing entries - if ( GetEntryList()->FindEntry( aEntry ) != LISTBOX_ENTRY_NOTFOUND ) + if ( GetEntryList().FindEntry( aEntry ) != LISTBOX_ENTRY_NOTFOUND ) { ImplEntryType* pNewEntry = new ImplEntryType( aEntry ); maLBWindow->InsertEntry(nMRUCount++, pNewEntry, false); @@ -2443,7 +2449,7 @@ void ImplListBox::SetMRUEntries( const OUString& rEntries, sal_Unicode cSep ) if ( bChanges ) { - maLBWindow->GetEntryList()->SetMRUCount( nMRUCount ); + maLBWindow->GetEntryList().SetMRUCount( nMRUCount ); SetSeparatorPos( nMRUCount ? nMRUCount-1 : 0 ); CompatStateChanged( StateChangedType::Data ); } @@ -2452,10 +2458,10 @@ void ImplListBox::SetMRUEntries( const OUString& rEntries, sal_Unicode cSep ) OUString ImplListBox::GetMRUEntries( sal_Unicode cSep ) const { OUStringBuffer aEntries; - for ( sal_Int32 n = 0; n < GetEntryList()->GetMRUCount(); n++ ) + for ( sal_Int32 n = 0; n < GetEntryList().GetMRUCount(); n++ ) { - aEntries.append(GetEntryList()->GetEntryText( n )); - if( n < ( GetEntryList()->GetMRUCount() - 1 ) ) + aEntries.append(GetEntryList().GetEntryText( n )); + if( n < ( GetEntryList().GetMRUCount() - 1 ) ) aEntries.append(cSep); } return aEntries.makeStringAndClear(); @@ -2883,7 +2889,7 @@ Size ImplListBoxFloatingWindow::CalcFloatSize() sal_Int32 nLeft, nTop, nRight, nBottom; GetBorder( nLeft, nTop, nRight, nBottom ); - sal_Int32 nLines = mpImplLB->GetEntryList()->GetEntryCount(); + sal_Int32 nLines = mpImplLB->GetEntryList().GetEntryCount(); if ( mnDDLineCount && ( nLines > mnDDLineCount ) ) nLines = mnDDLineCount; @@ -2900,7 +2906,7 @@ Size ImplListBoxFloatingWindow::CalcFloatSize() aFloatSz.setWidth( aSz.Width() + nLeft + nRight ); aFloatSz.AdjustWidth(nRight ); // adding some space looks better... - if ( ( aFloatSz.Height() < nMaxHeight ) || ( mnDDLineCount && ( mnDDLineCount < mpImplLB->GetEntryList()->GetEntryCount() ) ) ) + if ( ( aFloatSz.Height() < nMaxHeight ) || ( mnDDLineCount && ( mnDDLineCount < mpImplLB->GetEntryList().GetEntryCount() ) ) ) { // then we also need the vertical Scrollbar tools::Long nSBWidth = GetSettings().GetStyleSettings().GetScrollBarSize(); @@ -2958,7 +2964,7 @@ void ImplListBoxFloatingWindow::StartFloat( bool bStartTracking ) SetSizePixel( aFloatSz ); mpImplLB->SetSizePixel( GetOutputSizePixel() ); - sal_Int32 nPos = mpImplLB->GetEntryList()->GetSelectedEntryPos( 0 ); + sal_Int32 nPos = mpImplLB->GetEntryList().GetSelectedEntryPos( 0 ); mnPopupModeStartSaveSelection = nPos; Size aSz = GetParent()->GetSizePixel(); diff --git a/vcl/source/control/listbox.cxx b/vcl/source/control/listbox.cxx index cb3b74672c04..444d7e899727 100644 --- a/vcl/source/control/listbox.cxx +++ b/vcl/source/control/listbox.cxx @@ -178,9 +178,9 @@ IMPL_LINK_NOARG(ListBox, ImplSelectHdl, LinkParamNone*, void) mpImplWin->SetItemPos( GetSelectedEntryPos() ); mpImplWin->SetString( GetSelectedEntry() ); - if( mpImplLB->GetEntryList()->HasImages() ) + if( mpImplLB->GetEntryList().HasImages() ) { - Image aImage = mpImplLB->GetEntryList()->GetEntryImage( GetSelectedEntryPos() ); + Image aImage = mpImplLB->GetEntryList().GetEntryImage( GetSelectedEntryPos() ); mpImplWin->SetImage( aImage ); } mpImplWin->Invalidate(); @@ -216,17 +216,17 @@ IMPL_LINK( ListBox, ImplSelectionChangedHdl, sal_Int32, nChanged, void ) if ( mpImplLB->IsTrackingSelect() ) return; - const ImplEntryList* pEntryList = mpImplLB->GetEntryList(); - if ( pEntryList->IsEntryPosSelected( nChanged ) ) + const ImplEntryList& rEntryList = mpImplLB->GetEntryList(); + if ( rEntryList.IsEntryPosSelected( nChanged ) ) { // FIXME? This should've been turned into an ImplPaintEntry some time ago... - if ( nChanged < pEntryList->GetMRUCount() ) - nChanged = pEntryList->FindEntry( pEntryList->GetEntryText( nChanged ) ); + if ( nChanged < rEntryList.GetMRUCount() ) + nChanged = rEntryList.FindEntry( rEntryList.GetEntryText( nChanged ) ); mpImplWin->SetItemPos( nChanged ); - mpImplWin->SetString( mpImplLB->GetEntryList()->GetEntryText( nChanged ) ); - if( mpImplLB->GetEntryList()->HasImages() ) + mpImplWin->SetString( rEntryList.GetEntryText( nChanged ) ); + if( rEntryList.HasImages() ) { - Image aImage = mpImplLB->GetEntryList()->GetEntryImage( nChanged ); + Image aImage = rEntryList.GetEntryImage( nChanged ); mpImplWin->SetImage( aImage ); } } @@ -414,7 +414,7 @@ void ListBox::Draw( OutputDevice* pDev, const Point& rPos, DrawFlags nFlags ) for ( sal_uInt16 n = 0; n < nLines; n++ ) { sal_Int32 nEntry = n+mpImplLB->GetTopEntry(); - bool bSelected = mpImplLB->GetEntryList()->IsEntryPosSelected( nEntry ); + bool bSelected = mpImplLB->GetEntryList().IsEntryPosSelected( nEntry ); if ( bSelected ) { pDev->SetFillColor( COL_BLACK ); @@ -427,7 +427,7 @@ void ListBox::Draw( OutputDevice* pDev, const Point& rPos, DrawFlags nFlags ) aTextRect.SetTop( aPos.Y() + n*nTextHeight ); aTextRect.SetBottom( aTextRect.Top() + nTextHeight ); - pDev->DrawText( aTextRect, mpImplLB->GetEntryList()->GetEntryText( nEntry ), nTextStyle ); + pDev->DrawText( aTextRect, mpImplLB->GetEntryList().GetEntryText( nEntry ), nTextStyle ); if ( bSelected ) pDev->SetTextColor( COL_BLACK ); @@ -936,30 +936,30 @@ void ListBox::SetNoSelection() sal_Int32 ListBox::InsertEntry( const OUString& rStr, sal_Int32 nPos ) { - sal_Int32 nRealPos = mpImplLB->InsertEntry( nPos + mpImplLB->GetEntryList()->GetMRUCount(), rStr ); - nRealPos = sal::static_int_cast<sal_Int32>(nRealPos - mpImplLB->GetEntryList()->GetMRUCount()); + sal_Int32 nRealPos = mpImplLB->InsertEntry( nPos + mpImplLB->GetEntryList().GetMRUCount(), rStr ); + nRealPos = sal::static_int_cast<sal_Int32>(nRealPos - mpImplLB->GetEntryList().GetMRUCount()); CallEventListeners( VclEventId::ListboxItemAdded, reinterpret_cast<void*>(nRealPos) ); return nRealPos; } sal_Int32 ListBox::InsertEntry( const OUString& rStr, const Image& rImage, sal_Int32 nPos ) { - sal_Int32 nRealPos = mpImplLB->InsertEntry( nPos + mpImplLB->GetEntryList()->GetMRUCount(), rStr, rImage ); - nRealPos = sal::static_int_cast<sal_Int32>(nRealPos - mpImplLB->GetEntryList()->GetMRUCount()); + sal_Int32 nRealPos = mpImplLB->InsertEntry( nPos + mpImplLB->GetEntryList().GetMRUCount(), rStr, rImage ); + nRealPos = sal::static_int_cast<sal_Int32>(nRealPos - mpImplLB->GetEntryList().GetMRUCount()); CallEventListeners( VclEventId::ListboxItemAdded, reinterpret_cast<void*>(nRealPos) ); return nRealPos; } void ListBox::RemoveEntry( sal_Int32 nPos ) { - mpImplLB->RemoveEntry( nPos + mpImplLB->GetEntryList()->GetMRUCount() ); + mpImplLB->RemoveEntry( nPos + mpImplLB->GetEntryList().GetMRUCount() ); CallEventListeners( VclEventId::ListboxItemRemoved, reinterpret_cast<void*>(nPos) ); } Image ListBox::GetEntryImage( sal_Int32 nPos ) const { - if ( mpImplLB && mpImplLB->GetEntryList()->HasEntryImage( nPos ) ) - return mpImplLB->GetEntryList()->GetEntryImage( nPos ); + if ( mpImplLB && mpImplLB->GetEntryList().HasEntryImage( nPos ) ) + return mpImplLB->GetEntryList().GetEntryImage( nPos ); return Image(); } @@ -967,9 +967,9 @@ sal_Int32 ListBox::GetEntryPos( std::u16string_view rStr ) const { if (!mpImplLB) return LISTBOX_ENTRY_NOTFOUND; - sal_Int32 nPos = mpImplLB->GetEntryList()->FindEntry( rStr ); + sal_Int32 nPos = mpImplLB->GetEntryList().FindEntry( rStr ); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) - nPos = nPos - mpImplLB->GetEntryList()->GetMRUCount(); + nPos = nPos - mpImplLB->GetEntryList().GetMRUCount(); return nPos; } @@ -977,14 +977,14 @@ OUString ListBox::GetEntry( sal_Int32 nPos ) const { if (!mpImplLB) return OUString(); - return mpImplLB->GetEntryList()->GetEntryText( nPos + mpImplLB->GetEntryList()->GetMRUCount() ); + return mpImplLB->GetEntryList().GetEntryText( nPos + mpImplLB->GetEntryList().GetMRUCount() ); } sal_Int32 ListBox::GetEntryCount() const { if (!mpImplLB) return 0; - return mpImplLB->GetEntryList()->GetEntryCount() - mpImplLB->GetEntryList()->GetMRUCount(); + return mpImplLB->GetEntryList().GetEntryCount() - mpImplLB->GetEntryList().GetMRUCount(); } OUString ListBox::GetSelectedEntry(sal_Int32 nIndex) const @@ -996,27 +996,27 @@ sal_Int32 ListBox::GetSelectedEntryCount() const { if (!mpImplLB) return 0; - return mpImplLB->GetEntryList()->GetSelectedEntryCount(); + return mpImplLB->GetEntryList().GetSelectedEntryCount(); } sal_Int32 ListBox::GetSelectedEntryPos( sal_Int32 nIndex ) const { - if (!mpImplLB || !mpImplLB->GetEntryList()) + if (!mpImplLB) return LISTBOX_ENTRY_NOTFOUND; - sal_Int32 nPos = mpImplLB->GetEntryList()->GetSelectedEntryPos( nIndex ); + sal_Int32 nPos = mpImplLB->GetEntryList().GetSelectedEntryPos( nIndex ); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) { - if ( nPos < mpImplLB->GetEntryList()->GetMRUCount() ) - nPos = mpImplLB->GetEntryList()->FindEntry( mpImplLB->GetEntryList()->GetEntryText( nPos ) ); - nPos = nPos - mpImplLB->GetEntryList()->GetMRUCount(); + if ( nPos < mpImplLB->GetEntryList().GetMRUCount() ) + nPos = mpImplLB->GetEntryList().FindEntry( mpImplLB->GetEntryList().GetEntryText( nPos ) ); + nPos = nPos - mpImplLB->GetEntryList().GetMRUCount(); } return nPos; } bool ListBox::IsEntryPosSelected( sal_Int32 nPos ) const { - return mpImplLB->GetEntryList()->IsEntryPosSelected( nPos + mpImplLB->GetEntryList()->GetMRUCount() ); + return mpImplLB->GetEntryList().IsEntryPosSelected( nPos + mpImplLB->GetEntryList().GetMRUCount() ); } void ListBox::SelectEntry( std::u16string_view rStr, bool bSelect ) @@ -1029,10 +1029,10 @@ void ListBox::SelectEntryPos( sal_Int32 nPos, bool bSelect ) if (!mpImplLB) return; - if ( 0 <= nPos && nPos < mpImplLB->GetEntryList()->GetEntryCount() ) + if ( 0 <= nPos && nPos < mpImplLB->GetEntryList().GetEntryCount() ) { sal_Int32 nCurrentPos = mpImplLB->GetCurrentPos(); - mpImplLB->SelectEntry( nPos + mpImplLB->GetEntryList()->GetMRUCount(), bSelect ); + mpImplLB->SelectEntry( nPos + mpImplLB->GetEntryList().GetMRUCount(), bSelect ); //Only when bSelect == true, send both Selection & Focus events if (nCurrentPos != nPos && bSelect) { @@ -1051,8 +1051,8 @@ void ListBox::SelectEntriesPos( const std::vector<sal_Int32>& rPositions, bool b bool bCallListeners = false; const sal_Int32 nCurrentPos = mpImplLB->GetCurrentPos(); - const auto nEntryCount = mpImplLB->GetEntryList()->GetEntryCount(); - const auto nMRUCount = mpImplLB->GetEntryList()->GetMRUCount(); + const auto nEntryCount = mpImplLB->GetEntryList().GetEntryCount(); + const auto nMRUCount = mpImplLB->GetEntryList().GetMRUCount(); for (auto nPos : rPositions) { @@ -1075,28 +1075,28 @@ void ListBox::SelectEntriesPos( const std::vector<sal_Int32>& rPositions, bool b void ListBox::SetEntryData( sal_Int32 nPos, void* pNewData ) { - mpImplLB->SetEntryData( nPos + mpImplLB->GetEntryList()->GetMRUCount(), pNewData ); + mpImplLB->SetEntryData( nPos + mpImplLB->GetEntryList().GetMRUCount(), pNewData ); } void* ListBox::GetEntryData( sal_Int32 nPos ) const { - return mpImplLB->GetEntryList()->GetEntryData( nPos + mpImplLB->GetEntryList()->GetMRUCount() ); + return mpImplLB->GetEntryList().GetEntryData( nPos + mpImplLB->GetEntryList().GetMRUCount() ); } void ListBox::SetEntryFlags( sal_Int32 nPos, ListBoxEntryFlags nFlags ) { - mpImplLB->SetEntryFlags( nPos + mpImplLB->GetEntryList()->GetMRUCount(), nFlags ); + mpImplLB->SetEntryFlags( nPos + mpImplLB->GetEntryList().GetMRUCount(), nFlags ); } void ListBox::SetTopEntry( sal_Int32 nPos ) { - mpImplLB->SetTopEntry( nPos + mpImplLB->GetEntryList()->GetMRUCount() ); + mpImplLB->SetTopEntry( nPos + mpImplLB->GetEntryList().GetMRUCount() ); } sal_Int32 ListBox::GetTopEntry() const { sal_Int32 nPos = GetEntryCount() ? mpImplLB->GetTopEntry() : LISTBOX_ENTRY_NOTFOUND; - if ( nPos < mpImplLB->GetEntryList()->GetMRUCount() ) + if ( nPos < mpImplLB->GetEntryList().GetMRUCount() ) nPos = 0; return nPos; } @@ -1205,7 +1205,7 @@ Size ListBox::CalcSubEditSize() const return aSz; if ( !IsDropDownBox() ) - aSz = mpImplLB->CalcSize (mnLineCount ? mnLineCount : mpImplLB->GetEntryList()->GetEntryCount()); + aSz = mpImplLB->CalcSize (mnLineCount ? mnLineCount : mpImplLB->GetEntryList().GetEntryCount()); else { aSz.setHeight( mpImplLB->GetEntryHeight() ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits