Hi,

not having heard of you yet, but having been able to research a little bit (sitting in meetings since 8:30 in the morning), here is what I did and found out, as it may be of interest of "lurkers" who are interested how one could approach the problem using the ooRexx-support for UNO/OOo.

I changed the replacement statement to: LevelFormat~xIndexAccess~xIndexReplace~replaceByIndex(1, propsToc) but unfortunately I get this error: method [REPLACEBYINDEX], method not found or error (exception) executing method!

Perhaps I have forgotten to link this statement to an interface, service or something?
This indicates that an argument is in error (missing, wrong type, etc.). So the next step was to find out of what type the argument should be.


 -- TOC
   contentInd = xDMsf~createInstance("com.sun.star.text.ContentIndex")
Adding the statements:say "contentInd~uno.getDefinition:"

   say "contentInd~uno.getDefinition:"
   say ppd(contentInd~uno.getDefinition)
   say "---"

yielded the following output:

   contentInd~uno.getDefinition:
   
UNO_SERVICE|com.sun.star.text.BaseIndex+com.sun.star.text.ContentIndex|SwXDocumentIndex
           
com.sun.star.text.XDocumentIndex|UNO_INTERFACE||com.sun.star.text.BaseIndex
           
Title|UNO_PROPERTY||java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
IsProtected|UNO_PROPERTY||java.lang.Boolean:UNO_BOOLEAN::|com.sun.star.text.BaseIndex
           
ParaStyleHeading|UNO_PROPERTY||java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel1|UNO_PROPERTY||java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel2|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel3|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel4|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel5|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel6|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel7|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel8|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel9|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleLevel10|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
ParaStyleSeparator|UNO_PROPERTY|OPTIONAL|java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
TextColumns|UNO_PROPERTY||com.sun.star.text.XTextColumns:UNO_INTERFACE::|com.sun.star.text.BaseIndex
           
BackGraphicURL|UNO_PROPERTY||java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
BackGraphicFilter|UNO_PROPERTY||java.lang.String:UNO_STRING::|com.sun.star.text.BaseIndex
           
BackGraphicLocation|UNO_PROPERTY||com.sun.star.style.GraphicLocation:UNO_ENUM::|com.sun.star.text.BaseIndex
           
BackColor|UNO_PROPERTY||com.sun.star.util.Color:UNO_TYPEDEF:int:UNO_LONG|com.sun.star.text.BaseIndex
           
BackTransparent|UNO_PROPERTY||java.lang.Boolean:UNO_BOOLEAN::|com.sun.star.text.BaseIndex
           
*LevelFormat*|*UNO_PROPERTY*|OPTIONAL|com.sun.star.container.XIndexReplace:UNO_INTERFACE::|*com.sun.star.text.BaseIndex*
           
CreateFromChapter|UNO_PROPERTY|OPTIONAL|java.lang.Boolean:UNO_BOOLEAN::|com.sun.star.text.BaseIndex
           
ContentSection|UNO_PROPERTY||com.sun.star.text.XTextSection:UNO_INTERFACE::|com.sun.star.text.BaseIndex
           
HeaderSection|UNO_PROPERTY||com.sun.star.text.XTextSection:UNO_INTERFACE::|com.sun.star.text.BaseIndex
           
com.sun.star.text.BaseIndex|UNO_SERVICE||com.sun.star.text.ContentIndex
           
Level|UNO_PROPERTY|OPTIONAL|java.lang.Short:UNO_SHORT::|com.sun.star.text.ContentIndex
           
CreateFromOutline|UNO_PROPERTY|OPTIONAL|java.lang.Boolean:UNO_BOOLEAN::|com.sun.star.text.ContentIndex
           
LevelParagraphStyles|UNO_PROPERTY|OPTIONAL|com.sun.star.container.XIndexReplace:UNO_INTERFACE::|com.sun.star.text.ContentIndex
           
CreateFromMarks|UNO_PROPERTY|OPTIONAL|java.lang.Boolean:UNO_BOOLEAN::|com.sun.star.text.ContentIndex
   ---
