Ciao a tutti,
Stavo lavorando alla codifica per un argomento diverso quando avevo bisogno di cercare supporto nella community, ma mi sono imbattuto in questo inviare di molti anni fa e mi sono chiesto, si poteva fare (non c'era una soluzione al post originale)? È possibile assegnare alle caselle di struttura una funzione in modo che, a seconda del loro stato di apertura/chiusura, chiuda/apra altre caselle di struttura? Se viene aperta un'altra casella di struttura, la finestra può aggiornarsi automaticamente per chiudere tutte le altre caselle di struttura, tranne quella appena aperta?
Ho provato diversi approcci e, sebbene sia possibile definire una funzione all'interno di una casella di struttura, vedere l'esempio di seguito. Apparentemente non puoi fare riferimento a un'altra casella di struttura all'interno della chiamata di funzione (JMP si lamenta di un riferimento eliminato alle altre caselle di struttura) e Outline Box() non accetta il comando di invio <
Names Default To Here( 1 );
w = New Window( "My Window",
A = Outline Box( "Panel Box A",
H List Box( Button Box( "A1" ), Button Box( "A2" ), Button Box( "A3" ) ),
AFunc = Function( {this},
x = this + 2;
Show( x );
);
AFunc( 7 );
),
B = Outline Box( "Panel Box B", H List Box( Button Box( "B1" ), Button Box( "B2" ), Button Box( "B3" ) ), <<CLOSE></CLOSE>
Lo script precedente fornisce il seguente output:

Genera chiaramente la finestra desiderata e visualizza l'output della funzione, che è x=9. Ma non sono riuscito a provare a creare una funzione all'interno della finestra di struttura che accedesse allo stato di un'altra finestra di struttura e si chiudesse/aprisse dinamicamente di conseguenza.
In breve, la risposta alla mia domanda di cui sopra (e al post originale) è No (o almeno non ancora, o almeno che ho trovato un modo per farlo). La risposta lunga è più divertente ed è Sì ( soprattutto , con una soluzione).
Qualcosa che è molto vicino a ciò che il post originale richiedeva è nel codice seguente dove aggiungo alcune caselle dei pulsanti "precedente" e "successivo" che chiuderanno la struttura corrente e quindi apriranno la struttura precedente (ciclica) o successiva. Quindi, non è tecnicamente la soluzione desiderata, ma realizza (più o meno) ciò che è necessario.
L'unico inconveniente è che non puoi saltare, diciamo, avere Outline Box A aperto per aprire Outline Box C e aggiorna dinamicamente la finestra chiudendo tutte le altre Outline Boxes, tranne C. Posso immaginare alcune situazioni in cui avere questa funzionalità in un riquadro sarebbe molto utile. Forse potrebbe essere una funzionalità futura nelle nuove versioni di JMP?
Ad ogni modo, ho pensato che il post originale fosse interessante e volevo indagare un po' su quel percorso prima di tornare al mio altro lavoro.
Grazie!,
DS
Codice per la "soluzione alternativa":
Names Default To Here( 1 );
w = New Window( "My Window",
A = Outline Box( "Outline Box A",
V List Box(
H List Box( Button Box( "A1" ), Button Box( "A2" ), Button Box( "A3" ) ),
H List Box(
Button Box( "prev",
<<STYLE>&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/PRE&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-body&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-labs id="lingo-labs-438433" slang="en-US"&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;Scripting&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-label&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;/lingo-labs&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;</STYLE>Potresti essere in grado di farlo usando XPath o una combinazione di <
Alcuni esempi per iniziare:
Names Default To Here(1);
func_prev = Function({this},
((this << Parent) << parent) << Close(1);
(((btn_prev << parent) << parent) /*current*/ << prev sib) << Close(0);
);
func_next = Function({this},
((this << Parent) << parent) << Close(1);
(((this << Parent) << parent) << sib) << Close(0);
);
nw = New Window("My Window",
Outline Box("Panel Box A",
H List Box(Button Box("A1"), Button Box("A2"), Button Box("A3")),
H List Box(
Button Box("prev", <<STYLE>stop();
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox"); //get all outline boxes
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='true']"); //get all open
nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='false']"); //get all closed
(nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='true']")) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Close(1); //close all open
(nw &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; XPath("//OutlineBox[@isOpen='false']")) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; Close(0); //open all closed
</STYLE>È possibile specificare una funzione Alla chiusura() per le caselle di contorno.
Ciao @jthi ,
Grazie per il tuo feedback e pensieri. L'ultima sezione del mio codice che è stata postata fa sostanzialmente la stessa cosa dei tuoi suggerimenti, consente all'utente di spostarsi ciclicamente tra le diverse caselle di struttura. Sfortunatamente, non esiste ancora una soluzione che valuti dinamicamente lo stato di un Outline Box e quindi cambi gli altri Outline Box in risposta.
Grazie!,
DS