LibreOffice Module sw (master)  1
accfrmobjslist.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include "accfrmobjslist.hxx"
21 #include <accmap.hxx>
22 #include "acccontext.hxx"
23 
24 #include <pagefrm.hxx>
25 #include <sortedobjs.hxx>
26 #include <anchoredobject.hxx>
27 
28 using namespace ::sw::access;
29 
31  const SwAccessibleChildSList& rLst,
32  SwAccessibleMap& rAccMap )
33  : m_rList( rLst ),
34  m_aCurr( m_rList.GetFrame().GetLower() ),
35  m_nNextObj( 0 )
36 {
37  if( !m_aCurr.GetSwFrame() )
38  {
39  const SwFrame& rFrame = m_rList.GetFrame();
40  if( rFrame.IsPageFrame() )
41  {
42  const SwPageFrame& rPgFrame = static_cast< const SwPageFrame& >( rFrame );
43  const SwSortedObjs *pObjs = rPgFrame.GetSortedObjs();
44  if( pObjs && pObjs->size() )
45  {
46  m_aCurr = (*pObjs)[m_nNextObj++]->GetDrawObj();
47  }
48  }
49  else if( rFrame.IsTextFrame() )
50  {
51  const SwSortedObjs *pObjs = rFrame.GetDrawObjs();
52  if ( pObjs && pObjs->size() )
53  {
54  m_aCurr = (*pObjs)[m_nNextObj++]->GetDrawObj();
55  while( m_aCurr.IsValid() && !m_aCurr.IsBoundAsChar() )
56  {
57  m_aCurr = (m_nNextObj < pObjs->size())
58  ? (*pObjs)[m_nNextObj++]->GetDrawObj()
59  : static_cast< const SdrObject *>( nullptr );
60  }
61  }
62  if ( !m_aCurr.IsValid() )
63  {
65  rAccMap.GetContextImpl( &rFrame, false );
66  if( xAccImpl.is() )
67  {
68  SwAccessibleContext* pAccImpl = xAccImpl.get();
69  m_aCurr = SwAccessibleChild( pAccImpl->GetAdditionalAccessibleChild( 0 ) );
70  ++m_nNextObj;
71  }
72  }
73  }
74  }
75 
77  {
78  // Find the first visible
79  while( m_aCurr.IsValid() &&
81  !m_aCurr.GetBox( rAccMap ).IsOver( m_rList.GetVisArea() ) )
82  {
83  next();
84  }
85  }
86 }
87 
89 {
90  bool bNextTaken( true );
92  {
93  bNextTaken = false;
94  }
95  else if( m_aCurr.GetSwFrame() )
96  {
98  if( !m_aCurr.GetSwFrame() )
99  {
100  bNextTaken = false;
101  }
102  }
103 
104  if( !bNextTaken )
105  {
106  const SwFrame& rFrame = m_rList.GetFrame();
107  if( rFrame.IsPageFrame() )
108  {
109  const SwPageFrame& rPgFrame = static_cast< const SwPageFrame& >( rFrame );
110  const SwSortedObjs *pObjs = rPgFrame.GetSortedObjs();
111  m_aCurr = ( pObjs && m_nNextObj < pObjs->size() )
112  ? (*pObjs)[m_nNextObj++]->GetDrawObj()
113  : static_cast< const SdrObject *>( nullptr );
114  }
115  else if( rFrame.IsTextFrame() )
116  {
117  const SwSortedObjs* pObjs = rFrame.GetDrawObjs();
118  const size_t nObjsCount = pObjs ? pObjs->size() : 0;
119  m_aCurr = ( pObjs && m_nNextObj < nObjsCount )
120  ? (*pObjs)[m_nNextObj++]->GetDrawObj()
121  : static_cast< const SdrObject *>( nullptr );
122  while( m_aCurr.IsValid() && !m_aCurr.IsBoundAsChar() )
123  {
124  m_aCurr = ( m_nNextObj < nObjsCount )
125  ? (*pObjs)[m_nNextObj++]->GetDrawObj()
126  : static_cast< const SdrObject *>( nullptr );
127  }
128  if ( !m_aCurr.IsValid() )
129  {
131  m_rList.GetAccMap().GetContextImpl( &rFrame, false );
132  if( xAccImpl.is() )
133  {
134  SwAccessibleContext* pAccImpl = xAccImpl.get();
135  m_aCurr = SwAccessibleChild( pAccImpl->GetAdditionalAccessibleChild( m_nNextObj - nObjsCount ) );
136  ++m_nNextObj;
137  }
138  }
139  }
140  }
141 
142  return *this;
143 }
144 
146 {
147  next();
148  while( m_aCurr.IsValid() &&
150  !m_aCurr.GetBox( m_rList.GetAccMap() ).IsOver( m_rList.GetVisArea() ) )
151  {
152  next();
153  }
154 
155  return *this;
156 }
157 
159 {
161 }
162 
163 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Base class of the Writer layout elements.
Definition: frame.hxx:295
const SwSortedObjs * GetDrawObjs() const
Definition: frame.hxx:543
const SwFrame & GetFrame() const
sw::access::SwAccessibleChild m_aCurr
const SwAccessibleChildSList & m_rList
bool IsVisibleChildrenOnly() const
vcl::Window * GetAdditionalAccessibleChild(const sal_Int32 nIndex)
#i88070# - get additional accessible child by index
const SwRect & GetVisArea() const
::rtl::Reference< SwAccessibleContext > GetContextImpl(const SwFrame *pFrame, bool bCreate=true)
Definition: accmap.cxx:1924
const SdrObject * GetDrawObject() const
Definition: accfrmobj.hxx:59
SwAccessibleChildSList_const_iterator & next()
bool IsTextFrame() const
Definition: frame.hxx:1210
SwAccessibleChildSList_const_iterator & operator++()
const SwFrame * GetSwFrame() const
Definition: accfrmobj.hxx:58
const SwSortedObjs * GetSortedObjs() const
Definition: pagefrm.hxx:117
size_t size() const
Definition: sortedobjs.cxx:42
bool AlwaysIncludeAsChild() const
indicating, if accessible child is included even, if the corresponding object is not visible...
Definition: accfrmobj.cxx:301
A page of the document layout.
Definition: pagefrm.hxx:40
bool IsPageFrame() const
Definition: frame.hxx:1154
vcl::Window * GetWindow() const
Definition: accfrmobj.hxx:60
const std::vector< OUString > & m_rList
SwAccessibleChildSList_const_iterator(const SwAccessibleChildSList &rLst)
SwAccessibleChildSList_const_iterator & next_visible()
SwRect GetBox(const SwAccessibleMap &rAccMap) const
Definition: accfrmobj.cxx:224
bool IsOver(const SwRect &rRect) const
Definition: swrect.cxx:128
class for collecting anchored objects
Definition: sortedobjs.hxx:48
SwAccessibleMap & GetAccMap() const
SwFrame * GetNext()
Definition: frame.hxx:654