AXSelectedRows: ottenimento di righe selezionate per AXOutline

1

Sento che AXSelectedRows mi ha finalmente battuto in sottomissione :) Dopo una lunga ricerca, sono perplesso su come elencare programmaticamente il contenuto di AXSelectedRows; semplicemente messo, per ottenere le righe selezionate di qualsiasi dato AXOutline.

Sembra banale, ma trovare una risposta si è rivelato difficile - in particolare a causa della mancanza di documentazione online (anche se probabilmente dovrei comprare un libro!) Stranamente, molte persone sembrano voler selezionare a livello di codice invece di ottenere righe selezionate.

Sono certamente vicino però. Ho raggiunto finora:

set selectedRows to value of attribute "AXSelectedRows" of outline1

dove outline1 è impostato su un AXOutline. Avanti:

set selectedRow to item 1 of selectedRows

Questo è dove diventa un po 'torbido (dopo aver già fallito impostarlo su row 1 invece di item 1 ). Prevedo che selectedRow sia di tipo AXRow (o row ), ma invece l'output di Automator mostra:

application "System Events"

Cioè, l'elemento sembra essere un'istanza di "System Events" di sistema "" - il che mi porta a credere che trascuro qualcosa di importante. Detto questo, sento di aver provato ogni combinazione di value , attribute e row - inclusi alcuni tipi di casting.

La parte frustrante è che posso effettivamente vedere i contenuti di AXSelectedRows in Accessibility Inspector! E così so che esiste. Come soluzione temporanea, sto usando:

set selectedRows to selected of rows of outline1

Tuttavia, questo non è certamente preferibile in quanto devo ancora scorrere l'intero array per trovare i valori "veri", che potrebbero avere problemi di prestazioni per elenchi molto grandi.

Qualsiasi aiuto sarebbe molto apprezzato!

    
posta 22.11.2013 - 15:08
fonte

1 risposta

0

Credo che ottenere il valore di AXSelectedRows sia solo qualcosa che non è stato implementato. Quando apro una finestra del Finder in modalità elenco, seleziona due righe ed esegui questo 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

Il risultato è:

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

Tuttavia puoi utilizzare una clausola di cui ottenere le righe selezionate senza utilizzare un ciclo di ripetizione:

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
    
risposta data 22.11.2013 - 15:55
fonte

Leggi altre domande sui tag