The property "LevelFormat" is defined in the service "com.sun.star.text.BaseIndex". The online documentation is located at <http://api.openoffice.org/docs/common/ref/com/sun/star/text/BaseIndex.html>, but misses to document the "LevelFormat" property!
:(

So the next approach is to get at the definition of the LevelFormat attribute (see below).


   contentProps = contentInd~XPropertySet

  propsToc = bsf.createArray(.UNO~PropertyValue, 1)
  propsToc[1] = .UNO~PropertyValue~new
  propsToc[1]~name="TokenType"
  propsToc[1]~value = "TokenHyperlinkStart"
  propsToc[1]~name="TokenType"
  propsToc[1]~value = "TokenText"
  propsToc[1]~name="TokenType"
  propsToc[1]~value = "TokenHyperlinkEnd"

contentProps~setPropertyValue("CreateFromOutline",box("boolean", .true)) contentProps~setPropertyValue("Level",box("short", 2))
  contentProps~setPropertyValue("Title","Table of Content")
  contentProps~setPropertyValue("IsProtected",box("boolean", .false))

Then I have to get the LevelFormat and replace it with my properties.
But here I get the error that the method replaceByIndex does not exist or
there is an exception.
  LevelFormat = contentProps~getPropertyValue("LevelFormat")
Having access to the LevelFormat property, adding the statements:

   say "levelFormat~uno.getDefinition:"
   say ppd(levelFormat~uno.getDefinition)
   say "---"
yielded the following output:

   levelFormat~uno.getDefinition:
   
UNO_SERVICE|com.sun.star.text.DocumentIndexLevelFormat|SwXIndexTokenAccess_Impl
           
*com.sun.star.container.XIndexReplace*|UNO_INTERFACE||*com.sun.star.text.DocumentIndexLevelFormat*
   ---
This reveals that the property gets defined by the "com.sun.star.text.DocumentIndexLevelFormat" service. Looking up the documentation <http://api.openoffice.org/docs/common/ref/com/sun/star/text/DocumentIndexLevelFormat.html> reveals an incomplete description.

Learning that it is a sequence of PropertyValues, but still assigning a sequence (array) of PropertyValues, the next step was to analyze the individual entries, just to learn, that each entry in that array is a two dimensional array of PropertyValues !


LevelFormat~xIndexAccess~xIndexReplace~replaceByIndex(box("long", 1), propsToc)
This yields an invalid argument error, as the value should be a sequence of a sequence of PropertyValue (a two-dimensional array of type PropertyValue), whereas you are creating and supplying a one-dimensional array of PropertyValue.

Can someone give me a hint where I have the mistake?
The replacement statement (the very last statement) should probably read:

LevelFormat~xIndexAccess~xIndexReplace~replaceByIndex(1, propsToc) [Boxing of arguments is only needed in the case of property values, if you need to use a primitive type (boolean, byte, char, short, int, long, float, double).]
In the next step I listed all current settings of this two-dimensional array and learned that in the second dimension there was a single entry "CharacterStyleName" (except for the TokenType property named "TokenTabStop" which has instead a property named "TabStopRightAligned"), which was initially set to an empty string.

Here the statements for setting up the two-dimensional array of type PropertyValue.

     m1=3   /* three PropertyValue pairs */
     m2=2   /* two PropertyValues        */
        /* create two-dimensional array of type PropertyValue */
     propsToc = bsf.createArray(.UNO~PropertyValue, m1, m2)
     do i1=1 to m1
        do i2=1 to m2
           propsToc[i1,i2]=.uno~propertyValue~new /* create an assign 
PropertyValue object */

           if i2=2 then  /* set companion PropertyValue to default value */
           do
              propsToc[i1,2]~name="CharacterStyleName"
              propsToc[i1,2]~value=""
           end
        end
     end

       /* now set the property values */
     propsToc[1,1]~name="TokenType"
     propsToc[1,1]~value = "TokenHyperlinkStart"
     propsToc[2,1]~name="TokenType"
     propsToc[2,1]~value = "TokenText"
     propsToc[3,1]~name="TokenType"
     propsToc[3,1]~value = "TokenHyperlinkEnd"
HTH,

---rony

Reply via email to