[Libreoffice-commits] core.git: cui/source include/svtools sd/source svtools/inc svtools/Library_svt.mk svtools/source svx/source
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Sat Apr 25 20:43:32 UTC 2020
cui/source/inc/numpages.hxx | 1
include/svtools/valueset.hxx | 163 --
sd/source/ui/inc/pubdlg.hxx | 1
svtools/Library_svt.mk | 1
svtools/inc/uitest/uiobject.hxx | 36
svtools/source/control/valueacc.cxx | 978 ----------------
svtools/source/control/valueimp.hxx | 194 ---
svtools/source/control/valueset.cxx | 1807 ------------------------------
svtools/source/uitest/uiobject.cxx | 66 -
svx/source/tbxctrls/extrusioncontrols.hxx | 2
10 files changed, 2 insertions(+), 3247 deletions(-)
New commits:
commit 34bb3c51783f6cd5d17bff1b259886eeb91f25da
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Apr 24 20:50:27 2020 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Sat Apr 25 22:42:56 2020 +0200
remove newly unused ValueSet
Change-Id: Ia2c587af9846129278caf66ab504d1a1a1ac6256
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92897
Tested-by: Caolán McNamara <caolanm at redhat.com>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/cui/source/inc/numpages.hxx b/cui/source/inc/numpages.hxx
index 7003be67704c..01eb4af82c3c 100644
--- a/cui/source/inc/numpages.hxx
+++ b/cui/source/inc/numpages.hxx
@@ -37,7 +37,6 @@ class SvxNumValueSet;
class SvxNumRule;
class SvxBmpNumValueSet;
class SvxBrushItem;
-class ValueSet;
struct SvxNumSettings_Impl
{
diff --git a/include/svtools/valueset.hxx b/include/svtools/valueset.hxx
index fe516494fff6..8b55022f3ebd 100644
--- a/include/svtools/valueset.hxx
+++ b/include/svtools/valueset.hxx
@@ -22,8 +22,7 @@
#include <config_options.h>
#include <svtools/svtdllapi.h>
-
-#include <vcl/ctrl.hxx>
+#include <tools/wintypes.hxx>
#include <vcl/customweld.hxx>
#include <memory>
#include <vector>
@@ -47,7 +46,7 @@ enum class DrawFrameStyle;
Description
============
-class ValueSet
+class SvtValueSet
This class allows the selection of an item. In the process items are
drawn side by side. The selection of items can be more clear than in a
@@ -178,7 +177,6 @@ to be set (before Show) with SetStyle().
*************************************************************************/
-typedef std::vector<std::unique_ptr<ValueSetItem>> ValueItemList;
typedef std::vector<std::unique_ptr<SvtValueSetItem>> SvtValueItemList;
#define WB_ITEMBORDER (WinBits(0x00010000))
@@ -192,163 +190,6 @@ typedef std::vector<std::unique_ptr<SvtValueSetItem>> SvtValueItemList;
#define VALUESET_APPEND (size_t(-1))
#define VALUESET_ITEM_NOTFOUND (size_t(-1))
-
-class SVT_DLLPUBLIC ValueSet : public Control
-{
-private:
- ValueItemList mItemList;
- std::unique_ptr<ValueSetItem> mpNoneItem;
- VclPtr<ScrollBar> mxScrollBar;
- tools::Rectangle maNoneItemRect;
- tools::Rectangle maItemListRect;
- long mnItemWidth;
- long mnItemHeight;
- long mnTextOffset;
- long mnVisLines;
- long mnLines;
- long mnUserItemWidth;
- long mnUserItemHeight;
- sal_uInt16 mnSelItemId;
- sal_uInt16 mnHighItemId;
- sal_uInt16 mnCols;
- sal_uInt16 mnCurCol;
- sal_uInt16 mnUserCols;
- sal_uInt16 mnUserVisLines;
- sal_uInt16 mnFirstLine;
- DrawFrameStyle mnFrameStyle;
- Color maColor;
- Link<ValueSet*,void> maSelectHdl;
-
- bool mbFormat : 1;
- bool mbHighlight : 1;
- bool mbNoSelection : 1;
- bool mbDrawSelection : 1;
- bool mbBlackSel : 1;
- bool mbDoubleSel : 1;
- bool mbScroll : 1;
- bool mbEdgeBlending : 1;
- bool mbHasVisibleItems : 1;
-
- friend class ValueSetAcc;
- friend class ValueItemAcc;
-
- using Control::ImplInitSettings;
- SVT_DLLPRIVATE void ImplInitSettings( bool bFont, bool bForeground, bool bBackground );
-
- virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
-
- SVT_DLLPRIVATE void ImplInitScrollBar();
- SVT_DLLPRIVATE void ImplDeleteItems();
- SVT_DLLPRIVATE void ImplFormatItem(vcl::RenderContext& rRenderContext, ValueSetItem* pItem, tools::Rectangle aRect);
- SVT_DLLPRIVATE void ImplDrawItemText(vcl::RenderContext& rRenderContext, const OUString& rStr);
- SVT_DLLPRIVATE void ImplDrawSelect(vcl::RenderContext& rRenderContext, sal_uInt16 nItemId, const bool bFocus, const bool bDrawSel);
- SVT_DLLPRIVATE void ImplDrawSelect(vcl::RenderContext& rRenderContext);
- SVT_DLLPRIVATE void ImplHighlightItem(sal_uInt16 nItemId, bool bIsSelection = true);
- SVT_DLLPRIVATE void ImplDraw(vcl::RenderContext& rRenderContext);
- SVT_DLLPRIVATE size_t ImplGetItem( const Point& rPoint ) const;
- SVT_DLLPRIVATE ValueSetItem* ImplGetItem( size_t nPos );
- SVT_DLLPRIVATE ValueSetItem* ImplGetFirstItem();
- SVT_DLLPRIVATE sal_uInt16 ImplGetVisibleItemCount() const;
- SVT_DLLPRIVATE void ImplInsertItem( std::unique_ptr<ValueSetItem> pItem, const size_t nPos );
- SVT_DLLPRIVATE tools::Rectangle ImplGetItemRect( size_t nPos ) const;
- SVT_DLLPRIVATE void ImplFireAccessibleEvent( short nEventId, const css::uno::Any& rOldValue, const css::uno::Any& rNewValue );
- SVT_DLLPRIVATE bool ImplHasAccessibleListeners();
- SVT_DLLPRIVATE void ImplTracking( const Point& rPos );
- SVT_DLLPRIVATE void ImplEndTracking( const Point& rPos, bool bCancel );
- DECL_DLLPRIVATE_LINK( ImplScrollHdl, ScrollBar*, void );
-
- ValueSet (const ValueSet &) = delete;
- ValueSet & operator= (const ValueSet &) = delete;
-
- SVT_DLLPRIVATE void Format(vcl::RenderContext& rRenderContext);
-
-protected:
- virtual css::uno::Reference<css::accessibility::XAccessible> CreateAccessible() override;
-
-public:
- ValueSet( vcl::Window* pParent, WinBits nWinStyle );
- virtual ~ValueSet() override;
- virtual void dispose() override;
-
- virtual void MouseButtonDown( const MouseEvent& rMEvt ) override;
- virtual void MouseMove( const MouseEvent& rMEvt ) override;
- virtual void Tracking( const TrackingEvent& rMEvt ) override;
- virtual void KeyInput( const KeyEvent& rKEvt ) override;
- virtual void Command( const CommandEvent& rCEvt ) override;
- virtual void Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect) override;
- virtual void GetFocus() override;
- virtual void LoseFocus() override;
- virtual void Resize() override;
- virtual Size GetOptimalSize() const override;
- virtual void RequestHelp( const HelpEvent& rHEvt ) override;
- virtual void StateChanged( StateChangedType nStateChange ) override;
- virtual void DataChanged( const DataChangedEvent& rDCEvt ) override;
- virtual boost::property_tree::ptree DumpAsPropertyTree() override;
- virtual FactoryFunction GetUITestFactory() const override;
-
- void Select();
-
- /// Insert @rImage item with @rStr as either a legend or tooltip depending on @bShowLegend.
- void InsertItem(sal_uInt16 nItemId, const Image& rImage,
- const OUString& rStr, size_t nPos = VALUESET_APPEND);
- /// Insert an @rColor item with @rStr tooltip.
- void InsertItem(sal_uInt16 nItemId, const Color& rColor,
- const OUString& rStr);
- /// Insert an User Drawn item.
- void InsertItem(sal_uInt16 nItemId, size_t nPos = VALUESET_APPEND);
-
- void Clear();
-
- size_t GetItemCount() const;
- size_t GetItemPos( sal_uInt16 nItemId ) const;
- sal_uInt16 GetItemId( size_t nPos ) const;
- sal_uInt16 GetItemId( const Point& rPos ) const;
- tools::Rectangle GetItemRect( sal_uInt16 nItemId ) const;
-
- void SetColCount( sal_uInt16 nNewCols = 1 );
- void SetLineCount( sal_uInt16 nNewLines = 0 );
- void SetItemWidth( long nItemWidth );
- void SetItemHeight( long nLineHeight );
- Size GetLargestItemSize();
-
- void SelectItem( sal_uInt16 nItemId );
- sal_uInt16 GetSelectedItemId() const
- {
- return mnSelItemId;
- }
- bool IsItemSelected( sal_uInt16 nItemId ) const
- {
- return !mbNoSelection && (nItemId == mnSelItemId);
- }
- void SetNoSelection();
-
- Color GetItemColor( sal_uInt16 nItemId ) const;
- OUString GetItemText( sal_uInt16 nItemId ) const;
- bool IsColor() const
- {
- return maColor.GetTransparency() == 0;
- }
-
- void EndSelection();
-
- Size CalcWindowSizePixel(const Size& rItemSize,
- sal_uInt16 nCalcCols = 0,
- sal_uInt16 nCalcLines = 0) const;
- Size CalcItemSizePixel(const Size& rSize) const;
- long GetScrollWidth() const;
-
- void SetSelectHdl(const Link<ValueSet*,void>& rLink)
- {
- maSelectHdl = rLink;
- }
-
- bool GetEdgeBlending() const
- {
- return mbEdgeBlending;
- }
- void SetEdgeBlending(bool bNew);
-};
-
class SVT_DLLPUBLIC SvtValueSet : public weld::CustomWidgetController
{
private:
diff --git a/sd/source/ui/inc/pubdlg.hxx b/sd/source/ui/inc/pubdlg.hxx
index 1fd8272ace24..d93791b74700 100644
--- a/sd/source/ui/inc/pubdlg.hxx
+++ b/sd/source/ui/inc/pubdlg.hxx
@@ -30,7 +30,6 @@
class ListBox;
class Edit;
-class ValueSet;
class SdHtmlAttrPreview;
class SdPublishingDesign;
class ButtonSet;
diff --git a/svtools/Library_svt.mk b/svtools/Library_svt.mk
index a2c968306bd9..568fb6a63a59 100644
--- a/svtools/Library_svt.mk
+++ b/svtools/Library_svt.mk
@@ -164,7 +164,6 @@ $(eval $(call gb_Library_add_exception_objects,svt,\
svtools/source/table/mousefunction \
svtools/source/table/cellvalueconversion \
svtools/source/table/tablegeometry \
- svtools/source/uitest/uiobject \
svtools/source/uno/addrtempuno \
svtools/source/uno/fpicker \
svtools/source/uno/framestatuslistener \
diff --git a/svtools/inc/uitest/uiobject.hxx b/svtools/inc/uitest/uiobject.hxx
deleted file mode 100644
index 2fcc486fa892..000000000000
--- a/svtools/inc/uitest/uiobject.hxx
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include <memory>
-#include <vcl/uitest/uiobject.hxx>
-
-class ValueSet;
-
-class ValueSetUIObject final : public WindowUIObject
-{
-private:
- VclPtr<ValueSet> mxValueSet;
-
-public:
- ValueSetUIObject(const VclPtr<ValueSet>& xValueSet);
- virtual ~ValueSetUIObject() override;
-
- virtual void execute(const OUString& rAction, const StringMap& rParameters) override;
-
- virtual StringMap get_state() override;
-
- static std::unique_ptr<UIObject> create(vcl::Window* pWindow);
-
- virtual OUString get_action(VclEventId nEvent) const override;
-
-private:
- virtual OUString get_name() const override;
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/control/valueacc.cxx b/svtools/source/control/valueacc.cxx
index 3f16bc926c23..5f5aafaad7c3 100644
--- a/svtools/source/control/valueacc.cxx
+++ b/svtools/source/control/valueacc.cxx
@@ -36,33 +36,6 @@
using namespace ::com::sun::star;
-ValueSetItem::ValueSetItem( ValueSet& rParent )
- : mrParent(rParent)
- , mnId(0)
- , meType(VALUESETITEM_NONE)
- , mbVisible(true)
- , mxAcc()
-{
-}
-
-
-ValueSetItem::~ValueSetItem()
-{
- if( mxAcc.is() )
- {
- mxAcc->ParentDestroyed();
- }
-}
-
-
-uno::Reference< accessibility::XAccessible > ValueSetItem::GetAccessible( bool bIsTransientChildrenDisabled )
-{
- if( !mxAcc.is() )
- mxAcc = new ValueItemAcc( this, bIsTransientChildrenDisabled );
-
- return mxAcc.get();
-}
-
SvtValueSetItem::SvtValueSetItem( SvtValueSet& rParent )
: mrParent(rParent)
, mnId(0)
@@ -90,957 +63,6 @@ uno::Reference< accessibility::XAccessible > SvtValueSetItem::GetAccessible( boo
return mxAcc.get();
}
-ValueSetAcc::ValueSetAcc( ValueSet* pParent ) :
- ValueSetAccComponentBase (m_aMutex),
- mpParent( pParent ),
- mbIsFocused(false)
-{
-}
-
-
-ValueSetAcc::~ValueSetAcc()
-{
-}
-
-
-void ValueSetAcc::FireAccessibleEvent( short nEventId, const uno::Any& rOldValue, const uno::Any& rNewValue )
-{
- if( !nEventId )
- return;
-
- ::std::vector< uno::Reference< accessibility::XAccessibleEventListener > > aTmpListeners( mxEventListeners );
- accessibility::AccessibleEventObject aEvtObject;
-
- aEvtObject.EventId = nEventId;
- aEvtObject.Source = static_cast<uno::XWeak*>(this);
- aEvtObject.NewValue = rNewValue;
- aEvtObject.OldValue = rOldValue;
-
- for (auto const& tmpListener : aTmpListeners)
- {
- try
- {
- tmpListener->notifyEvent( aEvtObject );
- }
- catch(const uno::Exception&)
- {
- }
- }
-}
-
-namespace
-{
- class theValueSetAccUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theValueSetAccUnoTunnelId > {};
-}
-
-const uno::Sequence< sal_Int8 >& ValueSetAcc::getUnoTunnelId()
-{
- return theValueSetAccUnoTunnelId::get().getSeq();
-}
-
-
-ValueSetAcc* ValueSetAcc::getImplementation( const uno::Reference< uno::XInterface >& rxData )
- throw()
-{
- try
- {
- return comphelper::getUnoTunnelImplementation<ValueSetAcc>(rxData);
- }
- catch(const css::uno::Exception&)
- {
- return nullptr;
- }
-}
-
-
-void ValueSetAcc::GetFocus()
-{
- mbIsFocused = true;
-
- // Broadcast the state change.
- css::uno::Any aOldState, aNewState;
- aNewState <<= css::accessibility::AccessibleStateType::FOCUSED;
- FireAccessibleEvent(
- css::accessibility::AccessibleEventId::STATE_CHANGED,
- aOldState, aNewState);
-}
-
-
-void ValueSetAcc::LoseFocus()
-{
- mbIsFocused = false;
-
- // Broadcast the state change.
- css::uno::Any aOldState, aNewState;
- aOldState <<= css::accessibility::AccessibleStateType::FOCUSED;
- FireAccessibleEvent(
- css::accessibility::AccessibleEventId::STATE_CHANGED,
- aOldState, aNewState);
-}
-
-
-uno::Reference< accessibility::XAccessibleContext > SAL_CALL ValueSetAcc::getAccessibleContext()
-{
- ThrowIfDisposed();
- return this;
-}
-
-
-sal_Int32 SAL_CALL ValueSetAcc::getAccessibleChildCount()
-{
- const SolarMutexGuard aSolarGuard;
- ThrowIfDisposed();
-
- sal_Int32 nCount = mpParent->ImplGetVisibleItemCount();
- if (HasNoneField())
- nCount += 1;
- return nCount;
-}
-
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueSetAcc::getAccessibleChild( sal_Int32 i )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- ValueSetItem* pItem = getItem (sal::static_int_cast< sal_uInt16 >(i));
-
- if( !pItem )
- throw lang::IndexOutOfBoundsException();
-
- uno::Reference< accessibility::XAccessible > xRet = pItem->GetAccessible( false/*bIsTransientChildrenDisabled*/ );
- return xRet;
-}
-
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueSetAcc::getAccessibleParent()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- vcl::Window* pParent = mpParent->GetParent();
- uno::Reference< accessibility::XAccessible > xRet;
-
- if( pParent )
- xRet = pParent->GetAccessible();
-
- return xRet;
-}
-
-
-sal_Int32 SAL_CALL ValueSetAcc::getAccessibleIndexInParent()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- vcl::Window* pParent = mpParent->GetParent();
- sal_Int32 nRet = 0;
-
- if( pParent )
- {
- bool bFound = false;
-
- for( sal_uInt16 i = 0, nCount = pParent->GetChildCount(); ( i < nCount ) && !bFound; i++ )
- {
- if( pParent->GetChild( i ) == mpParent )
- {
- nRet = i;
- bFound = true;
- }
- }
- }
-
- return nRet;
-}
-
-
-sal_Int16 SAL_CALL ValueSetAcc::getAccessibleRole()
-{
- ThrowIfDisposed();
- return accessibility::AccessibleRole::LIST;
-}
-
-
-OUString SAL_CALL ValueSetAcc::getAccessibleDescription()
-{
- ThrowIfDisposed();
- return "ValueSet";
-}
-
-
-OUString SAL_CALL ValueSetAcc::getAccessibleName()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- OUString aRet;
-
- if (mpParent)
- {
- aRet = mpParent->GetAccessibleName();
-
- if ( aRet.isEmpty() )
- {
- vcl::Window* pLabel = mpParent->GetAccessibleRelationLabeledBy();
- if ( pLabel && pLabel != mpParent )
- aRet = OutputDevice::GetNonMnemonicString( pLabel->GetText() );
-
- if (aRet.isEmpty())
- aRet = mpParent->GetQuickHelpText();
- }
- }
-
- return aRet;
-}
-
-
-uno::Reference< accessibility::XAccessibleRelationSet > SAL_CALL ValueSetAcc::getAccessibleRelationSet()
-{
- ThrowIfDisposed();
- SolarMutexGuard g;
- uno::Reference< accessibility::XAccessibleRelationSet > xRelSet;
- vcl::Window* pWindow = mpParent;
- if ( pWindow )
- {
- utl::AccessibleRelationSetHelper* pRelationSet = new utl::AccessibleRelationSetHelper;
- xRelSet = pRelationSet;
-
- vcl::Window *pLabeledBy = pWindow->GetAccessibleRelationLabeledBy();
- if ( pLabeledBy && pLabeledBy != pWindow )
- {
- uno::Sequence< uno::Reference< uno::XInterface > > aSequence { pLabeledBy->GetAccessible() };
- pRelationSet->AddRelation( accessibility::AccessibleRelation( accessibility::AccessibleRelationType::LABELED_BY, aSequence ) );
- }
-
- vcl::Window* pMemberOf = pWindow->GetAccessibleRelationMemberOf();
- if ( pMemberOf && pMemberOf != pWindow )
- {
- uno::Sequence< uno::Reference< uno::XInterface > > aSequence { pMemberOf->GetAccessible() };
- pRelationSet->AddRelation( accessibility::AccessibleRelation( accessibility::AccessibleRelationType::MEMBER_OF, aSequence ) );
- }
- }
- return xRelSet;
-}
-
-
-uno::Reference< accessibility::XAccessibleStateSet > SAL_CALL ValueSetAcc::getAccessibleStateSet()
-{
- ThrowIfDisposed();
- ::utl::AccessibleStateSetHelper* pStateSet = new ::utl::AccessibleStateSetHelper();
-
- // Set some states.
- pStateSet->AddState (accessibility::AccessibleStateType::ENABLED);
- pStateSet->AddState (accessibility::AccessibleStateType::SENSITIVE);
- pStateSet->AddState (accessibility::AccessibleStateType::SHOWING);
- pStateSet->AddState (accessibility::AccessibleStateType::VISIBLE);
- pStateSet->AddState (accessibility::AccessibleStateType::MANAGES_DESCENDANTS);
- pStateSet->AddState (accessibility::AccessibleStateType::FOCUSABLE);
- if (mbIsFocused)
- pStateSet->AddState (accessibility::AccessibleStateType::FOCUSED);
-
- return pStateSet;
-}
-
-
-lang::Locale SAL_CALL ValueSetAcc::getLocale()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- uno::Reference< accessibility::XAccessible > xParent( getAccessibleParent() );
- lang::Locale aRet( "", "", "" );
-
- if( xParent.is() )
- {
- uno::Reference< accessibility::XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
-
- if( xParentContext.is() )
- aRet = xParentContext->getLocale ();
- }
-
- return aRet;
-}
-
-
-void SAL_CALL ValueSetAcc::addAccessibleEventListener( const uno::Reference< accessibility::XAccessibleEventListener >& rxListener )
-{
- ThrowIfDisposed();
- ::osl::MutexGuard aGuard (m_aMutex);
-
- if( !rxListener.is() )
- return;
-
- bool bFound = false;
-
- for (auto const& eventListener : mxEventListeners)
- {
- if(eventListener == rxListener)
- {
- bFound = true;
- break;
- }
- }
-
- if (!bFound)
- mxEventListeners.push_back( rxListener );
-}
-
-
-void SAL_CALL ValueSetAcc::removeAccessibleEventListener( const uno::Reference< accessibility::XAccessibleEventListener >& rxListener )
-{
- ThrowIfDisposed();
- ::osl::MutexGuard aGuard (m_aMutex);
-
- if( rxListener.is() )
- {
- ::std::vector< uno::Reference< accessibility::XAccessibleEventListener > >::iterator aIter =
- std::find(mxEventListeners.begin(), mxEventListeners.end(), rxListener);
-
- if (aIter != mxEventListeners.end())
- mxEventListeners.erase(aIter);
- }
-}
-
-
-sal_Bool SAL_CALL ValueSetAcc::containsPoint( const awt::Point& aPoint )
-{
- ThrowIfDisposed();
- const awt::Rectangle aRect( getBounds() );
- const Point aSize( aRect.Width, aRect.Height );
- const Point aNullPoint, aTestPoint( aPoint.X, aPoint.Y );
-
- return tools::Rectangle( aNullPoint, aSize ).IsInside( aTestPoint );
-}
-
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueSetAcc::getAccessibleAtPoint( const awt::Point& aPoint )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const sal_uInt16 nItemId = mpParent->GetItemId( Point( aPoint.X, aPoint.Y ) );
- uno::Reference< accessibility::XAccessible > xRet;
-
- if ( nItemId )
- {
- const size_t nItemPos = mpParent->GetItemPos( nItemId );
-
- if( VALUESET_ITEM_NONEITEM != nItemPos )
- {
- ValueSetItem *const pItem = mpParent->mItemList[nItemPos].get();
- xRet = pItem->GetAccessible( false/*bIsTransientChildrenDisabled*/ );
- }
- }
-
- return xRet;
-}
-
-
-awt::Rectangle SAL_CALL ValueSetAcc::getBounds()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const Point aOutPos( mpParent->GetPosPixel() );
- const Size aOutSize( mpParent->GetOutputSizePixel() );
- awt::Rectangle aRet;
-
- aRet.X = aOutPos.X();
- aRet.Y = aOutPos.Y();
- aRet.Width = aOutSize.Width();
- aRet.Height = aOutSize.Height();
-
- return aRet;
-}
-
-
-awt::Point SAL_CALL ValueSetAcc::getLocation()
-{
- ThrowIfDisposed();
- const awt::Rectangle aRect( getBounds() );
- awt::Point aRet;
-
- aRet.X = aRect.X;
- aRet.Y = aRect.Y;
-
- return aRet;
-}
-
-
-awt::Point SAL_CALL ValueSetAcc::getLocationOnScreen()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- const Point aScreenPos( mpParent->OutputToAbsoluteScreenPixel( Point() ) );
- awt::Point aRet;
-
- aRet.X = aScreenPos.X();
- aRet.Y = aScreenPos.Y();
-
- return aRet;
-}
-
-
-awt::Size SAL_CALL ValueSetAcc::getSize()
-{
- ThrowIfDisposed();
- const awt::Rectangle aRect( getBounds() );
- awt::Size aRet;
-
- aRet.Width = aRect.Width;
- aRet.Height = aRect.Height;
-
- return aRet;
-}
-
-void SAL_CALL ValueSetAcc::grabFocus()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- mpParent->GrabFocus();
-}
-
-sal_Int32 SAL_CALL ValueSetAcc::getForeground( )
-{
- ThrowIfDisposed();
- Color nColor = Application::GetSettings().GetStyleSettings().GetWindowTextColor();
- return static_cast<sal_Int32>(nColor);
-}
-
-sal_Int32 SAL_CALL ValueSetAcc::getBackground( )
-{
- ThrowIfDisposed();
- Color nColor = Application::GetSettings().GetStyleSettings().GetWindowColor();
- return static_cast<sal_Int32>(nColor);
-}
-
-void SAL_CALL ValueSetAcc::selectAccessibleChild( sal_Int32 nChildIndex )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- ValueSetItem* pItem = getItem (sal::static_int_cast< sal_uInt16 >(nChildIndex));
-
- if(pItem == nullptr)
- throw lang::IndexOutOfBoundsException();
-
- mpParent->SelectItem( pItem->mnId );
- mpParent->Select ();
-}
-
-
-sal_Bool SAL_CALL ValueSetAcc::isAccessibleChildSelected( sal_Int32 nChildIndex )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- ValueSetItem* pItem = getItem (sal::static_int_cast< sal_uInt16 >(nChildIndex));
-
- if (pItem == nullptr)
- throw lang::IndexOutOfBoundsException();
-
- bool bRet = mpParent->IsItemSelected( pItem->mnId );
- return bRet;
-}
-
-
-void SAL_CALL ValueSetAcc::clearAccessibleSelection()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- mpParent->SetNoSelection();
-}
-
-
-void SAL_CALL ValueSetAcc::selectAllAccessibleChildren()
-{
- ThrowIfDisposed();
- // unsupported due to single selection only
-}
-
-
-sal_Int32 SAL_CALL ValueSetAcc::getSelectedAccessibleChildCount()
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- sal_Int32 nRet = 0;
-
- for( sal_uInt16 i = 0, nCount = getItemCount(); i < nCount; i++ )
- {
- ValueSetItem* pItem = getItem (i);
-
- if( pItem && mpParent->IsItemSelected( pItem->mnId ) )
- ++nRet;
- }
-
- return nRet;
-}
-
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueSetAcc::getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- uno::Reference< accessibility::XAccessible > xRet;
-
- for( sal_uInt16 i = 0, nCount = getItemCount(), nSel = 0; ( i < nCount ) && !xRet.is(); i++ )
- {
- ValueSetItem* pItem = getItem(i);
-
- if( pItem && mpParent->IsItemSelected( pItem->mnId ) && ( nSelectedChildIndex == static_cast< sal_Int32 >( nSel++ ) ) )
- xRet = pItem->GetAccessible( false/*bIsTransientChildrenDisabled*/ );
- }
-
- return xRet;
-}
-
-
-void SAL_CALL ValueSetAcc::deselectAccessibleChild( sal_Int32 nChildIndex )
-{
- ThrowIfDisposed();
- const SolarMutexGuard aSolarGuard;
- // Because of the single selection we can reset the whole selection when
- // the specified child is currently selected.
- if (isAccessibleChildSelected(nChildIndex))
- mpParent->SetNoSelection();
-}
-
-
-sal_Int64 SAL_CALL ValueSetAcc::getSomething( const uno::Sequence< sal_Int8 >& rId )
-{
- sal_Int64 nRet;
-
- if( isUnoTunnelId<ValueSetAcc>(rId) )
- nRet = reinterpret_cast< sal_Int64 >( this );
- else
- nRet = 0;
-
- return nRet;
-}
-
-
-void SAL_CALL ValueSetAcc::disposing()
-{
- ::std::vector<uno::Reference<accessibility::XAccessibleEventListener> > aListenerListCopy;
-
- {
- // Make a copy of the list and clear the original.
- const SolarMutexGuard aSolarGuard;
- ::osl::MutexGuard aGuard (m_aMutex);
- aListenerListCopy.swap(mxEventListeners);
-
- // Reset the pointer to the parent. It has to be the one who has
- // disposed us because he is dying.
- mpParent = nullptr;
- }
-
- // Inform all listeners that this objects is disposing.
- lang::EventObject aEvent (static_cast<accessibility::XAccessible*>(this));
- for (auto const& listenerCopy : aListenerListCopy)
- {
- try
- {
- listenerCopy->disposing (aEvent);
- }
- catch(const uno::Exception&)
- {
- // Ignore exceptions.
- }
- }
-}
-
-
-sal_uInt16 ValueSetAcc::getItemCount() const
-{
- sal_uInt16 nCount = mpParent->ImplGetVisibleItemCount();
- // When the None-Item is visible then increase the number of items by
- // one.
- if (HasNoneField())
- nCount += 1;
- return nCount;
-}
-
-
-ValueSetItem* ValueSetAcc::getItem (sal_uInt16 nIndex) const
-{
- ValueSetItem* pItem = nullptr;
-
- if (HasNoneField())
- {
- if (nIndex == 0)
- // When present the first item is the then always visible none field.
- pItem = mpParent->ImplGetItem (VALUESET_ITEM_NONEITEM);
- else
- // Shift down the index to compensate for the none field.
- nIndex -= 1;
- }
- if (pItem == nullptr)
- pItem = mpParent->ImplGetItem (nIndex);
-
- return pItem;
-}
-
-
-void ValueSetAcc::ThrowIfDisposed()
-{
- if (rBHelper.bDisposed || rBHelper.bInDispose)
- {
- SAL_WARN("svx", "Calling disposed object. Throwing exception:");
- throw lang::DisposedException (
- "object has been already disposed",
- static_cast<uno::XWeak*>(this));
- }
- else
- {
- DBG_ASSERT (mpParent!=nullptr, "ValueSetAcc not disposed but mpParent == NULL");
- }
-}
-
-bool ValueSetAcc::HasNoneField() const
-{
- assert(mpParent && "ValueSetAcc::HasNoneField called with mpParent==NULL");
- return ((mpParent->GetStyle() & WB_NONEFIELD) != 0);
-}
-
-ValueItemAcc::ValueItemAcc( ValueSetItem* pParent, bool bIsTransientChildrenDisabled ) :
- mpParent( pParent ),
- mbIsTransientChildrenDisabled( bIsTransientChildrenDisabled )
-{
-}
-
-ValueItemAcc::~ValueItemAcc()
-{
-}
-
-void ValueItemAcc::ParentDestroyed()
-{
- const ::osl::MutexGuard aGuard( maMutex );
- mpParent = nullptr;
-}
-
-namespace
-{
- class theValueItemAccUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theValueItemAccUnoTunnelId > {};
-}
-
-const uno::Sequence< sal_Int8 >& ValueItemAcc::getUnoTunnelId()
-{
- return theValueItemAccUnoTunnelId::get().getSeq();
-}
-
-
-ValueItemAcc* ValueItemAcc::getImplementation( const uno::Reference< uno::XInterface >& rxData )
- throw()
-{
- try
- {
- return comphelper::getUnoTunnelImplementation<ValueItemAcc>(rxData);
- }
- catch(const css::uno::Exception&)
- {
- return nullptr;
- }
-}
-
-
-uno::Reference< accessibility::XAccessibleContext > SAL_CALL ValueItemAcc::getAccessibleContext()
-{
- return this;
-}
-
-
-sal_Int32 SAL_CALL ValueItemAcc::getAccessibleChildCount()
-{
- return 0;
-}
-
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueItemAcc::getAccessibleChild( sal_Int32 )
-{
- throw lang::IndexOutOfBoundsException();
-}
-
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueItemAcc::getAccessibleParent()
-{
- const SolarMutexGuard aSolarGuard;
- uno::Reference< accessibility::XAccessible > xRet;
-
- if( mpParent )
- xRet = mpParent->mrParent.GetAccessible();
-
- return xRet;
-}
-
-
-sal_Int32 SAL_CALL ValueItemAcc::getAccessibleIndexInParent()
-{
- const SolarMutexGuard aSolarGuard;
- // The index defaults to -1 to indicate the child does not belong to its
- // parent.
- sal_Int32 nIndexInParent = -1;
-
- if( mpParent )
- {
- bool bDone = false;
-
- sal_uInt16 nCount = mpParent->mrParent.ImplGetVisibleItemCount();
- ValueSetItem* pItem;
- for (sal_uInt16 i=0; i<nCount && !bDone; i++)
- {
- // Guard the retrieval of the i-th child with a try/catch block
- // just in case the number of children changes in the meantime.
- try
- {
- pItem = mpParent->mrParent.ImplGetItem(i);
- }
- catch (const lang::IndexOutOfBoundsException&)
- {
- pItem = nullptr;
- }
-
- // Do not create an accessible object for the test.
- if (pItem != nullptr && pItem->mxAcc.is())
- if (pItem->GetAccessible( mbIsTransientChildrenDisabled ).get() == this )
- {
- nIndexInParent = i;
- bDone = true;
- }
- }
- }
-
- //if this valueset contain a none field(common value is default), then we should increase the real index and set the noitem index value equal 0.
- if ( mpParent && ( (mpParent->mrParent.GetStyle() & WB_NONEFIELD) != 0 ) )
- {
- ValueSetItem* pFirstItem = mpParent->mrParent.ImplGetItem (VALUESET_ITEM_NONEITEM);
- if( pFirstItem && pFirstItem ->GetAccessible(mbIsTransientChildrenDisabled).get() == this )
- nIndexInParent = 0;
- else
- nIndexInParent++;
- }
- return nIndexInParent;
-}
-
-
-sal_Int16 SAL_CALL ValueItemAcc::getAccessibleRole()
-{
- return accessibility::AccessibleRole::LIST_ITEM;
-}
-
-
-OUString SAL_CALL ValueItemAcc::getAccessibleDescription()
-{
- return OUString();
-}
-
-
-OUString SAL_CALL ValueItemAcc::getAccessibleName()
-{
- const SolarMutexGuard aSolarGuard;
-
- if( mpParent )
- {
- if (mpParent->maText.isEmpty())
- return "Item " + OUString::number(static_cast<sal_Int32>(mpParent->mnId));
- else
- return mpParent->maText;
- }
-
- return OUString();
-}
-
-
-uno::Reference< accessibility::XAccessibleRelationSet > SAL_CALL ValueItemAcc::getAccessibleRelationSet()
-{
- return uno::Reference< accessibility::XAccessibleRelationSet >();
-}
-
-
-uno::Reference< accessibility::XAccessibleStateSet > SAL_CALL ValueItemAcc::getAccessibleStateSet()
-{
- const SolarMutexGuard aSolarGuard;
- ::utl::AccessibleStateSetHelper* pStateSet = new ::utl::AccessibleStateSetHelper;
-
- if( mpParent )
- {
- pStateSet->AddState (accessibility::AccessibleStateType::ENABLED);
- pStateSet->AddState (accessibility::AccessibleStateType::SENSITIVE);
- pStateSet->AddState (accessibility::AccessibleStateType::SHOWING);
- pStateSet->AddState (accessibility::AccessibleStateType::VISIBLE);
- if ( !mbIsTransientChildrenDisabled )
- pStateSet->AddState (accessibility::AccessibleStateType::TRANSIENT);
-
- // SELECTABLE
- pStateSet->AddState( accessibility::AccessibleStateType::SELECTABLE );
- // pStateSet->AddState( accessibility::AccessibleStateType::FOCUSABLE );
-
- // SELECTED
- if( mpParent->mrParent.GetSelectedItemId() == mpParent->mnId )
- {
- pStateSet->AddState( accessibility::AccessibleStateType::SELECTED );
- // pStateSet->AddState( accessibility::AccessibleStateType::FOCUSED );
- }
- }
-
- return pStateSet;
-}
-
-
-lang::Locale SAL_CALL ValueItemAcc::getLocale()
-{
- const SolarMutexGuard aSolarGuard;
- uno::Reference< accessibility::XAccessible > xParent( getAccessibleParent() );
- lang::Locale aRet( "", "", "" );
-
- if( xParent.is() )
- {
- uno::Reference< accessibility::XAccessibleContext > xParentContext( xParent->getAccessibleContext() );
-
- if( xParentContext.is() )
- aRet = xParentContext->getLocale();
- }
-
- return aRet;
-}
-
-
-void SAL_CALL ValueItemAcc::addAccessibleEventListener( const uno::Reference< accessibility::XAccessibleEventListener >& rxListener )
-{
- const ::osl::MutexGuard aGuard( maMutex );
-
- if( !rxListener.is() )
- return;
-
- bool bFound = false;
-
- for (auto const& eventListener : mxEventListeners)
- {
- if(eventListener == rxListener)
- {
- bFound = true;
- break;
- }
- }
-
- if (!bFound)
- mxEventListeners.push_back( rxListener );
-}
-
-
-void SAL_CALL ValueItemAcc::removeAccessibleEventListener( const uno::Reference< accessibility::XAccessibleEventListener >& rxListener )
-{
- const ::osl::MutexGuard aGuard( maMutex );
-
- if( rxListener.is() )
- {
- ::std::vector< uno::Reference< accessibility::XAccessibleEventListener > >::iterator aIter =
- std::find(mxEventListeners.begin(), mxEventListeners.end(), rxListener);
-
- if (aIter != mxEventListeners.end())
- mxEventListeners.erase(aIter);
- }
-}
-
-
-sal_Bool SAL_CALL ValueItemAcc::containsPoint( const awt::Point& aPoint )
-{
- const awt::Rectangle aRect( getBounds() );
- const Point aSize( aRect.Width, aRect.Height );
- const Point aNullPoint, aTestPoint( aPoint.X, aPoint.Y );
-
- return tools::Rectangle( aNullPoint, aSize ).IsInside( aTestPoint );
-}
-
-uno::Reference< accessibility::XAccessible > SAL_CALL ValueItemAcc::getAccessibleAtPoint( const awt::Point& )
-{
- uno::Reference< accessibility::XAccessible > xRet;
- return xRet;
-}
-
-awt::Rectangle SAL_CALL ValueItemAcc::getBounds()
-{
- const SolarMutexGuard aSolarGuard;
- awt::Rectangle aRet;
-
- if( mpParent )
- {
- tools::Rectangle aRect( mpParent->mrParent.GetItemRect(mpParent->mnId) );
- tools::Rectangle aParentRect( Point(), mpParent->mrParent.GetOutputSizePixel() );
-
- aRect.Intersection( aParentRect );
-
- aRet.X = aRect.Left();
- aRet.Y = aRect.Top();
- aRet.Width = aRect.GetWidth();
- aRet.Height = aRect.GetHeight();
- }
-
- return aRet;
-}
-
-awt::Point SAL_CALL ValueItemAcc::getLocation()
-{
- const awt::Rectangle aRect( getBounds() );
- awt::Point aRet;
-
- aRet.X = aRect.X;
- aRet.Y = aRect.Y;
-
- return aRet;
-}
-
-awt::Point SAL_CALL ValueItemAcc::getLocationOnScreen()
-{
- const SolarMutexGuard aSolarGuard;
- awt::Point aRet;
-
- if( mpParent )
- {
- const Point aPos = mpParent->mrParent.GetItemRect(mpParent->mnId).TopLeft();
- const Point aScreenPos( mpParent->mrParent.OutputToAbsoluteScreenPixel( aPos ) );
-
- aRet.X = aScreenPos.X();
- aRet.Y = aScreenPos.Y();
- }
-
- return aRet;
-}
-
-awt::Size SAL_CALL ValueItemAcc::getSize()
-{
- const awt::Rectangle aRect( getBounds() );
- awt::Size aRet;
-
- aRet.Width = aRect.Width;
- aRet.Height = aRect.Height;
-
- return aRet;
-}
-
-void SAL_CALL ValueItemAcc::grabFocus()
-{
- // nothing to do
-}
-
-sal_Int32 SAL_CALL ValueItemAcc::getForeground( )
-{
- Color nColor = Application::GetSettings().GetStyleSettings().GetWindowTextColor();
- return static_cast<sal_Int32>(nColor);
-}
-
-sal_Int32 SAL_CALL ValueItemAcc::getBackground( )
-{
- Color nColor;
- if (mpParent && mpParent->meType == VALUESETITEM_COLOR)
- nColor = mpParent->maColor;
- else
- nColor = Application::GetSettings().GetStyleSettings().GetWindowColor();
- return static_cast<sal_Int32>(nColor);
-}
-
-sal_Int64 SAL_CALL ValueItemAcc::getSomething( const uno::Sequence< sal_Int8 >& rId )
-{
- sal_Int64 nRet;
-
- if( isUnoTunnelId<ValueItemAcc>(rId) )
- nRet = reinterpret_cast< sal_Int64 >( this );
- else
- nRet = 0;
-
- return nRet;
-}
-
SvtValueItemAcc::SvtValueItemAcc( SvtValueSetItem* pParent, bool bIsTransientChildrenDisabled ) :
mpParent( pParent ),
mbIsTransientChildrenDisabled( bIsTransientChildrenDisabled )
diff --git a/svtools/source/control/valueimp.hxx b/svtools/source/control/valueimp.hxx
index 4584a27faaed..4d1bb79ae25c 100644
--- a/svtools/source/control/valueimp.hxx
+++ b/svtools/source/control/valueimp.hxx
@@ -45,29 +45,9 @@ enum ValueSetItemType
VALUESETITEM_USERDRAW
};
-class ValueItemAcc;
-class ValueSet;
class SvtValueItemAcc;
class SvtValueSet;
-struct ValueSetItem
-{
- ValueSet& mrParent;
- sal_uInt16 mnId;
- sal_uInt8 meType;
- bool mbVisible;
- Image maImage;
- Color maColor;
- OUString maText;
- rtl::Reference< ValueItemAcc > mxAcc;
-
- explicit ValueSetItem( ValueSet& rParent );
- ~ValueSetItem();
-
- css::uno::Reference< css::accessibility::XAccessible >
- GetAccessible( bool bIsTransientChildrenDisabled );
-};
-
struct SvtValueSetItem
{
SvtValueSet& mrParent;
@@ -96,119 +76,6 @@ typedef ::cppu::WeakComponentImplHelper<
css::lang::XUnoTunnel >
ValueSetAccComponentBase;
-class ValueSetAcc :
- public ::cppu::BaseMutex,
- public ValueSetAccComponentBase
-{
-public:
-
- explicit ValueSetAcc(ValueSet* pParent);
- virtual ~ValueSetAcc() override;
-
- void FireAccessibleEvent( short nEventId, const css::uno::Any& rOldValue, const css::uno::Any& rNewValue );
- bool HasAccessibleListeners() const { return( mxEventListeners.size() > 0 ); }
-
- static ValueSetAcc* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) throw();
-
-public:
-
- /** Called by the corresponding ValueSet when it gets the focus.
- Stores the new focus state and broadcasts a state change event.
- */
- void GetFocus();
-
- /** Called by the corresponding ValueSet when it loses the focus.
- Stores the new focus state and broadcasts a state change event.
- */
- void LoseFocus();
-
- // XAccessible
- virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
-
- // XAccessibleEventBroadcaster
- virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
- virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
-
- // XAccessibleContext
- virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override;
- virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override;
- virtual sal_Int16 SAL_CALL getAccessibleRole( ) override;
- virtual OUString SAL_CALL getAccessibleDescription( ) override;
- virtual OUString SAL_CALL getAccessibleName( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override;
- virtual css::lang::Locale SAL_CALL getLocale( ) override;
-
- // XAccessibleComponent
- virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
- virtual css::awt::Rectangle SAL_CALL getBounds( ) override;
- virtual css::awt::Point SAL_CALL getLocation( ) override;
- virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override;
- virtual css::awt::Size SAL_CALL getSize( ) override;
- virtual void SAL_CALL grabFocus( ) override;
- virtual sal_Int32 SAL_CALL getForeground( ) override;
- virtual sal_Int32 SAL_CALL getBackground( ) override;
-
- // XAccessibleSelection
- virtual void SAL_CALL selectAccessibleChild( sal_Int32 nChildIndex ) override;
- virtual sal_Bool SAL_CALL isAccessibleChildSelected( sal_Int32 nChildIndex ) override;
- virtual void SAL_CALL clearAccessibleSelection( ) override;
- virtual void SAL_CALL selectAllAccessibleChildren( ) override;
- virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild( sal_Int32 nSelectedChildIndex ) override;
- virtual void SAL_CALL deselectAccessibleChild( sal_Int32 nSelectedChildIndex ) override;
-
- // XUnoTunnel
- static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId();
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& rId ) override;
-
-private:
- ::std::vector< css::uno::Reference<
- css::accessibility::XAccessibleEventListener > > mxEventListeners;
- VclPtr<ValueSet> mpParent;
- /// The current FOCUSED state.
- bool mbIsFocused;
-
- /** Tell all listeners that the object is dying. This callback is
- usually called from the WeakComponentImplHelper class.
- */
- virtual void SAL_CALL disposing() override;
-
- /** Return the number of items. This takes the None-Item into account.
- */
- sal_uInt16 getItemCount() const;
-
- /** Return the item associated with the given index. The None-Item is
- taken into account which, when present, is taken to be the first
- (with index 0) item.
- @param nIndex
- Index of the item to return. The index 0 denotes the None-Item
- when present.
- @return
- Returns NULL when the given index is out of range.
- */
- ValueSetItem* getItem (sal_uInt16 nIndex) const;
-
- /** Check whether or not the object has been disposed (or is in the
- state of being disposed). If that is the case then
- DisposedException is thrown to inform the (indirect) caller of the
- foul deed.
- @throws css::lang::DisposedException
- */
- void ThrowIfDisposed();
-
- /** Check whether the value set has a 'none' field, i.e. a field (button)
- that deselects any items (selects none of them).
- @return
- Returns <true/> if there is a 'none' field and <false/> if it is
- missing.
- */
- bool HasNoneField() const;
-};
-
class SvtValueSetAcc :
public ::cppu::BaseMutex,
public ValueSetAccComponentBase
@@ -322,67 +189,6 @@ private:
bool HasNoneField() const;
};
-
-class ValueItemAcc : public ::cppu::WeakImplHelper< css::accessibility::XAccessible,
- css::accessibility::XAccessibleEventBroadcaster,
- css::accessibility::XAccessibleContext,
- css::accessibility::XAccessibleComponent,
- css::lang::XUnoTunnel >
-{
-private:
-
- ::std::vector< css::uno::Reference<
- css::accessibility::XAccessibleEventListener > > mxEventListeners;
- ::osl::Mutex maMutex;
- ValueSetItem* mpParent;
- bool mbIsTransientChildrenDisabled;
-
-public:
-
- ValueItemAcc( ValueSetItem* pParent, bool bIsTransientChildrenDisabled );
- virtual ~ValueItemAcc() override;
-
- void ParentDestroyed();
-
- static ValueItemAcc* getImplementation( const css::uno::Reference< css::uno::XInterface >& rxData ) throw();
-
-public:
-
- // XAccessible
- virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
-
- // XAccessibleEventBroadcaster
- virtual void SAL_CALL addAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
- virtual void SAL_CALL removeAccessibleEventListener( const css::uno::Reference< css::accessibility::XAccessibleEventListener >& xListener ) override;
-
- // XAccessibleContext
- virtual sal_Int32 SAL_CALL getAccessibleChildCount( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild( sal_Int32 i ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent( ) override;
- virtual sal_Int32 SAL_CALL getAccessibleIndexInParent( ) override;
- virtual sal_Int16 SAL_CALL getAccessibleRole( ) override;
- virtual OUString SAL_CALL getAccessibleDescription( ) override;
- virtual OUString SAL_CALL getAccessibleName( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override;
- virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override;
- virtual css::lang::Locale SAL_CALL getLocale( ) override;
-
- // XAccessibleComponent
- virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& aPoint ) override;
- virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) override;
- virtual css::awt::Rectangle SAL_CALL getBounds( ) override;
- virtual css::awt::Point SAL_CALL getLocation( ) override;
- virtual css::awt::Point SAL_CALL getLocationOnScreen( ) override;
- virtual css::awt::Size SAL_CALL getSize( ) override;
- virtual void SAL_CALL grabFocus( ) override;
- virtual sal_Int32 SAL_CALL getForeground( ) override;
- virtual sal_Int32 SAL_CALL getBackground( ) override;
-
- // XUnoTunnel
- static const css::uno::Sequence< sal_Int8 >& getUnoTunnelId();
- virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& rId ) override;
-};
-
class SvtValueItemAcc : public ::cppu::WeakImplHelper< css::accessibility::XAccessible,
css::accessibility::XAccessibleEventBroadcaster,
css::accessibility::XAccessibleContext,
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx
index 9f505ffea1da..90f3f362fe1f 100644
--- a/svtools/source/control/valueset.cxx
+++ b/svtools/source/control/valueset.cxx
@@ -33,7 +33,6 @@
#include <vcl/settings.hxx>
#include <vcl/commandevent.hxx>
#include <vcl/virdev.hxx>
-#include <uitest/uiobject.hxx>
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/lang/XComponent.hpp>
@@ -64,1812 +63,6 @@ enum
}
-ValueSet::ValueSet( vcl::Window* pParent, WinBits nWinStyle ) :
- Control( pParent, nWinStyle ),
- maColor( COL_TRANSPARENT )
-{
- mnItemWidth = 0;
- mnItemHeight = 0;
- mnTextOffset = 0;
- mnVisLines = 0;
- mnLines = 0;
- mnUserItemWidth = 0;
- mnUserItemHeight = 0;
- mnFirstLine = 0;
- mnSelItemId = 0;
- mnHighItemId = 0;
- mnCols = 0;
- mnCurCol = 0;
- mnUserCols = 0;
- mnUserVisLines = 0;
- mnFrameStyle = DrawFrameStyle::NONE;
- mbFormat = true;
- mbHighlight = false;
- mbNoSelection = true;
- mbDrawSelection = true;
- mbBlackSel = false;
- mbDoubleSel = false;
- mbScroll = false;
- mbEdgeBlending = false;
- mbHasVisibleItems = false;
-
- ImplInitSettings( true, true, true );
-}
-
-ValueSet::~ValueSet()
-{
- disposeOnce();
-}
-
-void ValueSet::dispose()
-{
- Reference<XComponent> xComponent(GetAccessible(false), UNO_QUERY);
- if (xComponent.is())
- xComponent->dispose();
-
- ImplDeleteItems();
- mxScrollBar.disposeAndClear();
- Control::dispose();
-}
-
-void ValueSet::ImplDeleteItems()
-{
- const size_t n = mItemList.size();
-
- for ( size_t i = 0; i < n; ++i )
- {
- ValueSetItem* pItem = mItemList[i].get();
- if ( pItem->mbVisible && ImplHasAccessibleListeners() )
- {
- Any aOldAny;
- Any aNewAny;
-
- aOldAny <<= pItem->GetAccessible( false/*bIsTransientChildrenDisabled*/ );
- ImplFireAccessibleEvent(AccessibleEventId::CHILD, aOldAny, aNewAny);
- }
-
- mItemList[i].reset();
- }
-
- mItemList.clear();
-}
-
-void ValueSet::ApplySettings(vcl::RenderContext& rRenderContext)
-{
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
-
- ApplyControlFont(rRenderContext, rStyleSettings.GetAppFont());
- ApplyControlForeground(rRenderContext, rStyleSettings.GetButtonTextColor());
- SetTextFillColor();
- Color aColor;
- if (GetStyle() & WB_MENUSTYLEVALUESET)
- aColor = rStyleSettings.GetMenuColor();
- else if (IsEnabled() && (GetStyle() & WB_FLATVALUESET))
- aColor = rStyleSettings.GetWindowColor();
- else
- aColor = rStyleSettings.GetFaceColor();
- if (GetBackground().GetColor() == COL_TRANSPARENT)
- ApplyControlBackground(rRenderContext, aColor);
-}
-
-void ValueSet::ImplInitSettings(bool bFont, bool bForeground, bool bBackground)
-{
- const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
-
- if (bFont)
- {
- ApplyControlFont(*this, rStyleSettings.GetAppFont());
- }
-
- if (bForeground || bFont)
- {
- ApplyControlForeground(*this, rStyleSettings.GetButtonTextColor());
- SetTextFillColor();
- }
-
- if (bBackground)
- {
- Color aColor;
- if (GetStyle() & WB_MENUSTYLEVALUESET)
- aColor = rStyleSettings.GetMenuColor();
- else if (IsEnabled() && (GetStyle() & WB_FLATVALUESET))
- aColor = rStyleSettings.GetWindowColor();
- else
- aColor = rStyleSettings.GetFaceColor();
- ApplyControlBackground(*this, aColor);
- }
-}
-
-void ValueSet::ImplInitScrollBar()
-{
- if (!(GetStyle() & WB_VSCROLL))
- return;
-
- if (!mxScrollBar.get())
- {
- mxScrollBar.reset(VclPtr<ScrollBar>::Create(this, WB_VSCROLL | WB_DRAG));
- mxScrollBar->SetScrollHdl(LINK(this, ValueSet, ImplScrollHdl));
- }
- else
- {
- // adapt the width because of the changed settings
- long nScrBarWidth = Application::GetSettings().GetStyleSettings().GetScrollBarSize();
- mxScrollBar->setPosSizePixel(0, 0, nScrBarWidth, 0, PosSizeFlags::Width);
- }
-}
-
-void ValueSet::ImplFormatItem(vcl::RenderContext& rRenderContext, ValueSetItem* pItem, tools::Rectangle aRect)
-{
- WinBits nStyle = GetStyle();
- if (nStyle & WB_ITEMBORDER)
- {
- aRect.AdjustLeft(1 );
- aRect.AdjustTop(1 );
- aRect.AdjustRight( -1 );
- aRect.AdjustBottom( -1 );
-
- if (nStyle & WB_FLATVALUESET)
- {
- sal_Int32 nBorder = (nStyle & WB_DOUBLEBORDER) ? 2 : 1;
-
- aRect.AdjustLeft(nBorder );
- aRect.AdjustTop(nBorder );
- aRect.AdjustRight( -nBorder );
- aRect.AdjustBottom( -nBorder );
- }
- else
- {
- DecorationView aView(&rRenderContext);
- aRect = aView.DrawFrame(aRect, mnFrameStyle);
- }
- }
-
- if (pItem == mpNoneItem.get())
- pItem->maText = GetText();
-
- if (!((aRect.GetHeight() > 0) && (aRect.GetWidth() > 0)))
- return;
-
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
-
- if (pItem == mpNoneItem.get())
- {
- rRenderContext.SetTextColor((nStyle & WB_MENUSTYLEVALUESET)
- ? rStyleSettings.GetMenuTextColor()
- : rStyleSettings.GetWindowTextColor());
- rRenderContext.SetTextFillColor();
- rRenderContext.SetFillColor((nStyle & WB_MENUSTYLEVALUESET)
- ? rStyleSettings.GetMenuColor()
- : rStyleSettings.GetWindowColor());
- rRenderContext.DrawRect(aRect);
- Point aTxtPos(aRect.Left() + 2, aRect.Top());
- long nTxtWidth = rRenderContext.GetTextWidth(pItem->maText);
- if ((aTxtPos.X() + nTxtWidth) > aRect.Right())
- {
- rRenderContext.SetClipRegion(vcl::Region(aRect));
- rRenderContext.DrawText(aTxtPos, pItem->maText);
- rRenderContext.SetClipRegion();
- }
- else
- rRenderContext.DrawText(aTxtPos, pItem->maText);
- }
- else if (pItem->meType == VALUESETITEM_COLOR)
- {
- rRenderContext.SetFillColor(pItem->maColor);
- rRenderContext.DrawRect(aRect);
- }
- else
- {
- if (IsColor())
- rRenderContext.SetFillColor(maColor);
- else if (nStyle & WB_MENUSTYLEVALUESET)
- rRenderContext.SetFillColor(rStyleSettings.GetMenuColor());
- else if (IsEnabled())
- rRenderContext.SetFillColor(rStyleSettings.GetWindowColor());
- else
- rRenderContext.SetFillColor(rStyleSettings.GetFaceColor());
- rRenderContext.DrawRect(aRect);
-
- if (pItem->meType == VALUESETITEM_USERDRAW)
- {
- }
- else
- {
- Size aImageSize = pItem->maImage.GetSizePixel();
- Size aRectSize = aRect.GetSize();
- Point aPos(aRect.Left(), aRect.Top());
- aPos.AdjustX((aRectSize.Width() - aImageSize.Width()) / 2 );
-
- if (pItem->meType != VALUESETITEM_IMAGE_AND_TEXT)
- aPos.AdjustY((aRectSize.Height() - aImageSize.Height()) / 2 );
-
- DrawImageFlags nImageStyle = DrawImageFlags::NONE;
- if (!IsEnabled())
- nImageStyle |= DrawImageFlags::Disable;
-
- if (aImageSize.Width() > aRectSize.Width() ||
- aImageSize.Height() > aRectSize.Height())
- {
- rRenderContext.SetClipRegion(vcl::Region(aRect));
- rRenderContext.DrawImage(aPos, pItem->maImage, nImageStyle);
- rRenderContext.SetClipRegion();
- }
- else
- rRenderContext.DrawImage(aPos, pItem->maImage, nImageStyle);
-
- if (pItem->meType == VALUESETITEM_IMAGE_AND_TEXT)
- {
- rRenderContext.SetFont(rRenderContext.GetFont());
- rRenderContext.SetTextColor((nStyle & WB_MENUSTYLEVALUESET) ? rStyleSettings.GetMenuTextColor() : rStyleSettings.GetWindowTextColor());
- rRenderContext.SetTextFillColor();
-
- long nTxtWidth = rRenderContext.GetTextWidth(pItem->maText);
-
- if (nTxtWidth > aRect.GetWidth())
- rRenderContext.SetClipRegion(vcl::Region(aRect));
-
- rRenderContext.DrawText(Point(aRect.Left() + (aRect.GetWidth() - nTxtWidth) / 2,
- aRect.Bottom() - rRenderContext.GetTextHeight()),
- pItem->maText);
-
- if (nTxtWidth > aRect.GetWidth())
- rRenderContext.SetClipRegion();
- }
- }
- }
-
- const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0);
-
- if (nEdgeBlendingPercent)
- {
- const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor());
- const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor());
- const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100);
- const BitmapEx aBlendFrame(createBlendFrame(aRect.GetSize(), nAlpha, rTopLeft, rBottomRight));
-
- if (!aBlendFrame.IsEmpty())
- {
- rRenderContext.DrawBitmapEx(aRect.TopLeft(), aBlendFrame);
- }
- }
-}
-
-Reference<XAccessible> ValueSet::CreateAccessible()
-{
- return new ValueSetAcc( this );
-}
-
-void ValueSet::Format(vcl::RenderContext& rRenderContext)
-{
- Size aWinSize(GetOutputSizePixel());
- size_t nItemCount = mItemList.size();
- WinBits nStyle = GetStyle();
- long nTxtHeight = rRenderContext.GetTextHeight();
- long nOff;
- long nNoneHeight;
- long nNoneSpace;
- VclPtr<ScrollBar> xDeletedScrollBar;
-
- // consider the scrolling
- if (nStyle & WB_VSCROLL)
- ImplInitScrollBar();
- else
- {
- xDeletedScrollBar = mxScrollBar;
- mxScrollBar.clear();
- }
-
- // calculate item offset
- if (nStyle & WB_ITEMBORDER)
- {
- if (nStyle & WB_DOUBLEBORDER)
- nOff = ITEM_OFFSET_DOUBLE;
- else
- nOff = ITEM_OFFSET;
- }
- else
- nOff = 0;
-
- // consider size, if NameField does exist
- if (nStyle & WB_NAMEFIELD)
- {
- mnTextOffset = aWinSize.Height() - nTxtHeight - NAME_OFFSET;
- aWinSize.AdjustHeight( -(nTxtHeight + NAME_OFFSET) );
-
- if (!(nStyle & WB_FLATVALUESET))
- {
- mnTextOffset -= NAME_LINE_HEIGHT + NAME_LINE_OFF_Y;
- aWinSize.AdjustHeight( -(NAME_LINE_HEIGHT + NAME_LINE_OFF_Y) );
- }
- }
- else
- mnTextOffset = 0;
-
- // consider offset and size, if NoneField does exist
- if (nStyle & WB_NONEFIELD)
- {
- nNoneHeight = nTxtHeight + nOff;
- nNoneSpace = 0;
- }
- else
- {
- nNoneHeight = 0;
- nNoneSpace = 0;
- mpNoneItem.reset();
- }
-
- // calculate ScrollBar width
- long nScrBarWidth = 0;
- if (mxScrollBar.get())
- nScrBarWidth = mxScrollBar->GetSizePixel().Width() + SCRBAR_OFFSET;
-
- // calculate number of columns
- if (!mnUserCols)
- {
- if (mnUserItemWidth)
- {
- mnCols = static_cast<sal_uInt16>((aWinSize.Width() - nScrBarWidth) / mnUserItemWidth);
- if (mnCols <= 0)
- mnCols = 1;
- }
- else
- {
- mnCols = 1;
- }
- }
- else
- {
- mnCols = mnUserCols;
- }
-
- // calculate number of rows
- mbScroll = false;
-
- // Floor( (M+N-1)/N )==Ceiling( M/N )
- mnLines = (static_cast<long>(nItemCount) + mnCols - 1) / mnCols;
- if (mnLines <= 0)
- mnLines = 1;
-
- long nCalcHeight = aWinSize.Height() - nNoneHeight;
- if (mnUserVisLines)
- {
- mnVisLines = mnUserVisLines;
- }
- else if (mnUserItemHeight)
- {
- mnVisLines = (nCalcHeight - nNoneSpace) / mnUserItemHeight;
- if (!mnVisLines)
- mnVisLines = 1;
- }
- else
- {
- mnVisLines = mnLines;
- }
-
- if (mnLines > mnVisLines)
- mbScroll = true;
-
- if (mnLines <= mnVisLines)
- {
- mnFirstLine = 0;
- }
- else
- {
- if (mnFirstLine > o3tl::make_unsigned(mnLines - mnVisLines))
- mnFirstLine = static_cast<sal_uInt16>(mnLines - mnVisLines);
- }
-
- // calculate item size
- const long nLineSpace = nNoneSpace;
- if (mnUserItemWidth && !mnUserCols)
- {
- mnItemWidth = mnUserItemWidth;
- if (mnItemWidth > aWinSize.Width() - nScrBarWidth)
- mnItemWidth = aWinSize.Width() - nScrBarWidth;
- }
- else
- mnItemWidth = (aWinSize.Width() - nScrBarWidth) / mnCols;
- if (mnUserItemHeight && !mnUserVisLines)
- {
- mnItemHeight = mnUserItemHeight;
- if (mnItemHeight > nCalcHeight - nNoneSpace)
- mnItemHeight = nCalcHeight - nNoneSpace;
- }
- else
- {
- nCalcHeight -= nLineSpace;
- mnItemHeight = nCalcHeight / mnVisLines;
- }
-
- // nothing is changed in case of too small items
- if ((mnItemWidth <= 0) ||
- (mnItemHeight <= ((nStyle & WB_ITEMBORDER) ? 4 : 2)) ||
- !nItemCount)
- {
- mbHasVisibleItems = false;
-
- if ((nStyle & WB_NONEFIELD) && mpNoneItem)
- {
- mpNoneItem->mbVisible = false;
- mpNoneItem->maText = GetText();
- }
-
- for (size_t i = 0; i < nItemCount; i++)
- {
- mItemList[i]->mbVisible = false;
- }
-
- if (mxScrollBar.get())
- mxScrollBar->Hide();
- }
- else
- {
- mbHasVisibleItems = true;
-
- // determine Frame-Style
- if (nStyle & WB_DOUBLEBORDER)
- mnFrameStyle = DrawFrameStyle::DoubleIn;
- else
- mnFrameStyle = DrawFrameStyle::In;
-
- // determine selected color and width
- // if necessary change the colors, to make the selection
- // better detectable
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
- Color aHighColor(rStyleSettings.GetHighlightColor());
- if (((aHighColor.GetRed() > 0x80) || (aHighColor.GetGreen() > 0x80) ||
- (aHighColor.GetBlue() > 0x80)) ||
- ((aHighColor.GetRed() == 0x80) && (aHighColor.GetGreen() == 0x80) &&
- (aHighColor.GetBlue() == 0x80)))
- {
- mbBlackSel = true;
- }
- else
- {
- mbBlackSel = false;
- }
- // draw the selection with double width if the items are bigger
- if ((nStyle & WB_DOUBLEBORDER) &&
- ((mnItemWidth >= 25) && (mnItemHeight >= 20)))
- {
- mbDoubleSel = true;
- }
- else
- {
- mbDoubleSel = false;
- }
-
- // calculate offsets
- long nAllItemWidth = mnItemWidth * mnCols;
- long nAllItemHeight = (mnItemHeight * mnVisLines) + nNoneHeight + nLineSpace;
- long nStartX = (aWinSize.Width() - nScrBarWidth - nAllItemWidth) / 2;
- long nStartY = (aWinSize.Height() - nAllItemHeight) / 2;
-
- // calculate and draw items
- rRenderContext.SetLineColor();
- long x = nStartX;
- long y = nStartY;
-
- // create NoSelection field and show it
- if (nStyle & WB_NONEFIELD)
- {
- if (mpNoneItem == nullptr)
- mpNoneItem.reset(new ValueSetItem(*this));
-
- mpNoneItem->mnId = 0;
- mpNoneItem->meType = VALUESETITEM_NONE;
- mpNoneItem->mbVisible = true;
- maNoneItemRect.SetLeft( x );
- maNoneItemRect.SetTop( y );
- maNoneItemRect.SetRight( maNoneItemRect.Left() + aWinSize.Width() - x - 1 );
- maNoneItemRect.SetBottom( y + nNoneHeight - 1 );
-
- ImplFormatItem(rRenderContext, mpNoneItem.get(), maNoneItemRect);
-
- y += nNoneHeight + nNoneSpace;
- }
-
- // draw items
- sal_uLong nFirstItem = static_cast<sal_uLong>(mnFirstLine) * mnCols;
- sal_uLong nLastItem = nFirstItem + (mnVisLines * mnCols);
-
- maItemListRect.SetLeft( x );
- maItemListRect.SetTop( y );
- maItemListRect.SetRight( x + mnCols * mnItemWidth - 1 );
- maItemListRect.SetBottom( y + mnVisLines * mnItemHeight - 1 );
-
- for (size_t i = 0; i < nItemCount; i++)
- {
- ValueSetItem* pItem = mItemList[i].get();
-
- if (i >= nFirstItem && i < nLastItem)
- {
- if (!pItem->mbVisible && ImplHasAccessibleListeners())
- {
- Any aOldAny;
- Any aNewAny;
-
- aNewAny <<= pItem->GetAccessible(false/*bIsTransientChildrenDisabled*/);
- ImplFireAccessibleEvent(AccessibleEventId::CHILD, aOldAny, aNewAny);
- }
-
- pItem->mbVisible = true;
- ImplFormatItem(rRenderContext, pItem, tools::Rectangle(Point(x, y), Size(mnItemWidth, mnItemHeight)));
-
- if (!((i + 1) % mnCols))
- {
- x = nStartX;
- y += mnItemHeight;
- }
- else
- x += mnItemWidth;
- }
- else
- {
- if (pItem->mbVisible && ImplHasAccessibleListeners())
- {
- Any aOldAny;
- Any aNewAny;
-
- aOldAny <<= pItem->GetAccessible(false/*bIsTransientChildrenDisabled*/);
- ImplFireAccessibleEvent(AccessibleEventId::CHILD, aOldAny, aNewAny);
- }
-
- pItem->mbVisible = false;
- }
- }
-
- // arrange ScrollBar, set values and show it
- if (mxScrollBar.get())
- {
- Point aPos(aWinSize.Width() - nScrBarWidth + SCRBAR_OFFSET, 0);
- Size aSize(nScrBarWidth - SCRBAR_OFFSET, aWinSize.Height());
- // If a none field is visible, then we center the scrollbar
- if (nStyle & WB_NONEFIELD)
- {
- aPos.setY( nStartY + nNoneHeight + 1 );
- aSize.setHeight( (mnItemHeight * mnVisLines) - 2 );
- }
- mxScrollBar->SetPosSizePixel(aPos, aSize);
- mxScrollBar->SetRangeMax(mnLines);
- mxScrollBar->SetVisibleSize(mnVisLines);
- mxScrollBar->SetThumbPos(static_cast<long>(mnFirstLine));
- long nPageSize = mnVisLines;
- if (nPageSize < 1)
- nPageSize = 1;
- mxScrollBar->SetPageSize(nPageSize);
- mxScrollBar->Show();
- }
- }
-
- // waiting for the next since the formatting is finished
- mbFormat = false;
-
- xDeletedScrollBar.disposeAndClear();
-}
-
-void ValueSet::ImplDrawItemText(vcl::RenderContext& rRenderContext, const OUString& rText)
-{
- if (!(GetStyle() & WB_NAMEFIELD))
- return;
-
- Size aWinSize(GetOutputSizePixel());
- long nTxtWidth = rRenderContext.GetTextWidth(rText);
- long nTxtOffset = mnTextOffset;
-
- // delete rectangle and show text
- if (GetStyle() & WB_FLATVALUESET)
- {
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
- rRenderContext.SetLineColor();
- rRenderContext.SetFillColor(rStyleSettings.GetFaceColor());
- rRenderContext.DrawRect(tools::Rectangle(Point(0, nTxtOffset), Point(aWinSize.Width(), aWinSize.Height())));
- rRenderContext.SetTextColor(rStyleSettings.GetButtonTextColor());
- }
- else
- {
- nTxtOffset += NAME_LINE_HEIGHT+NAME_LINE_OFF_Y;
- rRenderContext.Erase(tools::Rectangle(Point(0, nTxtOffset), Point(aWinSize.Width(), aWinSize.Height())));
- }
- rRenderContext.DrawText(Point((aWinSize.Width() - nTxtWidth) / 2, nTxtOffset + (NAME_OFFSET / 2)), rText);
-}
-
-void ValueSet::ImplDrawSelect(vcl::RenderContext& rRenderContext)
-{
- if (!IsReallyVisible())
- return;
-
- const bool bFocus = HasFocus();
- const bool bDrawSel = !((mbNoSelection && !mbHighlight) || (!mbDrawSelection && mbHighlight));
-
- if (!bFocus && !bDrawSel)
- {
- ImplDrawItemText(rRenderContext, OUString());
- return;
- }
-
- ImplDrawSelect(rRenderContext, mnSelItemId, bFocus, bDrawSel);
- if (mbHighlight)
- {
- ImplDrawSelect(rRenderContext, mnHighItemId, bFocus, bDrawSel);
- }
-}
-
-void ValueSet::ImplDrawSelect(vcl::RenderContext& rRenderContext, sal_uInt16 nItemId, const bool bFocus, const bool bDrawSel )
-{
- ValueSetItem* pItem;
- tools::Rectangle aRect;
- if (nItemId)
- {
- const size_t nPos = GetItemPos( nItemId );
- pItem = mItemList[ nPos ].get();
- aRect = ImplGetItemRect( nPos );
- }
- else if (mpNoneItem)
- {
- pItem = mpNoneItem.get();
- aRect = maNoneItemRect;
- }
- else if (bFocus && (pItem = ImplGetFirstItem()))
- {
- aRect = ImplGetItemRect(0);
- }
- else
- {
- return;
- }
-
- if (!pItem->mbVisible)
- return;
-
- // draw selection
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
- rRenderContext.SetFillColor();
-
- Color aDoubleColor(rStyleSettings.GetHighlightColor());
- Color aSingleColor(rStyleSettings.GetHighlightTextColor());
- if (!mbDoubleSel)
- {
- /*
- * #99777# contrast enhancement for thin mode
- */
- const Wallpaper& rWall = GetDisplayBackground();
- if (!rWall.IsBitmap() && ! rWall.IsGradient())
- {
- const Color& rBack = rWall.GetColor();
- if (rBack.IsDark() && ! aDoubleColor.IsBright())
- {
- aDoubleColor = COL_WHITE;
- aSingleColor = COL_BLACK;
- }
- else if (rBack.IsBright() && ! aDoubleColor.IsDark())
- {
- aDoubleColor = COL_BLACK;
- aSingleColor = COL_WHITE;
- }
- }
- }
-
- // specify selection output
- WinBits nStyle = GetStyle();
- if (nStyle & WB_MENUSTYLEVALUESET)
- {
- if (bFocus)
- ShowFocus(aRect);
-
- if (bDrawSel)
- {
- rRenderContext.SetLineColor(mbBlackSel ? COL_BLACK : aDoubleColor);
- rRenderContext.DrawRect(aRect);
- }
- }
- else
- {
- if (bDrawSel)
- {
- rRenderContext.SetLineColor(mbBlackSel ? COL_BLACK : aDoubleColor);
- rRenderContext.DrawRect(aRect);
- }
- if (mbDoubleSel)
- {
- aRect.AdjustLeft( 1 );
- aRect.AdjustTop( 1 );
- aRect.AdjustRight( -1 );
- aRect.AdjustBottom( -1 );
- if (bDrawSel)
- rRenderContext.DrawRect(aRect);
- }
- aRect.AdjustLeft( 1 );
- aRect.AdjustTop( 1 );
- aRect.AdjustRight( -1 );
- aRect.AdjustBottom( -1 );
- tools::Rectangle aRect2 = aRect;
- aRect.AdjustLeft( 1 );
- aRect.AdjustTop( 1 );
- aRect.AdjustRight( -1 );
- aRect.AdjustBottom( -1 );
- if (bDrawSel)
- rRenderContext.DrawRect(aRect);
- if (mbDoubleSel)
- {
- aRect.AdjustLeft( 1 );
- aRect.AdjustTop( 1 );
- aRect.AdjustRight( -1 );
- aRect.AdjustBottom( -1 );
- if (bDrawSel)
- rRenderContext.DrawRect(aRect);
- }
-
- if (bDrawSel)
- {
- rRenderContext.SetLineColor(mbBlackSel ? COL_WHITE : aSingleColor);
- }
- else
- {
- rRenderContext.SetLineColor(COL_LIGHTGRAY);
- }
- rRenderContext.DrawRect(aRect2);
-
- if (bFocus)
- ShowFocus(aRect2);
- }
-
- ImplDrawItemText(rRenderContext, pItem->maText);
-}
-
-void ValueSet::ImplHighlightItem( sal_uInt16 nItemId, bool bIsSelection )
-{
- if ( mnHighItemId == nItemId )
- return;
-
- mnHighItemId = nItemId;
-
- // don't draw the selection if nothing is selected
- if ( !bIsSelection && mbNoSelection )
- mbDrawSelection = false;
-
- // remove the old selection and draw the new one
- Invalidate();
- mbDrawSelection = true;
-}
-
-void ValueSet::ImplDraw(vcl::RenderContext& rRenderContext)
-{
- Format(rRenderContext);
- HideFocus();
-
- // draw parting line to the Namefield
- if (GetStyle() & WB_NAMEFIELD)
- {
- if (!(GetStyle() & WB_FLATVALUESET))
- {
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
- Size aWinSize(GetOutputSizePixel());
- Point aPos1(NAME_LINE_OFF_X, mnTextOffset + NAME_LINE_OFF_Y);
- Point aPos2(aWinSize.Width() - (NAME_LINE_OFF_X * 2), mnTextOffset + NAME_LINE_OFF_Y);
- if (!(rStyleSettings.GetOptions() & StyleSettingsOptions::Mono))
- {
- rRenderContext.SetLineColor(rStyleSettings.GetShadowColor());
- rRenderContext.DrawLine(aPos1, aPos2);
- aPos1.AdjustY( 1 );
- aPos2.AdjustY( 1 );
- rRenderContext.SetLineColor(rStyleSettings.GetLightColor());
- }
- else
- rRenderContext.SetLineColor(rStyleSettings.GetWindowTextColor());
- rRenderContext.DrawLine(aPos1, aPos2);
- }
- }
-
- ImplDrawSelect(rRenderContext);
-}
-
-size_t ValueSet::ImplGetItem( const Point& rPos ) const
-{
- if (!mbHasVisibleItems)
- {
- return VALUESET_ITEM_NOTFOUND;
- }
-
- if (mpNoneItem.get() && maNoneItemRect.IsInside(rPos))
- {
- return VALUESET_ITEM_NONEITEM;
- }
-
- if (maItemListRect.IsInside(rPos))
- {
- const int xc = rPos.X() - maItemListRect.Left();
- const int yc = rPos.Y() - maItemListRect.Top();
- // The point is inside the area of item list,
- // let's find the containing item.
- const int col = xc / mnItemWidth;
- const int x = xc % mnItemWidth;
- const int row = yc / mnItemHeight;
- const int y = yc % mnItemHeight;
-
- if (x < mnItemWidth && y < mnItemHeight)
- {
- // the point is inside item rect and not inside spacing
- const size_t item = (mnFirstLine + row) * static_cast<size_t>(mnCols) + col;
- if (item < mItemList.size())
- {
- return item;
- }
- }
- }
-
- return VALUESET_ITEM_NOTFOUND;
-}
-
-ValueSetItem* ValueSet::ImplGetItem( size_t nPos )
-{
- if (nPos == VALUESET_ITEM_NONEITEM)
- return mpNoneItem.get();
- else
- return (nPos < mItemList.size()) ? mItemList[nPos].get() : nullptr;
-}
-
-ValueSetItem* ValueSet::ImplGetFirstItem()
-{
- return !mItemList.empty() ? mItemList[0].get() : nullptr;
-}
-
-sal_uInt16 ValueSet::ImplGetVisibleItemCount() const
-{
- sal_uInt16 nRet = 0;
- const size_t nItemCount = mItemList.size();
-
- for ( size_t n = 0; n < nItemCount; ++n )
- {
- if ( mItemList[n]->mbVisible )
- ++nRet;
- }
-
- return nRet;
-}
-
-void ValueSet::ImplFireAccessibleEvent( short nEventId, const Any& rOldValue, const Any& rNewValue )
-{
- ValueSetAcc* pAcc = ValueSetAcc::getImplementation( GetAccessible( false ) );
-
- if( pAcc )
- pAcc->FireAccessibleEvent( nEventId, rOldValue, rNewValue );
-}
-
-bool ValueSet::ImplHasAccessibleListeners()
-{
- ValueSetAcc* pAcc = ValueSetAcc::getImplementation( GetAccessible( false ) );
- return( pAcc && pAcc->HasAccessibleListeners() );
-}
-
-IMPL_LINK( ValueSet,ImplScrollHdl, ScrollBar*, pScrollBar, void )
-{
- sal_uInt16 nNewFirstLine = static_cast<sal_uInt16>(pScrollBar->GetThumbPos());
- if ( nNewFirstLine != mnFirstLine )
- {
- mnFirstLine = nNewFirstLine;
- mbFormat = true;
- Invalidate();
- }
-}
-
-void ValueSet::ImplTracking( const Point& rPos )
-{
- ValueSetItem* pItem = ImplGetItem( ImplGetItem( rPos ) );
- if ( pItem )
- {
- if( GetStyle() & WB_MENUSTYLEVALUESET || GetStyle() & WB_FLATVALUESET )
- mbHighlight = true;
-
- ImplHighlightItem( pItem->mnId );
- }
- else
- {
- if( GetStyle() & WB_MENUSTYLEVALUESET || GetStyle() & WB_FLATVALUESET )
- mbHighlight = true;
-
- ImplHighlightItem( mnSelItemId, false );
- }
-}
-
-void ValueSet::ImplEndTracking( const Point& rPos, bool bCancel )
-{
- ValueSetItem* pItem;
-
- // restore the old status in case of termination
- if ( bCancel )
- pItem = nullptr;
- else
- pItem = ImplGetItem( ImplGetItem( rPos ) );
-
- if ( pItem )
- {
- SelectItem( pItem->mnId );
- if ( !(GetStyle() & WB_NOPOINTERFOCUS) )
- GrabFocus();
- mbHighlight = false;
- Select();
- }
- else
- {
- ImplHighlightItem( mnSelItemId, false );
- mbHighlight = false;
- }
-}
-
-void ValueSet::MouseButtonDown( const MouseEvent& rMouseEvent )
-{
- if ( rMouseEvent.IsLeft() )
- {
- ValueSetItem* pItem = ImplGetItem( ImplGetItem( rMouseEvent.GetPosPixel() ) );
- if ( pItem && !rMouseEvent.IsMod2() )
- {
- if ( rMouseEvent.GetClicks() == 1 )
- {
- mbHighlight = true;
- mnHighItemId = mnSelItemId;
- ImplHighlightItem( pItem->mnId );
- StartTracking( StartTrackingFlags::ScrollRepeat );
- }
-
- return;
- }
- }
-
- Control::MouseButtonDown( rMouseEvent );
-}
-
-void ValueSet::MouseMove( const MouseEvent& rMouseEvent )
-{
- // because of SelectionMode
- if ( (GetStyle() & WB_MENUSTYLEVALUESET) || (GetStyle() & WB_FLATVALUESET))
- ImplTracking( rMouseEvent.GetPosPixel() );
- Control::MouseMove( rMouseEvent );
-}
-
-void ValueSet::Tracking( const TrackingEvent& rTrackingEvent )
-{
- Point aMousePos = rTrackingEvent.GetMouseEvent().GetPosPixel();
-
- if ( rTrackingEvent.IsTrackingEnded() )
- ImplEndTracking( aMousePos, rTrackingEvent.IsTrackingCanceled() );
- else
- ImplTracking( aMousePos );
-}
-
-void ValueSet::KeyInput( const KeyEvent& rKeyEvent )
-{
- size_t nLastItem = mItemList.size();
-
- if ( !nLastItem || !ImplGetFirstItem() )
- {
- Control::KeyInput( rKeyEvent );
- return;
- }
-
- if (mbFormat)
- Invalidate();
-
- --nLastItem;
-
- const size_t nCurPos
- = mnSelItemId ? GetItemPos(mnSelItemId) : (mpNoneItem ? VALUESET_ITEM_NONEITEM : 0);
- size_t nItemPos = VALUESET_ITEM_NOTFOUND;
- size_t nVStep = mnCols;
-
- switch (rKeyEvent.GetKeyCode().GetCode())
- {
- case KEY_HOME:
- nItemPos = mpNoneItem ? VALUESET_ITEM_NONEITEM : 0;
- break;
-
- case KEY_END:
- nItemPos = nLastItem;
- break;
-
- case KEY_LEFT:
- if (nCurPos != VALUESET_ITEM_NONEITEM)
- {
- if (nCurPos)
- {
- nItemPos = nCurPos-1;
- }
- else if (mpNoneItem)
- {
- nItemPos = VALUESET_ITEM_NONEITEM;
- }
- }
- break;
-
- case KEY_RIGHT:
- if (nCurPos < nLastItem)
- {
- if (nCurPos == VALUESET_ITEM_NONEITEM)
- {
- nItemPos = 0;
- }
- else
- {
- nItemPos = nCurPos+1;
- }
- }
- break;
-
- case KEY_PAGEUP:
- if (rKeyEvent.GetKeyCode().IsShift() || rKeyEvent.GetKeyCode().IsMod1() || rKeyEvent.GetKeyCode().IsMod2())
- {
- Control::KeyInput( rKeyEvent );
- return;
- }
- nVStep *= mnVisLines;
- [[fallthrough]];
- case KEY_UP:
- if (nCurPos != VALUESET_ITEM_NONEITEM)
- {
- if (nCurPos == nLastItem)
- {
- const size_t nCol = mnCols ? nLastItem % mnCols : 0;
- if (nCol < mnCurCol)
- {
- // Move to previous row/page, keeping the old column
- nVStep -= mnCurCol - nCol;
- }
- }
- if (nCurPos >= nVStep)
- {
- // Go up of a whole page
- nItemPos = nCurPos-nVStep;
- }
- else if (mpNoneItem)
- {
- nItemPos = VALUESET_ITEM_NONEITEM;
- }
- else if (nCurPos > mnCols)
- {
- // Go to same column in first row
- nItemPos = nCurPos % mnCols;
- }
- }
- break;
-
- case KEY_PAGEDOWN:
- if (rKeyEvent.GetKeyCode().IsShift() || rKeyEvent.GetKeyCode().IsMod1() || rKeyEvent.GetKeyCode().IsMod2())
- {
- Control::KeyInput( rKeyEvent );
- return;
- }
- nVStep *= mnVisLines;
- [[fallthrough]];
- case KEY_DOWN:
- if (nCurPos != nLastItem)
- {
- if (nCurPos == VALUESET_ITEM_NONEITEM)
- {
- nItemPos = nVStep-mnCols+mnCurCol;
- }
- else
- {
- nItemPos = nCurPos+nVStep;
- }
- if (nItemPos > nLastItem)
- {
- nItemPos = nLastItem;
- }
- }
- break;
-
- case KEY_RETURN:
- if (GetStyle() & WB_NO_DIRECTSELECT)
- {
- Select();
- break;
- }
- [[fallthrough]];
- default:
- Control::KeyInput( rKeyEvent );
- return;
- }
-
- // This point is reached only if key travelling was used,
- // in which case selection mode should be switched off
- EndSelection();
-
- if ( nItemPos == VALUESET_ITEM_NOTFOUND )
- return;
-
- if ( nItemPos!=VALUESET_ITEM_NONEITEM && nItemPos<nLastItem )
- {
- // update current column only in case of a new position
- // which is also not a "specially" handled one.
- mnCurCol = mnCols ? nItemPos % mnCols : 0;
- }
- const sal_uInt16 nItemId = (nItemPos != VALUESET_ITEM_NONEITEM) ? GetItemId( nItemPos ) : 0;
- if ( nItemId != mnSelItemId )
- {
- SelectItem( nItemId );
- if (!(GetStyle() & WB_NO_DIRECTSELECT))
- {
- // select only if WB_NO_DIRECTSELECT is not set
- Select();
- }
- }
-}
-
-void ValueSet::Command( const CommandEvent& rCommandEvent )
-{
- if ( rCommandEvent.GetCommand() == CommandEventId::Wheel ||
- rCommandEvent.GetCommand() == CommandEventId::StartAutoScroll ||
- rCommandEvent.GetCommand() == CommandEventId::AutoScroll )
- {
- if ( HandleScrollCommand( rCommandEvent, nullptr, mxScrollBar.get() ) )
- return;
- }
-
- Control::Command( rCommandEvent );
-}
-
-void ValueSet::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle&)
-{
- if (GetStyle() & WB_FLATVALUESET)
- {
- const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();
- rRenderContext.SetLineColor();
- rRenderContext.SetFillColor(rStyleSettings.GetFaceColor());
- }
-
- ImplDraw(rRenderContext);
-}
-
-void ValueSet::GetFocus()
-{
- SAL_INFO("svtools", "value set getting focus");
- Invalidate();
- Control::GetFocus();
-
- // Tell the accessible object that we got the focus.
- ValueSetAcc* pAcc = ValueSetAcc::getImplementation(GetAccessible(false));
- if (pAcc)
- pAcc->GetFocus();
-}
-
-void ValueSet::LoseFocus()
-{
- SAL_INFO("svtools", "value set losing focus");
- if (!mbNoSelection || !mnSelItemId)
- HideFocus();
- Control::LoseFocus();
-
- // Tell the accessible object that we lost the focus.
- ValueSetAcc* pAcc = ValueSetAcc::getImplementation( GetAccessible( false ) );
- if( pAcc )
- pAcc->LoseFocus();
-}
-
-void ValueSet::Resize()
-{
- mbFormat = true;
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
- Control::Resize();
-}
-
-void ValueSet::RequestHelp( const HelpEvent& rHelpEvent )
-{
- if (rHelpEvent.GetMode() & (HelpEventMode::QUICK | HelpEventMode::BALLOON))
- {
- Point aPos = ScreenToOutputPixel( rHelpEvent.GetMousePosPixel() );
- size_t nItemPos = ImplGetItem( aPos );
- if ( nItemPos != VALUESET_ITEM_NOTFOUND )
- {
- tools::Rectangle aItemRect = ImplGetItemRect( nItemPos );
- Point aPt = OutputToScreenPixel( aItemRect.TopLeft() );
- aItemRect.SetLeft( aPt.X() );
- aItemRect.SetTop( aPt.Y() );
- aPt = OutputToScreenPixel( aItemRect.BottomRight() );
- aItemRect.SetRight( aPt.X() );
- aItemRect.SetBottom( aPt.Y() );
- Help::ShowQuickHelp( this, aItemRect, GetItemText( ImplGetItem( nItemPos )->mnId ) );
- return;
- }
- }
-
- Control::RequestHelp( rHelpEvent );
-}
-
-void ValueSet::StateChanged(StateChangedType nType)
-{
- Control::StateChanged(nType);
-
- if (nType == StateChangedType::InitShow)
- {
- if (mbFormat)
- Invalidate();
- }
- else if (nType == StateChangedType::UpdateMode)
- {
- if (IsReallyVisible() && IsUpdateMode())
- Invalidate();
- }
- else if (nType == StateChangedType::Text)
- {
- if (mpNoneItem.get() && !mbFormat && IsReallyVisible() && IsUpdateMode())
- {
- Invalidate(maNoneItemRect);
- }
- }
- else if ((nType == StateChangedType::Zoom) ||
- (nType == StateChangedType::ControlFont))
- {
- ImplInitSettings(true, false, false);
- Invalidate();
- }
- else if (nType == StateChangedType::ControlForeground)
- {
- ImplInitSettings(false, true, false);
- Invalidate();
- }
- else if (nType == StateChangedType::ControlBackground)
- {
- ImplInitSettings(false, false, true);
- Invalidate();
- }
- else if ((nType == StateChangedType::Style) || (nType == StateChangedType::Enable))
- {
- mbFormat = true;
- ImplInitSettings(false, false, true);
- Invalidate();
- }
-}
-
-void ValueSet::DataChanged( const DataChangedEvent& rDataChangedEvent )
-{
- Control::DataChanged( rDataChangedEvent );
-
- if ( rDataChangedEvent.GetType() == DataChangedEventType::FONTS ||
- rDataChangedEvent.GetType() == DataChangedEventType::DISPLAY ||
- rDataChangedEvent.GetType() == DataChangedEventType::FONTSUBSTITUTION ||
- (rDataChangedEvent.GetType() == DataChangedEventType::SETTINGS &&
- rDataChangedEvent.GetFlags() & AllSettingsFlags::STYLE) )
- {
- mbFormat = true;
- ImplInitSettings( true, true, true );
- Invalidate();
- }
-}
-
-boost::property_tree::ptree ValueSet::DumpAsPropertyTree()
-{
- boost::property_tree::ptree aTree(Control::DumpAsPropertyTree());
- boost::property_tree::ptree aEntries;
-
- ErrCode nErrCode;
- OUStringBuffer aBuffer;
- SvMemoryStream aStream;
- const size_t nSize = mItemList.size();
-
- for ( size_t nIt = 0; nIt < nSize; ++nIt )
- {
- boost::property_tree::ptree aEntry;
- ValueSetItem* pItem = mItemList[nIt].get();
- aEntry.put("id", pItem->mnId);
- if ( !pItem->maImage.GetStock().isEmpty() )
- {
- aEntry.put("image", pItem->maImage.GetStock());
- }
- else
- {
- Graphic aGraphic(pItem->maImage);
-
- nErrCode = GraphicConverter::Export(aStream, aGraphic, ConvertDataFormat::PNG);
- if ( nErrCode )
- {
- SAL_WARN("svtools", "GraphicConverter::Export() invalid Graphic? error: " << nErrCode );
- }
- else
- {
- css::uno::Sequence<sal_Int8> aSeq(static_cast<sal_Int8 const *>(aStream.GetData()), aStream.TellEnd());
- aStream.Seek(0);
-
- aBuffer.append("data:image/png;base64,");
- ::comphelper::Base64::encode(aBuffer, aSeq);
- aEntry.put("image64", aBuffer.makeStringAndClear().toUtf8());
- }
- }
-
- if (mnSelItemId == pItem->mnId)
- {
- aEntry.put("selected", true);
- }
-
- aEntries.push_back(std::make_pair("", aEntry));
- }
-
- aTree.put("type", "valueset");
- aTree.add_child("entries", aEntries);
- return aTree;
-}
-
-FactoryFunction ValueSet::GetUITestFactory() const
-{
- return ValueSetUIObject::create;
-}
-
-void ValueSet::Select()
-{
- maSelectHdl.Call( this );
-}
-
-void ValueSet::InsertItem( sal_uInt16 nItemId, const Image& rImage,
- const OUString& rText, size_t nPos )
-{
- std::unique_ptr<ValueSetItem> pItem(new ValueSetItem( *this ));
- pItem->mnId = nItemId;
- pItem->meType = VALUESETITEM_IMAGE;
- pItem->maImage = rImage;
- pItem->maText = rText;
- ImplInsertItem( std::move(pItem), nPos );
-}
-
-void ValueSet::InsertItem( sal_uInt16 nItemId, const Color& rColor,
- const OUString& rText )
-{
- std::unique_ptr<ValueSetItem> pItem(new ValueSetItem( *this ));
- pItem->mnId = nItemId;
- pItem->meType = VALUESETITEM_COLOR;
- pItem->maColor = rColor;
- pItem->maText = rText;
- ImplInsertItem( std::move(pItem), VALUESET_APPEND );
-}
-
-void ValueSet::InsertItem( sal_uInt16 nItemId, size_t nPos )
-{
- std::unique_ptr<ValueSetItem> pItem(new ValueSetItem( *this ));
- pItem->mnId = nItemId;
- pItem->meType = VALUESETITEM_USERDRAW;
- ImplInsertItem( std::move(pItem), nPos );
-}
-
-void ValueSet::ImplInsertItem( std::unique_ptr<ValueSetItem> pItem, const size_t nPos )
-{
- DBG_ASSERT( pItem->mnId, "ValueSet::InsertItem(): ItemId == 0" );
- DBG_ASSERT( GetItemPos( pItem->mnId ) == VALUESET_ITEM_NOTFOUND,
- "ValueSet::InsertItem(): ItemId already exists" );
-
- if ( nPos < mItemList.size() ) {
- mItemList.insert( mItemList.begin() + nPos, std::move(pItem) );
- } else {
- mItemList.push_back( std::move(pItem) );
- }
-
- queue_resize();
-
- mbFormat = true;
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
-}
-
-tools::Rectangle ValueSet::ImplGetItemRect( size_t nPos ) const
-{
- const size_t nVisibleBegin = static_cast<size_t>(mnFirstLine)*mnCols;
- const size_t nVisibleEnd = nVisibleBegin + static_cast<size_t>(mnVisLines)*mnCols;
-
- // Check if the item is inside the range of the displayed ones,
- // taking into account that last row could be incomplete
- if ( nPos<nVisibleBegin || nPos>=nVisibleEnd || nPos>=mItemList.size() )
- return tools::Rectangle();
-
- nPos -= nVisibleBegin;
-
- const size_t row = mnCols ? nPos/mnCols : 0;
- const size_t col = mnCols ? nPos%mnCols : 0;
- const long x = maItemListRect.Left()+col*mnItemWidth;
- const long y = maItemListRect.Top()+row*mnItemHeight;
-
- return tools::Rectangle( Point(x, y), Size(mnItemWidth, mnItemHeight) );
-}
-
-void ValueSet::Clear()
-{
- ImplDeleteItems();
-
- // reset variables
- mnFirstLine = 0;
- mnCurCol = 0;
- mnHighItemId = 0;
- mnSelItemId = 0;
- mbNoSelection = true;
-
- mbFormat = true;
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
-}
-
-size_t ValueSet::GetItemCount() const
-{
- return mItemList.size();
-}
-
-size_t ValueSet::GetItemPos( sal_uInt16 nItemId ) const
-{
- for ( size_t i = 0, n = mItemList.size(); i < n; ++i ) {
- if ( mItemList[i]->mnId == nItemId ) {
- return i;
- }
- }
- return VALUESET_ITEM_NOTFOUND;
-}
-
-sal_uInt16 ValueSet::GetItemId( size_t nPos ) const
-{
- return ( nPos < mItemList.size() ) ? mItemList[nPos]->mnId : 0 ;
-}
-
-sal_uInt16 ValueSet::GetItemId( const Point& rPos ) const
-{
- size_t nItemPos = ImplGetItem( rPos );
- if ( nItemPos != VALUESET_ITEM_NOTFOUND )
- return GetItemId( nItemPos );
-
- return 0;
-}
-
-tools::Rectangle ValueSet::GetItemRect( sal_uInt16 nItemId ) const
-{
- const size_t nPos = GetItemPos( nItemId );
-
- if ( nPos!=VALUESET_ITEM_NOTFOUND && mItemList[nPos]->mbVisible )
- return ImplGetItemRect( nPos );
-
- return tools::Rectangle();
-}
-
-void ValueSet::SetColCount( sal_uInt16 nNewCols )
-{
- if ( mnUserCols != nNewCols )
- {
- mnUserCols = nNewCols;
- mbFormat = true;
- queue_resize();
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
- }
-}
-
-void ValueSet::SetLineCount( sal_uInt16 nNewLines )
-{
- if ( mnUserVisLines != nNewLines )
- {
- mnUserVisLines = nNewLines;
- mbFormat = true;
- queue_resize();
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
- }
-}
-
-void ValueSet::SetItemWidth( long nNewItemWidth )
-{
- if ( mnUserItemWidth != nNewItemWidth )
- {
- mnUserItemWidth = nNewItemWidth;
- mbFormat = true;
- queue_resize();
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
- }
-}
-
-void ValueSet::SetItemHeight( long nNewItemHeight )
-{
- if ( mnUserItemHeight != nNewItemHeight )
- {
- mnUserItemHeight = nNewItemHeight;
- mbFormat = true;
- queue_resize();
- if ( IsReallyVisible() && IsUpdateMode() )
- Invalidate();
- }
-}
-
-void ValueSet::SelectItem( sal_uInt16 nItemId )
-{
- size_t nItemPos = 0;
-
- if ( nItemId )
- {
- nItemPos = GetItemPos( nItemId );
- if ( nItemPos == VALUESET_ITEM_NOTFOUND )
- return;
- }
-
- if ( !((mnSelItemId != nItemId) || mbNoSelection) )
- return;
-
- const sal_uInt16 nOldItem = mnSelItemId;
- mnSelItemId = nItemId;
- mbNoSelection = false;
-
- bool bNewOut = !mbFormat && IsReallyVisible() && IsUpdateMode();
- bool bNewLine = false;
-
- // if necessary scroll to the visible area
- if (mbScroll && mnCols)
- {
- sal_uInt16 nNewLine = static_cast<sal_uInt16>(nItemPos / mnCols);
- if ( nNewLine < mnFirstLine )
- {
- mnFirstLine = nNewLine;
- bNewLine = true;
- }
- else if ( nNewLine > o3tl::make_unsigned(mnFirstLine+mnVisLines-1) )
- {
- mnFirstLine = static_cast<sal_uInt16>(nNewLine-mnVisLines+1);
- bNewLine = true;
- }
- }
-
- if ( bNewOut )
- {
- if ( bNewLine )
- {
- // redraw everything if the visible area has changed
- mbFormat = true;
- Invalidate();
- }
- else
- {
- // remove old selection and draw the new one
- Invalidate();
- }
- }
-
- if( ImplHasAccessibleListeners() )
- {
- // focus event (deselect)
- if( nOldItem )
- {
- const size_t nPos = GetItemPos( nItemId );
-
- if( nPos != VALUESET_ITEM_NOTFOUND )
- {
- ValueItemAcc* pItemAcc = ValueItemAcc::getImplementation(
- mItemList[nPos]->GetAccessible( false/*bIsTransientChildrenDisabled*/ ) );
-
- if( pItemAcc )
- {
- Any aOldAny;
- Any aNewAny;
- aOldAny <<= Reference<XInterface>(static_cast<cppu::OWeakObject*>(pItemAcc));
- ImplFireAccessibleEvent(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOldAny, aNewAny );
- }
- }
- }
-
- // focus event (select)
- const size_t nPos = GetItemPos( mnSelItemId );
-
- ValueSetItem* pItem;
- if( nPos != VALUESET_ITEM_NOTFOUND )
- pItem = mItemList[nPos].get();
- else
- pItem = mpNoneItem.get();
-
- ValueItemAcc* pItemAcc = nullptr;
- if (pItem != nullptr)
- pItemAcc = ValueItemAcc::getImplementation( pItem->GetAccessible( false/*bIsTransientChildrenDisabled*/ ) );
-
- if( pItemAcc )
- {
- Any aOldAny;
- Any aNewAny;
- aNewAny <<= Reference<XInterface>(static_cast<cppu::OWeakObject*>(pItemAcc));
- ImplFireAccessibleEvent(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, aOldAny, aNewAny);
- }
-
- // selection event
- Any aOldAny;
- Any aNewAny;
- ImplFireAccessibleEvent(AccessibleEventId::SELECTION_CHANGED, aOldAny, aNewAny);
- }
-}
-
-void ValueSet::SetNoSelection()
-{
- mbNoSelection = true;
- mbHighlight = false;
-
- if (IsReallyVisible() && IsUpdateMode())
- Invalidate();
-}
-
-Color ValueSet::GetItemColor( sal_uInt16 nItemId ) const
-{
- size_t nPos = GetItemPos( nItemId );
-
- if ( nPos != VALUESET_ITEM_NOTFOUND )
- return mItemList[nPos]->maColor;
- else
- return Color();
-}
-
-OUString ValueSet::GetItemText( sal_uInt16 nItemId ) const
-{
- size_t nPos = GetItemPos( nItemId );
-
- if ( nPos != VALUESET_ITEM_NOTFOUND )
- return mItemList[nPos]->maText;
-
- return OUString();
-}
-
-void ValueSet::EndSelection()
-{
- if ( mbHighlight )
- {
- if ( IsTracking() )
- EndTracking( TrackingEventFlags::Cancel );
-
- ImplHighlightItem( mnSelItemId );
- mbHighlight = false;
- }
-}
-
-Size ValueSet::CalcWindowSizePixel( const Size& rItemSize, sal_uInt16 nDesireCols,
- sal_uInt16 nDesireLines ) const
-{
- size_t nCalcCols = nDesireCols;
- size_t nCalcLines = nDesireLines;
-
- if ( !nCalcCols )
- {
- if ( mnUserCols )
- nCalcCols = mnUserCols;
- else
- nCalcCols = 1;
- }
-
- if ( !nCalcLines )
- {
- nCalcLines = mnVisLines;
-
- if ( mbFormat )
- {
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list