Esiste un modo per consentire agli utenti di selezionare, o far apparire come se selezionassero, più celle in una casella di tabella, oppure esiste un oggetto diverso che potrei utilizzare in alternativa? Per illustrare il caso d'uso, un utente potrebbe voler spostare le etichette delle pompe dalla tabella di sinistra a quella di destra, a partire dalla riga 2 nell'immagine sottostante. Come farebbe a selezionare il blocco di celle da copiare e poi incollare?

Scopri di più...
New Window( "Editing a data table",
Show Menu( 0 ), Show Toolbars( 0 ),
h list box(
Table Box(
String Col Edit Box( "PI Point", Repeat( { "" }, 5 ) || Transform Each({v},as list(transpose(1::15)),"Pump1-" || char(v)) ),
String Col Edit Box( "Friendly Name", Repeat( { "" }, 5 ) || Transform Each({v},as list(transpose(1::15)),"Name " || char(v)) )
),
spacer box(20,20),
Table Box(
String Col Edit Box( "PI Point", {"sinusoid"} || Repeat( { "" }, 14 ) || {"Valve1", "Valve2", "Valve3"} ),
String Col Edit Box( "Friendly Name", Repeat( { "" }, 15) || {"Inlet", "Outlet", "Recirc"} )
)
)
);
La creazione di script per copiare e incollare i valori dovrebbe essere semplice, ma l'utente deve indicare da dove prelevare i dati e dove inserirli.
Il caso d'uso reale
Vorrei migliorare l'interfaccia del componente aggiuntivo Aveva/OSISoft PI Tools sostituendo la casella di testo per l'inserimento di tag e nomi descrittivi con una tabella dati, come discusso in una issue su GitHub . Spesso gli utenti hanno un elenco di tag in una tabella JMP o in un foglio di calcolo e desiderano copiarli/incollarli rapidamente nell'interfaccia utente del componente aggiuntivo. Copiare l'intera tabella in una volta è abbastanza semplice, ma se poi è necessario apportare una modifica, potrebbero voler sostituire solo una sezione dell'elenco.
Con l'oggetto Table Box non sembra possibile selezionare più celle contemporaneamente. Esiste un'altra opzione? Ricordo che una volta si poteva incorporare un'intera finestra di tabella dati all'interno di una finestra definita dall'utente, ma forse me lo sono sognato.
Finora la mia idea migliore è una sorta di logica al passaggio del mouse che disegni dei quadrati sulle celle "selezionate", ma prima vorrei vedere se esiste una soluzione più semplice.
Il comando è << nuova casella dati:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
new window("data box", dt << new data box)
Grazie @hogi, è proprio quello!!
Penso che offrano un'esperienza utente piuttosto buona.

Codice per riprodurre il problema:
Scopri di più...
names default to here(1);
dt1 = New Table( "dt1", invisible,
Add Rows( 20 ),
New Column( "PI Point", Character, "Nominal", Set Values(
Repeat( { "" }, 5 ) || Transform Each({v},as list(transpose(1::15)),"Pump1-" || char(v))
) ),
New Column( "Friendly Name", Character, "Nominal", Set Values(
Repeat( { "" }, 5 ) || Transform Each({v},as list(transpose(1::15)),"Name " || char(v))
) )
);
dt2 = New Table( "dt1", invisible,
Add Rows( 20 ),
New Column( "PI Point", Character, "Nominal", Set Values(
{"sinusoid"} || Repeat( { "" }, 14 ) || {"Valve1", "Valve2", "Valve3"}
) ),
New Column( "Friendly Name", Character, "Nominal", Set Values(
Repeat( { "" }, 15) || {"Inlet", "Outlet", "Recirc"}
) )
);
new window("data box",
Show Menu( 0 ), Show Toolbars( 0 ),
h list box(
ntb1 = dt1 << New Data Box;
ntb1 << close side panels;
ntb1 << Set Row ID Width( 50 );
ntb1 << Set Width(200);
ntb1 << Set Height(450);
ntb1,
spacer box( Size( 20, 20 )),
ntb2 = dt2 << New Data Box;
ntb2 << close side panels;
ntb2 << Set Row ID Width( 50 );
ntb2 << Set Width(200);
ntb2 << Set Height(450);
ntb2
),
<< On close(
try( dt1 << Close Window );
try( dt2 << Close Window );
)
);
Sto ancora lavorando su alcuni aspetti di queste funzionalità, come ad esempio come ridimensionare la larghezza della colonna all'interno di quella casella dopo che la tabella è stata disegnata, ma questo è un argomento per un altro giorno!