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>
59 typedef ::cppu::WeakComponentImplHelper <
60 css::accessibility::XAccessible,
61 css::accessibility::XAccessibleContext,
62 css::accessibility::XAccessibleComponent,
63 css::accessibility::XAccessibleEventBroadcaster,
64 css::awt::XWindowListener
65 > PresenterAccessibleObjectInterfaceBase;
70 public PresenterAccessibleObjectInterfaceBase
74 css::lang::Locale aLocale,
75 const sal_Int16 nRole,
80 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
81 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow);
82 void SetAccessibleParent (
const css::uno::Reference<css::accessibility::XAccessible>& rxAccessibleParent);
84 virtual void SAL_CALL
disposing()
override;
86 void AddChild (const ::rtl::Reference<AccessibleObject>& rpChild);
87 void RemoveChild (const ::rtl::Reference<AccessibleObject>& rpChild);
93 const sal_Int16 nEventId,
94 const css::uno::Any& rOldValue,
95 const css::uno::Any& rNewValue);
101 virtual css::uno::Reference<css::accessibility::XAccessibleContext> SAL_CALL
108 virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL
111 virtual css::uno::Reference< css::accessibility::XAccessible> SAL_CALL
getAccessibleParent()
override;
121 virtual css::uno::Reference<css::accessibility::XAccessibleRelationSet> 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_Int64 aState,
const bool bValue);
201typedef ::cppu::WeakComponentImplHelper <
202 css::accessibility::XAccessibleRelationSet
203 > AccessibleRelationSetInterfaceBase;
205class AccessibleRelationSet
207 public AccessibleRelationSetInterfaceBase
210 AccessibleRelationSet();
213 const sal_Int16 nRelationType,
214 const Reference<XInterface>& rxObject);
218 virtual sal_Int32 SAL_CALL getRelationCount()
override;
220 virtual AccessibleRelation SAL_CALL getRelation (sal_Int32 nIndex)
override;
222 virtual sal_Bool SAL_CALL containsRelation (sal_Int16 nRelationType)
override;
224 virtual AccessibleRelation SAL_CALL getRelationByType (sal_Int16 nRelationType)
override;
232typedef ::cppu::ImplInheritanceHelper <
233 PresenterAccessible::AccessibleObject,
234 css::accessibility::XAccessibleText
235 > PresenterAccessibleParagraphInterfaceBase;
239 :
public PresenterAccessibleParagraphInterfaceBase
243 const css::lang::Locale& rLocale,
244 const OUString& rsName,
246 const sal_Int32 nParagraphIndex);
250 virtual css::uno::Reference<css::accessibility::XAccessibleRelationSet> SAL_CALL
261 virtual css::uno::Sequence<css::beans::PropertyValue> SAL_CALL
264 const css::uno::Sequence<OUString>& rRequestedAttributes)
override;
270 virtual sal_Int32 SAL_CALL
getIndexAtPoint (
const css::awt::Point& rPoint)
override;
280 virtual OUString SAL_CALL
getText()
override;
283 sal_Int32 nStartIndex,
284 sal_Int32 nEndIndex)
override;
288 sal_Int16 nTextType)
override;
292 sal_Int16 nTextType)
override;
296 sal_Int16 nTextType)
override;
298 virtual sal_Bool SAL_CALL
copyText (sal_Int32 nStartIndex, sal_Int32 nEndIndex)
override;
301 sal_Int32 nStartIndex,
303 css::accessibility::AccessibleScrollType aScrollType)
override;
307 virtual awt::Size
GetSize()
override;
320class AccessibleConsole
324 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
325 const lang::Locale& rLocale)
327 OUString
sName (
"Presenter Console");
330 "/org.openoffice.Office.PresenterScreen/",
337 rLocale, AccessibleRole::PANEL,
sName));
347class AccessiblePreview
351 const Reference<css::uno::XComponentContext>& rxContext,
352 const lang::Locale& rLocale,
353 const Reference<awt::XWindow>& rxContentWindow,
354 const Reference<awt::XWindow>& rxBorderWindow)
356 OUString
sName (
"Presenter Notes Window");
360 "/org.openoffice.Office.PresenterScreen/",
362 aConfiguration.GetConfigurationNode(
"Presenter/Accessibility/Preview/String")
367 new PresenterAccessible::AccessibleObject(
369 AccessibleRole::LABEL,
373 pObject->SetWindow(rxContentWindow, rxBorderWindow);
381class AccessibleNotes :
public PresenterAccessible::AccessibleObject
385 const css::lang::Locale& rLocale,
386 const OUString& rsName);
389 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
390 const lang::Locale& rLocale,
391 const Reference<awt::XWindow>& rxContentWindow,
392 const Reference<awt::XWindow>& rxBorderWindow,
393 const std::shared_ptr<PresenterTextView>& rpTextView);
395 void SetTextView (
const std::shared_ptr<PresenterTextView>& rpTextView);
397 virtual void SetWindow (
398 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
399 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow)
override;
404 void NotifyCaretChange (
405 const sal_Int32 nOldParagraphIndex,
406 const sal_Int32 nOldCharacterIndex,
407 const sal_Int32 nNewParagraphIndex,
408 const sal_Int32 nNewCharacterIndex);
416class AccessibleFocusManager
419 static std::shared_ptr<AccessibleFocusManager>
const & Instance();
421 void AddFocusableObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject);
422 void RemoveFocusableObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject);
424 void FocusObject (const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject);
426 ~AccessibleFocusManager();
433 AccessibleFocusManager();
441 css::uno::Reference<css::uno::XComponentContext> xContext,
443 const Reference<drawing::framework::XPane>& rxMainPane)
447 mxMainPane(rxMainPane, UNO_QUERY)
465 if ( ! pContainer.is())
469 Reference<drawing::framework::XPane> xPreviewPane;
471 xPreviewPane = pPreviewPane->mxPane.get();
472 if ( ! xPreviewPane.is())
484 Reference<drawing::framework::XConfigurationController> xConfigurationController(
486 if ( ! xConfigurationController.is())
491 if ( ! pPaneContainer.is())
500 Reference<drawing::framework::XPane> xPreviewPane;
502 xPreviewPane = pPreviewPane->mxPane.get();
507 Reference<drawing::framework::XPane> xNotesPane;
509 xNotesPane = pNotesPane->mxPane.get();
512 Reference<drawing::framework::XView> xNotesView;
514 xNotesView = pNotesPane->mxView;
519 pPreviewPane ? pPreviewPane->mxContentWindow : Reference<awt::XWindow>(),
520 pPreviewPane ? pPreviewPane->mxBorderWindow : Reference<awt::XWindow>(),
521 (pPreviewPane&&pPreviewPane->mxPane.is()) ? pPreviewPane->mxPane->GetTitle() : OUString(),
522 pNotesPane ? pNotesPane->mxContentWindow : Reference<awt::XWindow>(),
523 pNotesPane ? pNotesPane->mxBorderWindow : Reference<awt::XWindow>(),
525 ? pNotesView->GetTextView()
526 : std::shared_ptr<PresenterTextView>());
530 const Reference<awt::XWindow>& rxPreviewContentWindow,
531 const Reference<awt::XWindow>& rxPreviewBorderWindow,
532 const OUString& rsTitle,
533 const Reference<awt::XWindow>& rxNotesContentWindow,
534 const Reference<awt::XWindow>& rxNotesBorderWindow,
535 const std::shared_ptr<PresenterTextView>& rpNotesTextView)
593 pPreviewPane&&pPreviewPane->mxPane.is()
594 ? pPreviewPane->mxPane->GetTitle()
611 std::shared_ptr<PresenterTextView>());
632 Reference<XPane> xMainPane (
mxMainPane, UNO_QUERY);
653 SAL_INFO(
"sdext.presenter", __func__ <<
": PresenterAccessible::focusGained at " <<
this
660 SAL_INFO(
"sdext.presenter", __func__ <<
": PresenterAccessible::focusLost at " <<
this);
661 AccessibleFocusManager::Instance()->FocusObject(
nullptr);
676 if (rArguments.hasElements())
687 lang::Locale aLocale,
688 const sal_Int16 nRole,
690 : PresenterAccessibleObjectInterfaceBase(
m_aMutex),
692 maLocale(
std::move(aLocale)),
701 AccessibleFocusManager::Instance()->AddFocusableObject(
this);
705 const Reference<awt::XWindow>& rxContentWindow,
706 const Reference<awt::XWindow>& rxBorderWindow)
708 Reference<awt::XWindow2> xContentWindow (rxContentWindow, UNO_QUERY);
710 if (mxContentWindow.get() == xContentWindow.get())
713 if (mxContentWindow.is())
715 mxContentWindow->removeWindowListener(
this);
718 mxContentWindow = xContentWindow;
719 mxBorderWindow.set(rxBorderWindow, UNO_QUERY);
721 if (mxContentWindow.is())
723 mxContentWindow->addWindowListener(
this);
730 const Reference<XAccessible>& rxAccessibleParent)
732 mxParentAccessible = rxAccessibleParent;
737 AccessibleFocusManager::Instance()->RemoveFocusableObject(
this);
738 SetWindow(
nullptr,
nullptr);
743Reference<XAccessibleContext> SAL_CALL
760Reference<XAccessible> SAL_CALL
766 throw lang::IndexOutOfBoundsException(
"invalid child index",
static_cast<uno::XWeak*
>(
this));
771Reference<XAccessible> SAL_CALL
776 return mxParentAccessible;
784 const Reference<XAccessible> xThis (
this);
785 if (mxParentAccessible.is())
787 const Reference<XAccessibleContext> xContext (mxParentAccessible->getAccessibleContext());
788 for (sal_Int64
nIndex = 0,
nCount=xContext->getAccessibleChildCount();
792 if (xContext->getAccessibleChild(
nIndex) == xThis)
824Reference<XAccessibleRelationSet> SAL_CALL
845 if (mxParentAccessible.is())
847 Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext());
848 if (xParentContext.is())
849 return xParentContext->getLocale();
857 const awt::Point& rPoint)
861 if (mxContentWindow.is())
863 const awt::Rectangle aBox (getBounds());
864 return rPoint.X>=aBox.X
866 && rPoint.X<aBox.X+aBox.Width
867 && rPoint.Y<aBox.Y+aBox.Height;
873Reference<XAccessible> SAL_CALL
878 return Reference<XAccessible>();
885 const awt::Point aLocation (GetRelativeLocation());
886 const awt::Size aSize (GetSize());
888 return awt::Rectangle (aLocation.X, aLocation.Y, aSize.Width, aSize.Height);
895 const awt::Point aLocation (GetRelativeLocation());
904 awt::Point aRelativeLocation (GetRelativeLocation());
905 awt::Point aParentLocationOnScreen (GetAbsoluteParentLocation());
908 aRelativeLocation.X + aParentLocationOnScreen.X,
909 aRelativeLocation.Y + aParentLocationOnScreen.Y);
916 const awt::Size aSize (GetSize());
924 if (mxBorderWindow.is())
925 mxBorderWindow->setFocus();
926 else if (mxContentWindow.is())
927 mxContentWindow->setFocus();
947 const Reference<XAccessibleEventListener>& rxListener)
949 if (!rxListener.is())
952 const osl::MutexGuard aGuard(
m_aMutex);
954 if (rBHelper.bDisposed || rBHelper.bInDispose)
956 uno::Reference<uno::XInterface> xThis (
static_cast<XWeak*
>(
this), UNO_QUERY);
957 rxListener->disposing (lang::EventObject(xThis));
961 maListeners.push_back(rxListener);
966 const Reference<XAccessibleEventListener>& rxListener)
971 const osl::MutexGuard aGuard(
m_aMutex);
973 auto const it(std::remove(maListeners.begin(), maListeners.end(), rxListener));
974 if (it != maListeners.end())
976 maListeners.erase(it);
984 const css::awt::WindowEvent&)
986 FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED,
Any(),
Any());
990 const css::awt::WindowEvent&)
992 FireAccessibleEvent(AccessibleEventId::BOUNDRECT_CHANGED,
Any(),
Any());
996 const css::lang::EventObject&)
1002 const css::lang::EventObject&)
1011 if (rEvent.Source == mxContentWindow)
1013 mxContentWindow =
nullptr;
1014 mxBorderWindow =
nullptr;
1018 SetWindow(
nullptr,
nullptr);
1028 case AccessibleStateType::ENABLED:
1029 return mxContentWindow.is() && mxContentWindow->isEnabled();
1031 case AccessibleStateType::FOCUSABLE:
1034 case AccessibleStateType::FOCUSED:
1037 case AccessibleStateType::SHOWING:
1038 return mxContentWindow.is() && mxContentWindow->isVisible();
1047 UpdateState(AccessibleStateType::FOCUSABLE,
true);
1050 UpdateState(AccessibleStateType::MULTI_LINE,
true);
1051 UpdateState(AccessibleStateType::SENSITIVE,
true);
1053 UpdateState(AccessibleStateType::ENABLED, GetWindowState(AccessibleStateType::ENABLED));
1054 UpdateState(AccessibleStateType::FOCUSED, GetWindowState(AccessibleStateType::FOCUSED));
1055 UpdateState(AccessibleStateType::SHOWING, GetWindowState(AccessibleStateType::SHOWING));
1060 const sal_Int64 nState,
1063 if (((mnStateSet &
nState) != 0) == bValue)
1068 FireAccessibleEvent(AccessibleEventId::STATE_CHANGED,
Any(),
Any(
nState));
1072 mnStateSet &= ~nState;
1073 FireAccessibleEvent(AccessibleEventId::STATE_CHANGED,
Any(
nState),
Any());
1078 const ::rtl::Reference<AccessibleObject>& rpChild)
1081 rpChild->SetAccessibleParent(
this);
1082 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1086 const ::rtl::Reference<AccessibleObject>& rpChild)
1088 rpChild->SetAccessibleParent(Reference<XAccessible>());
1090 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1095 if (mbIsFocused != bIsFocused)
1097 mbIsFocused = bIsFocused;
1106 const OUString sOldName(
msName);
1108 FireAccessibleEvent(AccessibleEventId::NAME_CHANGED,
Any(sOldName),
Any(
msName));
1113 const sal_Int16 nEventId,
1117 AccessibleEventObject aEventObject;
1119 aEventObject.Source = Reference<XWeak>(
this);
1120 aEventObject.EventId = nEventId;
1121 aEventObject.NewValue = rNewValue;
1122 aEventObject.OldValue = rOldValue;
1124 ::std::vector<Reference<XAccessibleEventListener> > aListenerCopy(maListeners);
1125 for (
const auto& rxListener : aListenerCopy)
1129 rxListener->notifyEvent(aEventObject);
1131 catch (
const lang::DisposedException&)
1135 removeAccessibleEventListener(rxListener);
1147 awt::Point aLocation;
1148 if (mxContentWindow.is())
1150 const awt::Rectangle aContentBox (mxContentWindow->getPosSize());
1151 aLocation.X = aContentBox.X;
1152 aLocation.Y = aContentBox.Y;
1153 if (mxBorderWindow.is())
1155 const awt::Rectangle aBorderBox (mxBorderWindow->getPosSize());
1156 aLocation.X += aBorderBox.X;
1157 aLocation.Y += aBorderBox.Y;
1165 if (mxContentWindow.is())
1167 const awt::Rectangle aBox (mxContentWindow->getPosSize());
1168 return awt::Size(aBox.Width, aBox.Height);
1176 Reference<XAccessibleComponent> xParentComponent;
1177 if (mxParentAccessible.is())
1178 xParentComponent.set( mxParentAccessible->getAccessibleContext(), UNO_QUERY);
1179 if (xParentComponent.is())
1180 return xParentComponent->getLocationOnScreen();
1182 return awt::Point();
1187 if (rBHelper.bDisposed || rBHelper.bInDispose)
1188 throw lang::DisposedException(
"object has already been disposed", uno::Reference<uno::XInterface>(
const_cast<uno::XWeak*
>(
static_cast<uno::XWeak
const *
>(
this))));
1194AccessibleRelationSet::AccessibleRelationSet()
1195 : AccessibleRelationSetInterfaceBase(
m_aMutex)
1199void AccessibleRelationSet::AddRelation (
1200 const sal_Int16 nRelationType,
1201 const Reference<XInterface>& rxObject)
1210sal_Int32 SAL_CALL AccessibleRelationSet::getRelationCount()
1215AccessibleRelation SAL_CALL AccessibleRelationSet::getRelation (sal_Int32 nIndex)
1218 return AccessibleRelation();
1223sal_Bool SAL_CALL AccessibleRelationSet::containsRelation (sal_Int16 nRelationType)
1226 [nRelationType](
const AccessibleRelation& rRelation) { return rRelation.RelationType == nRelationType; });
1229AccessibleRelation SAL_CALL AccessibleRelationSet::getRelationByType (sal_Int16 nRelationType)
1232 [nRelationType](
const AccessibleRelation& rRelation) { return rRelation.RelationType == nRelationType; });
1235 return AccessibleRelation();
1241 const lang::Locale& rLocale,
1242 const OUString& rsName,
1244 const sal_Int32 nParagraphIndex)
1245 : PresenterAccessibleParagraphInterfaceBase(rLocale, AccessibleRole::
PARAGRAPH, rsName),
1246 mpParagraph(
std::move(xParagraph)),
1253Reference<XAccessibleRelationSet> SAL_CALL
1260 if (mxParentAccessible.is())
1262 Reference<XAccessibleContext> xParentContext (mxParentAccessible->getAccessibleContext());
1263 if (xParentContext.is())
1267 AccessibleRelationType::CONTENT_FLOWS_FROM,
1270 if (mnParagraphIndex<xParentContext->getAccessibleChildCount()-1)
1272 AccessibleRelationType::CONTENT_FLOWS_TO,
1286 sal_Int32 nPosition (-1);
1288 nPosition = mpParagraph->GetCaretPosition();
1299 mpParagraph->SetCaretPosition(
nIndex);
1311 throw lang::IndexOutOfBoundsException(
"no text support in current mode",
static_cast<uno::XWeak*
>(
this));
1312 return mpParagraph->GetCharacter(
nIndex);
1315Sequence<css::beans::PropertyValue> SAL_CALL
1318 const css::uno::Sequence<OUString>& rRequestedAttributes)
1322#if OSL_DEBUG_LEVEL > 0
1323 SAL_INFO(
"sdext.presenter", __func__ <<
" at " <<
this <<
", " <<
nIndex <<
" returns empty set" );
1324 for (sal_Int32 nAttributeIndex(0), nAttributeCount(rRequestedAttributes.getLength());
1325 nAttributeIndex < nAttributeCount;
1329 " requested attribute " << nAttributeIndex <<
" is " << rRequestedAttributes[nAttributeIndex] );
1333 (void)rRequestedAttributes;
1337 return Sequence<css::beans::PropertyValue>();
1345 awt::Rectangle aCharacterBox;
1348 throw lang::IndexOutOfBoundsException(
"invalid text index",
static_cast<uno::XWeak*
>(
this));
1350 else if (mpParagraph)
1352 aCharacterBox = mpParagraph->GetCharacterBounds(
nIndex,
false);
1355 const awt::Point aWindowLocationOnScreen (getLocationOnScreen());
1356 aCharacterBox.X += aWindowLocationOnScreen.X;
1357 aCharacterBox.Y += aWindowLocationOnScreen.Y;
1361 throw lang::IndexOutOfBoundsException(
"no text support in current mode",
static_cast<uno::XWeak*
>(
this));
1364 return aCharacterBox;
1373 nCount = mpParagraph->GetCharacterCount();
1379 const css::awt::Point& )
1389 return getTextRange(getSelectionStart(), getSelectionEnd());
1396 return getCaretPosition();
1403 return getCaretPosition();
1407 sal_Int32 nStartIndex,
1412 return setCaretPosition(nStartIndex);
1421 sText = mpParagraph->GetText();
1427 sal_Int32 nLocalStartIndex,
1428 sal_Int32 nLocalEndIndex)
1435 const TextSegment aSegment (
1436 mpParagraph->CreateTextSegment(nLocalStartIndex, nLocalEndIndex));
1437 sText = aSegment.SegmentText;
1444 sal_Int32 nLocalCharacterIndex,
1445 sal_Int16 nTextType)
1449 TextSegment aSegment;
1451 aSegment = mpParagraph->GetTextSegment(0, nLocalCharacterIndex, nTextType);
1457 sal_Int32 nLocalCharacterIndex,
1458 sal_Int16 nTextType)
1462 TextSegment aSegment;
1464 aSegment = mpParagraph->GetTextSegment(-1, nLocalCharacterIndex, nTextType);
1470 sal_Int32 nLocalCharacterIndex,
1471 sal_Int16 nTextType)
1475 TextSegment aSegment;
1477 aSegment = mpParagraph->GetTextSegment(+1, nLocalCharacterIndex, nTextType);
1497 AccessibleScrollType)
1509 const awt::Point aParagraphLocation (mpParagraph->GetRelativeLocation());
1510 aLocation.X += aParagraphLocation.X;
1511 aLocation.Y += aParagraphLocation.Y;
1520 return mpParagraph->GetSize();
1527 if (mxParentAccessible.is())
1529 Reference<XAccessibleContext> xParentContext =
1530 mxParentAccessible->getAccessibleContext();
1531 if (xParentContext.is())
1533 Reference<XAccessibleComponent> xGrandParentComponent(
1534 xParentContext->getAccessibleParent(), UNO_QUERY);
1535 if (xGrandParentComponent.is())
1536 return xGrandParentComponent->getLocationOnScreen();
1540 return awt::Point();
1547 case AccessibleStateType::EDITABLE:
1548 return bool(mpParagraph);
1550 case AccessibleStateType::ACTIVE:
1560AccessibleNotes::AccessibleNotes (
1561 const css::lang::Locale& rLocale,
1562 const OUString& rsName)
1568 const css::uno::Reference<css::uno::XComponentContext>& rxContext,
1569 const lang::Locale& rLocale,
1570 const Reference<awt::XWindow>& rxContentWindow,
1571 const Reference<awt::XWindow>& rxBorderWindow,
1572 const std::shared_ptr<PresenterTextView>& rpTextView)
1574 OUString
sName (
"Presenter Notes Text");
1578 "/org.openoffice.Office.PresenterScreen/",
1580 aConfiguration.GetConfigurationNode(
"Presenter/Accessibility/Notes/String")
1585 new AccessibleNotes(
1588 pObject->LateInitialization();
1589 pObject->SetTextView(rpTextView);
1591 pObject->SetWindow(rxContentWindow, rxBorderWindow);
1596void AccessibleNotes::SetTextView (
1597 const std::shared_ptr<PresenterTextView>& rpTextView)
1599 ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> > aChildren;
1604 mpTextView->GetCaret()->SetCaretMotionBroadcaster(
1605 ::std::function<
void (sal_Int32,sal_Int32,sal_Int32,sal_Int32)>());
1607 ::std::function<
void ()>());
1616 const sal_Int32 nParagraphCount (
mpTextView->GetParagraphCount());
1617 for (sal_Int32 nIndex=0;
nIndex<nParagraphCount; ++
nIndex)
1620 new PresenterAccessible::AccessibleParagraph(
1621 css::lang::Locale(),
1622 "Paragraph"+OUString::number(nIndex),
1623 rpTextView->GetParagraph(nIndex),
1625 pParagraph->LateInitialization();
1626 pParagraph->SetWindow(mxContentWindow, mxBorderWindow);
1627 pParagraph->SetAccessibleParent(
this);
1628 aChildren.emplace_back(pParagraph.get());
1631 FireAccessibleEvent(AccessibleEventId::INVALIDATE_ALL_CHILDREN,
Any(),
Any());
1635 for (
const auto& rxChild : aChildren)
1637 Reference<lang::XComponent> xComponent = rxChild;
1638 if (xComponent.is())
1639 xComponent->dispose();
1645 mpTextView->GetCaret()->SetCaretMotionBroadcaster(
1646 [
this](sal_Int32 a, sal_Int32 b, sal_Int32 c, sal_Int32 d)
1647 {
return this->NotifyCaretChange(a, b, c, d); });
1649 [
this]() {
return SetTextView(
mpTextView); });
1652void AccessibleNotes::SetWindow (
1653 const css::uno::Reference<css::awt::XWindow>& rxContentWindow,
1654 const css::uno::Reference<css::awt::XWindow>& rxBorderWindow)
1660 for (
auto& rxChild : maChildren)
1662 rxChild->SetWindow(rxContentWindow, rxBorderWindow);
1666void AccessibleNotes::NotifyCaretChange (
1667 const sal_Int32 nOldParagraphIndex,
1668 const sal_Int32 nOldCharacterIndex,
1669 const sal_Int32 nNewParagraphIndex,
1670 const sal_Int32 nNewCharacterIndex)
1672 AccessibleFocusManager::Instance()->FocusObject(
1673 nNewParagraphIndex >= 0
1674 ? maChildren[nNewParagraphIndex]
1677 if (nOldParagraphIndex != nNewParagraphIndex)
1682 if (nOldParagraphIndex >= 0)
1684 maChildren[nOldParagraphIndex]->FireAccessibleEvent(
1685 AccessibleEventId::CARET_CHANGED,
1686 Any(nOldCharacterIndex),
1687 Any(sal_Int32(-1)));
1689 if (nNewParagraphIndex >= 0)
1691 maChildren[nNewParagraphIndex]->FireAccessibleEvent(
1692 AccessibleEventId::CARET_CHANGED,
1694 Any(nNewCharacterIndex));
1697 else if (nNewParagraphIndex >= 0)
1700 maChildren[nNewParagraphIndex]->FireAccessibleEvent(
1701 AccessibleEventId::CARET_CHANGED,
1702 Any(nOldCharacterIndex),
1703 Any(nNewCharacterIndex));
1712std::shared_ptr<AccessibleFocusManager>
const & AccessibleFocusManager::Instance()
1716 mpInstance.reset(
new AccessibleFocusManager());
1721AccessibleFocusManager::AccessibleFocusManager()
1725AccessibleFocusManager::~AccessibleFocusManager()
1734void AccessibleFocusManager::AddFocusableObject (
1735 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1737 OSL_ASSERT(rpObject.is());
1743void AccessibleFocusManager::RemoveFocusableObject (
1744 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1746 ::std::vector<rtl::Reference<PresenterAccessible::AccessibleObject> >::iterator iObject (
1757void AccessibleFocusManager::FocusObject (
1758 const ::rtl::Reference<PresenterAccessible::AccessibleObject>& rpObject)
1763 if (rxObject!=rpObject)
1764 rxObject->SetIsFocused(
false);
1768 rpObject->SetIsFocused(
true);
::std::vector< rtl::Reference< PresenterAccessible::AccessibleObject > > maFocusableObjects
::std::vector< AccessibleRelation > maRelations
static std::shared_ptr< AccessibleFocusManager > mpInstance
std::shared_ptr< PresenterTextView > mpTextView
rtl::Reference< PresenterController > mpPresenterController
css::uno::Reference< css::uno::XComponentContext > mxComponentContext
std::vector< Reference< XAnimationNode > > maChildren
mutable::osl::Mutex m_aMutex
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
virtual void SAL_CALL grabFocus() override
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &rxListener) override
virtual awt::Point GetRelativeLocation()
void SetIsFocused(const bool bIsFocused)
virtual css::awt::Size SAL_CALL getSize() override
virtual OUString SAL_CALL getAccessibleDescription() override
css::uno::Reference< css::awt::XWindow2 > mxContentWindow
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &aPoint) override
void FireAccessibleEvent(const sal_Int16 nEventId, const css::uno::Any &rOldValue, const css::uno::Any &rNewValue)
virtual awt::Size GetSize()
virtual sal_Int16 SAL_CALL getAccessibleRole() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleChild(sal_Int64 nIndex) override
virtual void SAL_CALL disposing() override
virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override
virtual awt::Point GetAbsoluteParentLocation()
virtual css::awt::Point SAL_CALL getLocation() override
css::uno::Reference< css::accessibility::XAccessible > mxParentAccessible
virtual void SetWindow(const css::uno::Reference< css::awt::XWindow > &rxContentWindow, const css::uno::Reference< css::awt::XWindow > &rxBorderWindow)
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &aPoint) override
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
virtual sal_Int32 SAL_CALL getBackground() override
css::uno::Reference< css::awt::XWindow2 > mxBorderWindow
void AddChild(const ::rtl::Reference< AccessibleObject > &rpChild)
virtual sal_Int64 SAL_CALL getAccessibleStateSet() override
void LateInitialization()
virtual void SAL_CALL windowResized(const css::awt::WindowEvent &rEvent) override
virtual void SAL_CALL windowHidden(const css::lang::EventObject &rEvent) override
AccessibleObject(css::lang::Locale aLocale, const sal_Int16 nRole, OUString sName)
void RemoveChild(const ::rtl::Reference< AccessibleObject > &rpChild)
virtual sal_Int32 SAL_CALL getForeground() override
virtual void SAL_CALL removeAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &rxListener) override
void ThrowIfDisposed() const
virtual OUString SAL_CALL getAccessibleName() override
virtual css::awt::Rectangle SAL_CALL getBounds() override
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
const css::lang::Locale maLocale
virtual void SAL_CALL windowMoved(const css::awt::WindowEvent &rEvent) override
virtual css::lang::Locale SAL_CALL getLocale() override
void UpdateState(const sal_Int64 aState, const bool bValue)
virtual bool GetWindowState(const sal_Int64 nType) const
virtual sal_Int64 SAL_CALL getAccessibleChildCount() override
void SetAccessibleParent(const css::uno::Reference< css::accessibility::XAccessible > &rxAccessibleParent)
virtual css::awt::Point SAL_CALL getLocationOnScreen() override
virtual void SAL_CALL windowShown(const css::lang::EventObject &rEvent) override
void SetAccessibleName(const OUString &rsName)
::std::vector< rtl::Reference< AccessibleObject > > maChildren
::std::vector< Reference< XAccessibleEventListener > > maListeners
virtual sal_Bool SAL_CALL setCaretPosition(sal_Int32 nIndex) override
AccessibleParagraph(const css::lang::Locale &rLocale, const OUString &rsName, SharedPresenterTextParagraph pParagraph, const sal_Int32 nParagraphIndex)
virtual OUString SAL_CALL getText() override
virtual sal_Int32 SAL_CALL getIndexAtPoint(const css::awt::Point &rPoint) override
virtual sal_Bool SAL_CALL scrollSubstringTo(sal_Int32 nStartIndex, sal_Int32 nEndIndex, css::accessibility::AccessibleScrollType aScrollType) override
virtual sal_Unicode SAL_CALL getCharacter(sal_Int32 nIndex) override
virtual sal_Int32 SAL_CALL getCharacterCount() override
virtual awt::Point GetAbsoluteParentLocation() override
virtual sal_Int32 SAL_CALL getCaretPosition() override
virtual sal_Bool SAL_CALL setSelection(sal_Int32 nStartIndex, sal_Int32 nEndIndex) override
virtual bool GetWindowState(const sal_Int64 nType) const override
virtual OUString SAL_CALL getSelectedText() override
virtual sal_Bool SAL_CALL copyText(sal_Int32 nStartIndex, sal_Int32 nEndIndex) override
virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes(::sal_Int32 nIndex, const css::uno::Sequence< OUString > &rRequestedAttributes) override
virtual awt::Size GetSize() override
virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex(sal_Int32 nIndex, sal_Int16 nTextType) override
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex(sal_Int32 nIndex, sal_Int16 nTextType) override
virtual sal_Int32 SAL_CALL getSelectionStart() override
virtual sal_Int32 SAL_CALL getSelectionEnd() override
virtual css::awt::Rectangle SAL_CALL getCharacterBounds(sal_Int32 nIndex) override
virtual awt::Point GetRelativeLocation() override
virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex(sal_Int32 nIndex, sal_Int16 nTextType) override
SharedPresenterTextParagraph mpParagraph
const sal_Int32 mnParagraphIndex
virtual OUString SAL_CALL getTextRange(sal_Int32 nStartIndex, sal_Int32 nEndIndex) override
::rtl::Reference< AccessibleObject > mpAccessibleNotes
virtual void SAL_CALL focusGained(const css::awt::FocusEvent &rEvent) override
virtual void SAL_CALL focusLost(const css::awt::FocusEvent &rEvent) override
css::uno::Reference< css::awt::XWindow > mxPreviewBorderWindow
::rtl::Reference< PresenterController > mpPresenterController
virtual void SAL_CALL disposing() override
css::uno::Reference< css::drawing::framework::XPane2 > mxMainPane
void UpdateAccessibilityHierarchy()
css::uno::Reference< css::awt::XWindow > mxNotesContentWindow
css::uno::Reference< css::accessibility::XAccessible > mxAccessibleParent
css::uno::Reference< css::awt::XWindow > mxMainWindow
PresenterPaneContainer::SharedPaneDescriptor GetPreviewPane() const
PresenterAccessible(css::uno::Reference< css::uno::XComponentContext > xContext, ::rtl::Reference< PresenterController > xPresenterController, const css::uno::Reference< css::drawing::framework::XPane > &rxMainPane)
virtual ~PresenterAccessible() override
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &rArguments) override
void NotifyCurrentSlideChange()
css::uno::Reference< css::awt::XWindow > mxPreviewContentWindow
::rtl::Reference< AccessibleObject > mpAccessiblePreview
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
css::uno::Reference< css::awt::XWindow > mxNotesBorderWindow
const css::uno::Reference< css::uno::XComponentContext > mxComponentContext
::rtl::Reference< AccessibleObject > mpAccessibleConsole
This class gives access to the configuration.
css::uno::Any GetConfigurationNode(const OUString &rsPathToNode)
Return a configuration node below the root of the called object.
A drawing framework view of the notes of a slide.
std::shared_ptr< PaneDescriptor > SharedPaneDescriptor
static constexpr OUStringLiteral msNotesPaneURL
static constexpr OUStringLiteral msCurrentSlidePreviewPaneURL
static constexpr OUStringLiteral msSlideSorterPaneURL
EmbeddedObjectRef * pObject
#define SAL_INFO(area, stream)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
::cppu::WeakComponentImplHelper< css::accessibility::XAccessible, css::lang::XInitialization, css::awt::XFocusListener > PresenterAccessibleInterfaceBase
std::shared_ptr< PresenterTextParagraph > SharedPresenterTextParagraph
sal_Int16 mnParagraphIndex