You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openoffice.apache.org by bu...@apache.org on 2016/05/03 19:53:23 UTC

[Issue 126950] New: Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

https://bz.apache.org/ooo/show_bug.cgi?id=126950

          Issue ID: 126950
        Issue Type: DEFECT
           Summary: Cannot change URL textfield in Calc cell when
                    referenced via paragraph text portions enumeration
           Product: App Dev
           Version: 4.1.2
          Hardware: PC
                OS: Linux 64-bit
            Status: UNCONFIRMED
          Severity: Normal
          Priority: P5 (lowest)
         Component: api
          Assignee: issues@openoffice.apache.org
          Reporter: volker.lenhardt@uni-due.de

Created attachment 85519
  --> https://bz.apache.org/ooo/attachment.cgi?id=85519&action=edit
Contains macros to show the bug changing URL textfield values

A Calc table cell contains a hyperlink as a URL textfield.

I want to change its URL and Representation elements. So I enumerate the cell's
text paragraph text portions and test if the actual textfield supports the
service com.sun.star.text.TextField.URL:

Sub WriteCellFieldURL()
  Dim oCell
  Dim oParEnum, oPar
  Dim oPortionsEnum, oPortion, oField
  oCell = ThisComponent.Sheets(0).getCellByPosition(0, 0)
  oParEnum = oCell.Text.createEnumeration()
  Do While oParEnum.hasMoreElements()
    oPar = oParEnum.nextElement()
    oPortionsEnum = oPar.createEnumeration()
    Do While oPortionsEnum.hasMoreElements()
      oPortion = oPortionsEnum.nextElement()
      If oPortion.TextPortionType = "TextField" Then
        oField = oPortion.TextField
        If oField.supportsService("com.sun.star.text.TextField.URL") Then
          Print oField.Representation & ": " & oField.URL
          oField.Representation = "New file"
          oField.URL = "file:///home/volker/newfile.pdf"
          Print oField.Representation & ": " & oField.URL 'New URL content
          Exit Do
        End If
      End If
    Loop
  Loop
  Print oCell.String 'Old cell content
End Sub

But when I try to change the contents of the URL textfield, these new values
are not saved in the cell.

If I rather enumerate the cell's textfields directly, I find that the actual
field does not seem to support the service com.sun.star.text.TextField.URL.

Sub WriteCellFieldURL()
  Dim oCell
  Dim oFieldsEnum, oField
  oCell = ThisComponent.Sheets(0).getCellByPosition(0, 0)
  oFieldsEnum = oCell.TextFields.createEnumeration()
  Do While oFieldsEnum.hasMoreElements()
    oField = oFieldsEnum.nextElement()
    Print "Field found"
    If oField.supportsService("com.sun.star.text.TextField.URL") Then
      Print oField.Representation & ": " & oField.URL
      oField.Representation = "New file"
      oField.URL = "file:///home/volker/newfile.pdf"
      Print oField.Representation & ": " & oField.URL
      Exit Do
    End If
  Loop
End Sub

So the field is not found.

My workaround is to enumerate the textfields as above and use an error handler
when reading the actual field's URL element. In this case the changes are
saved!

Sub WriteCellFieldURL()
  Dim oCell
  Dim oFieldsEnum, oField
  Dim sURL As String
  oCell = ThisComponent.Sheets(0).getCellByPosition(0, 0)
  oFieldsEnum = oCell.TextFields.createEnumeration()
  On Local Error Goto NoURL
  Do While oFieldsEnum.hasMoreElements()
    oField = oFieldsEnum.nextElement()
    sURL = oField.URL
    Print oField.Representation & ": " & oField.URL
    oField.Representation = "New file"
    oField.URL = "file:///home/volker/newfile.pdf"
    Print oField.Representation & ": " & oField.URL
    NoURL:
  Loop
  Print oCell.String
End Sub

Is it one bug or two bugs?

I have attached a file showing the effect. The behaviors explained above are
produced by starting the Subs WriteCellFieldURL1 through ...3 in its macro
module.

I tested with AOO 4.1.2 under Linux 64-Bit openSUSE 13.2 as well as under
Windows 7.

Volker

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

mroe <mr...@gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |NOT_AN_ISSUE

