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)
493 if ( ! pContainer.is())
497 Reference<drawing::framework::XPane> xPreviewPane;
499 xPreviewPane = pPreviewPane->mxPane.get();
500 if ( ! xPreviewPane.is())
512 Reference<drawing::framework::XConfigurationController> xConfigurationController(
514 if ( ! xConfigurationController.is())
519 if ( ! pPaneContainer.is())
528 Reference<drawing::framework::XPane> xPreviewPane;
530 xPreviewPane = pPreviewPane->mxPane.get();
535 Reference<drawing::framework::XPane> xNotesPane;
537 xNotesPane = pNotesPane->mxPane.get();
540 Reference<drawing::framework::XView> xNotesView;
542 xNotesView = pNotesPane->mxView;
544 dynamic_cast<PresenterNotesView*>(xNotesView.get()));
547 pPreviewPane ? pPreviewPane->mxContentWindow : Reference<awt::XWindow>(),
548 pPreviewPane ? pPreviewPane->mxBorderWindow : Reference<awt::XWindow>(),
549 (pPreviewPane&&pPreviewPane->mxPane.is()) ? pPreviewPane->mxPane->GetTitle() : OUString(),
550 pNotesPane ? pNotesPane->mxContentWindow : Reference<awt::XWindow>(),
551 pNotesPane ? pNotesPane->mxBorderWindow : Reference<awt::XWindow>(),
553 ? pNotesView->GetTextView()
554 : std::shared_ptr<PresenterTextView>());
558 const Reference<awt::XWindow>& rxPreviewContentWindow,
559 const Reference<awt::XWindow>& rxPreviewBorderWindow,
560 const OUString& rsTitle,
561 const Reference<awt::XWindow>& rxNotesContentWindow,
562 const Reference<awt::XWindow>& rxNotesBorderWindow,
563 const std::shared_ptr<PresenterTextView>& rpNotesTextView)
621 pPreviewPane&&pPreviewPane->mxPane.is()
622 ? pPreviewPane->mxPane->GetTitle()
639 std::shared_ptr<PresenterTextView>());
660 Reference<XPane> xMainPane (
mxMainPane, UNO_QUERY);
681 SAL_INFO(
"sdext.presenter", __func__ <<
": PresenterAccessible::focusGained at " <<
this
688 SAL_INFO(
"sdext.presenter", __func__ <<
": PresenterAccessible::focusLost at " <<
this);
689 AccessibleFocusManager::Instance()->FocusObject(
nullptr);
704 if (rArguments.hasElements())
715 const lang::Locale& rLocale,
716 const sal_Int16 nRole,
717 const OUString& rsName)
718 : PresenterAccessibleObjectInterfaceBase(
m_aMutex),
729 AccessibleFocusManager::Instance()->AddFocusableObject(
this);
733 const Reference<awt::XWindow>& rxContentWindow,
734 const Reference<awt::XWindow>& rxBorderWindow)
736 Reference<awt::XWindow2> xContentWindow (rxContentWindow, UNO_QUERY);
738 if (mxContentWindow.get() == xContentWindow.get())
741 if (mxContentWindow.is())
743 mxContentWindow->removeWindowListener(
this);
746 mxContentWindow = xContentWindow;
747 mxBorderWindow.set(rxBorderWindow, UNO_QUERY);
749 if (mxContentWindow.is())
751 mxContentWindow->addWindowListener(
this);
758 const Reference<XAccessible>& rxAccessibleParent)
760 mxParentAccessible = rxAccessibleParent;
765 AccessibleFocusManager::Instance()->RemoveFocusableObject(
this);
766 SetWindow(
nullptr,
nullptr);
771 Reference<XAccessibleContext> SAL_CALL
785 const sal_Int32 nChildCount (
maChildren.size());
790 Reference<XAccessible> SAL_CALL
796 throw lang::IndexOutOfBoundsException(
"invalid child index", static_cast<uno::XWeak*>(
this));
801 Reference<XAccessible> SAL_CALL
806 return mxParentAccessible;
814 const Reference<XAccessible> xThis (
this);
815 if (mxParentAccessible.is())
817 const Reference<XAccessibleContext> xContext (mxParentAccessible->getAccessibleContext());
818 for (sal_Int32
nIndex=0,
nCount=xContext->getAccessibleChildCount();
822 if (xContext->getAccessibleChild(
nIndex) == xThis)
854 Reference<XAccessibleRelationSet> SAL_CALL
862 Reference<XAccessibleStateSet> SAL_CALL
867 return Reference<XAccessibleStateSet>(
new AccessibleStateSet(
mnStateSet));
870 lang::Locale SAL_CALL
875 if (mxParentAccessible.is())
877 Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext());
878 if (xParentContext.is())
879 return xParentContext->getLocale();
887 const awt::Point& rPoint)
891 if (mxContentWindow.is())
893 const awt::Rectangle aBox (getBounds());
894 return rPoint.X>=aBox.X
896 && rPoint.X<aBox.X+aBox.Width
897 && rPoint.Y<aBox.Y+aBox.Height;
903 Reference<XAccessible> SAL_CALL
908 return Reference<XAccessible>();
915 const awt::Point aLocation (GetRelativeLocation());
916 const awt::Size aSize (GetSize());
918 return awt::Rectangle (aLocation.X, aLocation.Y, aSize.Width, aSize.Height);
925 const awt::Point aLocation (GetRelativeLocation());
934 awt::Point aRelativeLocation (GetRelativeLocation());
935 awt::Point aParentLocationOnScreen (GetAbsoluteParentLocation());
938 aRelativeLocation.X + aParentLocationOnScreen.X,
939 aRelativeLocation.Y + aParentLocationOnScreen.Y);
946 const awt::Size aSize (GetSize());
954 if (mxBorderWindow.is())
955 mxBorderWindow->setFocus();
956 else if (mxContentWindow.is())
957 mxContentWindow->setFocus();
977 const Reference<XAccessibleEventListener>& rxListener)
979 if (!rxListener.is())
982 const osl::MutexGuard aGuard(
m_aMutex);
984 if (rBHelper.bDisposed || rBHelper.bInDispose)
986 uno::Reference<uno::XInterface> xThis (static_cast<XWeak*>(
this), UNO_QUERY);
987 rxListener->disposing (lang::EventObject(xThis));
991 maListeners.push_back(rxListener);
996 const Reference<XAccessibleEventListener>& rxListener)
1001 const osl::MutexGuard aGuard(
m_aMutex);
1003 auto const it(std::remove(maListeners.begin(), maListeners.end(), rxListener));
1004 if (it != maListeners.end())
1006 maListeners.erase(it);
1014 const css::awt::WindowEvent&)
1016 FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED,
Any(),
Any());
1020 const css::awt::WindowEvent&)
1022 FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED,
Any(),
Any());
1026 const css::lang::EventObject&)
1032 const css::lang::EventObject&)
1041 if (rEvent.Source == mxContentWindow)
1043 mxContentWindow =
nullptr;
1044 mxBorderWindow =
nullptr;
1048 SetWindow(
nullptr,
nullptr);
1058 case AccessibleStateType::ENABLED:
1059 return mxContentWindow.is() && mxContentWindow->isEnabled();
1061 case AccessibleStateType::FOCUSABLE:
1064 case AccessibleStateType::FOCUSED:
1067 case AccessibleStateType::SHOWING:
1068 return mxContentWindow.is() && mxContentWindow->isVisible();
1077 UpdateState(AccessibleStateType::FOCUSABLE,
true);
1080 UpdateState(AccessibleStateType::MULTI_LINE,
true);
1081 UpdateState(AccessibleStateType::SENSITIVE,
true);
1083 UpdateState(AccessibleStateType::ENABLED, GetWindowState(AccessibleStateType::ENABLED));
1084 UpdateState(AccessibleStateType::FOCUSED, GetWindowState(AccessibleStateType::FOCUSED));
1085 UpdateState(AccessibleStateType::SHOWING, GetWindowState(AccessibleStateType::SHOWING));
1090 const sal_Int16 nState,
1093 const sal_uInt32 nStateMask (AccessibleStateSet::GetStateMask(nState));
1094 if (((
mnStateSet & nStateMask) != 0) == bValue)
1099 FireAccessibleEvent(AccessibleEventId::STATE_CHANGED,
Any(),
Any(nState));
1104 FireAccessibleEvent(AccessibleEventId::STATE_CHANGED,
Any(nState),
Any());
1109 const ::rtl::Reference<AccessibleObject>& rpChild)
1112 rpChild->SetAccessibleParent(
this);
1113 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1117 const ::rtl::Reference<AccessibleObject>& rpChild)
1119 rpChild->SetAccessibleParent(Reference<XAccessible>());
1121 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1126 if (mbIsFocused != bIsFocused)
1128 mbIsFocused = bIsFocused;
1137 const OUString sOldName(
msName);
1139 FireAccessibleEvent(AccessibleEventId::NAME_CHANGED,
Any(sOldName),
Any(
msName));
1144 const sal_Int16 nEventId,
1148 AccessibleEventObject aEventObject;
1150 aEventObject.Source = Reference<XWeak>(
this);
1151 aEventObject.EventId = nEventId;
1152 aEventObject.NewValue = rNewValue;
1153 aEventObject.OldValue = rOldValue;
1155 ::std::vector<Reference<XAccessibleEventListener> > aListenerCopy(maListeners);
1156 for (
const auto& rxListener : aListenerCopy)
1160 rxListener->notifyEvent(aEventObject);
1162 catch (
const lang::DisposedException&)
1166 removeAccessibleEventListener(rxListener);
1178 awt::Point aLocation;
1179 if (mxContentWindow.is())
1181 const awt::Rectangle aContentBox (mxContentWindow->getPosSize());
1182 aLocation.X = aContentBox.X;
1183 aLocation.Y = aContentBox.Y;
1184 if (mxBorderWindow.is())
1186 const awt::Rectangle aBorderBox (mxBorderWindow->getPosSize());
1187 aLocation.X += aBorderBox.X;
1188 aLocation.Y += aBorderBox.Y;
1196 if (mxContentWindow.is())
1198 const awt::Rectangle aBox (mxContentWindow->getPosSize());
1199 return awt::Size(aBox.Width, aBox.Height);
1207 Reference<XAccessibleComponent> xParentComponent;
1208 if (mxParentAccessible.is())
1209 xParentComponent.set( mxParentAccessible->getAccessibleContext(), UNO_QUERY);
1210 if (xParentComponent.is())
1211 return xParentComponent->getLocationOnScreen();
1213 return awt::Point();
1218 if (rBHelper.bDisposed || rBHelper.bInDispose)
1219 throw lang::DisposedException(
"object has already been disposed", uno::Reference<uno::XInterface>(const_cast<uno::XWeak*>(static_cast<uno::XWeak const *>(
this))));
1224 AccessibleStateSet::AccessibleStateSet (
const sal_Int32 nStateSet)
1225 : AccessibleStateSetInterfaceBase(
m_aMutex),
1230 sal_uInt32 AccessibleStateSet::GetStateMask (
const sal_Int16 nState)
1242 sal_Bool SAL_CALL AccessibleStateSet::isEmpty()
1247 sal_Bool SAL_CALL AccessibleStateSet::contains (sal_Int16 nState)
1249 return (
mnStateSet & GetStateMask(nState)) != 0;
1252 sal_Bool SAL_CALL AccessibleStateSet::containsAll (
const css::uno::Sequence<sal_Int16>& rStateSet)
1254 return std::none_of(rStateSet.begin(), rStateSet.end(),
1255 [
this](
const sal_Int16 nState) {
return (
mnStateSet & GetStateMask(nState)) == 0; });
1258 css::uno::Sequence<sal_Int16> SAL_CALL AccessibleStateSet::getStates()
1260 ::std::vector<sal_Int16> aStates;
1263 if ((
mnStateSet & GetStateMask(nIndex)) != 0)
1264 aStates.push_back(nIndex);
1265 return Sequence<sal_Int16>(aStates.data(), aStates.size());
1270 AccessibleRelationSet::AccessibleRelationSet()
1271 : AccessibleRelationSetInterfaceBase(
m_aMutex)
1275 void AccessibleRelationSet::AddRelation (
1276 const sal_Int16 nRelationType,
1277 const Reference<XInterface>& rxObject)
1286 sal_Int32 SAL_CALL AccessibleRelationSet::getRelationCount()
1291 AccessibleRelation SAL_CALL AccessibleRelationSet::getRelation (sal_Int32 nIndex)
1294 return AccessibleRelation();
1299 sal_Bool SAL_CALL AccessibleRelationSet::containsRelation (sal_Int16 nRelationType)
1302 [nRelationType](
const AccessibleRelation& rRelation) {
return rRelation.RelationType == nRelationType; });
1305 AccessibleRelation SAL_CALL AccessibleRelationSet::getRelationByType (sal_Int16 nRelationType)
1308 [nRelationType](
const AccessibleRelation& rRelation) {
return rRelation.RelationType == nRelationType; });
1311 return AccessibleRelation();
1317 const lang::Locale& rLocale,
1318 const OUString& rsName,
1320 const sal_Int32 nParagraphIndex)
1321 : PresenterAccessibleParagraphInterfaceBase(rLocale, AccessibleRole::
PARAGRAPH, rsName),
1322 mpParagraph(rpParagraph),
1329 Reference<XAccessibleRelationSet> SAL_CALL
1336 if (mxParentAccessible.is())
1338 Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext());
1339 if (xParentContext.is())
1343 AccessibleRelationType::CONTENT_FLOWS_FROM,
1346 if (mnParagraphIndex<xParentContext->getAccessibleChildCount()-1)
1348 AccessibleRelationType::CONTENT_FLOWS_TO,
1362 sal_Int32 nPosition (-1);
1364 nPosition = mpParagraph->GetCaretPosition();
1375 mpParagraph->SetCaretPosition(nIndex);
1387 throw lang::IndexOutOfBoundsException(
"no text support in current mode", static_cast<uno::XWeak*>(
this));
1388 return mpParagraph->GetCharacter(nIndex);
1391 Sequence<css::beans::PropertyValue> SAL_CALL
1394 const css::uno::Sequence<OUString>& rRequestedAttributes)
1398 #if OSL_DEBUG_LEVEL > 0
1399 SAL_INFO(
"sdext.presenter", __func__ <<
" at " <<
this <<
", " << nIndex <<
" returns empty set" );
1400 for (sal_Int32 nAttributeIndex(0), nAttributeCount(rRequestedAttributes.getLength());
1401 nAttributeIndex < nAttributeCount;
1405 " requested attribute " << nAttributeIndex <<
" is " << rRequestedAttributes[nAttributeIndex] );
1409 (
void)rRequestedAttributes;
1413 return Sequence<css::beans::PropertyValue>();
1421 awt::Rectangle aCharacterBox;
1424 throw lang::IndexOutOfBoundsException(
"invalid text index", static_cast<uno::XWeak*>(
this));
1426 else if (mpParagraph)
1428 aCharacterBox = mpParagraph->GetCharacterBounds(nIndex,
false);
1431 const awt::Point aWindowLocationOnScreen (getLocationOnScreen());
1432 aCharacterBox.X += aWindowLocationOnScreen.X;
1433 aCharacterBox.Y += aWindowLocationOnScreen.Y;
1437 throw lang::IndexOutOfBoundsException(
"no text support in current mode", static_cast<uno::XWeak*>(
this));
1440 return aCharacterBox;
1449 nCount = mpParagraph->GetCharacterCount();
1455 const css::awt::Point& )
1465 return getTextRange(getSelectionStart(), getSelectionEnd());
1472 return getCaretPosition();
1479 return getCaretPosition();
1483 sal_Int32 nStartIndex,
1488 return setCaretPosition(nStartIndex);
1497 sText = mpParagraph->GetText();
1503 sal_Int32 nLocalStartIndex,
1504 sal_Int32 nLocalEndIndex)
1511 const TextSegment aSegment (
1512 mpParagraph->CreateTextSegment(nLocalStartIndex, nLocalEndIndex));
1513 sText = aSegment.SegmentText;
1520 sal_Int32 nLocalCharacterIndex,
1521 sal_Int16 nTextType)
1525 TextSegment aSegment;
1527 aSegment = mpParagraph->GetTextSegment(0, nLocalCharacterIndex, nTextType);
1533 sal_Int32 nLocalCharacterIndex,
1534 sal_Int16 nTextType)
1538 TextSegment aSegment;
1540 aSegment = mpParagraph->GetTextSegment(-1, nLocalCharacterIndex, nTextType);
1546 sal_Int32 nLocalCharacterIndex,
1547 sal_Int16 nTextType)
1551 TextSegment aSegment;
1553 aSegment = mpParagraph->GetTextSegment(+1, nLocalCharacterIndex, nTextType);
1573 AccessibleScrollType)
1585 const awt::Point aParagraphLocation (mpParagraph->GetRelativeLocation());
1586 aLocation.X += aParagraphLocation.X;
1587 aLocation.Y += aParagraphLocation.Y;
1596 return mpParagraph->GetSize();
1603 if (mxParentAccessible.is())
1605 Reference<XAccessibleContext> xParentContext =
1606 mxParentAccessible->getAccessibleContext();
1607 if (xParentContext.is())
1609 Reference<XAccessibleComponent> xGrandParentComponent(
1610 xParentContext->getAccessibleParent(), UNO_QUERY);
1611 if (xGrandParentComponent.is())
1612 return xGrandParentComponent->getLocationOnScreen();
1616 return awt::Point();
1623 case AccessibleStateType::EDITABLE:
1624 return bool(mpParagraph);
1626 case AccessibleStateType::ACTIVE:
1636 AccessibleNotes::AccessibleNotes (
1637 const css::lang::Locale& rLocale,
1638 const OUString& rsName)
1644 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
1645 const lang::Locale& rLocale,
1646 const Reference<awt::XWindow>& rxContentWindow,
1647 const Reference<awt::XWindow>& rxBorderWindow,
1648 const std::shared_ptr<PresenterTextView>& rpTextView)
1650 OUString
sName (
"Presenter Notes Text");
1654 "/org.openoffice.Office.PresenterScreen/",
1656 aConfiguration.GetConfigurationNode(
"Presenter/Accessibility/Notes/String")
1661 new AccessibleNotes(
1664 pObject->LateInitialization();
1665 pObject->SetTextView(rpTextView);
1667 pObject->SetWindow(rxContentWindow, rxBorderWindow);
1672 void AccessibleNotes::SetTextView (
1673 const std::shared_ptr<PresenterTextView>& rpTextView)
1675 ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> > aChildren;
1680 mpTextView->GetCaret()->SetCaretMotionBroadcaster(
1681 ::std::function<
void (sal_Int32,sal_Int32,sal_Int32,sal_Int32)>());
1683 ::std::function<
void ()>());
1692 const sal_Int32 nParagraphCount (
mpTextView->GetParagraphCount());
1693 for (sal_Int32 nIndex=0; nIndex<nParagraphCount; ++nIndex)
1696 new PresenterAccessible::AccessibleParagraph(
1697 css::lang::Locale(),
1698 "Paragraph"+OUString::number(nIndex),
1699 rpTextView->GetParagraph(nIndex),
1701 pParagraph->LateInitialization();
1702 pParagraph->SetWindow(mxContentWindow, mxBorderWindow);
1703 pParagraph->SetAccessibleParent(
this);
1704 aChildren.emplace_back(pParagraph.get());
1707 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1711 for (
const auto& rxChild : aChildren)
1714 if (xComponent.is())
1715 xComponent->dispose();
1721 mpTextView->GetCaret()->SetCaretMotionBroadcaster(
1722 [
this](sal_Int32 a, sal_Int32 b, sal_Int32 c, sal_Int32 d)
1723 {
return this->NotifyCaretChange(a, b, c, d); });
1725 [
this]() {
return SetTextView(
mpTextView); });
1728 void AccessibleNotes::SetWindow (
1729 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
1730 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow)
1736 for (
auto& rxChild : maChildren)
1738 rxChild->SetWindow(rxContentWindow, rxBorderWindow);
1742 void AccessibleNotes::NotifyCaretChange (
1743 const sal_Int32 nOldParagraphIndex,
1744 const sal_Int32 nOldCharacterIndex,
1745 const sal_Int32 nNewParagraphIndex,
1746 const sal_Int32 nNewCharacterIndex)
1748 AccessibleFocusManager::Instance()->FocusObject(
1749 nNewParagraphIndex >= 0
1750 ? maChildren[nNewParagraphIndex]
1753 if (nOldParagraphIndex != nNewParagraphIndex)
1758 if (nOldParagraphIndex >= 0)
1760 maChildren[nOldParagraphIndex]->FireAccessibleEvent(
1761 AccessibleEventId::CARET_CHANGED,
1762 Any(nOldCharacterIndex),
1763 Any(sal_Int32(-1)));
1765 if (nNewParagraphIndex >= 0)
1767 maChildren[nNewParagraphIndex]->FireAccessibleEvent(
1768 AccessibleEventId::CARET_CHANGED,
1770 Any(nNewCharacterIndex));
1773 else if (nNewParagraphIndex >= 0)
1776 maChildren[nNewParagraphIndex]->FireAccessibleEvent(
1777 AccessibleEventId::CARET_CHANGED,
1778 Any(nOldCharacterIndex),
1779 Any(nNewCharacterIndex));
1788 std::shared_ptr<AccessibleFocusManager>
const & AccessibleFocusManager::Instance()
1792 mpInstance.reset(
new AccessibleFocusManager());
1797 AccessibleFocusManager::AccessibleFocusManager()
1801 AccessibleFocusManager::~AccessibleFocusManager()
1810 void AccessibleFocusManager::AddFocusableObject (
1811 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1813 OSL_ASSERT(rpObject.is());
1819 void AccessibleFocusManager::RemoveFocusableObject (
1820 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1822 ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> >::iterator iObject (
1833 void AccessibleFocusManager::FocusObject (
1834 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1839 if (rxObject!=rpObject)
1840 rxObject->SetIsFocused(
false);
1844 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
bool m_bDetectedRangeSegmentation false