<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
Hello again,<br>
<br>
Quick question: is there a way to have a vector property that has N
elements, but only exhibit one of them? If yes, can a descriptor be
used to control which of the vector elements is exhibited?<br>
<br>
<br>
<br>
<div class="moz-cite-prefix">On 05/23/2016 11:46 PM, Ellon Paiva
wrote:<br>
</div>
<blockquote cite="mid:57437A40.2020905@gmail.com" type="cite">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
Utkarsh,<br>
<br>
<div class="moz-cite-prefix">On 05/23/2016 04:27 PM, Utkarsh
Ayachit wrote:<br>
</div>
<blockquote
cite="mid:CADHSJjCPpLYEeiNeXOKqPE2Zmk04cqvEgOD-kvYE=skVYCKugQ@mail.gmail.com"
type="cite">
<pre wrap="">Ellon,
</pre>
<blockquote type="cite">
<pre wrap="">How can I access the values set from on this widget in my filter class
(which is a subclass of vtkPolyDataAlgorithm, see files attached)? When I
was creating the interface using XML files only the changes were stored in
filter attributes through Set/Get methods, and thus accessible into
RequestData(), but I don't see how to do it from the widget I created now.
</pre>
</blockquote>
<pre wrap="">Alas, I'll recommend going back to your previous approach of having
everyting go through filter attributes with Get/Set methods and then
add XML properties for all. That's indeed the way to go. </pre>
</blockquote>
<br>
Ok. That's good to know: while I was waiting for an answer I
reimplemented most of the interface using XML files. It's working
more or less well, apart from a specific widget I'm still having
problem with (see below). The attached MinimalExample2.tar.gz has
the updated files.<br>
<br>
<blockquote
cite="mid:CADHSJjCPpLYEeiNeXOKqPE2Zmk04cqvEgOD-kvYE=skVYCKugQ@mail.gmail.com"
type="cite">
<pre wrap="">To create a
custom widget for a group of properties, all you have to do is put a
XML element like following in your proxy definition and then define a
custom widget for that group
(<a moz-do-not-send="true" class="moz-txt-link-freetext" href="http://www.paraview.org/Wiki/ParaView/Properties_Panel#Property_Groups">http://www.paraview.org/Wiki/ParaView/Properties_Panel#Property_Groups</a>).
Using panel_widget attribute on the group XML, you can tell which
custom widget to create. See existing examples in ParaView, e.g.
pqColorOpacityEditorWidget, it provides a nice demonstration of how
you can use Qt properties and pqPropertyLinks to cleanly hookup UI
items and several properties in the proxy. A simpler example is
pqFontPropertyWidget.</pre>
</blockquote>
<br>
Thanks for pointing out the files with the examples. I looked
through them today but I still didn't see how I can properly
"link" my widget with paraview. I'll dig more into it tomorrow.
And thanks for pointing out the pqPropertyLinks class. Now I see
what "AddPropertyLink" method does.<br>
<br>
Meanwhile, let me explain more: with most of the interface defined
only in the xml file, the problem is with an specific widget I
have that *I think* I cannot implement using xml only. Basically,
this widget allows the user to define a list of "filters", where
each filter has some parameters. The user can have as much of them
as they want, and the order of them matters. So, I think that to
make this work, I'll need:<br>
<ol>
<li>A StringVectorProperty with the names of the filters. This
should not be limited by size because as I said the user can
have N of these. New items are always added in the end, and
the selected item can be reordered with "Up" and "Down"
buttons, or removed with "Remove" button;<br>
<b>Question</b>: How do I deal with StringVectorProperties of
dynamic size? How can I remove and reorder them?<br>
</li>
<li>A vector of of the same size of the filter name vector from
1) for each of the possible attribute of the filter that can
be set.<br>
<b>Q</b>: How can I manage these vectors of dynamic size? Each
individually like I should do in 1) or maybe I can use a
"group" strategy, and create a "vector of a group" of
attributes? (Don't know if ParaView supports this kind of
structure)<br>
</li>
<li>Create a descriptor that will exhibit show/hide attributes
based on the current item being selected. I've programmed two
descriptors being used in the attached minimal example, but
not when the changes depends on a custom widget.<br>
<b>Q</b>: How can I access the current selected item of a
QListWidget inside my custom widget from a descriptor? Maybe
I'll need extra attributes (like current/old row and current
selected filter name) that I'll have to keep synchronized or
there's any easier way?<br>
</li>
</ol>
<br>
<blockquote
cite="mid:CADHSJjCPpLYEeiNeXOKqPE2Zmk04cqvEgOD-kvYE=skVYCKugQ@mail.gmail.com"
type="cite">
<blockquote type="cite">
<pre wrap="">The Apply button in the interface is does not change to enabled state
automatically when changing the options in the widged. I tried to emit a
changeFinished() signal but it didn't enable the Apply button. How can I
achieve this behavior?
</pre>
</blockquote>
<pre wrap="">Anytime the user changes the UI, just fire
pqPropertyWidget::changeAvailable(). That should suffice in most
cases. In cases rare cases, you have to fire changeAvailable() and
changeFinished() separately, but we can ignore that until you run into
it.</pre>
</blockquote>
<br>
pqPropertyWidget::changeAvailable() was exactly what I was looking
for! :) Thanks!<br>
<br>
<br>
Best,<br>
<br>
Ellon<br>
<br>
</blockquote>
<br>
</body>
</html>