--- Comment #1 from mroe <mr...@gmx.net> ---
Sub WriteCellFieldURL()
    Dim oCell, oFields, oField
    Dim i As Integer
    oCell = ThisComponent.Sheets(0).getCellByPosition(0, 0)
     oFields = oCell.getTextFields()
     For i = 0 To oFields.getCount() - 1
        oField = oFields.getByIndex( i )
        MsgBox oField.getPropertyValue( "Representation" ) & ": " &
oField.getPropertyValue( "URL" )
        oField.setPropertyValue( "Representation", "New file" )
        oField.setPropertyValue( "URL", "file:///home/volker/newfile.pdf" )
        MsgBox oField.getPropertyValue( "Representation" ) & ": " &
oField.getPropertyValue( "URL" )
     Next i
End Sub

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

--- Comment #6 from mroe <mr...@gmx.net> ---
I'm not an AOO developer.

But it seems that SvxUnoTextField is the visual representation (View) of
ScCellFieldObj (Model).
SvxUnoTextField supports "com.sun.star.text.TextField.URL" (and
"com.sun.star.text.textfield.URL") whereas ScCellFieldObj it doesn't.

ScCellFieldObj simply stores the needed values in /Representation/,
/TargetFrame/ and /URL/. It doesn't know something about its visual
representation.

SvxUnoTextField implements com.sun.star.text.TextField.URL which reads the
stored Values and uses /Format/ for the type of representation (text/button).

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

--- Comment #5 from Volker Lenhardt <vo...@uni-due.de> ---
Excuse me for being cumbersome. I did discuss the topic in the German
openoffice forum.

Well, I (we) overlooked that the textfield as a text portion is readonly.

But you didn't respond to my complaint that the field as referenced by index or
by cell textfields enumeration (I think both yield the same ScCellFieldObj)
denies to support the URL service
(oField.supportsService("com.sun.star.text.TextField.URL" = False)). But in
fact it does, as this service is not optional. In the forum there was no
explanation for this behavior.

Volker

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

--- Comment #3 from Volker Lenhardt <vo...@uni-due.de> ---
I don't think that this bug is resolved fixed. When I reference a textfield
either via enumeration or via indexing, the URL field neglects supporting the
service com.sun.star.text.TextField.URL. What is this other than a bug?

On the other hand when I enumerate the paragraph text portions to reference the
URL field it correctly agrees to support the URL service, but changes to the
URL and Representation properties are not saved in the cell. I consider this a
bug.

Volker

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

--- Comment #4 from mroe <mr...@gmx.net> ---
Please have a look at
https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/TextPortion.html

-----------
TextField
[ readonly ] XTextField TextField;

Usage Restrictions
    optional
Description
    contains the text field of a text portion of type TextField. 
-----------

With the Enumeration you get a "SvxUnoTextField". Readonly, see above.
With oCell.getTextFields().getByIndex( 0 ) you get a "ScCellFieldObj".

https://www.openoffice.org/api/docs/common/ref/com/sun/star/text/XTextFieldsSupplier.html#getTextFields

You should discuss this behaviour in an user forum.

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

Volker Lenhardt <vo...@uni-due.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|NOT_AN_ISSUE                |FIXED

--- Comment #2 from Volker Lenhardt <vo...@uni-due.de> ---
Is there actually a difference between enumerating textfields and referencing
them by index one after the other? In any case I have to ensure that the actual
field is a URL textfield. If I read the URL property and there isn't any, an
exception is thrown.

But at this moment it leaps into my mind that there possibly doesn't exist any
other textfield type beside URL in Calc cell texts. Is this right? If so then
there really is no problem at all.

Volker

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

Volker Lenhardt <vo...@uni-due.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |volker.lenhardt@uni-due.de

-- 
You are receiving this mail because:
You are the assignee for the issue.

[Issue 126950] Cannot change URL textfield in Calc cell when referenced via paragraph text portions enumeration

Posted by bu...@apache.org.
https://bz.apache.org/ooo/show_bug.cgi?id=126950

--- Comment #7 from Volker Lenhardt <vo...@uni-due.de> ---
Thank you very much indeed for this clarifying explanation. It was important
for me to understand the background. So I can correctly describe in a
documentation how to handle cell URL textfields.

-- 
You are receiving this mail because:
You are the assignee for the issue.