diff options
Diffstat (limited to 'vcl/source/control/lstbox.cxx')
-rw-r--r-- | vcl/source/control/lstbox.cxx | 56 |
1 files changed, 51 insertions, 5 deletions
diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx index 6278f8e66f78..741558e2fd2d 100644 --- a/vcl/source/control/lstbox.cxx +++ b/vcl/source/control/lstbox.cxx @@ -87,12 +87,12 @@ void ListBox::ImplInitListBoxData() mpFloatWin = NULL; mpImplWin = NULL; mpBtn = NULL; - mnDDHeight = 0; - mbDDAutoSize = sal_True; mnSaveValue = LISTBOX_ENTRY_NOTFOUND; mnLineCount = 0; m_nMaxWidthChars = -1; + mbDDAutoSize = true; + mbEdgeBlending = false; } @@ -140,13 +140,13 @@ void ListBox::ImplInit( Window* pParent, WinBits nStyle ) mpImplWin->SetUserDrawHdl( LINK( this, ListBox, ImplUserDrawHdl ) ); mpImplWin->Show(); mpImplWin->GetDropTarget()->addDropTargetListener(xDrop); + mpImplWin->SetEdgeBlending(GetEdgeBlending()); mpBtn = new ImplBtn( this, WB_NOLIGHTBORDER | WB_RECTSTYLE ); ImplInitDropDownButton( mpBtn ); mpBtn->SetMBDownHdl( LINK( this, ListBox, ImplClickBtnHdl ) ); mpBtn->Show(); mpBtn->GetDropTarget()->addDropTargetListener(xDrop); - } Window* pLBParent = this; @@ -159,6 +159,7 @@ void ListBox::ImplInit( Window* pParent, WinBits nStyle ) mpImplLB->SetDoubleClickHdl( LINK( this, ListBox, ImplDoubleClickHdl ) ); mpImplLB->SetUserDrawHdl( LINK( this, ListBox, ImplUserDrawHdl ) ); mpImplLB->SetPosPixel( Point() ); + mpImplLB->SetEdgeBlending(GetEdgeBlending()); mpImplLB->Show(); mpImplLB->GetDropTarget()->addDropTargetListener(xDrop); @@ -556,15 +557,20 @@ void ListBox::DataChanged( const DataChangedEvent& rDCEvt ) } -void ListBox::EnableAutoSize( sal_Bool bAuto ) +void ListBox::EnableAutoSize( bool bAuto ) { mbDDAutoSize = bAuto; if ( mpFloatWin ) { if ( bAuto && !mpFloatWin->GetDropDownLineCount() ) - mpFloatWin->SetDropDownLineCount( 16 ); + { + // use GetListBoxMaximumLineCount here; before, was on fixed number of five + AdaptDropDownLineCountToMaximum(); + } else if ( !bAuto ) + { mpFloatWin->SetDropDownLineCount( 0 ); + } } } @@ -584,6 +590,14 @@ void ListBox::SetDropDownLineCount( sal_uInt16 nLines ) } +void ListBox::AdaptDropDownLineCountToMaximum() +{ + // adapt to maximum allowed number + SetDropDownLineCount(std::min(GetEntryCount(), GetSettings().GetStyleSettings().GetListBoxMaximumLineCount())); +} + +// ----------------------------------------------------------------------- + sal_uInt16 ListBox::GetDropDownLineCount() const { if ( mpFloatWin ) @@ -1498,6 +1512,38 @@ bool ListBox::set_property(const OString &rKey, const OString &rValue) return true; } +// ----------------------------------------------------------------------- + +void ListBox::SetEdgeBlending(bool bNew) +{ + if(mbEdgeBlending != bNew) + { + mbEdgeBlending = bNew; + + if(IsDropDownBox()) + { + mpImplWin->Invalidate(); + } + else + { + mpImplLB->Invalidate(); + } + + if(mpImplWin) + { + mpImplWin->SetEdgeBlending(GetEdgeBlending()); + } + + if(mpImplLB) + { + mpImplLB->SetEdgeBlending(GetEdgeBlending()); + } + + Invalidate(); + } +} + +// ======================================================================= MultiListBox::MultiListBox( Window* pParent, WinBits nStyle ) : ListBox( WINDOW_MULTILISTBOX ) { |