Hello,<div><br></div><div>It&#39;s funny how close I was to the solution and the time it took me to find it.</div><div><br></div><div><div>                    uno.invoke(xPSet, &quot;setPropertyValue&quot;, (PropertyName, uno.Any( \</div>
<div>                        &quot;[]string&quot;,PropertyValue)))</div><div><br></div>Thank you John for your answer.</div><div><br><div class="gmail_quote">2011/5/28 John LeMoyne Castle <span dir="ltr">&lt;<a href="mailto:jlc@mail2lee.com">jlc@mail2lee.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Xisco,<br>
I think your Java-&gt;Python porting project is awesome.  My experience is thin<br>
on many counts here: Java, Python, pyuno and LibreOffice, but I have been<br>
curious about them all, so I dove in a little on your question.<br>
<br>
My short answer of encouragement: Yes, you can solve it!<br>
<br>
One question is how are you treating PropertyValue?<br>
If PropertyValue can still be either boolean or a list of strings (in your<br>
Python as in the Java) then your initial test &quot;If PropertyValue:&quot; may<br>
prevent setting *any* property to false.  I think this safety check is moot<br>
anyway: Python will complain and quit before calling the setControlProperty<br>
function with nothing as the third argument object.<br>
<br>
I see that the invoke call is new - nice to see the setControlProperty<br>
function actually setting the property on the control ;-)  I think the path<br>
that call takes is through the extern C static invoke at:<br>
<a href="http://opengrok.libreoffice.org/xref/ure/pyuno/source/module/pyuno_module.cxx#596" target="_blank">http://opengrok.libreoffice.org/xref/ure/pyuno/source/module/pyuno_module.cxx#596</a><br>
through PYUNO_invoke at:<br>
<a href="http://opengrok.libreoffice.org/xref/ure/pyuno/source/module/pyuno.cxx#335" target="_blank">http://opengrok.libreoffice.org/xref/ure/pyuno/source/module/pyuno.cxx#335</a><br>
where it seems that the Any wrapper is optional (!!).  If you do pass<br>
PYUNO_invoke a tuple of Anys it just unpacks them before making a call like:<br>
<a href="http://object.name" target="_blank">object.name</a>(tuple of args)<br>
<br>
I see that the Any wrapper is required to make calls through the<br>
Adapter::invoke here:<br>
<a href="http://opengrok.libreoffice.org/xref/ure/pyuno/source/module/pyuno_adapter.cxx#194" target="_blank">http://opengrok.libreoffice.org/xref/ure/pyuno/source/module/pyuno_adapter.cxx#194</a><br>
--- but I&#39;m sure you are not calling that invoke as it has a very different<br>
signature.  The extern C static invoke function requires the third arg to be<br>
a tuple, so I think it is sufficient to test for tuple type and then make<br>
the singletons a tuple of 1 before the invoke call.<br>
<br>
Finally, from the way PYUNO_invoke turns the ControlName and PropertyName<br>
into the callable function object, I think that passing the PropertyName as<br>
the second argument is sufficient - it doesn&#39;t need to go in the tuple as<br>
well.<br>
<br>
My understanding is that Java needs the Any foo to pass both simple types<br>
and objects as generic objects whereas everything in Python is an object so<br>
... your Python glue code may often be simpler than the original Java.<br>
<br>
Please remember I&#39;m no expert -- I just spent a few hours on this to start<br>
to dig into pyuno while doing a full LibreOffice build ...<br>
<br>
Hope This Helps,<br>
LeMoyne<br>
<font color="#888888"><br>
<br>
<br>
--<br>
View this message in context: <a href="http://nabble.documentfoundation.org/GSOC-Java-Python-problem-with-uno-invoke-tp2994887p2995406.html" target="_blank">http://nabble.documentfoundation.org/GSOC-Java-Python-problem-with-uno-invoke-tp2994887p2995406.html</a><br>

Sent from the Dev mailing list archive at Nabble.com.<br>
_______________________________________________<br>
LibreOffice mailing list<br>
<a href="mailto:LibreOffice@lists.freedesktop.org">LibreOffice@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/libreoffice" target="_blank">http://lists.freedesktop.org/mailman/listinfo/libreoffice</a><br>
</font></blockquote></div><br></div>