Re: problem of determining the location in the document

Andrew Douglas Pitonyak <[email protected]> Fri, 28 Jan 2011 19:49:00 -0500
Newsgroups gmane.comp.openoffice.devel.api
Message-ID <[email protected]>
On 01/28/2011 12:09 PM, Zbigniew Szot wrote:
> Hi again
>
> If i  apply my  " use case" (TextSection nested in textTable) to Your
> snippet.  The TextTable property will not be set (will be null) and
> the textsection property will be set to "nested" text section.
>
> So its dead loop exacly as in my example.
> I'm working bit too long, and started to have problem with
> communicating in the clear way.
> Thanks for taking interest  Piter.
> I hope I've managed to explain where is the catch ;-)
>
> Zbyszek
On a whim, I spent another couple hours looking at this and I must agree 
that a solution, if it exists, is tricky at best. Part of the problem is 
that if you have one object nested in another, then you will likely see 
both objects.

I inserted a section in a section in a table in a section.

I can easily walk the parent sections, but, then this totally misses the 
table. On the other hand, if I check for the table first, then I miss 
the section.

If I walk a sections parents, then I must jump through hoops to find the 
table (but I can do it). For example, section in a section in a table. I 
can find the table, but, I must do something a wee bit odd (like create 
a text cursor).

I might be able to find a solution by inspecting the text object in each 
section, but, that would take way more time than I am willing to invest 
(since it is not really my problem). This is part of my test code.



Sub TraceParent
   MsgBox 
TraceParentFromRange(ThisComponent.CurrentCOntroller.ViewCursor, False)
End Sub

Function TraceParentFromRange(oRangeArg, ignoreTextSection As Boolean) 
As String
   If IsNull(oRangeArg) OR IsEmpty(oRangeArg) Then
     TraceParentFromRange = ""
     Exit Function
   End If

   Dim oRange
   oRange = oRangeArg

   Dim oAnchor
   Dim s$
   Dim sParent$
   Dim oSection
   Dim localIgnoreTextSection As Boolean
   s = ""
   localIgnoreTextSection = False
   If NOT IsEmpty(oRange.TextSection) AND NOT ignoreTextSection Then
     localIgnoreTextSection = True
     oSection = oRange.TextSection
     Do While NOT IsEmpty(oSection) AND NOT IsNull(oSection)
       If Len(s) = 0 Then
         s = "TextSection: '" & oSection.getName() & "'"
       Else
         s = s & " Anchored in" & CHR$(10) & "TextSection: '" & 
oSection.getName() & "'"
       End If
       oAnchor = oSection.getAnchor()
       oSection = oSection.getParentSection()
     Loop
     'Inspect oAnchor.getText().createTextCursorByRange(oAnchor)
     If 
oAnchor.getText().SupportsService("com.sun.star.text.CellProperties") Then
       oAnchor = oAnchor.getText().createTextCursor()
     End If
   End If
   If NOT IsEmpty(oRange.Cell) Then
     If Len(s) > 0 Then
       s = s & CHR$(10)
     End If
     s = s & "Cell " & oRange.Cell.CellName & " in table " & 
oRange.TextTable.getName()
     oAnchor =  oRange.TextTable.getAnchor()
   End If
   If s = "" Then
     TraceParentFromRange = "Root"
     Exit Function
   End If
   sParent$ = TraceParentFromRange(oAnchor, localIgnoreTextSection)
   If Len(sParent) = 0 Then
     TraceParentFromRange = s
   Else
     TraceParentFromRange = s & CHR$(10) & "Anchored in: " & sParent
   End If
End Function

-- 
Andrew Pitonyak
My Macro Document: http://www.pitonyak.org/AndrewMacro.odt
Info:  http://www.pitonyak.org/oo.php