AXSelectedRows: obtener filas seleccionadas para AXOutline

1

Siento que AXSelectedRows finalmente me ha superado :) Después de una investigación exhaustiva, estoy perplejo en cuanto a cómo enumerar programáticamente los contenidos de AXSelectedRows; En pocas palabras, para obtener las filas seleccionadas de cualquier AXOutline dado.

Suena trivial, pero encontrar una respuesta ha resultado difícil, especialmente debido a la falta de documentación en línea (¡aunque probablemente debería comprar un libro!) Curiosamente, muchas personas parecen querer seleccionar filas en forma programática, en lugar de obteniendo filas seleccionadas.

Ciertamente estoy cerca. He llegado hasta aquí:

set selectedRows to value of attribute "AXSelectedRows" of outline1

donde outline1 se establece en un AXOutline. Siguiente:

set selectedRow to item 1 of selectedRows

Aquí es donde se vuelve un poco turbio (después de que ya no se haya establecido en row 1 en lugar de item 1 ). Espero que selectedRow sea del tipo AXRow (o row ), pero en su lugar se muestra la salida de Automator:

application "System Events"

Es decir, el elemento parece ser una instancia de la "aplicación" Eventos del sistema ", lo que me lleva a creer que estoy pasando por alto algo importante. Dicho esto, siento que he probado todas las combinaciones de value 's, attribute ' s y row 's, incluyendo algunos tipos de conversión.

La parte frustrante es que puedo ver el contenido de AXSelectedRows en el Inspector de accesibilidad. Y así sé que existe. Como solución, estoy usando:

set selectedRows to selected of rows of outline1

Sin embargo, esto ciertamente no es preferible ya que todavía tengo que recorrer toda la matriz para encontrar los valores 'verdaderos', que podrían tener problemas de rendimiento para listas muy grandes.

Cualquier ayuda sería enormemente apreciada!

    
pregunta 22.11.2013 - 15:08

1 respuesta

0

Supongo que obtener el valor de AXSelectedRows es algo que no se ha implementado. Cuando abro una ventana del Finder en la vista de lista, selecciono dos filas y ejecuto este script:

tell application "System Events" to tell window 1 of process "Finder"
    value of attribute "AXSelectedRows" of outline 1 of scroll area 1 of splitter group 1
end tell

El resultado es:

{application "System Events", application "System Events"}

Sin embargo, puede usar una cláusula cuya para obtener las filas seleccionadas sin usar un ciclo de repetición:

tell application "System Events" to tell process "Finder"
    rows of outline 1 of scroll area 1 of splitter group 1 of window 1 where selected is true
end tell
    
respondido por el user495470 22.11.2013 - 15:55

Lea otras preguntas en las etiquetas