include/vcl/toolkit/combobox.hxx | 33 ++ vcl/source/control/combobox.cxx | 576 ++++++++++++++++++--------------------- 2 files changed, 298 insertions(+), 311 deletions(-)
New commits: commit 737a07897e7414228d727fd3d16b3bd47ff226fa Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Fri May 10 16:55:49 2024 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Mon May 13 06:31:55 2024 +0200 vcl: Merge ComboBox and ComboBox::Impl This removes one level of indirection. `ComboBox::Impl` had originally been introduced in commit ece8699f8f22f6bae137c601bc29b83b75dc3bf3 Author: Michael Stahl <mst...@redhat.com> Date: Fri Jul 10 12:05:48 2015 +0200 vcl: pImplify ComboBox The boost::signal stuff is quite heavy (33 kloc), so try to hide it from the header. Change-Id: I87826ccfd2a151aff274ffa6b7159a988f751808 , but all of the boost usage in here has been replaced since then. Change-Id: Ia8fb5cb895800edae104857c7713fa65e509a3c2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167485 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/include/vcl/toolkit/combobox.hxx b/include/vcl/toolkit/combobox.hxx index 89565cac8652..9e676601f8a8 100644 --- a/include/vcl/toolkit/combobox.hxx +++ b/include/vcl/toolkit/combobox.hxx @@ -31,15 +31,44 @@ #define COMBOBOX_ENTRY_NOTFOUND (SAL_MAX_INT32) #define COMBOBOX_MAX_ENTRIES (SAL_MAX_INT32 - 1) +class ImplBtn; +class ImplListBox; class ImplListBoxWindow; +class ImplListBoxFloatingWindow; class UserDrawEvent; +struct ComboBoxBounds; /// A widget used to choose from a list of items and which has an entry. class VCL_DLLPUBLIC ComboBox : public Edit { private: - struct SAL_DLLPRIVATE Impl; - std::unique_ptr<Impl> m_pImpl; + VclPtr<Edit> m_pSubEdit; + VclPtr<ImplListBox> m_pImplLB; + VclPtr<ImplBtn> m_pBtn; + VclPtr<ImplListBoxFloatingWindow> m_pFloatWin; + sal_uInt16 m_nDDHeight; + sal_Unicode m_cMultiSep; + bool m_isDDAutoSize : 1; + bool m_isSyntheticModify : 1; + bool m_isKeyBoardModify : 1; + bool m_isMatchCase : 1; + sal_Int32 m_nMaxWidthChars; + sal_Int32 m_nWidthInChars; + Link<ComboBox&, void> m_SelectHdl; + + void ImplInitComboBoxData(); + void ImplUpdateFloatSelection(); + ComboBoxBounds calcComboBoxDropDownComponentBounds( + const Size &rOutSize, const Size &rBorderOutSize) const; + + DECL_LINK(ImplSelectHdl, LinkParamNone*, void); + DECL_LINK(ImplCancelHdl, LinkParamNone*, void); + DECL_LINK(ImplDoubleClickHdl, ImplListBoxWindow*, void); + DECL_LINK(ImplClickBtnHdl, void*, void); + DECL_LINK(ImplPopupModeEndHdl, FloatingWindow*, void); + DECL_LINK(ImplSelectionChangedHdl, sal_Int32, void); + DECL_LINK(ImplAutocompleteHdl, Edit&, void); + DECL_LINK(ImplListItemSelectHdl , LinkParamNone*, void); protected: using Window::ImplInit; diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 89a53c537d91..f4327ac77024 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -36,7 +36,6 @@ #include <tools/json_writer.hxx> #include <o3tl/string_view.hxx> -namespace { struct ComboBoxBounds { @@ -47,54 +46,6 @@ struct ComboBoxBounds Size aButtonSize; }; -} - -struct ComboBox::Impl -{ - ComboBox & m_rThis; - VclPtr<Edit> m_pSubEdit; - VclPtr<ImplListBox> m_pImplLB; - VclPtr<ImplBtn> m_pBtn; - VclPtr<ImplListBoxFloatingWindow> m_pFloatWin; - sal_uInt16 m_nDDHeight; - sal_Unicode m_cMultiSep; - bool m_isDDAutoSize : 1; - bool m_isSyntheticModify : 1; - bool m_isKeyBoardModify : 1; - bool m_isMatchCase : 1; - sal_Int32 m_nMaxWidthChars; - sal_Int32 m_nWidthInChars; - Link<ComboBox&,void> m_SelectHdl; - - explicit Impl(ComboBox & rThis) - : m_rThis(rThis) - , m_nDDHeight(0) - , m_cMultiSep(0) - , m_isDDAutoSize(false) - , m_isSyntheticModify(false) - , m_isKeyBoardModify(false) - , m_isMatchCase(false) - , m_nMaxWidthChars(0) - , m_nWidthInChars(-1) - { - } - - void ImplInitComboBoxData(); - void ImplUpdateFloatSelection(); - ComboBoxBounds calcComboBoxDropDownComponentBounds( - const Size &rOutSize, const Size &rBorderOutSize) const; - - DECL_LINK( ImplSelectHdl, LinkParamNone*, void ); - DECL_LINK( ImplCancelHdl, LinkParamNone*, void ); - DECL_LINK( ImplDoubleClickHdl, ImplListBoxWindow*, void ); - DECL_LINK( ImplClickBtnHdl, void*, void ); - DECL_LINK( ImplPopupModeEndHdl, FloatingWindow*, void ); - DECL_LINK( ImplSelectionChangedHdl, sal_Int32, void ); - DECL_LINK( ImplAutocompleteHdl, Edit&, void ); - DECL_LINK( ImplListItemSelectHdl , LinkParamNone*, void ); -}; - - static void lcl_GetSelectedEntries( ::std::set< sal_Int32 >& rSelectedPos, std::u16string_view rText, sal_Unicode cTokenSep, const ImplEntryList& rEntryList ) { if (rText.empty()) @@ -110,9 +61,16 @@ static void lcl_GetSelectedEntries( ::std::set< sal_Int32 >& rSelectedPos, std:: ComboBox::ComboBox(vcl::Window *const pParent, WinBits const nStyle) : Edit( WindowType::COMBOBOX ) - , m_pImpl(new Impl(*this)) -{ - m_pImpl->ImplInitComboBoxData(); + , m_nDDHeight(0) + , m_cMultiSep(0) + , m_isDDAutoSize(false) + , m_isSyntheticModify(false) + , m_isKeyBoardModify(false) + , m_isMatchCase(false) + , m_nMaxWidthChars(0) + , m_nWidthInChars(-1) +{ + ImplInitComboBoxData(); ImplInit( pParent, nStyle ); SetWidthInChars(-1); } @@ -124,18 +82,18 @@ ComboBox::~ComboBox() void ComboBox::dispose() { - m_pImpl->m_pSubEdit.disposeAndClear(); + m_pSubEdit.disposeAndClear(); - VclPtr< ImplListBox > pImplLB = m_pImpl->m_pImplLB; - m_pImpl->m_pImplLB.clear(); + VclPtr< ImplListBox > pImplLB = m_pImplLB; + m_pImplLB.clear(); pImplLB.disposeAndClear(); - m_pImpl->m_pFloatWin.disposeAndClear(); - m_pImpl->m_pBtn.disposeAndClear(); + m_pFloatWin.disposeAndClear(); + m_pBtn.disposeAndClear(); Edit::dispose(); } -void ComboBox::Impl::ImplInitComboBoxData() +void ComboBox::ImplInitComboBoxData() { m_pSubEdit.disposeAndClear(); m_pBtn = nullptr; @@ -156,9 +114,9 @@ void ComboBox::ImplCalcEditHeight() { sal_Int32 nLeft, nTop, nRight, nBottom; GetBorder( nLeft, nTop, nRight, nBottom ); - m_pImpl->m_nDDHeight = static_cast<sal_uInt16>(m_pImpl->m_pSubEdit->GetTextHeight() + nTop + nBottom + 4); + m_nDDHeight = static_cast<sal_uInt16>(m_pSubEdit->GetTextHeight() + nTop + nBottom + 4); if ( !IsDropDownBox() ) - m_pImpl->m_nDDHeight += 4; + m_nDDHeight += 4; tools::Rectangle aCtrlRegion( Point( 0, 0 ), Size( 10, 10 ) ); tools::Rectangle aBoundRegion, aContentRegion; @@ -171,8 +129,8 @@ void ComboBox::ImplCalcEditHeight() aBoundRegion, aContentRegion ) ) { const tools::Long nNCHeight = aBoundRegion.GetHeight(); - if (m_pImpl->m_nDDHeight < nNCHeight) - m_pImpl->m_nDDHeight = sal::static_int_cast<sal_uInt16>(nNCHeight); + if (m_nDDHeight < nNCHeight) + m_nDDHeight = sal::static_int_cast<sal_uInt16>(nNCHeight); } } @@ -198,16 +156,16 @@ void ComboBox::ImplInit( vcl::Window* pParent, WinBits nStyle ) WinBits nListStyle = nStyle; if( nStyle & WB_DROPDOWN ) { - m_pImpl->m_pFloatWin = VclPtr<ImplListBoxFloatingWindow>::Create( this ); + m_pFloatWin = VclPtr<ImplListBoxFloatingWindow>::Create( this ); if (!IsNativeControlSupported(ControlType::Pushbutton, ControlPart::Focus)) - m_pImpl->m_pFloatWin->RequestDoubleBuffering(true); - m_pImpl->m_pFloatWin->SetAutoWidth( true ); - m_pImpl->m_pFloatWin->SetPopupModeEndHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplPopupModeEndHdl) ); + m_pFloatWin->RequestDoubleBuffering(true); + m_pFloatWin->SetAutoWidth( true ); + m_pFloatWin->SetPopupModeEndHdl(LINK(this, ComboBox, ImplPopupModeEndHdl)); - m_pImpl->m_pBtn = VclPtr<ImplBtn>::Create( this, WB_NOLIGHTBORDER | WB_RECTSTYLE ); - ImplInitDropDownButton( m_pImpl->m_pBtn ); - m_pImpl->m_pBtn->SetMBDownHdl( LINK( m_pImpl.get(), ComboBox::Impl, ImplClickBtnHdl ) ); - m_pImpl->m_pBtn->Show(); + m_pBtn = VclPtr<ImplBtn>::Create( this, WB_NOLIGHTBORDER | WB_RECTSTYLE ); + ImplInitDropDownButton( m_pBtn ); + m_pBtn->SetMBDownHdl(LINK(this, ComboBox, ImplClickBtnHdl)); + m_pBtn->Show(); nEditStyle |= WB_NOBORDER; nListStyle &= ~WB_BORDER; @@ -223,27 +181,27 @@ void ComboBox::ImplInit( vcl::Window* pParent, WinBits nStyle ) } } - m_pImpl->m_pSubEdit.set( VclPtr<Edit>::Create( this, nEditStyle ) ); - m_pImpl->m_pSubEdit->EnableRTL( false ); - SetSubEdit( m_pImpl->m_pSubEdit ); - m_pImpl->m_pSubEdit->SetPosPixel( Point() ); + m_pSubEdit.set( VclPtr<Edit>::Create( this, nEditStyle ) ); + m_pSubEdit->EnableRTL( false ); + SetSubEdit( m_pSubEdit ); + m_pSubEdit->SetPosPixel( Point() ); EnableAutocomplete( true ); - m_pImpl->m_pSubEdit->Show(); + m_pSubEdit->Show(); vcl::Window* pLBParent = this; - if (m_pImpl->m_pFloatWin) - pLBParent = m_pImpl->m_pFloatWin; - m_pImpl->m_pImplLB = VclPtr<ImplListBox>::Create( pLBParent, nListStyle|WB_SIMPLEMODE|WB_AUTOHSCROLL ); - m_pImpl->m_pImplLB->SetPosPixel( Point() ); - m_pImpl->m_pImplLB->SetSelectHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplSelectHdl) ); - m_pImpl->m_pImplLB->SetCancelHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplCancelHdl) ); - m_pImpl->m_pImplLB->SetDoubleClickHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplDoubleClickHdl) ); - m_pImpl->m_pImplLB->SetSelectionChangedHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplSelectionChangedHdl) ); - m_pImpl->m_pImplLB->SetListItemSelectHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplListItemSelectHdl) ); - m_pImpl->m_pImplLB->Show(); - - if (m_pImpl->m_pFloatWin) - m_pImpl->m_pFloatWin->SetImplListBox( m_pImpl->m_pImplLB ); + if (m_pFloatWin) + pLBParent = m_pFloatWin; + m_pImplLB = VclPtr<ImplListBox>::Create( pLBParent, nListStyle|WB_SIMPLEMODE|WB_AUTOHSCROLL ); + m_pImplLB->SetPosPixel( Point() ); + m_pImplLB->SetSelectHdl(LINK(this, ComboBox, ImplSelectHdl)); + m_pImplLB->SetCancelHdl( LINK(this, ComboBox, ImplCancelHdl)); + m_pImplLB->SetDoubleClickHdl(LINK(this, ComboBox, ImplDoubleClickHdl)); + m_pImplLB->SetSelectionChangedHdl(LINK(this, ComboBox, ImplSelectionChangedHdl)); + m_pImplLB->SetListItemSelectHdl(LINK(this, ComboBox, ImplListItemSelectHdl)); + m_pImplLB->Show(); + + if (m_pFloatWin) + m_pFloatWin->SetImplListBox(m_pImplLB); else GetMainWindow()->AllowGrabFocus( true ); @@ -263,38 +221,38 @@ WinBits ComboBox::ImplInitStyle( WinBits nStyle ) void ComboBox::EnableAutocomplete( bool bEnable, bool bMatchCase ) { - m_pImpl->m_isMatchCase = bMatchCase; + m_isMatchCase = bMatchCase; if ( bEnable ) - m_pImpl->m_pSubEdit->SetAutocompleteHdl( LINK(m_pImpl.get(), ComboBox::Impl, ImplAutocompleteHdl) ); + m_pSubEdit->SetAutocompleteHdl(LINK(this, ComboBox, ImplAutocompleteHdl)); else - m_pImpl->m_pSubEdit->SetAutocompleteHdl( Link<Edit&,void>() ); + m_pSubEdit->SetAutocompleteHdl( Link<Edit&,void>() ); } bool ComboBox::IsAutocompleteEnabled() const { - return m_pImpl->m_pSubEdit->GetAutocompleteHdl().IsSet(); + return m_pSubEdit->GetAutocompleteHdl().IsSet(); } -IMPL_LINK_NOARG(ComboBox::Impl, ImplClickBtnHdl, void*, void) +IMPL_LINK_NOARG(ComboBox, ImplClickBtnHdl, void*, void) { - m_rThis.CallEventListeners( VclEventId::DropdownPreOpen ); + CallEventListeners( VclEventId::DropdownPreOpen ); m_pSubEdit->GrabFocus(); if (!m_pImplLB->GetEntryList().GetMRUCount()) ImplUpdateFloatSelection(); else m_pImplLB->SelectEntry( 0 , true ); m_pBtn->SetPressed( true ); - m_rThis.SetSelection( Selection( 0, SELECTION_MAX ) ); + SetSelection( Selection( 0, SELECTION_MAX ) ); m_pFloatWin->StartFloat( true ); - m_rThis.CallEventListeners( VclEventId::DropdownOpen ); + CallEventListeners( VclEventId::DropdownOpen ); - m_rThis.ImplClearLayoutData(); + ImplClearLayoutData(); if (m_pImplLB) m_pImplLB->GetMainWindow()->ImplClearLayoutData(); } -IMPL_LINK_NOARG(ComboBox::Impl, ImplPopupModeEndHdl, FloatingWindow*, void) +IMPL_LINK_NOARG(ComboBox, ImplPopupModeEndHdl, FloatingWindow*, void) { if (m_pFloatWin->IsPopupModeCanceled()) { @@ -304,20 +262,20 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplPopupModeEndHdl, FloatingWindow*, void) m_pImplLB->SelectEntry(m_pFloatWin->GetPopupModeStartSaveSelection(), true); bool bTravelSelect = m_pImplLB->IsTravelSelect(); m_pImplLB->SetTravelSelect( true ); - m_rThis.Select(); + Select(); m_pImplLB->SetTravelSelect( bTravelSelect ); } } - m_rThis.ImplClearLayoutData(); + ImplClearLayoutData(); if (m_pImplLB) m_pImplLB->GetMainWindow()->ImplClearLayoutData(); m_pBtn->SetPressed( false ); - m_rThis.CallEventListeners( VclEventId::DropdownClose ); + CallEventListeners( VclEventId::DropdownClose ); } -IMPL_LINK(ComboBox::Impl, ImplAutocompleteHdl, Edit&, rEdit, void) +IMPL_LINK(ComboBox, ImplAutocompleteHdl, Edit&, rEdit, void) { Selection aSel = rEdit.GetSelection(); @@ -355,14 +313,14 @@ IMPL_LINK(ComboBox::Impl, ImplAutocompleteHdl, Edit&, rEdit, void) } } -IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) +IMPL_LINK_NOARG(ComboBox, ImplSelectHdl, LinkParamNone*, void) { - bool bPopup = m_rThis.IsInDropDown(); + bool bPopup = IsInDropDown(); bool bCallSelect = false; if (m_pImplLB->IsSelectionChanged() || bPopup) { OUString aText; - if (m_rThis.IsMultiSelectionEnabled()) + if (IsMultiSelectionEnabled()) { aText = m_pSubEdit->GetText(); @@ -417,7 +375,7 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) m_pSubEdit->SetText( aText ); Selection aNewSelection( 0, aText.getLength() ); - if (m_rThis.IsMultiSelectionEnabled()) + if (IsMultiSelectionEnabled()) aNewSelection.Min() = aText.getLength(); m_pSubEdit->SetSelection( aNewSelection ); @@ -425,11 +383,11 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) } // #84652# Call GrabFocus and EndPopupMode before calling Select/Modify, but after changing the text - bool bMenuSelect = bPopup && !m_pImplLB->IsTravelSelect() && (!m_rThis.IsMultiSelectionEnabled() || !m_pImplLB->GetSelectModifier()); + bool bMenuSelect = bPopup && !m_pImplLB->IsTravelSelect() && (!IsMultiSelectionEnabled() || !m_pImplLB->GetSelectModifier()); if (bMenuSelect) { m_pFloatWin->EndPopupMode(); - m_rThis.GrabFocus(); + GrabFocus(); } if ( bCallSelect ) @@ -437,35 +395,35 @@ IMPL_LINK_NOARG(ComboBox::Impl, ImplSelectHdl, LinkParamNone*, void) m_isKeyBoardModify = !bMenuSelect; m_pSubEdit->SetModifyFlag(); m_isSyntheticModify = true; - m_rThis.Modify(); + Modify(); m_isSyntheticModify = false; - m_rThis.Select(); + Select(); m_isKeyBoardModify = false; } } bool ComboBox::IsSyntheticModify() const { - return m_pImpl->m_isSyntheticModify; + return m_isSyntheticModify; } bool ComboBox::IsModifyByKeyboard() const { - return m_pImpl->m_isKeyBoardModify; + return m_isKeyBoardModify; } -IMPL_LINK_NOARG( ComboBox::Impl, ImplListItemSelectHdl, LinkParamNone*, void ) +IMPL_LINK_NOARG(ComboBox, ImplListItemSelectHdl, LinkParamNone*, void) { - m_rThis.CallEventListeners( VclEventId::DropdownSelect ); + CallEventListeners(VclEventId::DropdownSelect); } -IMPL_LINK_NOARG(ComboBox::Impl, ImplCancelHdl, LinkParamNone*, void) +IMPL_LINK_NOARG(ComboBox, ImplCancelHdl, LinkParamNone*, void) { - if (m_rThis.IsInDropDown()) + if (IsInDropDown()) m_pFloatWin->EndPopupMode(); } -IMPL_LINK( ComboBox::Impl, ImplSelectionChangedHdl, sal_Int32, nChanged, void ) +IMPL_LINK( ComboBox, ImplSelectionChangedHdl, sal_Int32, nChanged, void) { if (!m_pImplLB->IsTrackingSelect()) { @@ -474,9 +432,9 @@ IMPL_LINK( ComboBox::Impl, ImplSelectionChangedHdl, sal_Int32, nChanged, void ) } } -IMPL_LINK_NOARG(ComboBox::Impl, ImplDoubleClickHdl, ImplListBoxWindow*, void) +IMPL_LINK_NOARG(ComboBox, ImplDoubleClickHdl, ImplListBoxWindow*, void) { - m_rThis.DoubleClick(); + DoubleClick(); } void ComboBox::ToggleDropDown() @@ -484,26 +442,26 @@ void ComboBox::ToggleDropDown() if( !IsDropDownBox() ) return; - if (m_pImpl->m_pFloatWin->IsInPopupMode()) - m_pImpl->m_pFloatWin->EndPopupMode(); + if (m_pFloatWin->IsInPopupMode()) + m_pFloatWin->EndPopupMode(); else { - m_pImpl->m_pSubEdit->GrabFocus(); - if (!m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()) - m_pImpl->ImplUpdateFloatSelection(); + m_pSubEdit->GrabFocus(); + if (!m_pImplLB->GetEntryList().GetMRUCount()) + ImplUpdateFloatSelection(); else - m_pImpl->m_pImplLB->SelectEntry( 0 , true ); + m_pImplLB->SelectEntry( 0 , true ); CallEventListeners( VclEventId::DropdownPreOpen ); - m_pImpl->m_pBtn->SetPressed( true ); + m_pBtn->SetPressed( true ); SetSelection( Selection( 0, SELECTION_MAX ) ); - m_pImpl->m_pFloatWin->StartFloat( true ); + m_pFloatWin->StartFloat(true); CallEventListeners( VclEventId::DropdownOpen ); } } void ComboBox::Select() { - ImplCallEventListenersAndHandler( VclEventId::ComboboxSelect, [this] () { m_pImpl->m_SelectHdl.Call(*this); } ); + ImplCallEventListenersAndHandler( VclEventId::ComboboxSelect, [this] () { m_SelectHdl.Call(*this); } ); } void ComboBox::DoubleClick() @@ -511,29 +469,29 @@ void ComboBox::DoubleClick() ImplCallEventListenersAndHandler( VclEventId::ComboboxDoubleClick, [] () {} ); } -bool ComboBox::IsAutoSizeEnabled() const { return m_pImpl->m_isDDAutoSize; } +bool ComboBox::IsAutoSizeEnabled() const { return m_isDDAutoSize; } void ComboBox::EnableAutoSize( bool bAuto ) { - m_pImpl->m_isDDAutoSize = bAuto; - if (m_pImpl->m_pFloatWin) + m_isDDAutoSize = bAuto; + if (m_pFloatWin) { - if (bAuto && !m_pImpl->m_pFloatWin->GetDropDownLineCount()) + if (bAuto && !m_pFloatWin->GetDropDownLineCount()) { // Adapt to GetListBoxMaximumLineCount here; was on fixed number of five before AdaptDropDownLineCountToMaximum(); } else if ( !bAuto ) { - m_pImpl->m_pFloatWin->SetDropDownLineCount( 0 ); + m_pFloatWin->SetDropDownLineCount(0); } } } void ComboBox::SetDropDownLineCount( sal_uInt16 nLines ) { - if (m_pImpl->m_pFloatWin) - m_pImpl->m_pFloatWin->SetDropDownLineCount( nLines ); + if (m_pFloatWin) + m_pFloatWin->SetDropDownLineCount(nLines); } void ComboBox::AdaptDropDownLineCountToMaximum() @@ -549,8 +507,8 @@ void ComboBox::AdaptDropDownLineCountToMaximum() sal_uInt16 ComboBox::GetDropDownLineCount() const { sal_uInt16 nLines = 0; - if (m_pImpl->m_pFloatWin) - nLines = m_pImpl->m_pFloatWin->GetDropDownLineCount(); + if (m_pFloatWin) + nLines = m_pFloatWin->GetDropDownLineCount(); return nLines; } @@ -559,15 +517,15 @@ void ComboBox::setPosSizePixel( tools::Long nX, tools::Long nY, tools::Long nWid { if( IsDropDownBox() && ( nFlags & PosSizeFlags::Size ) ) { - Size aPrefSz = m_pImpl->m_pFloatWin->GetPrefSize(); - if ((nFlags & PosSizeFlags::Height) && (nHeight >= 2*m_pImpl->m_nDDHeight)) - aPrefSz.setHeight( nHeight-m_pImpl->m_nDDHeight ); + Size aPrefSz = m_pFloatWin->GetPrefSize(); + if ((nFlags & PosSizeFlags::Height) && (nHeight >= 2*m_nDDHeight)) + aPrefSz.setHeight( nHeight-m_nDDHeight ); if ( nFlags & PosSizeFlags::Width ) aPrefSz.setWidth( nWidth ); - m_pImpl->m_pFloatWin->SetPrefSize( aPrefSz ); + m_pFloatWin->SetPrefSize(aPrefSz); if (IsAutoSizeEnabled()) - nHeight = m_pImpl->m_nDDHeight; + nHeight = m_nDDHeight; } Edit::setPosSizePixel( nX, nY, nWidth, nHeight, nFlags ); @@ -577,44 +535,44 @@ void ComboBox::Resize() { Control::Resize(); - if (m_pImpl->m_pSubEdit) + if (m_pSubEdit) { Size aOutSz = GetOutputSizePixel(); if( IsDropDownBox() ) { - ComboBoxBounds aBounds(m_pImpl->calcComboBoxDropDownComponentBounds(aOutSz, + ComboBoxBounds aBounds(calcComboBoxDropDownComponentBounds(aOutSz, GetWindow(GetWindowType::Border)->GetOutputSizePixel())); - m_pImpl->m_pSubEdit->SetPosSizePixel(aBounds.aSubEditPos, aBounds.aSubEditSize); - m_pImpl->m_pBtn->SetPosSizePixel(aBounds.aButtonPos, aBounds.aButtonSize); + m_pSubEdit->SetPosSizePixel(aBounds.aSubEditPos, aBounds.aSubEditSize); + m_pBtn->SetPosSizePixel(aBounds.aButtonPos, aBounds.aButtonSize); } else { - m_pImpl->m_pSubEdit->SetSizePixel(Size(aOutSz.Width(), m_pImpl->m_nDDHeight)); - m_pImpl->m_pImplLB->setPosSizePixel(0, m_pImpl->m_nDDHeight, - aOutSz.Width(), aOutSz.Height() - m_pImpl->m_nDDHeight); + m_pSubEdit->SetSizePixel(Size(aOutSz.Width(), m_nDDHeight)); + m_pImplLB->setPosSizePixel(0, m_nDDHeight, + aOutSz.Width(), aOutSz.Height() - m_nDDHeight); if ( !GetText().isEmpty() ) - m_pImpl->ImplUpdateFloatSelection(); + ImplUpdateFloatSelection(); } } // adjust the size of the FloatingWindow even when invisible // as KEY_PGUP/DOWN is being processed... - if (m_pImpl->m_pFloatWin) - m_pImpl->m_pFloatWin->SetSizePixel(m_pImpl->m_pFloatWin->CalcFloatSize()); + if (m_pFloatWin) + m_pFloatWin->SetSizePixel(m_pFloatWin->CalcFloatSize()); } -bool ComboBox::IsDropDownBox() const { return m_pImpl->m_pFloatWin != nullptr; } +bool ComboBox::IsDropDownBox() const { return m_pFloatWin != nullptr; } void ComboBox::FillLayoutData() const { mxLayoutData.emplace(); - AppendLayoutData( *m_pImpl->m_pSubEdit ); - m_pImpl->m_pSubEdit->SetLayoutDataParent( this ); + AppendLayoutData( *m_pSubEdit ); + m_pSubEdit->SetLayoutDataParent( this ); ImplListBoxWindow* rMainWindow = GetMainWindow(); - if (m_pImpl->m_pFloatWin) + if (m_pFloatWin) { // dropdown mode - if (m_pImpl->m_pFloatWin->IsReallyVisible()) + if (m_pFloatWin->IsReallyVisible()) { AppendLayoutData( *rMainWindow ); rMainWindow->SetLayoutDataParent( this ); @@ -633,45 +591,45 @@ void ComboBox::StateChanged( StateChangedType nType ) if ( nType == StateChangedType::ReadOnly ) { - m_pImpl->m_pImplLB->SetReadOnly( IsReadOnly() ); - if (m_pImpl->m_pBtn) - m_pImpl->m_pBtn->Enable( IsEnabled() && !IsReadOnly() ); + m_pImplLB->SetReadOnly( IsReadOnly() ); + if (m_pBtn) + m_pBtn->Enable( IsEnabled() && !IsReadOnly() ); } else if ( nType == StateChangedType::Enable ) { - m_pImpl->m_pSubEdit->Enable( IsEnabled() ); - m_pImpl->m_pImplLB->Enable( IsEnabled() && !IsReadOnly() ); - if (m_pImpl->m_pBtn) - m_pImpl->m_pBtn->Enable( IsEnabled() && !IsReadOnly() ); + m_pSubEdit->Enable( IsEnabled() ); + m_pImplLB->Enable( IsEnabled() && !IsReadOnly() ); + if (m_pBtn) + m_pBtn->Enable( IsEnabled() && !IsReadOnly() ); Invalidate(); } else if( nType == StateChangedType::UpdateMode ) { - m_pImpl->m_pImplLB->SetUpdateMode( IsUpdateMode() ); + m_pImplLB->SetUpdateMode( IsUpdateMode() ); } else if ( nType == StateChangedType::Zoom ) { - m_pImpl->m_pImplLB->SetZoom( GetZoom() ); - m_pImpl->m_pSubEdit->SetZoom( GetZoom() ); + m_pImplLB->SetZoom( GetZoom() ); + m_pSubEdit->SetZoom( GetZoom() ); ImplCalcEditHeight(); Resize(); } else if ( nType == StateChangedType::ControlFont ) { - m_pImpl->m_pImplLB->SetControlFont( GetControlFont() ); - m_pImpl->m_pSubEdit->SetControlFont( GetControlFont() ); + m_pImplLB->SetControlFont( GetControlFont() ); + m_pSubEdit->SetControlFont( GetControlFont() ); ImplCalcEditHeight(); Resize(); } else if ( nType == StateChangedType::ControlForeground ) { - m_pImpl->m_pImplLB->SetControlForeground( GetControlForeground() ); - m_pImpl->m_pSubEdit->SetControlForeground( GetControlForeground() ); + m_pImplLB->SetControlForeground( GetControlForeground() ); + m_pSubEdit->SetControlForeground( GetControlForeground() ); } else if ( nType == StateChangedType::ControlBackground ) { - m_pImpl->m_pImplLB->SetControlBackground( GetControlBackground() ); - m_pImpl->m_pSubEdit->SetControlBackground( GetControlBackground() ); + m_pImplLB->SetControlBackground( GetControlBackground() ); + m_pSubEdit->SetControlBackground( GetControlBackground() ); } else if ( nType == StateChangedType::Style ) { @@ -680,13 +638,13 @@ void ComboBox::StateChanged( StateChangedType nType ) } else if( nType == StateChangedType::Mirroring ) { - if (m_pImpl->m_pBtn) + if (m_pBtn) { - m_pImpl->m_pBtn->EnableRTL( IsRTLEnabled() ); - ImplInitDropDownButton( m_pImpl->m_pBtn ); + m_pBtn->EnableRTL( IsRTLEnabled() ); + ImplInitDropDownButton( m_pBtn ); } - m_pImpl->m_pSubEdit->CompatStateChanged( StateChangedType::Mirroring ); - m_pImpl->m_pImplLB->EnableRTL( IsRTLEnabled() ); + m_pSubEdit->CompatStateChanged( StateChangedType::Mirroring ); + m_pImplLB->EnableRTL( IsRTLEnabled() ); Resize(); } } @@ -701,13 +659,13 @@ void ComboBox::DataChanged( const DataChangedEvent& rDCEvt ) (rDCEvt.GetFlags() & AllSettingsFlags::STYLE))) ) return; - if (m_pImpl->m_pBtn) + if (m_pBtn) { - m_pImpl->m_pBtn->GetOutDev()->SetSettings( GetSettings() ); - ImplInitDropDownButton( m_pImpl->m_pBtn ); + m_pBtn->GetOutDev()->SetSettings( GetSettings() ); + ImplInitDropDownButton( m_pBtn ); } Resize(); - m_pImpl->m_pImplLB->Resize(); // not called by ComboBox::Resize() if ImplLB is unchanged + m_pImplLB->Resize(); // not called by ComboBox::Resize() if ImplLB is unchanged SetBackground(); // due to a hack in Window::UpdateSettings the background must be reset // otherwise it will overpaint NWF drawn comboboxes @@ -717,7 +675,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt ) { bool bDone = false; if ((rNEvt.GetType() == NotifyEventType::KEYINPUT) - && (rNEvt.GetWindow() == m_pImpl->m_pSubEdit) + && (rNEvt.GetWindow() == m_pSubEdit) && !IsReadOnly()) { KeyEvent aKeyEvt = *rNEvt.GetKeyEvent(); @@ -729,55 +687,55 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt ) case KEY_PAGEUP: case KEY_PAGEDOWN: { - m_pImpl->ImplUpdateFloatSelection(); - if ((nKeyCode == KEY_DOWN) && m_pImpl->m_pFloatWin - && !m_pImpl->m_pFloatWin->IsInPopupMode() + ImplUpdateFloatSelection(); + if ((nKeyCode == KEY_DOWN) && m_pFloatWin + && !m_pFloatWin->IsInPopupMode() && aKeyEvt.GetKeyCode().IsMod2()) { CallEventListeners( VclEventId::DropdownPreOpen ); - m_pImpl->m_pBtn->SetPressed( true ); - if (m_pImpl->m_pImplLB->GetEntryList().GetMRUCount()) - m_pImpl->m_pImplLB->SelectEntry( 0 , true ); + m_pBtn->SetPressed( true ); + if (m_pImplLB->GetEntryList().GetMRUCount()) + m_pImplLB->SelectEntry( 0 , true ); SetSelection( Selection( 0, SELECTION_MAX ) ); - m_pImpl->m_pFloatWin->StartFloat( false ); + m_pFloatWin->StartFloat(false); CallEventListeners( VclEventId::DropdownOpen ); bDone = true; } - else if ((nKeyCode == KEY_UP) && m_pImpl->m_pFloatWin - && m_pImpl->m_pFloatWin->IsInPopupMode() + else if ((nKeyCode == KEY_UP) && m_pFloatWin + && m_pFloatWin->IsInPopupMode() && aKeyEvt.GetKeyCode().IsMod2()) { - m_pImpl->m_pFloatWin->EndPopupMode(); + m_pFloatWin->EndPopupMode(); bDone = true; } else { - bDone = m_pImpl->m_pImplLB->ProcessKeyInput( aKeyEvt ); + bDone = m_pImplLB->ProcessKeyInput( aKeyEvt ); } } break; case KEY_RETURN: { - if ((rNEvt.GetWindow() == m_pImpl->m_pSubEdit) && IsInDropDown()) + if ((rNEvt.GetWindow() == m_pSubEdit) && IsInDropDown()) { - m_pImpl->m_pImplLB->ProcessKeyInput( aKeyEvt ); + m_pImplLB->ProcessKeyInput( aKeyEvt ); bDone = true; } } break; } } - else if ((rNEvt.GetType() == NotifyEventType::LOSEFOCUS) && m_pImpl->m_pFloatWin) + else if ((rNEvt.GetType() == NotifyEventType::LOSEFOCUS) && m_pFloatWin) { - if (m_pImpl->m_pFloatWin->HasChildPathFocus()) - m_pImpl->m_pSubEdit->GrabFocus(); - else if (m_pImpl->m_pFloatWin->IsInPopupMode() && !HasChildPathFocus(true)) - m_pImpl->m_pFloatWin->EndPopupMode(); + if (m_pFloatWin->HasChildPathFocus()) + m_pSubEdit->GrabFocus(); + else if (m_pFloatWin->IsInPopupMode() && !HasChildPathFocus(true)) + m_pFloatWin->EndPopupMode(); } else if( (rNEvt.GetType() == NotifyEventType::COMMAND) && (rNEvt.GetCommandEvent()->GetCommand() == CommandEventId::Wheel) && - (rNEvt.GetWindow() == m_pImpl->m_pSubEdit) ) + (rNEvt.GetWindow() == m_pSubEdit) ) { MouseWheelBehaviour nWheelBehavior( GetSettings().GetMouseSettings().GetWheelBehavior() ); if ( ( nWheelBehavior == MouseWheelBehaviour::ALWAYS ) @@ -786,7 +744,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt ) ) ) { - bDone = m_pImpl->m_pImplLB->HandleWheelAsCursorTravel(*rNEvt.GetCommandEvent(), *this); + bDone = m_pImplLB->HandleWheelAsCursorTravel(*rNEvt.GetCommandEvent(), *this); } else { @@ -796,7 +754,7 @@ bool ComboBox::EventNotify( NotifyEvent& rNEvt ) else if ((rNEvt.GetType() == NotifyEventType::MOUSEBUTTONDOWN) && (rNEvt.GetWindow() == GetMainWindow())) { - m_pImpl->m_pSubEdit->GrabFocus(); + m_pSubEdit->GrabFocus(); } return bDone || Edit::EventNotify( rNEvt ); @@ -807,7 +765,7 @@ void ComboBox::SetText( const OUString& rStr ) CallEventListeners( VclEventId::ComboboxSetText ); Edit::SetText( rStr ); - m_pImpl->ImplUpdateFloatSelection(); + ImplUpdateFloatSelection(); } void ComboBox::SetText( const OUString& rStr, const Selection& rNewSelection ) @@ -815,25 +773,25 @@ void ComboBox::SetText( const OUString& rStr, const Selection& rNewSelection ) CallEventListeners( VclEventId::ComboboxSetText ); Edit::SetText( rStr, rNewSelection ); - m_pImpl->ImplUpdateFloatSelection(); + ImplUpdateFloatSelection(); } void ComboBox::Modify() { - if (!m_pImpl->m_isSyntheticModify) - m_pImpl->ImplUpdateFloatSelection(); + if (!m_isSyntheticModify) + ImplUpdateFloatSelection(); Edit::Modify(); } -void ComboBox::Impl::ImplUpdateFloatSelection() +void ComboBox::ImplUpdateFloatSelection() { if (!m_pImplLB || !m_pSubEdit) return; // move text in the ListBox into the visible region m_pImplLB->SetCallSelectionChangedHdl( false ); - if (!m_rThis.IsMultiSelectionEnabled()) + if (!IsMultiSelectionEnabled()) { OUString aSearchStr( m_pSubEdit->GetText() ); sal_Int32 nSelect = LISTBOX_ENTRY_NOTFOUND; @@ -881,20 +839,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_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_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_pImplLB->InsertEntry( nRealPos, rStr ); + nRealPos -= m_pImplLB->GetEntryList().GetMRUCount(); CallEventListeners( VclEventId::ComboboxItemAdded, reinterpret_cast<void*>(static_cast<sal_IntPtr>(nRealPos)) ); return nRealPos; } @@ -902,95 +860,95 @@ 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_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_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_pImplLB->InsertEntry( nRealPos, rStr, rImage ); + nRealPos -= m_pImplLB->GetEntryList().GetMRUCount(); CallEventListeners( VclEventId::ComboboxItemAdded, reinterpret_cast<void*>(static_cast<sal_IntPtr>(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_pImplLB->GetEntryList().GetMRUCount(); assert(nPos >= 0 && nPos <= COMBOBOX_MAX_ENTRIES - nMRUCount); - m_pImpl->m_pImplLB->RemoveEntry( nPos + nMRUCount ); + m_pImplLB->RemoveEntry( nPos + nMRUCount ); CallEventListeners( VclEventId::ComboboxItemRemoved, reinterpret_cast<void*>(static_cast<sal_IntPtr>(nPos)) ); } void ComboBox::Clear() { - if (!m_pImpl->m_pImplLB) + if (!m_pImplLB) return; - m_pImpl->m_pImplLB->Clear(); + m_pImplLB->Clear(); CallEventListeners( VclEventId::ComboboxItemRemoved, reinterpret_cast<void*>(sal_IntPtr(-1)) ); } 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_pImplLB->GetEntryList().HasEntryImage(nPos)) + return 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_pImplLB->GetEntryList().FindEntry( rStr ); if ( nPos != LISTBOX_ENTRY_NOTFOUND ) - nPos -= m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); + nPos -= 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_pImplLB->GetEntryList().GetMRUCount(); if (nPos < 0 || nPos > COMBOBOX_MAX_ENTRIES - nMRUCount) return OUString(); - return m_pImpl->m_pImplLB->GetEntryList().GetEntryText( nPos + nMRUCount ); + return m_pImplLB->GetEntryList().GetEntryText( nPos + nMRUCount ); } sal_Int32 ComboBox::GetEntryCount() const { - if (!m_pImpl->m_pImplLB) + if (!m_pImplLB) return 0; - return m_pImpl->m_pImplLB->GetEntryList().GetEntryCount() - m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(); + return m_pImplLB->GetEntryList().GetEntryCount() - m_pImplLB->GetEntryList().GetMRUCount(); } bool ComboBox::IsTravelSelect() const { - return m_pImpl->m_pImplLB->IsTravelSelect(); + return m_pImplLB->IsTravelSelect(); } bool ComboBox::IsInDropDown() const { // when the dropdown is dismissed, first mbInPopupMode is set to false, and on the next event iteration then // mbPopupMode is set to false - return m_pImpl->m_pFloatWin && m_pImpl->m_pFloatWin->IsInPopupMode() && m_pImpl->m_pFloatWin->ImplIsInPrivatePopupMode(); + return m_pFloatWin && m_pFloatWin->IsInPopupMode() && m_pFloatWin->ImplIsInPrivatePopupMode(); } bool ComboBox::IsMultiSelectionEnabled() const { - return m_pImpl->m_pImplLB->IsMultiSelectionEnabled(); + return m_pImplLB->IsMultiSelectionEnabled(); } -void ComboBox::SetSelectHdl(const Link<ComboBox&,void>& rLink) { m_pImpl->m_SelectHdl = rLink; } +void ComboBox::SetSelectHdl(const Link<ComboBox&,void>& rLink) { m_SelectHdl = rLink; } void ComboBox::SetEntryActivateHdl(const Link<Edit&,bool>& rLink) { - if (!m_pImpl->m_pSubEdit) + if (!m_pSubEdit) return; - m_pImpl->m_pSubEdit->SetActivateHdl(rLink); + m_pSubEdit->SetActivateHdl(rLink); } Size ComboBox::GetOptimalSize() const @@ -1024,34 +982,34 @@ Size ComboBox::CalcMinimumSize() const { Size aSz; - if (!m_pImpl->m_pImplLB) + if (!m_pImplLB) return aSz; if (!IsDropDownBox()) { - aSz = m_pImpl->m_pImplLB->CalcSize( m_pImpl->m_pImplLB->GetEntryList().GetEntryCount() ); - aSz.AdjustHeight(m_pImpl->m_nDDHeight ); + aSz = m_pImplLB->CalcSize( m_pImplLB->GetEntryList().GetEntryCount() ); + aSz.AdjustHeight(m_nDDHeight ); } else { aSz.setHeight( Edit::CalcMinimumSizeForText(GetText()).Height() ); - if (m_pImpl->m_nWidthInChars!= -1) - aSz.setWidth(m_pImpl->m_nWidthInChars * approximate_digit_width()); + if (m_nWidthInChars!= -1) + aSz.setWidth(m_nWidthInChars * approximate_digit_width()); else - aSz.setWidth(m_pImpl->m_pImplLB->GetMaxEntryWidth()); + aSz.setWidth(m_pImplLB->GetMaxEntryWidth()); } - if (m_pImpl->m_nMaxWidthChars != -1) + if (m_nMaxWidthChars != -1) { - tools::Long nMaxWidth = m_pImpl->m_nMaxWidthChars * approximate_char_width(); + tools::Long nMaxWidth = m_nMaxWidthChars * approximate_char_width(); aSz.setWidth( std::min(aSz.Width(), nMaxWidth) ); } if (IsDropDownBox()) aSz.AdjustWidth(getMaxWidthScrollBarAndDownButton() ); - ComboBoxBounds aBounds(m_pImpl->calcComboBoxDropDownComponentBounds( + ComboBoxBounds aBounds(calcComboBoxDropDownComponentBounds( Size(0xFFFF, 0xFFFF), Size(0xFFFF, 0xFFFF))); aSz.AdjustWidth(aBounds.aSubEditPos.X()*2 ); @@ -1074,11 +1032,11 @@ Size ComboBox::CalcAdjustedSize( const Size& rPrefSize ) const if ( nLines < 1 ) nLines = 1; aSz.setHeight( nLines * nEntryHeight ); - aSz.AdjustHeight(m_pImpl->m_nDDHeight ); + aSz.AdjustHeight(m_nDDHeight ); } else { - aSz.setHeight( m_pImpl->m_nDDHeight ); + aSz.setHeight( m_nDDHeight ); } aSz.AdjustHeight(nTop+nBottom ); @@ -1096,9 +1054,9 @@ Size ComboBox::CalcBlockSize( sal_uInt16 nColumns, sal_uInt16 nLines ) const if ( nLines ) { if ( !IsDropDownBox() ) - aSz.setHeight( m_pImpl->m_pImplLB->CalcSize( nLines ).Height() + m_pImpl->m_nDDHeight ); + aSz.setHeight( m_pImplLB->CalcSize( nLines ).Height() + m_nDDHeight ); else - aSz.setHeight( m_pImpl->m_nDDHeight ); + aSz.setHeight( m_nDDHeight ); } else aSz.setHeight( aMinSz.Height() ); @@ -1128,7 +1086,7 @@ Size ComboBox::CalcBlockSize( sal_uInt16 nColumns, sal_uInt16 nLines ) const tools::Long ComboBox::GetDropDownEntryHeight() const { - return m_pImpl->m_pImplLB->GetEntryHeight(); + return m_pImplLB->GetEntryHeight(); } void ComboBox::GetMaxVisColumnsAndLines( sal_uInt16& rnCols, sal_uInt16& rnLines ) const @@ -1142,7 +1100,7 @@ void ComboBox::GetMaxVisColumnsAndLines( sal_uInt16& rnCols, sal_uInt16& rnLines } else { - Size aOutSz = m_pImpl->m_pSubEdit->GetOutputSizePixel(); + Size aOutSz = m_pSubEdit->GetOutputSizePixel(); rnCols = (nCharWidth > 0) ? static_cast<sal_uInt16>(aOutSz.Width()/nCharWidth) : 1; rnLines = 1; } @@ -1190,10 +1148,10 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& rPos, SystemTextColorFlags DrawTextFlags nTextStyle = DrawTextFlags::VCenter; // First, draw the edit part - Size aOrigSize(m_pImpl->m_pSubEdit->GetSizePixel()); - m_pImpl->m_pSubEdit->SetSizePixel(Size(aSize.Width(), nEditHeight)); - m_pImpl->m_pSubEdit->Draw( pDev, aPos, nFlags ); - m_pImpl->m_pSubEdit->SetSizePixel(aOrigSize); + Size aOrigSize(m_pSubEdit->GetSizePixel()); + m_pSubEdit->SetSizePixel(Size(aSize.Width(), nEditHeight)); + m_pSubEdit->Draw( pDev, aPos, nFlags ); + m_pSubEdit->SetSizePixel(aOrigSize); // Second, draw the listbox if ( GetStyle() & WB_CENTER ) @@ -1225,7 +1183,7 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& rPos, SystemTextColorFlags sal_Int32 nLines = static_cast<sal_Int32>( nTextHeight > 0 ? (aSize.Height()-nEditHeight)/nTextHeight : 1 ); if ( !nLines ) nLines = 1; - const sal_Int32 nTEntry = IsReallyVisible() ? m_pImpl->m_pImplLB->GetTopEntry() : 0; + const sal_Int32 nTEntry = IsReallyVisible() ? m_pImplLB->GetTopEntry() : 0; tools::Rectangle aTextRect( aPos, aSize ); @@ -1237,7 +1195,7 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& rPos, SystemTextColorFlags // 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_pImplLB->GetEntryList().GetEntryText( n+nTEntry ), nTextStyle ); aTextRect.AdjustTop(nTextHeight ); aTextRect.AdjustBottom(nTextHeight ); } @@ -1248,17 +1206,17 @@ void ComboBox::Draw( OutputDevice* pDev, const Point& rPos, SystemTextColorFlags // Call Edit::Draw after restoring the MapMode... if ( IsDropDownBox() ) { - Size aOrigSize(m_pImpl->m_pSubEdit->GetSizePixel()); - m_pImpl->m_pSubEdit->SetSizePixel(GetSizePixel()); - m_pImpl->m_pSubEdit->Draw( pDev, rPos, nFlags ); - m_pImpl->m_pSubEdit->SetSizePixel(aOrigSize); + Size aOrigSize(m_pSubEdit->GetSizePixel()); + m_pSubEdit->SetSizePixel(GetSizePixel()); + m_pSubEdit->Draw( pDev, rPos, nFlags ); + m_pSubEdit->SetSizePixel(aOrigSize); // DD-Button ? } } void ComboBox::SetUserDrawHdl(const Link<UserDrawEvent*, void>& rLink) { - m_pImpl->m_pImplLB->SetUserDrawHdl(rLink); + m_pImplLB->SetUserDrawHdl(rLink); } void ComboBox::SetUserItemSize( const Size& rSz ) @@ -1283,66 +1241,66 @@ void ComboBox::DrawEntry(const UserDrawEvent& rEvt) void ComboBox::AddSeparator( sal_Int32 n ) { - m_pImpl->m_pImplLB->AddSeparator( n ); + m_pImplLB->AddSeparator( n ); } void ComboBox::SetMRUEntries( std::u16string_view rEntries ) { - m_pImpl->m_pImplLB->SetMRUEntries( rEntries, ';' ); + m_pImplLB->SetMRUEntries( rEntries, ';' ); } OUString ComboBox::GetMRUEntries() const { - return m_pImpl->m_pImplLB ? m_pImpl->m_pImplLB->GetMRUEntries( ';' ) : OUString(); + return m_pImplLB ? m_pImplLB->GetMRUEntries( ';' ) : OUString(); } void ComboBox::SetMaxMRUCount( sal_Int32 n ) { - m_pImpl->m_pImplLB->SetMaxMRUCount( n ); + m_pImplLB->SetMaxMRUCount( n ); } sal_Int32 ComboBox::GetMaxMRUCount() const { - return m_pImpl->m_pImplLB ? m_pImpl->m_pImplLB->GetMaxMRUCount() : 0; + return m_pImplLB ? m_pImplLB->GetMaxMRUCount() : 0; } sal_uInt16 ComboBox::GetDisplayLineCount() const { - return m_pImpl->m_pImplLB ? m_pImpl->m_pImplLB->GetDisplayLineCount() : 0; + return m_pImplLB ? m_pImplLB->GetDisplayLineCount() : 0; } void ComboBox::SetEntryData( sal_Int32 nPos, void* pNewData ) { - m_pImpl->m_pImplLB->SetEntryData( nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(), pNewData ); + m_pImplLB->SetEntryData( nPos + 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_pImplLB->GetEntryList().GetEntryData( + nPos + 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()) + sal_Int32 nPos = GetEntryCount() ? m_pImplLB->GetTopEntry() : LISTBOX_ENTRY_NOTFOUND; + if (nPos < m_pImplLB->GetEntryList().GetMRUCount()) nPos = 0; return nPos; } tools::Rectangle ComboBox::GetDropDownPosSizePixel() const { - return m_pImpl->m_pFloatWin - ? m_pImpl->m_pFloatWin->GetWindowExtentsRelative(*this) + return m_pFloatWin + ? m_pFloatWin->GetWindowExtentsRelative(*this) : tools::Rectangle(); } const Wallpaper& ComboBox::GetDisplayBackground() const { - if (!m_pImpl->m_pSubEdit->IsBackground()) + if (!m_pSubEdit->IsBackground()) return Control::GetDisplayBackground(); - const Wallpaper& rBack = m_pImpl->m_pSubEdit->GetBackground(); + const Wallpaper& rBack = m_pSubEdit->GetBackground(); if( ! rBack.IsBitmap() && ! rBack.IsGradient() && rBack == Wallpaper(COL_TRANSPARENT) @@ -1353,38 +1311,38 @@ const Wallpaper& ComboBox::GetDisplayBackground() const sal_Int32 ComboBox::GetSelectedEntryCount() const { - return m_pImpl->m_pImplLB->GetEntryList().GetSelectedEntryCount(); + return 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_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_pImplLB->GetEntryList().GetMRUCount()) + nPos = m_pImplLB->GetEntryList().FindEntry(m_pImplLB->GetEntryList().GetEntryText(nPos)); + nPos = sal::static_int_cast<sal_Int32>(nPos - 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_pImplLB->GetEntryList().IsEntryPosSelected( + nPos + m_pImplLB->GetEntryList().GetMRUCount() ); } void ComboBox::SelectEntryPos( sal_Int32 nPos, bool bSelect) { - if (nPos < m_pImpl->m_pImplLB->GetEntryList().GetEntryCount()) - m_pImpl->m_pImplLB->SelectEntry( - nPos + m_pImpl->m_pImplLB->GetEntryList().GetMRUCount(), bSelect); + if (nPos < m_pImplLB->GetEntryList().GetEntryCount()) + m_pImplLB->SelectEntry( + nPos + m_pImplLB->GetEntryList().GetMRUCount(), bSelect); } void ComboBox::SetNoSelection() { - m_pImpl->m_pImplLB->SetNoSelection(); - m_pImpl->m_pSubEdit->SetText( OUString() ); + m_pImplLB->SetNoSelection(); + m_pSubEdit->SetText(OUString()); } tools::Rectangle ComboBox::GetBoundingRectangle( sal_Int32 nItem ) const @@ -1400,8 +1358,8 @@ void ComboBox::SetBorderStyle( WindowBorderStyle nBorderStyle ) Window::SetBorderStyle( nBorderStyle ); if ( !IsDropDownBox() ) { - m_pImpl->m_pSubEdit->SetBorderStyle( nBorderStyle ); - m_pImpl->m_pImplLB->SetBorderStyle( nBorderStyle ); + m_pSubEdit->SetBorderStyle(nBorderStyle); + m_pImplLB->SetBorderStyle( nBorderStyle ); } } @@ -1413,13 +1371,13 @@ void ComboBox::SetHighlightColor( const Color& rColor ) aSettings.SetStyleSettings(aStyle); SetSettings(aSettings); - AllSettings aSettingsSubEdit(m_pImpl->m_pSubEdit->GetSettings()); + AllSettings aSettingsSubEdit(m_pSubEdit->GetSettings()); StyleSettings aStyleSubEdit(aSettingsSubEdit.GetStyleSettings()); aStyleSubEdit.SetHighlightColor(rColor); aSettingsSubEdit.SetStyleSettings(aStyleSubEdit); - m_pImpl->m_pSubEdit->SetSettings(aSettings); + m_pSubEdit->SetSettings(aSettings); - m_pImpl->m_pImplLB->SetHighlightColor(rColor); + m_pImplLB->SetHighlightColor(rColor); } void ComboBox::SetHighlightTextColor( const Color& rColor ) @@ -1430,18 +1388,18 @@ void ComboBox::SetHighlightTextColor( const Color& rColor ) aSettings.SetStyleSettings(aStyle); SetSettings(aSettings); - AllSettings aSettingsSubEdit(m_pImpl->m_pSubEdit->GetSettings()); + AllSettings aSettingsSubEdit(m_pSubEdit->GetSettings()); StyleSettings aStyleSubEdit(aSettingsSubEdit.GetStyleSettings()); aStyleSubEdit.SetHighlightTextColor(rColor); aSettingsSubEdit.SetStyleSettings(aStyleSubEdit); - m_pImpl->m_pSubEdit->SetSettings(aSettings); + m_pSubEdit->SetSettings(aSettings); - m_pImpl->m_pImplLB->SetHighlightTextColor(rColor); + m_pImplLB->SetHighlightTextColor(rColor); } ImplListBoxWindow* ComboBox::GetMainWindow() const { - return m_pImpl->m_pImplLB->GetMainWindow(); + return m_pImplLB->GetMainWindow(); } tools::Long ComboBox::GetIndexForPoint( const Point& rPoint, sal_Int32& rPos ) const @@ -1478,7 +1436,7 @@ tools::Long ComboBox::GetIndexForPoint( const Point& rPoint, sal_Int32& rPos ) c return nIndex; } -ComboBoxBounds ComboBox::Impl::calcComboBoxDropDownComponentBounds( +ComboBoxBounds ComboBox::calcComboBoxDropDownComponentBounds( const Size &rOutSz, const Size &rBorderOutSz) const { ComboBoxBounds aBounds; @@ -1486,7 +1444,7 @@ ComboBoxBounds ComboBox::Impl::calcComboBoxDropDownComponentBounds( tools::Long nTop = 0; tools::Long nBottom = rOutSz.Height(); - vcl::Window *pBorder = m_rThis.GetWindow( GetWindowType::Border ); + vcl::Window *pBorder = GetWindow(GetWindowType::Border); ImplControlValue aControlValue; Point aPoint; tools::Rectangle aContent, aBound; @@ -1494,18 +1452,18 @@ ComboBoxBounds ComboBox::Impl::calcComboBoxDropDownComponentBounds( // use the full extent of the control tools::Rectangle aArea( aPoint, rBorderOutSz ); - if (m_rThis.GetNativeControlRegion(ControlType::Combobox, ControlPart::ButtonDown, + if (GetNativeControlRegion(ControlType::Combobox, ControlPart::ButtonDown, aArea, ControlState::NONE, aControlValue, aBound, aContent) ) { // convert back from border space to local coordinates - aPoint = pBorder->ScreenToOutputPixel(m_rThis.OutputToScreenPixel(aPoint)); + aPoint = pBorder->ScreenToOutputPixel(OutputToScreenPixel(aPoint)); aContent.Move(-aPoint.X(), -aPoint.Y()); aBounds.aButtonPos = Point(aContent.Left(), nTop); aBounds.aButtonSize = Size(aContent.getOpenWidth(), (nBottom-nTop)); // adjust the size of the edit field - if (m_rThis.GetNativeControlRegion(ControlType::Combobox, ControlPart::SubEdit, + if (GetNativeControlRegion(ControlType::Combobox, ControlPart::SubEdit, aArea, ControlState::NONE, aControlValue, aBound, aContent) ) { // convert back from border space to local coordinates @@ -1523,8 +1481,8 @@ ComboBoxBounds ComboBox::Impl::calcComboBoxDropDownComponentBounds( } else { - tools::Long nSBWidth = m_rThis.GetSettings().GetStyleSettings().GetScrollBarSize(); - nSBWidth = m_rThis.CalcZoom( nSBWidth ); + tools::Long nSBWidth = GetSettings().GetStyleSettings().GetScrollBarSize(); + nSBWidth = CalcZoom( nSBWidth ); aBounds.aSubEditSize = Size(rOutSz.Width() - nSBWidth, rOutSz.Height()); aBounds.aButtonPos = Point(rOutSz.Width() - nSBWidth, nTop); aBounds.aButtonSize = Size(nSBWidth, (nBottom-nTop)); @@ -1534,18 +1492,18 @@ ComboBoxBounds ComboBox::Impl::calcComboBoxDropDownComponentBounds( void ComboBox::SetWidthInChars(sal_Int32 nWidthInChars) { - if (nWidthInChars != m_pImpl->m_nWidthInChars) + if (nWidthInChars != m_nWidthInChars) { - m_pImpl->m_nWidthInChars = nWidthInChars; + m_nWidthInChars = nWidthInChars; queue_resize(); } } void ComboBox::setMaxWidthChars(sal_Int32 nWidth) { - if (nWidth != m_pImpl->m_nMaxWidthChars) + if (nWidth != m_nMaxWidthChars) { - m_pImpl->m_nMaxWidthChars = nWidth; + m_nMaxWidthChars = nWidth; queue_resize(); } }