summaryrefslogtreecommitdiff
path: root/vcl/source/control/lstbox.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/control/lstbox.cxx')
-rw-r--r--vcl/source/control/lstbox.cxx56
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 )
{