28 #include <com/sun/star/accessibility/AccessibleEventId.hpp>
29 #include <com/sun/star/accessibility/AccessibleRelationType.hpp>
30 #include <com/sun/star/accessibility/AccessibleRole.hpp>
31 #include <com/sun/star/accessibility/AccessibleScrollType.hpp>
32 #include <com/sun/star/accessibility/AccessibleStateType.hpp>
33 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
34 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
35 #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
36 #include <com/sun/star/accessibility/XAccessibleText.hpp>
37 #include <com/sun/star/awt/XWindow2.hpp>
38 #include <com/sun/star/drawing/framework/XPane.hpp>
39 #include <com/sun/star/drawing/framework/XView.hpp>
40 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
58 typedef ::cppu::WeakComponentImplHelper <
59 css::accessibility::XAccessible,
60 css::accessibility::XAccessibleContext,
61 css::accessibility::XAccessibleComponent,
62 css::accessibility::XAccessibleEventBroadcaster,
63 css::awt::XWindowListener
64 > PresenterAccessibleObjectInterfaceBase;
69 public PresenterAccessibleObjectInterfaceBase
73 const css::lang::Locale& rLocale,
74 const sal_Int16 nRole,
75 const OUString& rsName);
79 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
80 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow);
81 void SetAccessibleParent (
const css::uno::Reference<css::accessibility::XAccessible>& rxAccessibleParent);
83 virtual void SAL_CALL
disposing()
override;
85 void AddChild (const ::rtl::Reference<AccessibleObject>& rpChild);
86 void RemoveChild (const ::rtl::Reference<AccessibleObject>& rpChild);
92 const sal_Int16 nEventId,
93 const css::uno::Any& rOldValue,
94 const css::uno::Any& rNewValue);
100 virtual css::uno::Reference<css::accessibility::XAccessibleContext> SAL_CALL
107 virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL
110 virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL
getAccessibleParent()
override;
120 virtual css::uno::Reference<css::accessibility::XAccessibleRelationSet> SAL_CALL
123 virtual css::uno::Reference<css::accessibility::XAccessibleStateSet> SAL_CALL
126 virtual css::lang::Locale SAL_CALL
getLocale()
override;
131 const css::awt::Point& aPoint)
override;
133 virtual css::uno::Reference<css::accessibility::XAccessible> SAL_CALL
135 const css::awt::Point& aPoint)
override;
137 virtual css::awt::Rectangle SAL_CALL
getBounds()
override;
139 virtual css::awt::Point SAL_CALL
getLocation()
override;
143 virtual css::awt::Size SAL_CALL
getSize()
override;
145 virtual void SAL_CALL
grabFocus()
override;
154 const css::uno::Reference<css::accessibility::XAccessibleEventListener>& rxListener)
override;
157 const css::uno::Reference<css::accessibility::XAccessibleEventListener>& rxListener)
override;
161 virtual void SAL_CALL
windowResized (
const css::awt::WindowEvent& rEvent)
override;
163 virtual void SAL_CALL
windowMoved (
const css::awt::WindowEvent& rEvent)
override;
165 virtual void SAL_CALL
windowShown (
const css::lang::EventObject& rEvent)
override;
167 virtual void SAL_CALL
windowHidden (
const css::lang::EventObject& rEvent)
override;
171 virtual void SAL_CALL
disposing (
const css::lang::EventObject& rEvent)
override;
191 void UpdateState (
const sal_Int16 aState,
const bool bValue);
200 typedef ::cppu::WeakComponentImplHelper <
201 css::accessibility::XAccessibleStateSet
202 > AccessibleStateSetInterfaceBase;
204 class AccessibleStateSet
206 public AccessibleStateSetInterfaceBase
209 explicit AccessibleStateSet (
const sal_Int32 nStateSet);
211 static sal_uInt32 GetStateMask (
const sal_Int16 nType);
215 virtual sal_Bool SAL_CALL isEmpty()
override;
217 virtual sal_Bool SAL_CALL contains (sal_Int16 nState)
override;
219 virtual sal_Bool SAL_CALL containsAll (
const css::uno::Sequence<sal_Int16>& rStateSet)
override;
221 virtual css::uno::Sequence<sal_Int16> SAL_CALL getStates()
override;
229 typedef ::cppu::WeakComponentImplHelper <
230 css::accessibility::XAccessibleRelationSet
231 > AccessibleRelationSetInterfaceBase;
233 class AccessibleRelationSet
235 public AccessibleRelationSetInterfaceBase
238 AccessibleRelationSet();
241 const sal_Int16 nRelationType,
242 const Reference<XInterface>& rxObject);
246 virtual sal_Int32 SAL_CALL getRelationCount()
override;
248 virtual AccessibleRelation SAL_CALL getRelation (sal_Int32
nIndex)
override;
250 virtual sal_Bool SAL_CALL containsRelation (sal_Int16 nRelationType)
override;
252 virtual AccessibleRelation SAL_CALL getRelationByType (sal_Int16 nRelationType)
override;
260 typedef ::cppu::ImplInheritanceHelper <
261 PresenterAccessible::AccessibleObject,
262 css::accessibility::XAccessibleText
263 > PresenterAccessibleParagraphInterfaceBase;
267 :
public PresenterAccessibleParagraphInterfaceBase
271 const css::lang::Locale& rLocale,
272 const OUString& rsName,
274 const sal_Int32 nParagraphIndex);
278 virtual css::uno::Reference<css::accessibility::XAccessibleRelationSet> SAL_CALL
289 virtual css::uno::Sequence<css::beans::PropertyValue> SAL_CALL
292 const css::uno::Sequence<OUString>& rRequestedAttributes)
override;
298 virtual sal_Int32 SAL_CALL
getIndexAtPoint (
const css::awt::Point& rPoint)
override;
308 virtual OUString SAL_CALL
getText()
override;
311 sal_Int32 nStartIndex,
312 sal_Int32 nEndIndex)
override;
316 sal_Int16 nTextType)
override;
320 sal_Int16 nTextType)
override;
324 sal_Int16 nTextType)
override;
326 virtual sal_Bool SAL_CALL
copyText (sal_Int32 nStartIndex, sal_Int32 nEndIndex)
override;
329 sal_Int32 nStartIndex,
331 css::accessibility::AccessibleScrollType aScrollType)
override;
335 virtual awt::Size
GetSize()
override;
348 class AccessibleConsole
352 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
353 const lang::Locale& rLocale)
355 OUString
sName (
"Presenter Console");
358 "/org.openoffice.Office.PresenterScreen/",
365 rLocale, AccessibleRole::PANEL, sName));
366 pObject->LateInitialization();
367 pObject->UpdateStateSet();
375 class AccessiblePreview
379 const Reference<css::uno::XComponentContext>& rxContext,
380 const lang::Locale& rLocale,
381 const Reference<awt::XWindow>& rxContentWindow,
382 const Reference<awt::XWindow>& rxBorderWindow)
384 OUString
sName (
"Presenter Notes Window");
388 "/org.openoffice.Office.PresenterScreen/",
390 aConfiguration.GetConfigurationNode(
"Presenter/Accessibility/Preview/String")
395 new PresenterAccessible::AccessibleObject(
397 AccessibleRole::LABEL,
401 pObject->SetWindow(rxContentWindow, rxBorderWindow);
409 class AccessibleNotes :
public PresenterAccessible::AccessibleObject
413 const css::lang::Locale& rLocale,
414 const OUString& rsName);
417 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
418 const lang::Locale& rLocale,
419 const Reference<awt::XWindow>& rxContentWindow,
420 const Reference<awt::XWindow>& rxBorderWindow,
421 const std::shared_ptr<PresenterTextView>& rpTextView);
423 void SetTextView (
const std::shared_ptr<PresenterTextView>& rpTextView);
425 virtual void SetWindow (
426 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
427 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow)
override;
432 void NotifyCaretChange (
433 const sal_Int32 nOldParagraphIndex,
434 const sal_Int32 nOldCharacterIndex,
435 const sal_Int32 nNewParagraphIndex,
436 const sal_Int32 nNewCharacterIndex);
444 class AccessibleFocusManager
447 static std::shared_ptr<AccessibleFocusManager>
const & Instance();
449 void AddFocusableObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject);
450 void RemoveFocusableObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject);
452 void FocusObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject);
454 ~AccessibleFocusManager();
461 AccessibleFocusManager();
469 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
470 const ::rtl::Reference<PresenterController>& rpPresenterController,
471 const Reference<drawing::framework::XPane>& rxMainPane)
475 mxMainPane(rxMainPane, UNO_QUERY),
477 mxPreviewContentWindow(),
478 mxPreviewBorderWindow(),
479 mxNotesContentWindow(),
480 mxNotesBorderWindow(),
481 mpAccessibleConsole(),
482 mpAccessiblePreview(),
502 if ( ! pContainer.is())
506 Reference<drawing::framework::XPane> xPreviewPane;
508 xPreviewPane = pPreviewPane->mxPane.get();
509 if ( ! xPreviewPane.is())
521 Reference<drawing::framework::XConfigurationController> xConfigurationController(
523 if ( ! xConfigurationController.is())
528 if ( ! pPaneContainer.is())
537 Reference<drawing::framework::XPane> xPreviewPane;
539 xPreviewPane = pPreviewPane->mxPane.get();
544 Reference<drawing::framework::XPane> xNotesPane;
546 xNotesPane = pNotesPane->mxPane.get();
549 Reference<drawing::framework::XView> xNotesView;
551 xNotesView = pNotesPane->mxView;
553 dynamic_cast<PresenterNotesView*>(xNotesView.get()));
556 pPreviewPane ? pPreviewPane->mxContentWindow : Reference<awt::XWindow>(),
557 pPreviewPane ? pPreviewPane->mxBorderWindow : Reference<awt::XWindow>(),
558 (pPreviewPane&&pPreviewPane->mxPane.is()) ? pPreviewPane->mxPane->GetTitle() : OUString(),
559 pNotesPane ? pNotesPane->mxContentWindow : Reference<awt::XWindow>(),
560 pNotesPane ? pNotesPane->mxBorderWindow : Reference<awt::XWindow>(),
562 ? pNotesView->GetTextView()
563 : std::shared_ptr<PresenterTextView>());
567 const Reference<awt::XWindow>& rxPreviewContentWindow,
568 const Reference<awt::XWindow>& rxPreviewBorderWindow,
569 const OUString& rsTitle,
570 const Reference<awt::XWindow>& rxNotesContentWindow,
571 const Reference<awt::XWindow>& rxNotesBorderWindow,
572 const std::shared_ptr<PresenterTextView>& rpNotesTextView)
630 pPreviewPane&&pPreviewPane->mxPane.is()
631 ? pPreviewPane->mxPane->GetTitle()
648 std::shared_ptr<PresenterTextView>());
669 Reference<XPane> xMainPane (
mxMainPane, UNO_QUERY);
690 SAL_INFO(
"sdext.presenter", __func__ <<
": PresenterAccessible::focusGained at " <<
this
697 SAL_INFO(
"sdext.presenter", __func__ <<
": PresenterAccessible::focusLost at " <<
this);
698 AccessibleFocusManager::Instance()->FocusObject(
nullptr);
713 if (rArguments.hasElements())
724 const lang::Locale& rLocale,
725 const sal_Int16 nRole,
726 const OUString& rsName)
727 : PresenterAccessibleObjectInterfaceBase(
m_aMutex),
735 mxParentAccessible(),
743 AccessibleFocusManager::Instance()->AddFocusableObject(
this);
747 const Reference<awt::XWindow>& rxContentWindow,
748 const Reference<awt::XWindow>& rxBorderWindow)
750 Reference<awt::XWindow2> xContentWindow (rxContentWindow, UNO_QUERY);
752 if (mxContentWindow.get() == xContentWindow.get())
755 if (mxContentWindow.is())
757 mxContentWindow->removeWindowListener(
this);
760 mxContentWindow = xContentWindow;
761 mxBorderWindow.set(rxBorderWindow, UNO_QUERY);
763 if (mxContentWindow.is())
765 mxContentWindow->addWindowListener(
this);
772 const Reference<XAccessible>& rxAccessibleParent)
774 mxParentAccessible = rxAccessibleParent;
779 AccessibleFocusManager::Instance()->RemoveFocusableObject(
this);
780 SetWindow(
nullptr,
nullptr);
785 Reference<XAccessibleContext> SAL_CALL
799 const sal_Int32 nChildCount (
maChildren.size());
804 Reference<XAccessible> SAL_CALL
809 if (nIndex<0 || nIndex>=sal_Int32(
maChildren.size()))
810 throw lang::IndexOutOfBoundsException(
"invalid child index", static_cast<uno::XWeak*>(
this));
812 return Reference<XAccessible>(
maChildren[nIndex].get());
815 Reference<XAccessible> SAL_CALL
820 return mxParentAccessible;
828 const Reference<XAccessible> xThis (
this);
829 if (mxParentAccessible.is())
831 const Reference<XAccessibleContext> xContext (mxParentAccessible->getAccessibleContext());
832 for (sal_Int32
nIndex=0,
nCount=xContext->getAccessibleChildCount();
836 if (xContext->getAccessibleChild(
nIndex) == xThis)
868 Reference<XAccessibleRelationSet> SAL_CALL
876 Reference<XAccessibleStateSet> SAL_CALL
881 return Reference<XAccessibleStateSet>(
new AccessibleStateSet(
mnStateSet));
884 lang::Locale SAL_CALL
889 if (mxParentAccessible.is())
891 Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext());
892 if (xParentContext.is())
893 return xParentContext->getLocale();
901 const awt::Point& rPoint)
905 if (mxContentWindow.is())
907 const awt::Rectangle aBox (getBounds());
908 return rPoint.X>=aBox.X
910 && rPoint.X<aBox.X+aBox.Width
911 && rPoint.Y<aBox.Y+aBox.Height;
917 Reference<XAccessible> SAL_CALL
922 return Reference<XAccessible>();
929 const awt::Point aLocation (GetRelativeLocation());
930 const awt::Size aSize (GetSize());
932 return awt::Rectangle (aLocation.X, aLocation.Y, aSize.Width, aSize.Height);
939 const awt::Point aLocation (GetRelativeLocation());
948 awt::Point aRelativeLocation (GetRelativeLocation());
949 awt::Point aParentLocationOnScreen (GetAbsoluteParentLocation());
952 aRelativeLocation.X + aParentLocationOnScreen.X,
953 aRelativeLocation.Y + aParentLocationOnScreen.Y);
960 const awt::Size aSize (GetSize());
968 if (mxBorderWindow.is())
969 mxBorderWindow->setFocus();
970 else if (mxContentWindow.is())
971 mxContentWindow->setFocus();
991 const Reference<XAccessibleEventListener>& rxListener)
993 if (!rxListener.is())
996 const osl::MutexGuard aGuard(
m_aMutex);
998 if (rBHelper.bDisposed || rBHelper.bInDispose)
1000 uno::Reference<uno::XInterface> xThis (static_cast<XWeak*>(
this), UNO_QUERY);
1001 rxListener->disposing (lang::EventObject(xThis));
1005 maListeners.push_back(rxListener);
1010 const Reference<XAccessibleEventListener>& rxListener)
1013 if (rxListener.is())
1015 const osl::MutexGuard aGuard(
m_aMutex);
1017 auto const it(std::remove(maListeners.begin(), maListeners.end(), rxListener));
1018 if (it != maListeners.end())
1020 maListeners.erase(it);
1028 const css::awt::WindowEvent&)
1030 FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED,
Any(),
Any());
1034 const css::awt::WindowEvent&)
1036 FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED,
Any(),
Any());
1040 const css::lang::EventObject&)
1046 const css::lang::EventObject&)
1055 if (rEvent.Source == mxContentWindow)
1057 mxContentWindow =
nullptr;
1058 mxBorderWindow =
nullptr;
1062 SetWindow(
nullptr,
nullptr);
1072 case AccessibleStateType::ENABLED:
1073 return mxContentWindow.is() && mxContentWindow->isEnabled();
1075 case AccessibleStateType::FOCUSABLE:
1078 case AccessibleStateType::FOCUSED:
1081 case AccessibleStateType::SHOWING:
1082 return mxContentWindow.is() && mxContentWindow->isVisible();
1091 UpdateState(AccessibleStateType::FOCUSABLE,
true);
1094 UpdateState(AccessibleStateType::MULTI_LINE,
true);
1095 UpdateState(AccessibleStateType::SENSITIVE,
true);
1097 UpdateState(AccessibleStateType::ENABLED, GetWindowState(AccessibleStateType::ENABLED));
1098 UpdateState(AccessibleStateType::FOCUSED, GetWindowState(AccessibleStateType::FOCUSED));
1099 UpdateState(AccessibleStateType::SHOWING, GetWindowState(AccessibleStateType::SHOWING));
1104 const sal_Int16 nState,
1107 const sal_uInt32 nStateMask (AccessibleStateSet::GetStateMask(nState));
1108 if (((
mnStateSet & nStateMask)!=0) != bValue)
1113 FireAccessibleEvent(AccessibleEventId::STATE_CHANGED,
Any(),
Any(nState));
1118 FireAccessibleEvent(AccessibleEventId::STATE_CHANGED,
Any(nState),
Any());
1124 const ::rtl::Reference<AccessibleObject>& rpChild)
1127 rpChild->SetAccessibleParent(
this);
1128 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1132 const ::rtl::Reference<AccessibleObject>& rpChild)
1134 rpChild->SetAccessibleParent(Reference<XAccessible>());
1136 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1141 if (mbIsFocused != bIsFocused)
1143 mbIsFocused = bIsFocused;
1152 const OUString sOldName(
msName);
1154 FireAccessibleEvent(AccessibleEventId::NAME_CHANGED,
Any(sOldName),
Any(
msName));
1159 const sal_Int16 nEventId,
1163 AccessibleEventObject aEventObject;
1165 aEventObject.Source = Reference<XWeak>(
this);
1166 aEventObject.EventId = nEventId;
1167 aEventObject.NewValue = rNewValue;
1168 aEventObject.OldValue = rOldValue;
1170 ::std::vector<Reference<XAccessibleEventListener> > aListenerCopy(maListeners);
1171 for (
const auto& rxListener : aListenerCopy)
1175 rxListener->notifyEvent(aEventObject);
1177 catch (
const lang::DisposedException&)
1181 removeAccessibleEventListener(rxListener);
1193 awt::Point aLocation;
1194 if (mxContentWindow.is())
1196 const awt::Rectangle aContentBox (mxContentWindow->getPosSize());
1197 aLocation.X = aContentBox.X;
1198 aLocation.Y = aContentBox.Y;
1199 if (mxBorderWindow.is())
1201 const awt::Rectangle aBorderBox (mxBorderWindow->getPosSize());
1202 aLocation.X += aBorderBox.X;
1203 aLocation.Y += aBorderBox.Y;
1211 if (mxContentWindow.is())
1213 const awt::Rectangle aBox (mxContentWindow->getPosSize());
1214 return awt::Size(aBox.Width, aBox.Height);
1222 Reference<XAccessibleComponent> xParentComponent;
1223 if (mxParentAccessible.is())
1224 xParentComponent.set( mxParentAccessible->getAccessibleContext(), UNO_QUERY);
1225 if (xParentComponent.is())
1226 return xParentComponent->getLocationOnScreen();
1228 return awt::Point();
1233 if (rBHelper.bDisposed || rBHelper.bInDispose)
1234 throw lang::DisposedException(
"object has already been disposed", uno::Reference<uno::XInterface>(const_cast<uno::XWeak*>(static_cast<uno::XWeak const *>(
this))));
1239 AccessibleStateSet::AccessibleStateSet (
const sal_Int32 nStateSet)
1240 : AccessibleStateSetInterfaceBase(
m_aMutex),
1245 sal_uInt32 AccessibleStateSet::GetStateMask (
const sal_Int16 nState)
1247 if (nState<0 || nState>=sal_Int16(
sizeof(sal_uInt32)*8))
1257 sal_Bool SAL_CALL AccessibleStateSet::isEmpty()
1262 sal_Bool SAL_CALL AccessibleStateSet::contains (sal_Int16 nState)
1264 return (
mnStateSet & GetStateMask(nState)) != 0;
1267 sal_Bool SAL_CALL AccessibleStateSet::containsAll (
const css::uno::Sequence<sal_Int16>& rStateSet)
1269 return std::none_of(rStateSet.begin(), rStateSet.end(),
1270 [
this](
const sal_Int16 nState) {
return (
mnStateSet & GetStateMask(nState)) == 0; });
1273 css::uno::Sequence<sal_Int16> SAL_CALL AccessibleStateSet::getStates()
1275 ::std::vector<sal_Int16> aStates;
1278 if ((
mnStateSet & GetStateMask(nIndex)) != 0)
1279 aStates.push_back(nIndex);
1280 return Sequence<sal_Int16>(aStates.data(), aStates.size());
1285 AccessibleRelationSet::AccessibleRelationSet()
1286 : AccessibleRelationSetInterfaceBase(
m_aMutex),
1291 void AccessibleRelationSet::AddRelation (
1292 const sal_Int16 nRelationType,
1293 const Reference<XInterface>& rxObject)
1303 sal_Int32 SAL_CALL AccessibleRelationSet::getRelationCount()
1308 AccessibleRelation SAL_CALL AccessibleRelationSet::getRelation (sal_Int32 nIndex)
1311 return AccessibleRelation();
1316 sal_Bool SAL_CALL AccessibleRelationSet::containsRelation (sal_Int16 nRelationType)
1319 [nRelationType](
const AccessibleRelation& rRelation) {
return rRelation.RelationType == nRelationType; });
1322 AccessibleRelation SAL_CALL AccessibleRelationSet::getRelationByType (sal_Int16 nRelationType)
1325 [nRelationType](
const AccessibleRelation& rRelation) {
return rRelation.RelationType == nRelationType; });
1328 return AccessibleRelation();
1334 const lang::Locale& rLocale,
1335 const OUString& rsName,
1337 const sal_Int32 nParagraphIndex)
1338 : PresenterAccessibleParagraphInterfaceBase(rLocale, AccessibleRole::
PARAGRAPH, rsName),
1339 mpParagraph(rpParagraph),
1346 Reference<XAccessibleRelationSet> SAL_CALL
1353 if (mxParentAccessible.is())
1355 Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext());
1356 if (xParentContext.is())
1360 AccessibleRelationType::CONTENT_FLOWS_FROM,
1363 if (mnParagraphIndex<xParentContext->getAccessibleChildCount()-1)
1365 AccessibleRelationType::CONTENT_FLOWS_TO,
1370 return Reference<XAccessibleRelationSet>(pSet.get());
1379 sal_Int32 nPosition (-1);
1381 nPosition = mpParagraph->GetCaretPosition();
1392 mpParagraph->SetCaretPosition(nIndex);
1404 throw lang::IndexOutOfBoundsException(
"no text support in current mode", static_cast<uno::XWeak*>(
this));
1405 return mpParagraph->GetCharacter(nIndex);
1408 Sequence<css::beans::PropertyValue> SAL_CALL
1411 const css::uno::Sequence<OUString>& rRequestedAttributes)
1415 #if OSL_DEBUG_LEVEL > 0
1416 SAL_INFO(
"sdext.presenter", __func__ <<
" at " <<
this <<
", " << nIndex <<
" returns empty set" );
1417 for (sal_Int32 nAttributeIndex(0), nAttributeCount(rRequestedAttributes.getLength());
1418 nAttributeIndex < nAttributeCount;
1422 " requested attribute " << nAttributeIndex <<
" is " << rRequestedAttributes[nAttributeIndex] );
1426 (
void)rRequestedAttributes;
1430 return Sequence<css::beans::PropertyValue>();
1438 awt::Rectangle aCharacterBox;
1441 throw lang::IndexOutOfBoundsException(
"invalid text index", static_cast<uno::XWeak*>(
this));
1443 else if (mpParagraph)
1445 aCharacterBox = mpParagraph->GetCharacterBounds(nIndex,
false);
1448 const awt::Point aWindowLocationOnScreen (getLocationOnScreen());
1449 aCharacterBox.X += aWindowLocationOnScreen.X;
1450 aCharacterBox.Y += aWindowLocationOnScreen.Y;
1454 throw lang::IndexOutOfBoundsException(
"no text support in current mode", static_cast<uno::XWeak*>(
this));
1457 return aCharacterBox;
1466 nCount = mpParagraph->GetCharacterCount();
1472 const css::awt::Point& )
1482 return getTextRange(getSelectionStart(), getSelectionEnd());
1489 return getCaretPosition();
1496 return getCaretPosition();
1500 sal_Int32 nStartIndex,
1505 return setCaretPosition(nStartIndex);
1514 sText = mpParagraph->GetText();
1520 sal_Int32 nLocalStartIndex,
1521 sal_Int32 nLocalEndIndex)
1528 const TextSegment aSegment (
1529 mpParagraph->CreateTextSegment(nLocalStartIndex, nLocalEndIndex));
1530 sText = aSegment.SegmentText;
1537 sal_Int32 nLocalCharacterIndex,
1538 sal_Int16 nTextType)
1542 TextSegment aSegment;
1544 aSegment = mpParagraph->GetTextSegment(0, nLocalCharacterIndex, nTextType);
1550 sal_Int32 nLocalCharacterIndex,
1551 sal_Int16 nTextType)
1555 TextSegment aSegment;
1557 aSegment = mpParagraph->GetTextSegment(-1, nLocalCharacterIndex, nTextType);
1563 sal_Int32 nLocalCharacterIndex,
1564 sal_Int16 nTextType)
1568 TextSegment aSegment;
1570 aSegment = mpParagraph->GetTextSegment(+1, nLocalCharacterIndex, nTextType);
1590 AccessibleScrollType)
1602 const awt::Point aParagraphLocation (mpParagraph->GetRelativeLocation());
1603 aLocation.X += aParagraphLocation.X;
1604 aLocation.Y += aParagraphLocation.Y;
1613 return mpParagraph->GetSize();
1620 if (mxParentAccessible.is())
1622 Reference<XAccessibleContext> xParentContext =
1623 mxParentAccessible->getAccessibleContext();
1624 if (xParentContext.is())
1626 Reference<XAccessibleComponent> xGrandParentComponent(
1627 xParentContext->getAccessibleParent(), UNO_QUERY);
1628 if (xGrandParentComponent.is())
1629 return xGrandParentComponent->getLocationOnScreen();
1633 return awt::Point();
1640 case AccessibleStateType::EDITABLE:
1641 return bool(mpParagraph);
1643 case AccessibleStateType::ACTIVE:
1653 AccessibleNotes::AccessibleNotes (
1654 const css::lang::Locale& rLocale,
1655 const OUString& rsName)
1662 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
1663 const lang::Locale& rLocale,
1664 const Reference<awt::XWindow>& rxContentWindow,
1665 const Reference<awt::XWindow>& rxBorderWindow,
1666 const std::shared_ptr<PresenterTextView>& rpTextView)
1668 OUString
sName (
"Presenter Notes Text");
1672 "/org.openoffice.Office.PresenterScreen/",
1674 aConfiguration.GetConfigurationNode(
"Presenter/Accessibility/Notes/String")
1679 new AccessibleNotes(
1682 pObject->LateInitialization();
1683 pObject->SetTextView(rpTextView);
1685 pObject->SetWindow(rxContentWindow, rxBorderWindow);
1690 void AccessibleNotes::SetTextView (
1691 const std::shared_ptr<PresenterTextView>& rpTextView)
1693 ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> > aChildren;
1698 mpTextView->GetCaret()->SetCaretMotionBroadcaster(
1699 ::std::function<
void (sal_Int32,sal_Int32,sal_Int32,sal_Int32)>());
1701 ::std::function<
void ()>());
1710 const sal_Int32 nParagraphCount (
mpTextView->GetParagraphCount());
1711 for (sal_Int32 nIndex=0; nIndex<nParagraphCount; ++nIndex)
1714 new PresenterAccessible::AccessibleParagraph(
1715 css::lang::Locale(),
1716 "Paragraph"+OUString::number(nIndex),
1717 rpTextView->GetParagraph(nIndex),
1719 pParagraph->LateInitialization();
1720 pParagraph->SetWindow(mxContentWindow, mxBorderWindow);
1721 pParagraph->SetAccessibleParent(
this);
1722 aChildren.emplace_back(pParagraph.get());
1725 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1729 for (
const auto& rxChild : aChildren)
1732 if (xComponent.is())
1733 xComponent->dispose();
1739 mpTextView->GetCaret()->SetCaretMotionBroadcaster(
1740 [
this](sal_Int32 a, sal_Int32 b, sal_Int32 c, sal_Int32 d)
1741 {
return this->NotifyCaretChange(a, b, c, d); });
1743 [
this]() {
return SetTextView(
mpTextView); });
1746 void AccessibleNotes::SetWindow (
1747 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
1748 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow)
1754 for (
auto& rxChild : maChildren)
1756 rxChild->SetWindow(rxContentWindow, rxBorderWindow);
1760 void AccessibleNotes::NotifyCaretChange (
1761 const sal_Int32 nOldParagraphIndex,
1762 const sal_Int32 nOldCharacterIndex,
1763 const sal_Int32 nNewParagraphIndex,
1764 const sal_Int32 nNewCharacterIndex)
1766 AccessibleFocusManager::Instance()->FocusObject(
1767 nNewParagraphIndex >= 0
1768 ? maChildren[nNewParagraphIndex]
1771 if (nOldParagraphIndex != nNewParagraphIndex)
1776 if (nOldParagraphIndex >= 0)
1778 maChildren[nOldParagraphIndex]->FireAccessibleEvent(
1779 AccessibleEventId::CARET_CHANGED,
1780 Any(nOldCharacterIndex),
1781 Any(sal_Int32(-1)));
1783 if (nNewParagraphIndex >= 0)
1785 maChildren[nNewParagraphIndex]->FireAccessibleEvent(
1786 AccessibleEventId::CARET_CHANGED,
1788 Any(nNewCharacterIndex));
1791 else if (nNewParagraphIndex >= 0)
1794 maChildren[nNewParagraphIndex]->FireAccessibleEvent(
1795 AccessibleEventId::CARET_CHANGED,
1796 Any(nOldCharacterIndex),
1797 Any(nNewCharacterIndex));
1806 std::shared_ptr<AccessibleFocusManager>
const & AccessibleFocusManager::Instance()
1810 mpInstance.reset(
new AccessibleFocusManager());
1815 AccessibleFocusManager::AccessibleFocusManager()
1819 AccessibleFocusManager::~AccessibleFocusManager()
1828 void AccessibleFocusManager::AddFocusableObject (
1829 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1831 OSL_ASSERT(rpObject.is());
1837 void AccessibleFocusManager::RemoveFocusableObject (
1838 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1840 ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> >::iterator iObject (
1851 void AccessibleFocusManager::FocusObject (
1852 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1857 if (rxObject!=rpObject)
1858 rxObject->SetIsFocused(
false);
1862 rpObject->SetIsFocused(
true);
virtual void SAL_CALL windowMoved(const css::awt::WindowEvent &rEvent) override
css::uno::Reference< css::awt::XWindow > mxMainWindow
std::vector< Reference< XAnimationNode > > maChildren
static constexpr OUStringLiteral msCurrentSlidePreviewPaneURL
::std::vector< rtl::Reference< PresenterAccessible::AccessibleObject > > maFocusableObjects
static std::shared_ptr< AccessibleFocusManager > mpInstance
virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex(sal_Int32 nIndex, sal_Int16 nTextType) override
css::uno::Reference< css::awt::XWindow > mxPreviewContentWindow
virtual void SAL_CALL windowHidden(const css::lang::EventObject &rEvent) override
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
virtual css::awt::Size SAL_CALL getSize() override
virtual sal_Int32 SAL_CALL getSelectionStart() override
virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex(sal_Int32 nIndex, sal_Int16 nTextType) override
::rtl::Reference< AccessibleObject > mpAccessibleConsole
css::uno::Reference< css::awt::XWindow > mxPreviewBorderWindow
virtual awt::Size GetSize() override
void ThrowIfDisposed() const
virtual sal_Int32 SAL_CALL getSelectionEnd() override
virtual awt::Size GetSize()
void UpdateState(const sal_Int16 aState, const bool bValue)
mutable::osl::Mutex m_aMutex
virtual awt::Point GetRelativeLocation()
void SetIsFocused(const bool bIsFocused)
virtual OUString SAL_CALL getAccessibleName() override
virtual bool GetWindowState(const sal_Int16 nType) const override
::cppu::WeakComponentImplHelper< css::accessibility::XAccessible, css::lang::XInitialization, css::awt::XFocusListener > PresenterAccessibleInterfaceBase
virtual sal_Bool SAL_CALL setSelection(sal_Int32 nStartIndex, sal_Int32 nEndIndex) override
EmbeddedObjectRef * pObject
void UpdateAccessibilityHierarchy()
virtual OUString SAL_CALL getTextRange(sal_Int32 nStartIndex, sal_Int32 nEndIndex) override
css::uno::Reference< css::accessibility::XAccessible > mxParentAccessible
void NotifyCurrentSlideChange()
PresenterPaneContainer::SharedPaneDescriptor GetPreviewPane() const
virtual css::awt::Point SAL_CALL getLocation() override
::rtl::Reference< AccessibleObject > mpAccessibleNotes
void RemoveChild(const ::rtl::Reference< AccessibleObject > &rpChild)
This class gives access to the configuration.
virtual sal_Unicode SAL_CALL getCharacter(sal_Int32 nIndex) override
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &rArguments) override
virtual void SAL_CALL disposing() override
::rtl::Reference< PresenterController > mpPresenterController
virtual bool GetWindowState(const sal_Int16 nType) const
virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes(::sal_Int32 nIndex, const css::uno::Sequence< OUString > &rRequestedAttributes) override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
const sal_Int32 mnStateSet
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
void FireAccessibleEvent(const sal_Int16 nEventId, const css::uno::Any &rOldValue, const css::uno::Any &rNewValue)
const sal_Int32 mnParagraphIndex
virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex(sal_Int32 nIndex, sal_Int16 nTextType) override
virtual awt::Point GetRelativeLocation() override
virtual OUString SAL_CALL getText() override
virtual sal_Int32 SAL_CALL getAccessibleIndexInParent() override
virtual sal_Bool SAL_CALL setCaretPosition(sal_Int32 nIndex) override
css::uno::Reference< css::uno::XComponentContext > mxComponentContext
sal_Int16 mnParagraphIndex
virtual css::awt::Rectangle SAL_CALL getCharacterBounds(sal_Int32 nIndex) override
virtual sal_Int16 SAL_CALL getAccessibleRole() override
virtual void SAL_CALL grabFocus() override
static constexpr OUStringLiteral msNotesPaneURL
virtual void SAL_CALL focusGained(const css::awt::FocusEvent &rEvent) override
AccessibleParagraph(const css::lang::Locale &rLocale, const OUString &rsName, const SharedPresenterTextParagraph &rpParagraph, const sal_Int32 nParagraphIndex)
std::shared_ptr< PresenterTextView > mpTextView
css::uno::Reference< css::drawing::framework::XPane2 > mxMainPane
::rtl::Reference< AccessibleObject > mpAccessiblePreview
void AddChild(const ::rtl::Reference< AccessibleObject > &rpChild)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
css::uno::Reference< css::awt::XWindow > mxNotesBorderWindow
css::uno::Any GetConfigurationNode(const OUString &rsPathToNode)
Return a configuration node below the root of the called object.
css::uno::Reference< css::awt::XWindow2 > mxContentWindow
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
virtual sal_Bool SAL_CALL scrollSubstringTo(sal_Int32 nStartIndex, sal_Int32 nEndIndex, css::accessibility::AccessibleScrollType aScrollType) override
virtual void SAL_CALL removeAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &rxListener) override
void SetAccessibleName(const OUString &rsName)
::std::vector< Reference< XAccessibleEventListener > > maListeners
const css::lang::Locale maLocale
PresenterAccessible(const css::uno::Reference< css::uno::XComponentContext > &rxContext, const ::rtl::Reference< PresenterController > &rpPresenterController, const css::uno::Reference< css::drawing::framework::XPane > &rxMainPane)
virtual ~PresenterAccessible() override
virtual sal_Int32 SAL_CALL getCharacterCount() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &aPoint) override
const css::uno::Reference< css::uno::XComponentContext > mxComponentContext
virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet() override
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
virtual void SetWindow(const css::uno::Reference< css::awt::XWindow > &rxContentWindow, const css::uno::Reference< css::awt::XWindow > &rxBorderWindow)
rtl::Reference< PresenterController > mpPresenterController
SharedPresenterTextParagraph mpParagraph
AccessibleObject(const css::lang::Locale &rLocale, const sal_Int16 nRole, const OUString &rsName)
void LateInitialization()
#define SAL_INFO(area, stream)
std::shared_ptr< PaneDescriptor > SharedPaneDescriptor
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &rxListener) override
virtual awt::Point GetAbsoluteParentLocation()
virtual sal_Bool SAL_CALL copyText(sal_Int32 nStartIndex, sal_Int32 nEndIndex) override
virtual sal_Int32 SAL_CALL getForeground() override
virtual void SAL_CALL windowResized(const css::awt::WindowEvent &rEvent) override
virtual void SAL_CALL disposing() override
css::uno::Reference< css::awt::XWindow2 > mxBorderWindow
virtual sal_Int32 SAL_CALL getCaretPosition() override
css::uno::Reference< css::accessibility::XAccessible > mxAccessibleParent
virtual css::awt::Rectangle SAL_CALL getBounds() override
virtual awt::Point GetAbsoluteParentLocation() override
static constexpr OUStringLiteral msSlideSorterPaneURL
::std::vector< AccessibleRelation > maRelations
virtual OUString SAL_CALL getAccessibleDescription() override
virtual void SAL_CALL windowShown(const css::lang::EventObject &rEvent) override
virtual sal_Int32 SAL_CALL getAccessibleChildCount() override
virtual OUString SAL_CALL getSelectedText() override
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &aPoint) override
void SetAccessibleParent(const css::uno::Reference< css::accessibility::XAccessible > &rxAccessibleParent)
::std::vector< rtl::Reference< AccessibleObject > > maChildren
css::uno::Reference< css::awt::XWindow > mxNotesContentWindow
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int32 nIndex) override
virtual sal_Int32 SAL_CALL getBackground() override
virtual css::lang::Locale SAL_CALL getLocale() override
std::shared_ptr< PresenterTextParagraph > SharedPresenterTextParagraph
virtual sal_Int32 SAL_CALL getIndexAtPoint(const css::awt::Point &rPoint) override
virtual void SAL_CALL focusLost(const css::awt::FocusEvent &rEvent) override
virtual css::awt::Point SAL_CALL getLocationOnScreen() override