summaryrefslogtreecommitdiff
path: root/svx
diff options
context:
space:
mode:
Diffstat (limited to 'svx')
-rw-r--r--svx/source/accessibility/AccessibleFrameSelector.cxx442
-rw-r--r--svx/source/dialog/frmsel.cxx78
-rw-r--r--svx/source/inc/AccessibleFrameSelector.hxx111
-rw-r--r--svx/source/inc/frmselimpl.hxx6
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx11
5 files changed, 268 insertions, 380 deletions
diff --git a/svx/source/accessibility/AccessibleFrameSelector.cxx b/svx/source/accessibility/AccessibleFrameSelector.cxx
index 4f31f7665b7c..e180bec3538b 100644
--- a/svx/source/accessibility/AccessibleFrameSelector.cxx
+++ b/svx/source/accessibility/AccessibleFrameSelector.cxx
@@ -54,55 +54,35 @@ using ::com::sun::star::awt::XFocusListener;
using namespace ::com::sun::star::accessibility;
-AccFrameSelector::AccFrameSelector( FrameSelector& rFrameSel, FrameBorderType eBorder ) :
- mpFrameSel( &rFrameSel ),
- meBorder( eBorder ),
- maFocusListeners( maFocusMutex ),
- maPropertyListeners( maPropertyMutex ),
- mnClientId( 0 )
-{
- if ( mpFrameSel )
- {
- mpFrameSel->AddEventListener( LINK( this, AccFrameSelector, WindowEventListener ) );
- }
-}
-
-
-AccFrameSelector::~AccFrameSelector()
+AccFrameSelector::AccFrameSelector(FrameSelector& rFrameSel)
+ : mpFrameSel(&rFrameSel)
{
- RemoveFrameSelEventListener();
}
-
-void AccFrameSelector::RemoveFrameSelEventListener()
+AccFrameSelector::~AccFrameSelector()
{
- if ( mpFrameSel )
- {
- mpFrameSel->RemoveEventListener( LINK( this, AccFrameSelector, WindowEventListener ) );
- }
}
+IMPLEMENT_FORWARD_XINTERFACE2( AccFrameSelector, OAccessibleComponentHelper, OAccessibleHelper_Base )
+IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccFrameSelector, OAccessibleComponentHelper, OAccessibleHelper_Base )
Reference< XAccessibleContext > AccFrameSelector::getAccessibleContext( )
{
return this;
}
-
sal_Int32 AccFrameSelector::getAccessibleChildCount( )
{
SolarMutexGuard aGuard;
IsValid();
- return (meBorder == FrameBorderType::NONE) ? mpFrameSel->GetEnabledBorderCount() : 0;
+ return mpFrameSel->GetEnabledBorderCount();
}
Reference< XAccessible > AccFrameSelector::getAccessibleChild( sal_Int32 i )
{
SolarMutexGuard aGuard;
IsValid();
- Reference< XAccessible > xRet;
- if( meBorder == FrameBorderType::NONE )
- xRet = mpFrameSel->GetChildAccessible( i );
+ Reference< XAccessible > xRet = mpFrameSel->GetChildAccessible( i );
if( !xRet.is() )
throw RuntimeException();
return xRet;
@@ -112,86 +92,34 @@ Reference< XAccessible > AccFrameSelector::getAccessibleParent( )
{
SolarMutexGuard aGuard;
IsValid();
- Reference< XAccessible > xRet;
- if(meBorder == FrameBorderType::NONE)
- xRet = mpFrameSel->GetParent()->GetAccessible();
- else
- xRet = mpFrameSel->CreateAccessible();
+ Reference< XAccessible > xRet = mpFrameSel->getAccessibleParent();
return xRet;
}
-sal_Int32 AccFrameSelector::getAccessibleIndexInParent( )
-{
- SolarMutexGuard aGuard;
- IsValid();
-
- sal_Int32 nIdx = 0;
- if( meBorder == FrameBorderType::NONE )
- {
- vcl::Window* pTabPage = mpFrameSel->GetParent();
- if (!pTabPage)
- return nIdx;
- sal_Int32 nChildren = pTabPage->GetChildCount();
- for( nIdx = 0; nIdx < nChildren; ++nIdx )
- if( pTabPage->GetChild( static_cast< sal_uInt16 >( nIdx ) ) == mpFrameSel )
- break;
- }
- else
- nIdx = mpFrameSel->GetEnabledBorderIndex( meBorder );
-
- if( nIdx < 0 )
- throw RuntimeException();
- return nIdx;
-}
-
sal_Int16 AccFrameSelector::getAccessibleRole( )
{
- return meBorder == FrameBorderType::NONE ? AccessibleRole::OPTION_PANE : AccessibleRole::CHECK_BOX;
+ return AccessibleRole::OPTION_PANE;
}
OUString AccFrameSelector::getAccessibleDescription( )
{
SolarMutexGuard aGuard;
IsValid();
- return SvxResId(RID_SVXSTR_FRMSEL_DESCRIPTIONS[static_cast<sal_uInt32>(meBorder)].first);
+ return SvxResId(RID_SVXSTR_FRMSEL_DESCRIPTIONS[0].first);
}
OUString AccFrameSelector::getAccessibleName( )
{
SolarMutexGuard aGuard;
IsValid();
- return SvxResId(RID_SVXSTR_FRMSEL_TEXTS[static_cast<sal_uInt32>(meBorder)].first);
+ return SvxResId(RID_SVXSTR_FRMSEL_TEXTS[0].first);
}
Reference< XAccessibleRelationSet > AccFrameSelector::getAccessibleRelationSet( )
{
SolarMutexGuard aGuard;
IsValid();
- utl::AccessibleRelationSetHelper* pHelper;
- Reference< XAccessibleRelationSet > xRet = pHelper = new utl::AccessibleRelationSetHelper;
- if(meBorder == FrameBorderType::NONE)
- {
- //add the label relation
- vcl::Window *pLabeledBy = mpFrameSel->GetAccessibleRelationLabeledBy();
- if ( pLabeledBy && pLabeledBy != mpFrameSel )
- {
- AccessibleRelation aLabelRelation;
- aLabelRelation.RelationType = AccessibleRelationType::LABELED_BY;
- aLabelRelation.TargetSet.realloc(1);
- aLabelRelation.TargetSet.getArray()[0] = pLabeledBy->GetAccessible();
- pHelper->AddRelation(aLabelRelation);
- }
- vcl::Window* pMemberOf = mpFrameSel->GetAccessibleRelationMemberOf();
- if ( pMemberOf && pMemberOf != mpFrameSel )
- {
- AccessibleRelation aMemberOfRelation;
- aMemberOfRelation.RelationType = AccessibleRelationType::MEMBER_OF;
- aMemberOfRelation.TargetSet.realloc(1);
- aMemberOfRelation.TargetSet.getArray()[0] = pMemberOf->GetAccessible();
- pHelper->AddRelation(aMemberOfRelation);
- }
- }
- return xRet;
+ return mpFrameSel->get_accessible_relation_set();
}
Reference< XAccessibleStateSet > AccFrameSelector::getAccessibleStateSet( )
@@ -225,9 +153,7 @@ Reference< XAccessibleStateSet > AccFrameSelector::getAccessibleStateSet( )
pStateSetHelper->AddState(AccessibleStateType::SENSITIVE);
}
- bool bIsParent = meBorder == FrameBorderType::NONE;
- if(mpFrameSel->HasFocus() &&
- (bIsParent || mpFrameSel->IsBorderSelected(meBorder)))
+ if (mpFrameSel->HasFocus())
{
pStateSetHelper->AddState(AccessibleStateType::ACTIVE);
pStateSetHelper->AddState(AccessibleStateType::FOCUSED);
@@ -237,290 +163,236 @@ Reference< XAccessibleStateSet > AccFrameSelector::getAccessibleStateSet( )
return xRet;
}
-Locale AccFrameSelector::getLocale( )
+Reference< XAccessible > AccFrameSelector::getAccessibleAtPoint(
+ const css::awt::Point& aPt )
{
- return Application::GetSettings().GetUILanguageTag().getLocale();
+ SolarMutexGuard aGuard;
+ IsValid();
+ //aPt is relative to the frame selector
+ return mpFrameSel->GetChildAccessible( Point( aPt.X, aPt.Y ) );
}
-sal_Bool AccFrameSelector::containsPoint( const css::awt::Point& aPt )
+void AccFrameSelector::grabFocus( )
{
SolarMutexGuard aGuard;
IsValid();
- //aPt is relative to the frame selector
- return mpFrameSel->ContainsClickPoint( Point( aPt.X, aPt.Y ) );
+ mpFrameSel->GrabFocus();
}
-Reference< XAccessible > AccFrameSelector::getAccessibleAtPoint(
- const css::awt::Point& aPt )
+sal_Int32 AccFrameSelector::getForeground( )
{
SolarMutexGuard aGuard;
- IsValid();
- //aPt is relative to the frame selector
- return mpFrameSel->GetChildAccessible( Point( aPt.X, aPt.Y ) );
+
+ //see FrameSelector::Paint
+ const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
+ return sal_Int32(rStyles.GetLabelTextColor());
+}
+
+sal_Int32 AccFrameSelector::getBackground( )
+{
+ SolarMutexGuard aGuard;
+
+ //see FrameSelector::Paint
+ const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
+ return sal_Int32(rStyles.GetDialogColor());
}
-css::awt::Rectangle AccFrameSelector::getBounds( )
+css::awt::Rectangle AccFrameSelector::implGetBounds()
{
SolarMutexGuard aGuard;
IsValid();
- Size aSz;
- Point aPos;
- switch(meBorder)
- {
- case FrameBorderType::NONE:
- aSz = mpFrameSel->GetSizePixel();
- aPos = mpFrameSel->GetPosPixel();
- break;
- default:
- const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder );
- aPos = aSpot.TopLeft();
- aSz = aSpot.GetSize();
- }
+
css::awt::Rectangle aRet;
- aRet.X = aPos.X();
- aRet.Y = aPos.Y();
- aRet.Width = aSz.Width();
- aRet.Height = aSz.Height();
+
+ const Point aOutPos;
+ Size aOutSize(mpFrameSel->GetOutputSizePixel());
+
+ aRet.X = aOutPos.X();
+ aRet.Y = aOutPos.Y();
+ aRet.Width = aOutSize.Width();
+ aRet.Height = aOutSize.Height();
+
return aRet;
}
+void AccFrameSelector::IsValid()
+{
+ if(!mpFrameSel)
+ throw RuntimeException();
+}
-css::awt::Point AccFrameSelector::getLocation( )
+void AccFrameSelector::Invalidate()
{
- SolarMutexGuard aGuard;
- IsValid();
- Point aPos;
- switch(meBorder)
- {
- case FrameBorderType::NONE:
- aPos = mpFrameSel->GetPosPixel();
- break;
- default:
- const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder );
- aPos = aSpot.TopLeft();
- }
- css::awt::Point aRet(aPos.X(), aPos.Y());
- return aRet;
+ mpFrameSel = nullptr;
}
+AccFrameSelectorChild::AccFrameSelectorChild(FrameSelector& rFrameSel, FrameBorderType eBorder)
+ : mpFrameSel(&rFrameSel)
+ , meBorder(eBorder)
+{
+}
-css::awt::Point AccFrameSelector::getLocationOnScreen( )
+AccFrameSelectorChild::~AccFrameSelectorChild()
+{
+}
+
+IMPLEMENT_FORWARD_XINTERFACE2( AccFrameSelectorChild, OAccessibleComponentHelper, OAccessibleHelper_Base )
+IMPLEMENT_FORWARD_XTYPEPROVIDER2( AccFrameSelectorChild, OAccessibleComponentHelper, OAccessibleHelper_Base )
+
+Reference< XAccessibleContext > AccFrameSelectorChild::getAccessibleContext( )
+{
+ return this;
+}
+
+sal_Int32 AccFrameSelectorChild::getAccessibleChildCount( )
{
SolarMutexGuard aGuard;
IsValid();
- Point aPos;
- switch(meBorder)
- {
- case FrameBorderType::NONE:
- aPos = mpFrameSel->GetPosPixel();
- break;
- default:
- const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder );
- aPos = aSpot.TopLeft();
- }
- aPos = mpFrameSel->OutputToAbsoluteScreenPixel( aPos );
- css::awt::Point aRet(aPos.X(), aPos.Y());
- return aRet;
+ return 0;
}
+Reference< XAccessible > AccFrameSelectorChild::getAccessibleChild( sal_Int32 )
+{
+ throw RuntimeException();
+}
-css::awt::Size AccFrameSelector::getSize( )
+Reference< XAccessible > AccFrameSelectorChild::getAccessibleParent( )
{
SolarMutexGuard aGuard;
IsValid();
- Size aSz;
- switch(meBorder)
- {
- case FrameBorderType::NONE:
- aSz = mpFrameSel->GetSizePixel();
- break;
- default:
- const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder );
- aSz = aSpot.GetSize();
- }
- css::awt::Size aRet(aSz.Width(), aSz.Height());
- return aRet;
+ Reference< XAccessible > xRet = mpFrameSel->CreateAccessible();
+ return xRet;
}
-void AccFrameSelector::grabFocus( )
+sal_Int16 AccFrameSelectorChild::getAccessibleRole( )
+{
+ return AccessibleRole::CHECK_BOX;
+}
+
+OUString AccFrameSelectorChild::getAccessibleDescription( )
{
SolarMutexGuard aGuard;
IsValid();
- mpFrameSel->GrabFocus();
+ return SvxResId(RID_SVXSTR_FRMSEL_DESCRIPTIONS[static_cast<sal_uInt32>(meBorder)].first);
}
-sal_Int32 AccFrameSelector::getForeground( )
+OUString AccFrameSelectorChild::getAccessibleName( )
{
SolarMutexGuard aGuard;
IsValid();
- return sal_Int32(mpFrameSel->GetControlForeground());
+ return SvxResId(RID_SVXSTR_FRMSEL_TEXTS[static_cast<sal_uInt32>(meBorder)].first);
}
-sal_Int32 AccFrameSelector::getBackground( )
+Reference< XAccessibleRelationSet > AccFrameSelectorChild::getAccessibleRelationSet( )
{
SolarMutexGuard aGuard;
IsValid();
- return sal_Int32(mpFrameSel->GetControlBackground());
+ utl::AccessibleRelationSetHelper* pHelper;
+ Reference< XAccessibleRelationSet > xRet = pHelper = new utl::AccessibleRelationSetHelper;
+ return xRet;
}
-void AccFrameSelector::addAccessibleEventListener( const Reference< XAccessibleEventListener >& xListener )
+Reference< XAccessibleStateSet > AccFrameSelectorChild::getAccessibleStateSet( )
{
SolarMutexGuard aGuard;
+ utl::AccessibleStateSetHelper* pStateSetHelper = new utl::AccessibleStateSetHelper;
+ Reference< XAccessibleStateSet > xRet = pStateSetHelper;
- if ( xListener.is() )
+ if(!mpFrameSel)
+ pStateSetHelper->AddState(AccessibleStateType::DEFUNC);
+ else
{
- if ( !mnClientId )
+ const sal_Int16 aStandardStates[] =
{
- mnClientId = ::comphelper::AccessibleEventNotifier::registerClient();
+ AccessibleStateType::EDITABLE,
+ AccessibleStateType::FOCUSABLE,
+ AccessibleStateType::MULTI_SELECTABLE,
+ AccessibleStateType::SELECTABLE,
+ AccessibleStateType::SHOWING,
+ AccessibleStateType::VISIBLE,
+ AccessibleStateType::OPAQUE,
+ 0};
+ sal_Int16 nState = 0;
+ while(aStandardStates[nState])
+ {
+ pStateSetHelper->AddState(aStandardStates[nState++]);
+ }
+ if(mpFrameSel->IsEnabled())
+ {
+ pStateSetHelper->AddState(AccessibleStateType::ENABLED);
+ pStateSetHelper->AddState(AccessibleStateType::SENSITIVE);
}
- ::comphelper::AccessibleEventNotifier::addEventListener( mnClientId, xListener );
- }
-}
-
-void AccFrameSelector::removeAccessibleEventListener( const Reference< XAccessibleEventListener >& xListener )
-{
- SolarMutexGuard aGuard;
- if ( xListener.is() && mnClientId != 0 &&
- ::comphelper::AccessibleEventNotifier::removeEventListener( mnClientId, xListener ) == 0 )
- {
- // no listeners anymore
- // -> revoke ourself. This may lead to the notifier thread dying (if we were the last client),
- // and at least to us not firing any events anymore, in case somebody calls
- // NotifyAccessibleEvent, again
- ::comphelper::AccessibleEventNotifier::TClientId nId( mnClientId );
- mnClientId = 0;
- ::comphelper::AccessibleEventNotifier::revokeClient( nId );
+ if (mpFrameSel->HasFocus() && mpFrameSel->IsBorderSelected(meBorder))
+ {
+ pStateSetHelper->AddState(AccessibleStateType::ACTIVE);
+ pStateSetHelper->AddState(AccessibleStateType::FOCUSED);
+ pStateSetHelper->AddState(AccessibleStateType::SELECTED);
+ }
}
+ return xRet;
}
-OUString AccFrameSelector::getImplementationName( )
-{
- return OUString("AccFrameSelector");
-}
-
-sal_Bool AccFrameSelector::supportsService( const OUString& rServiceName )
+Reference< XAccessible > AccFrameSelectorChild::getAccessibleAtPoint(
+ const css::awt::Point& aPt )
{
- return cppu::supportsService(this, rServiceName);
+ SolarMutexGuard aGuard;
+ IsValid();
+ //aPt is relative to the frame selector
+ return mpFrameSel->GetChildAccessible( Point( aPt.X, aPt.Y ) );
}
-Sequence< OUString > AccFrameSelector::getSupportedServiceNames( )
+css::awt::Rectangle AccFrameSelectorChild::implGetBounds( )
{
- Sequence< OUString > aRet(3);
- OUString* pArray = aRet.getArray();
- pArray[0] = "Accessible";
- pArray[1] = "AccessibleContext";
- pArray[2] = "AccessibleComponent";
+ SolarMutexGuard aGuard;
+ IsValid();
+ const tools::Rectangle aSpot = mpFrameSel->GetClickBoundRect( meBorder );
+ Point aPos = aSpot.TopLeft();
+ Size aSz = aSpot.GetSize();
+ css::awt::Rectangle aRet;
+ aRet.X = aPos.X();
+ aRet.Y = aPos.Y();
+ aRet.Width = aSz.Width();
+ aRet.Height = aSz.Height();
return aRet;
}
-void AccFrameSelector::IsValid()
+void AccFrameSelectorChild::grabFocus( )
{
- if(!mpFrameSel)
- throw RuntimeException();
+ SolarMutexGuard aGuard;
+ IsValid();
+ mpFrameSel->GrabFocus();
}
-void AccFrameSelector::NotifyFocusListeners(bool bGetFocus)
+sal_Int32 AccFrameSelectorChild::getForeground( )
{
SolarMutexGuard aGuard;
- css::awt::FocusEvent aEvent;
- aEvent.FocusFlags = 0;
- if(bGetFocus)
- {
- GetFocusFlags nFocusFlags = mpFrameSel->GetGetFocusFlags();
- if(nFocusFlags & GetFocusFlags::Tab)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::TAB;
- if(nFocusFlags & GetFocusFlags::CURSOR)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::CURSOR;
- if(nFocusFlags & GetFocusFlags::Mnemonic)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::MNEMONIC;
- if(nFocusFlags & GetFocusFlags::Forward)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::FORWARD;
- if(nFocusFlags & GetFocusFlags::Backward)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::BACKWARD;
- if(nFocusFlags & GetFocusFlags::Around)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::AROUND;
- if(nFocusFlags & GetFocusFlags::UniqueMnemonic)
- aEvent.FocusFlags |= css::awt::FocusChangeReason::UNIQUEMNEMONIC;
- }
- aEvent.Temporary = false;
-
- Reference < XAccessibleContext > xThis( this );
- aEvent.Source = xThis;
- ::comphelper::OInterfaceIteratorHelper2 aIter( maFocusListeners );
- while( aIter.hasMoreElements() )
- {
- Reference < XFocusListener > xListener( aIter.next(), UNO_QUERY );
- if(bGetFocus)
- xListener->focusGained( aEvent );
- else
- xListener->focusLost( aEvent );
- }
+ //see FrameSelector::Paint
+ const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
+ return sal_Int32(rStyles.GetLabelTextColor());
}
-
-IMPL_LINK( AccFrameSelector, WindowEventListener, VclWindowEvent&, rEvent, void )
+sal_Int32 AccFrameSelectorChild::getBackground( )
{
- vcl::Window* pWindow = rEvent.GetWindow();
- DBG_ASSERT( pWindow, "AccFrameSelector::WindowEventListener: no window!" );
- if ( pWindow->IsAccessibilityEventsSuppressed() && ( rEvent.GetId() != VclEventId::ObjectDying ) )
- return;
+ SolarMutexGuard aGuard;
- switch ( rEvent.GetId() )
- {
- case VclEventId::WindowGetFocus:
- {
- if ( meBorder == FrameBorderType::NONE )
- {
- Any aOldValue, aNewValue;
- aNewValue <<= AccessibleStateType::FOCUSED;
- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- }
- }
- break;
- case VclEventId::WindowLoseFocus:
- {
- if ( meBorder == FrameBorderType::NONE )
- {
- Any aOldValue, aNewValue;
- aOldValue <<= AccessibleStateType::FOCUSED;
- NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue );
- }
- }
- break;
- default:
- {
- }
- break;
- }
+ //see FrameSelector::Paint
+ const StyleSettings& rStyles = Application::GetSettings().GetStyleSettings();
+ return sal_Int32(rStyles.GetDialogColor());
}
-
-void AccFrameSelector::NotifyAccessibleEvent( const sal_Int16 _nEventId,
- const Any& _rOldValue, const Any& _rNewValue )
+void AccFrameSelectorChild::IsValid()
{
- if ( mnClientId )
- {
- Reference< XInterface > xSource( *this );
- AccessibleEventObject aEvent( xSource, _nEventId, _rNewValue, _rOldValue );
- ::comphelper::AccessibleEventNotifier::addEvent( mnClientId, aEvent );
- }
+ if(!mpFrameSel)
+ throw RuntimeException();
}
-
-void AccFrameSelector::Invalidate()
+void AccFrameSelectorChild::Invalidate()
{
- RemoveFrameSelEventListener();
mpFrameSel = nullptr;
- EventObject aEvent;
- Reference < XAccessibleContext > xThis( this );
- aEvent.Source = xThis;
- maFocusListeners.disposeAndClear( aEvent );
- maPropertyListeners.disposeAndClear( aEvent );
}
-
}
}
diff --git a/svx/source/dialog/frmsel.cxx b/svx/source/dialog/frmsel.cxx
index fd1e7ddab1ed..c8340e80726f 100644
--- a/svx/source/dialog/frmsel.cxx
+++ b/svx/source/dialog/frmsel.cxx
@@ -28,6 +28,7 @@
#include <com/sun/star/accessibility/AccessibleEventId.hpp>
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
#include <vcl/settings.hxx>
+#include <vcl/svapp.hxx>
#include <drawinglayer/processor2d/processor2dtools.hxx>
#include <bitmaps.hlst>
@@ -261,8 +262,6 @@ FrameSelectorImpl::FrameSelectorImpl( FrameSelector& rFrameSel ) :
FrameSelectorImpl::~FrameSelectorImpl()
{
- if( mxAccess.is() )
- mxAccess->Invalidate();
for( auto aIt = maChildVec.begin(), aEnd = maChildVec.end(); aIt != aEnd; ++aIt )
if( aIt->is() )
(*aIt)->Invalidate();
@@ -290,7 +289,7 @@ void FrameSelectorImpl::Initialize( FrameSelFlags nFlags )
void FrameSelectorImpl::InitColors()
{
- const StyleSettings& rSettings = mrFrameSel.GetSettings().GetStyleSettings();
+ const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
maBackCol = rSettings.GetFieldColor();
mbHCMode = rSettings.GetHighContrastMode();
maArrowCol = rSettings.GetFieldTextColor();
@@ -346,7 +345,7 @@ void FrameSelectorImpl::InitArrowImageList()
void FrameSelectorImpl::InitGlobalGeometry()
{
- Size aCtrlSize( mrFrameSel.CalcOutputSize( mrFrameSel.GetSizePixel() ) );
+ Size aCtrlSize(mrFrameSel.GetOutputSizePixel());
/* nMinSize is the lower of width and height (control will always be squarish).
FRAMESEL_GEOM_OUTER is the minimal distance between inner control border
and any element. */
@@ -513,8 +512,6 @@ void FrameSelectorImpl::sizeChanged()
InitGlobalGeometry();
InitBorderGeometry();
- // correct background around the used area
- mrFrameSel.SetBackground( Wallpaper( maBackCol ) );
DoInvalidate( true );
}
@@ -709,7 +706,7 @@ void FrameSelectorImpl::CopyVirDevToControl(vcl::RenderContext& rRenderContext)
rRenderContext.DrawBitmapEx(maVirDevPos, mpVirDev->GetBitmapEx(Point(0, 0), mpVirDev->GetOutputSizePixel()));
}
-void FrameSelectorImpl::DrawAllTrackingRects()
+void FrameSelectorImpl::DrawAllTrackingRects(vcl::RenderContext& rRenderContext)
{
tools::PolyPolygon aPPoly;
if (mrFrameSel.IsAnyBorderSelected())
@@ -723,8 +720,9 @@ void FrameSelectorImpl::DrawAllTrackingRects()
aPPoly.Insert( tools::Polygon(tools::Rectangle(maVirDevPos, mpVirDev->GetOutputSizePixel())));
aPPoly.Optimize(PolyOptimizeFlags::CLOSE);
+
for(sal_uInt16 nIdx = 0, nCount = aPPoly.Count(); nIdx < nCount; ++nIdx)
- mrFrameSel.InvertTracking(aPPoly.GetObject(nIdx), ShowTrackFlags::Small | ShowTrackFlags::TrackWindow);
+ rRenderContext.Invert(aPPoly.GetObject(nIdx), InvertFlags::TrackFrame);
}
Point FrameSelectorImpl::GetDevPosFromMousePos( const Point& rMousePos ) const
@@ -735,7 +733,7 @@ Point FrameSelectorImpl::GetDevPosFromMousePos( const Point& rMousePos ) const
void FrameSelectorImpl::DoInvalidate( bool bFullRepaint )
{
mbFullRepaint |= bFullRepaint;
- mrFrameSel.Invalidate( InvalidateFlags::NoErase );
+ mrFrameSel.Invalidate();
}
// frame border state and style
@@ -757,7 +755,7 @@ void FrameSelectorImpl::SetBorderState( FrameBorder& rBorder, FrameBorderState e
else
rBorder.SetState( eState );
if (pFrameSelector)
- pFrameSelector->NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOld, aNew );
+ pFrameSelector->NotifyAccessibleEvent( AccessibleEventId::STATE_CHANGED, aOld, aNew );
DoInvalidate( true );
}
@@ -816,22 +814,23 @@ bool FrameSelectorImpl::SelectedBordersEqual() const
return bEqual;
}
-FrameSelector::FrameSelector(vcl::Window* pParent)
- : Control(pParent, WB_BORDER|WB_TABSTOP)
+FrameSelector::FrameSelector()
{
- // not in c'tor init list (avoid warning about usage of *this)
- mxImpl.reset( new FrameSelectorImpl( *this ) );
- EnableRTL( false ); // #107808# don't mirror the mouse handling
}
-FrameSelector::~FrameSelector()
+void FrameSelector::SetDrawingArea(weld::DrawingArea* pDrawingArea)
{
- disposeOnce();
+ Size aPrefSize = pDrawingArea->get_ref_device().LogicToPixel(Size(61, 65), MapMode(MapUnit::MapAppFont));
+ pDrawingArea->set_size_request(aPrefSize.Width(), aPrefSize.Height());
+ CustomWidgetController::SetDrawingArea(pDrawingArea);
+ mxImpl.reset( new FrameSelectorImpl( *this ) );
+ EnableRTL( false ); // #107808# don't mirror the mouse handling
}
-extern "C" SAL_DLLPUBLIC_EXPORT void makeSvxFrameSelector(VclPtr<vcl::Window> & rRet, VclPtr<vcl::Window> & pParent, VclBuilder::stringmap &)
+FrameSelector::~FrameSelector()
{
- rRet = VclPtr<FrameSelector>::Create(pParent);
+ if( mxAccess.is() )
+ mxAccess->Invalidate();
}
void FrameSelector::Initialize( FrameSelFlags nFlags )
@@ -1023,9 +1022,9 @@ void FrameSelector::SetColorToSelection( const Color& rColor )
// accessibility
Reference< XAccessible > FrameSelector::CreateAccessible()
{
- if( !mxImpl->mxAccess.is() )
- mxImpl->mxAccess = new a11y::AccFrameSelector( *this, FrameBorderType::NONE );
- return mxImpl->mxAccess.get();
+ if( !mxAccess.is() )
+ mxAccess = new a11y::AccFrameSelector(*this);
+ return mxAccess.get();
}
Reference< XAccessible > FrameSelector::GetChildAccessible( FrameBorderType eBorder )
@@ -1036,7 +1035,7 @@ Reference< XAccessible > FrameSelector::GetChildAccessible( FrameBorderType eBor
{
--nVecIdx;
if( !mxImpl->maChildVec[ nVecIdx ].is() )
- mxImpl->maChildVec[ nVecIdx ] = new a11y::AccFrameSelector( *this, eBorder );
+ mxImpl->maChildVec[ nVecIdx ] = new a11y::AccFrameSelectorChild( *this, eBorder );
xRet = mxImpl->maChildVec[ nVecIdx ].get();
}
return xRet;
@@ -1078,7 +1077,7 @@ void FrameSelector::Paint(vcl::RenderContext& rRenderContext, const tools::Recta
{
mxImpl->CopyVirDevToControl(rRenderContext);
if (HasFocus())
- mxImpl->DrawAllTrackingRects();
+ mxImpl->DrawAllTrackingRects(rRenderContext);
}
void FrameSelector::MouseButtonDown( const MouseEvent& rMEvt )
@@ -1167,7 +1166,7 @@ void FrameSelector::MouseButtonDown( const MouseEvent& rMEvt )
}
}
-void FrameSelector::KeyInput( const KeyEvent& rKEvt )
+bool FrameSelector::KeyInput( const KeyEvent& rKEvt )
{
bool bHandled = false;
vcl::KeyCode aKeyCode = rKEvt.GetKeyCode();
@@ -1214,8 +1213,9 @@ void FrameSelector::KeyInput( const KeyEvent& rKEvt )
break;
}
}
- if( !bHandled )
- Window::KeyInput(rKEvt);
+ if (bHandled)
+ return true;
+ return CustomWidgetController::KeyInput(rKEvt);
}
void FrameSelector::GetFocus()
@@ -1225,8 +1225,6 @@ void FrameSelector::GetFocus()
mxImpl->SelectBorder( *mxImpl->maEnabBorders.front(), true );
mxImpl->DoInvalidate( false );
- if( mxImpl->mxAccess.is() )
- mxImpl->mxAccess->NotifyFocusListeners( true );
if (IsAnyBorderSelected())
{
FrameBorderType borderType = FrameBorderType::NONE;
@@ -1250,36 +1248,27 @@ void FrameSelector::GetFocus()
}
for( SelFrameBorderIter aIt( mxImpl->maEnabBorders ); aIt.Is(); ++aIt )
mxImpl->SetBorderState( **aIt, FrameBorderState::Show );
- Control::GetFocus();
+ CustomWidgetController::GetFocus();
}
void FrameSelector::LoseFocus()
{
mxImpl->DoInvalidate( false );
- if( mxImpl->mxAccess.is() )
- mxImpl->mxAccess->NotifyFocusListeners( false );
- Control::LoseFocus();
+ CustomWidgetController::LoseFocus();
}
-void FrameSelector::DataChanged( const DataChangedEvent& rDCEvt )
+void FrameSelector::StyleUpdated()
{
- Control::DataChanged( rDCEvt );
- if( (rDCEvt.GetType() == DataChangedEventType::SETTINGS) && (rDCEvt.GetFlags() & AllSettingsFlags::STYLE) )
- mxImpl->InitVirtualDevice();
+ mxImpl->InitVirtualDevice();
+ CustomWidgetController::StyleUpdated();
}
void FrameSelector::Resize()
{
- Control::Resize();
+ CustomWidgetController::Resize();
mxImpl->sizeChanged();
}
-Size FrameSelector::GetOptimalSize() const
-{
- return LogicToPixel(Size(61, 65), MapMode(MapUnit::MapAppFont));
-}
-
-
template< typename Cont, typename Iter, typename Pred >
FrameBorderIterBase< Cont, Iter, Pred >::FrameBorderIterBase( container_type& rCont ) :
maIt( rCont.begin() ),
@@ -1295,7 +1284,6 @@ FrameBorderIterBase< Cont, Iter, Pred >& FrameBorderIterBase< Cont, Iter, Pred >
return *this;
}
-
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/inc/AccessibleFrameSelector.hxx b/svx/source/inc/AccessibleFrameSelector.hxx
index e7482b9e1c87..177780f6afc4 100644
--- a/svx/source/inc/AccessibleFrameSelector.hxx
+++ b/svx/source/inc/AccessibleFrameSelector.hxx
@@ -29,91 +29,110 @@
#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
#include <tools/link.hxx>
#include <cppuhelper/implbase.hxx>
-#include <comphelper/interfacecontainer2.hxx>
-#include <comphelper/accessibleeventnotifier.hxx>
+#include <comphelper/accessibleselectionhelper.hxx>
#include <svx/framebordertype.hxx>
#include <vcl/vclptr.hxx>
-class VclSimpleEvent;
-class VclWindowEvent;
-
namespace svx {
class FrameSelector;
namespace a11y {
+typedef ::cppu::ImplHelper1<css::accessibility::XAccessible> OAccessibleHelper_Base;
-class AccFrameSelector final :
- public ::cppu::WeakImplHelper<
- css::accessibility::XAccessible,
- css::accessibility::XAccessibleContext,
- css::accessibility::XAccessibleComponent,
- css::accessibility::XAccessibleEventBroadcaster,
- css::lang::XServiceInfo
- >
+class AccFrameSelector final : public ::comphelper::OAccessibleComponentHelper,
+ public OAccessibleHelper_Base
{
public:
- explicit AccFrameSelector( FrameSelector& rFrameSel, FrameBorderType eBorder );
-
+ explicit AccFrameSelector(FrameSelector& rFrameSel);
virtual ~AccFrameSelector() override;
- //XAccessible
- virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
+ DECLARE_XINTERFACE( )
+ DECLARE_XTYPEPROVIDER( )
+
+ //XAccessibleComponent
+ virtual void SAL_CALL grabFocus( ) override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) 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;
+ //XAccessible
+ virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
+
virtual sal_Int32 SAL_CALL getForeground( ) override;
virtual sal_Int32 SAL_CALL getBackground( ) 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;
-
- //XServiceInfo
- virtual OUString SAL_CALL getImplementationName( ) override;
- virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
- virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
+ void NotifyAccessibleEvent(const sal_Int16 _nEventId, const css::uno::Any& _rOldValue, const css::uno::Any& _rNewValue)
+ {
+ ::comphelper::OAccessibleComponentHelper::NotifyAccessibleEvent(_nEventId, _rOldValue, _rNewValue);
+ }
void Invalidate();
- void NotifyFocusListeners(bool bGetFocus);
- void NotifyAccessibleEvent( const sal_Int16 _nEventId, const css::uno::Any& _rOldValue, const css::uno::Any& _rNewValue );
private:
- DECL_LINK( WindowEventListener, VclWindowEvent&, void );
+ // OCommonAccessibleComponent
+ /// implements the calculation of the bounding rectangle
+ virtual css::awt::Rectangle implGetBounds( ) override;
/// @throws css::uno::RuntimeException
void IsValid();
- void RemoveFrameSelEventListener();
- VclPtr<FrameSelector> mpFrameSel;
- ::osl::Mutex maFocusMutex;
- ::osl::Mutex maPropertyMutex;
+ FrameSelector* mpFrameSel;
+};
- FrameBorderType meBorder;
+class AccFrameSelectorChild final : public ::comphelper::OAccessibleComponentHelper,
+ public OAccessibleHelper_Base
+{
+public:
+ explicit AccFrameSelectorChild( FrameSelector& rFrameSel, FrameBorderType eBorder );
- ::comphelper::OInterfaceContainerHelper2 maFocusListeners;
- ::comphelper::OInterfaceContainerHelper2 maPropertyListeners;
+ virtual ~AccFrameSelectorChild() override;
- ::comphelper::AccessibleEventNotifier::TClientId mnClientId;
+ DECLARE_XINTERFACE( )
+ DECLARE_XTYPEPROVIDER( )
+
+ //XAccessibleComponent
+ virtual void SAL_CALL grabFocus( ) override;
+ virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& aPoint ) 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_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;
+
+ //XAccessible
+ virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext( ) override;
+
+ virtual sal_Int32 SAL_CALL getForeground( ) override;
+ virtual sal_Int32 SAL_CALL getBackground( ) override;
+
+ void Invalidate();
+
+private:
+ // OCommonAccessibleComponent
+ /// implements the calculation of the bounding rectangle
+ virtual css::awt::Rectangle implGetBounds( ) override;
+
+ /// @throws css::uno::RuntimeException
+ void IsValid();
+
+ FrameSelector* mpFrameSel;
+
+ FrameBorderType meBorder;
};
diff --git a/svx/source/inc/frmselimpl.hxx b/svx/source/inc/frmselimpl.hxx
index 21c35ddd758d..29791d7ee540 100644
--- a/svx/source/inc/frmselimpl.hxx
+++ b/svx/source/inc/frmselimpl.hxx
@@ -30,6 +30,7 @@ namespace svx {
namespace a11y {
class AccFrameSelector;
+ class AccFrameSelectorChild;
}
class FrameBorder
@@ -138,8 +139,7 @@ struct FrameSelectorImpl
bool mbAutoSelect; /// true = Auto select a frame border, if focus reaches control.
bool mbHCMode; /// true = High contrast mode.
- rtl::Reference<a11y::AccFrameSelector> mxAccess; /// Pointer to accessibility object of the control.
- std::vector<rtl::Reference<a11y::AccFrameSelector>>
+ std::vector<rtl::Reference<a11y::AccFrameSelectorChild>>
maChildVec; /// Pointers to accessibility objects for frame borders.
explicit FrameSelectorImpl( FrameSelector& rFrameSel );
~FrameSelectorImpl();
@@ -185,7 +185,7 @@ struct FrameSelectorImpl
void CopyVirDevToControl(vcl::RenderContext& rRenderContext);
/** Draws tracking rectangles for all selected frame borders. */
- void DrawAllTrackingRects();
+ void DrawAllTrackingRects(vcl::RenderContext& rRenderContext);
/** Converts a mouse position to the virtual device position. */
Point GetDevPosFromMousePos( const Point& rMousePos ) const;
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index a0bcc10d34e9..62a0015bf901 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1743,6 +1743,15 @@ bool SvxColorWindow::IsNoSelection() const
return !mpButtonAutoColor->IsVisible() && !mpButtonNoneColor->IsVisible();
}
+bool ColorWindow::IsNoSelection() const
+{
+ if (!mxColorSet->IsNoSelection())
+ return false;
+ if (!mxRecentColorSet->IsNoSelection())
+ return false;
+ return !mxButtonAutoColor->get_visible() && !mxButtonNoneColor->get_visible();
+}
+
void SvxColorWindow::statusChanged( const css::frame::FeatureStateEvent& rEvent )
{
if (rEvent.FeatureURL.Complete == ".uno:ColorTableState")
@@ -3840,7 +3849,7 @@ void ColorListBox::ShowPreview(const NamedColor &rColor)
xDevice->SetLineColor(rStyleSettings.GetDisableColor());
xDevice->DrawRect(aRect);
- m_xButton->set_image(*xDevice);
+ m_xButton->set_image(xDevice.get());
m_xButton->set_label(rColor.second);
}