Est-il possible de permettre aux utilisateurs de sélectionner, ou de simuler la sélection, de plusieurs cellules dans un tableau ? Ou bien existe-t-il un autre objet à utiliser ? Par exemple, un utilisateur pourrait vouloir déplacer les étiquettes de pompe du tableau de gauche vers celui de droite, à partir de la deuxième ligne (voir image ci-dessous). Comment pourrait-il sélectionner le bloc de cellules à copier, puis les coller ?

Voir plus...
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 programmation du copier-coller des valeurs devrait être simple, mais l'utilisateur doit indiquer d'où proviennent les données et où les placer.
Le cas d'utilisation réel
Je souhaite améliorer l'interface du module complémentaire Outils Had/OSISoft PI en remplaçant les champs de texte pour les étiquettes et les noms conviviaux par un tableau de données, comme évoqué dans une issue GitHub . Les utilisateurs disposent souvent d'une liste d'étiquettes dans un tableau JMP ou une feuille de calcul, et souhaitent pouvoir les copier-coller rapidement dans l'interface du module. Copier l'intégralité du tableau en une seule fois est simple, mais en cas de modification, ils préféreront peut-être ne remplacer qu'une partie de la liste.
L'objet Table Box ne semble pas permettre la sélection multiple de cellules. Existe-t-il une autre solution ? J'avais cru un temps qu'il était possible d'intégrer une fenêtre de tableau de données entière dans une fenêtre personnalisée, mais je me suis peut-être trompé.
Pour l'instant, ma meilleure idée consiste à utiliser une sorte de logique de survol de la souris qui dessine des carrés sur les cellules « sélectionnées », mais je veux d'abord voir s'il existe une solution plus simple.
La commande est << nouvelle boîte de données :
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
new window("data box", dt << new data box)
Merci @hogi, c'est ça !!
Je trouve que cela offre une expérience utilisateur plutôt bonne.

Code permettant de reproduire le problème :
Voir plus...
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 );
)
);
Je travaille encore sur certains aspects de ces questions — comme la façon de redimensionner la largeur des colonnes à l'intérieur de cette boîte après le tracé du tableau — mais ce sera pour un autre jour !