XSIforum.com

¿siControlListBox interactivo?

0 Usuarios y 1 Visitante están viendo este tema.

¿siControlListBox interactivo?
« en: 28 Agosto 2010, 05:29:11 »
Buenas,

Iimaginemos que tengo un property con 2 parámetros, el primero lo destinamos a un control ListItem y en el segundo llevaré un registro de lo que quiero que aparezca en ese list, lo que necesito es que al cambiar el valor del segundo parámetro pueda actualizar la lista en el PPG. Parece una tontería pero no logro que refresque de forma dinámica sin refrescar toooodo el plugin ???

En definitiva... ¿Existe algún mecanismo para redefinir el contenido de un item sin refrescar/recrear toda la ventana?

¡Gracias!

Re: ¿siControlListBox interactivo?
« Respuesta #1 en: 28 Agosto 2010, 05:49:56 »
Me autorespondo...

Una forma que funciona es recargar el objeto mediante XSIUtils.Reload(), el tema es que para ver los cambios hay que cerrar y abrir la ventana... como extraño QT :(

¿Alguien conoce alguna forma menos mmm... como decirlo... una forma más elegante? no recordaba que fuera tan malo el soporte nativo para hacer UI de Softi.

alanf

  • *****
  • 6026
  • Pipeline Developer @ Felix & Paul Studios
Re: ¿siControlListBox interactivo?
« Respuesta #2 en: 28 Agosto 2010, 07:00:38 »
PPG.Refresh()? ???

Re: ¿siControlListBox interactivo?
« Respuesta #3 en: 28 Agosto 2010, 14:56:33 »
Es lo primero que intenté pero no me funciona en el caso que menciono, lo mismo lo estoy haciendo mal :(
¿Te funciona a ti cuando tienes que redefinir el array de un list?

Re: ¿siControlListBox interactivo?
« Respuesta #4 en: 28 Agosto 2010, 15:38:06 »
Podrías probar a redibujar el layout cada vez, poniendo el codigo del _DefineLayout() en una función aparte. Aunque me parece raro que con el XSIUtils.Reload() tengas que abrir y cerrar la ventana cada vez :-S

alanf

  • *****
  • 6026
  • Pipeline Developer @ Felix & Paul Studios
Re: ¿siControlListBox interactivo?
« Respuesta #5 en: 28 Agosto 2010, 17:05:03 »
Pregunta en el mailing list.

agedito

  • ***
  • 1524
  • ¡¡Yo lo que quiero es milonguear!!
Re: ¿siControlListBox interactivo?
« Respuesta #6 en: 28 Agosto 2010, 17:33:21 »
Buenas, como te he dicho pro el messenger, tines que create una función Redraw que acepte un parámetro.
En esa función harías lo que se hace en el define layout

Código: [Seleccionar]
def Redraw(p_oPPG):
from win32com.client import constants
oLayout = p_oPPG.PPGLayout
oLayout.Clear()
""" Dibuja tu interfaz"""
PSet.Refresh()

Ahora solo tienes que llamar a esa función el el OnInit del PPG y en el OnChange de cada parámetro:

Código: [Seleccionar]
def MyProperty_OnInit( ):
Redraw(PPG)

def MyProperty_Param_OnChanged( ):
Redraw(PPG)

Re: ¿siControlListBox interactivo?
« Respuesta #7 en: 28 Agosto 2010, 17:40:48 »
Gracias, lo probé y funciona perfectamente :)

Lo único malo es que te obliga a redibujar todo el layout en cada refresh, cuando tienes 1 list y poca cosa más no pasa nada pero con interfaces más complejas es bastante bestia, lo suyo sería que se pudiera hacer el Clear() y Refresh() por item pero va a ser que no...

1 voto para que implementen QT ya! :D

agedito

  • ***
  • 1524
  • ¡¡Yo lo que quiero es milonguear!!
Re: ¿siControlListBox interactivo?
« Respuesta #8 en: 28 Agosto 2010, 19:08:28 »
1 voto para que implementen QT ya! :D

Dios y Softimage te oigan

Re: ¿siControlListBox interactivo?
« Respuesta #9 en: 28 Agosto 2010, 21:48:58 »
Vamos, lo que yo decía: Redibujar el layout una y otra vez. Simple y poco elegante, como tiene que ser.


Aunque... ¿colocar un refresh en el init no hace un bucle?

1 voto para que implementen QT ya! :D
Cuando uno prueba la sangre...