diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-06-18 21:30:10 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-06-20 16:34:13 +0200 |
commit | d148e5c5db3f3ea32abd6f7bed30665a3931e937 (patch) | |
tree | 7d1f69735f8846bf2f966fd1f878ba9aee76dd7a /svtools | |
parent | 361434e4e8fa58e02e694ec8cfa8187eecdf8c7f (diff) |
weld SvxColorTabPage
Change-Id: I5dc6f949edcb34aa110dfa9415e2ac886d0dfa4c
Reviewed-on: https://gerrit.libreoffice.org/56155
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'svtools')
-rw-r--r-- | svtools/source/control/valueset.cxx | 118 |
1 files changed, 110 insertions, 8 deletions
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx index 7ecb3b4159fe..23f8c82eb9c7 100644 --- a/svtools/source/control/valueset.cxx +++ b/svtools/source/control/valueset.cxx @@ -2275,8 +2275,9 @@ void ValueSet::SetEdgeBlending(bool bNew) } } -SvtValueSet::SvtValueSet() +SvtValueSet::SvtValueSet(weld::ScrolledWindow* pScrolledWindow) : maVirDev( VclPtr<VirtualDevice>::Create()) + , mxScrolledWindow(pScrolledWindow) , maColor(COL_TRANSPARENT) , mnStyle(0) , mbFormat(true) @@ -2308,6 +2309,12 @@ SvtValueSet::SvtValueSet() mbFullMode = true; mbEdgeBlending = false; mbHasVisibleItems = false; + + if (mxScrolledWindow) + { + mxScrolledWindow->set_user_managed_scrolling(); + mxScrolledWindow->connect_vadjustment_changed(LINK(this, SvtValueSet, ImplScrollHdl)); + } } void SvtValueSet::SetDrawingArea(weld::DrawingArea* pDrawingArea) @@ -2360,10 +2367,6 @@ void SvtValueSet::Select() maSelectHdl.Call( this ); } -void SvtValueSet::UserDraw( const UserDrawEvent& ) -{ -} - size_t SvtValueSet::ImplGetItem( const Point& rPos ) const { if (!mbHasVisibleItems) @@ -2442,6 +2445,17 @@ bool SvtValueSet::ImplHasAccessibleListeners() return( pAcc && pAcc->HasAccessibleListeners() ); } +IMPL_LINK(SvtValueSet, ImplScrollHdl, weld::ScrolledWindow&, rScrollWin, void) +{ + auto nNewFirstLine = rScrollWin.vadjustment_get_value(); + if ( nNewFirstLine != mnFirstLine ) + { + mnFirstLine = nNewFirstLine; + mbFormat = true; + Invalidate(); + } +} + void SvtValueSet::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&) { if (GetStyle() & WB_FLATVALUESET) @@ -2663,6 +2677,50 @@ void SvtValueSet::MouseButtonDown( const MouseEvent& rMouseEvent ) CustomWidgetController::MouseButtonDown( rMouseEvent ); } +void SvtValueSet::RemoveItem( sal_uInt16 nItemId ) +{ + size_t nPos = GetItemPos( nItemId ); + + if ( nPos == VALUESET_ITEM_NOTFOUND ) + return; + + if ( nPos < mItemList.size() ) { + SvtValueItemList::iterator it = mItemList.begin(); + ::std::advance( it, nPos ); + delete *it; + mItemList.erase( it ); + } + + // reset variables + if (mnSelItemId == nItemId) + { + mnCurCol = 0; + mnSelItemId = 0; + mbNoSelection = true; + } + + queue_resize(); + + mbFormat = true; + if ( IsReallyVisible() && IsUpdateMode() ) + Invalidate(); +} + +void SvtValueSet::Clear() +{ + ImplDeleteItems(); + + // reset variables + mnFirstLine = 0; + mnCurCol = 0; + mnSelItemId = 0; + mbNoSelection = true; + + mbFormat = true; + if (IsReallyVisible() && IsUpdateMode()) + Invalidate(); +} + size_t SvtValueSet::GetItemCount() const { return mItemList.size(); @@ -2863,7 +2921,6 @@ void SvtValueSet::SelectItem( sal_uInt16 nItemId ) Any aNewAny; ImplFireAccessibleEvent(AccessibleEventId::SELECTION_CHANGED, aOldAny, aNewAny); } - maHighlightHdl.Call(this); } void SvtValueSet::SetNoSelection() @@ -2874,6 +2931,16 @@ void SvtValueSet::SetNoSelection() Invalidate(); } +void SvtValueSet::SetStyle(WinBits nStyle) +{ + if (nStyle != mnStyle) + { + mnStyle = nStyle; + mbFormat = false; + Invalidate(); + } +} + void SvtValueSet::Format(vcl::RenderContext const & rRenderContext) { Size aWinSize(GetOutputSizePixel()); @@ -2884,6 +2951,13 @@ void SvtValueSet::Format(vcl::RenderContext const & rRenderContext) long nNoneHeight; long nNoneSpace; + if (mxScrolledWindow && !(nStyle & WB_VSCROLL) && mxScrolledWindow->get_vpolicy() != VclPolicyType::NEVER) + { + mxScrolledWindow->set_vpolicy(VclPolicyType::NEVER); + Size aPrefSize(GetDrawingArea()->get_preferred_size()); + GetDrawingArea()->set_size_request(aPrefSize.Width() + GetScrollWidth(), aPrefSize.Height()); + } + // calculate item offset if (nStyle & WB_ITEMBORDER) { @@ -3028,6 +3102,13 @@ void SvtValueSet::Format(vcl::RenderContext const & rRenderContext) { mItemList[i]->mbVisible = false; } + + if (mxScrolledWindow && mxScrolledWindow->get_vpolicy() != VclPolicyType::NEVER) + { + mxScrolledWindow->set_vpolicy(VclPolicyType::NEVER); + Size aPrefSize(GetDrawingArea()->get_preferred_size()); + GetDrawingArea()->set_size_request(aPrefSize.Width() + GetScrollWidth(), aPrefSize.Height()); + } } else { @@ -3164,6 +3245,19 @@ void SvtValueSet::Format(vcl::RenderContext const & rRenderContext) pItem->mbVisible = false; } } + + // arrange ScrollBar, set values and show it + if (mxScrolledWindow && (nStyle & WB_VSCROLL) && mxScrolledWindow->get_vpolicy() != VclPolicyType::ALWAYS) + { + long nPageSize = mnVisLines; + if (nPageSize < 1) + nPageSize = 1; + mxScrolledWindow->vadjustment_configure(mnFirstLine, 0, mnLines, 1, + mnVisLines, nPageSize); + mxScrolledWindow->set_vpolicy(VclPolicyType::ALWAYS); + Size aPrefSize(GetDrawingArea()->get_preferred_size()); + GetDrawingArea()->set_size_request(aPrefSize.Width() - GetScrollWidth(), aPrefSize.Height()); + } } // waiting for the next since the formatting is finished @@ -3376,8 +3470,6 @@ void SvtValueSet::ImplFormatItem(vcl::RenderContext const & rRenderContext, SvtV if (pItem->meType == VALUESETITEM_USERDRAW) { - UserDrawEvent aUDEvt(nullptr, maVirDev.get(), aRect, pItem->mnId); - UserDraw(aUDEvt); } else { @@ -3597,6 +3689,9 @@ Size SvtValueSet::CalcWindowSizePixel( const Size& rItemSize, sal_uInt16 nDesire aSize.AdjustHeight(nTxtHeight + n + mnSpacing ); } + // sum possible ScrollBar width + aSize.AdjustWidth(GetScrollWidth()); + return aSize; } @@ -3632,6 +3727,13 @@ void SvtValueSet::ImplInsertItem( SvtValueSetItem *const pItem, const size_t nPo Invalidate(); } +int SvtValueSet::GetScrollWidth() const +{ + if (mxScrolledWindow) + return mxScrolledWindow->get_vscroll_width(); + return 0; +} + void SvtValueSet::SetEdgeBlending(bool bNew) { if(mbEdgeBlending != bNew) |