• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

[JS] Dialog

Enthusiast ,
Mar 15, 2022 Mar 15, 2022

Copy link to clipboard

Copied

Hello everyone,

Here is my problem, I use a window that asks to choose an action (“Cancel”, “Update”, “New Set” and “To follow”).

If I click on one of these buttons a closing code is transmitted except the “New Set” button which opens another window and if I click on “apply”, it retains the new Name and 4 until then OK BUT if I do “cancel” in this window it is always 4 which is returned even if I click on “update”.

How to clear code?

I don't really understand the reaction.

Thanks for your help or if you have another idea. thank you

/---------------------

Bonjour à tous, Voici mon problème, j'utilise une fenetre qui demande de choisir une action («Annul», «Mise à jour», «Nouveau Set» et «Pour suivre»).
Si je clic sur un de ces bouttons un code de fermeture est transmi sauf le boutton «Nouveau Set» qui ouvre une aure fenêtre et si je clic sur «applique», il reteun le nouveau Nom et 4 jusque là, OK MAIS si je fais «annul» dans cette fenêtre c'est toujour 4 qui est retourné même si je clic sur «mise à jour».

Comment effacé se code?
Je ne comprend pas trop la reaction.

Merci pour votre aide ou si vous avez une autre idée. merci

 

var o = {};

o.leContenuDuFichier = [["Name01","test1.01", "test1.02", "test1.03"],["Name02","test2.01", "test2.02", "test2.03"],["Name03","test3.01", "test3.02", "test3.03"]];
$.writeln( modif_set ("Name02"));


function modif_set (le_set_name) {
    // $.writeln ("modif_set : " + le_set_name);
    
                 var dialog = new Window("dialog"); 
                 dialog.text = "Sauvegardre set du JOB \""+ le_set_name + "\"."; 
                 dialog.preferredSize.width = 500; 
                 dialog.orientation = "column"; 
                 dialog.alignChildren = ["left","top"]; 
                 dialog.spacing = 10; 
                 dialog.margins = 20; 
 
             var updreg_set = dialog.add("statictext", undefined, undefined, {name: "updreg_set"}); 
                 updreg_set.text = "Attention le set du JOB \""+ le_set_name  +"\" est modifie."; 
 
             // GROUP1
             // ======
             var group1 = dialog.add("group", undefined, {name: "group1"}); 
                 group1.preferredSize.width = 480; 
                 group1.orientation = "row"; 
                 group1.alignChildren = ["right","center"]; 
                 group1.spacing = 10; 
                 group1.margins = [0,13,0,0]; 
 
             var cancel = group1.add("button", undefined, undefined, {name: "button_Annul"}); 
                 cancel.text = "Annul"; 
 
             var button1 = group1.add("button", undefined, undefined, {name: "button1"}); 
                 button1.text = "Mise à jour"; 
 
             var button2 = group1.add("button", undefined, undefined, {name: "button2"}); 
                 button2.text = "Nouveau Set"; 
 
             var ok = group1.add("button", undefined, undefined, {name: "ok"}); 
                 ok.text = "Pour suivre"; 
 
             // Add button functions
             
             cancel.onClick = function() { // Annul
                
                 dialog.close(2);
                 
             }
             button1.onClick = function() { // mise à jour
                dialog.close(3);
 
                 
             }
             button2.onClick = function() { // Nouveau Set
                 dialog.close(4);
                 
 
                 o.new_Name_Set = new_set(le_set_name);
                // tmp_local_modif_set = 4;
 
                 
             }
             ok.onClick = function() { // Pour suivre
                 //alert("Les modification du Set " + le_set_name + " seront perdu.")
                 dialog.close(1);
               }
             
 
 
             return(dialog.show());
 
 
             
 }



function new_set(ancien_name){
    
    // DIALOG
    // ======
    var dialog_New = new Window("dialog"); 
    dialog_New.text = "New Set."; 
    dialog_New.orientation = "column"; 
    dialog_New.alignChildren = ["left","top"]; 
    dialog_New.spacing = 10; 
    dialog_New.margins = 16; 

    // INFO_NEW_SET
    // ============
    var info_new_set = dialog_New.add("group", undefined, {name: "info_new_set"}); 
    info_new_set.orientation = "column"; 
    info_new_set.alignChildren = ["left","center"]; 
    info_new_set.spacing = 10; 
    info_new_set.margins = 0; 

    var statictext1 = info_new_set.add("statictext", undefined, undefined, {name: "statictext1"}); 
    statictext1.text = "Entre le nouveau nom du set :"; 

    var name_New_Set = info_new_set.add('edittext {properties: {name: "name_New_Set"}}'); 
    name_New_Set.text = ancien_name + "_new"; 
    name_New_Set.preferredSize.width = 200; 

    // LES_BOUTTON
    // ===========
    var les_boutton = dialog_New.add("group", undefined, {name: "les_boutton"}); 
    les_boutton.preferredSize.width = 200; 
    les_boutton.orientation = "row"; 
    les_boutton.alignChildren = ["right","center"]; 
    les_boutton.spacing = 10; 
    les_boutton.margins = 9; 

    var boute02 = les_boutton.add("button", undefined, undefined, {name: "cancel"}); 
        boute02.text = "Annul"; 

    var boute01 = les_boutton.add("button", undefined, undefined, {name: "OK"}); 
        boute01.text = "applique";

        name_New_Set.onChanging = function () {
            for (var i = 0; i < o.leContenuDuFichier.length; i++) {

                    if ( name_New_Set.text == o.leContenuDuFichier[i][0]) { // problème ici
                        alert("Le nom utilisé existe déjà !");
                        name_New_Set.text = ancien_name + "_new";
                    }
            
            }
            
    }
    

    
    if (dialog_New.show() == 4) {
    
            return(name_New_Set.text);
         //$.writeln("name_New_Set.text : " + name_New_Set.text);
     } else {
            modif_set (ancien_name);
     };


} 

 

 

 

 
 
TOPICS
Scripting

Views

321

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Community Expert ,
Mar 15, 2022 Mar 15, 2022

Copy link to clipboard

Copied

Hi,

Your question is little unclear to me. Are you trying to update value Name02 on first window by the new value that you enter inside the new window?

Best regards

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Mar 15, 2022 Mar 15, 2022

Copy link to clipboard

Copied

c'est compliqué d'expliqué ...

voici le fenêtre de base :

 

Capture d’écran 2022-03-15 à 15.01.39.png

si je clic sur "mise à jour" :

 

 

Capture d’écran 2022-03-15 à 15.01.52.png

 

$.writeln( modif_set ("Name02"));

retoure "3" la OK mais si je fais un aller retoure sur cette fenêtre :

Capture d’écran 2022-03-15 à 15.06.21.png

 

 

 

Capture d’écran 2022-03-15 à 15.06.27.png

 et si je retape sur :

Capture d’écran 2022-03-15 à 15.01.52.png

 Et là ,

$.writeln( modif_set ("Name02"));

 

 retoure "4", c'est pas juste ....

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guide ,
Mar 17, 2022 Mar 17, 2022

Copy link to clipboard

Copied

Bonjour @Liphou 

 

Une clé pour progresser consisterait à mieux documenter les fonctions (contexte, arguments attendus, valeurs de retour) parce qu'ici la logique est vraiment difficile à suivre. De ce que j'ai compris, on a affaire à une fonction principale qui ouvre l'interface et devrait retourner un choix parmi 4 options. Mais le cas échéant, cette fonction appelle une routine connexe (elle-même interfacée) permettant à l'utilisateur de spécifier un nouveau nom.

 

Plusieurs problèmes immédiats :

  • d'abord les fonctions sont imbriquées : modif_set invoque new_set, qui invoque modif_set, etc. ;
  • ensuite dialog_New.show() ne renvoie jamais 4, si bien que la première condition à la fin de new_set n'est jamais satisfaite ;
  • la valeur de retour de new_set est en fait undefined (vu que `return name_New_Set.text` n'est jamais traversé) ;
  • les gestionnaires d'événements (du genre onClick, onChange…) sont des fonctions spéciales qui réclament un soin particulier, notamment quant à la portée des identifiants ; pour des raisons techniques, on recommande d'y minimiser les dépendances à des variables externes, et même de les détacher du code principal (v. mon exemple plus bas) ;
  • enfin, dernier point litigieux, le gestionnaire button2.onClick (dans modif_set) ferme le dialogue auquel il appartient — dialog.close(4) — puis appelle new_set(le_set_name). C'est dangereux parce que cet appel se produit depuis un composant (button2) qui vient juste d'être « invalidé » par la fermeture du dialogue. Risque sérieux de fuite mémoire, sans parler d'autres bugs induits plus difficiles à tracer.

 

Bref, pour y voir plus clair, il faudrait faire un peu le ménage dans ces interactions fonctionnelles. Un dialogue est modal. Il s'ouvre, gère les événements utilisateurs, et se ferme. Il peut éventuellement déclencher l'ouverture d'un sous-dialogue (lui-même modal) qui aura sa propre boucle d'événements. Du moins c'est le scénario ordinaire. Métaphoriquement, tu peux ouvrir une parenthèse dans une parenthèse, du moment que tu fermes la parenthèse intérieure avant de fermer la parenthèse extérieure.


Il semble (?) que tu cherches à procéder autrement. Pourquoi pas, mais à condition de bien préciser les conditions de sortie. Par exemple, si tu souhaites que la fermeture du sous-dialogue (Nouveau nom) ferme également le dialogue principal tout en te permettant de récupérer la bonne valeur de retour (4), alors il faut aussi décider de ce qui se passe quand l'utilisateur annule le sous-dialogue. Si je suis la logique de ton programme, je suppose qu'il faudrait alors renvoyer la valeur 2 (qui correspond à la valeur d'annulation du dialogue principal).

 

Il y a plusieurs façons de traiter la question, tout dépend de l'objectif recherché dans ton flux de travail. Voici un schéma possible. Je ne sais pas s'il correspond à ton idée, mais il résout les problèmes que j'ai signalés plus haut :

 

var data = {};
data.fileContent =
[
  [ "Name01", "test1.01", "test1.02", "test1.03" ],
  [ "Name02", "test2.01", "test2.02", "test2.03" ],
  [ "Name03", "test3.01", "test3.02", "test3.03" ]
];

function mainDial(/*str*/setName,  dlg,u)
//----------------------------------
// Main dialog.
// => 1 [Continue] | 2 [Cancel] | 3 [Update] | 4 [NewSet]
{
  dlg = new Window('dialog');

  with( dlg )
  {
    text = "Sauver \"" + setName + "\".";
    orientation = "column"; // etc
    add('statictext', u, "Attention : set \"" + setName  + "\" modifié.");
    addEventListener('mousedown', callee.BTN_CLICK);
  }

  with( dlg.add('group') )
  {
    orientation = "row"; // etc
    add('button', u, "Annulation",  { retDlg:2 });
    add('button', u, "Mise à jour", { retDlg:3 });
    add('button', u, "Nouveau Set", { retDlg:4, arg:setName }); // OK->4 ; Cancel->2
    add('button', u, "Poursuivre",  { retDlg:1 });
  }

  return dlg.show();
}

mainDial.BTN_CLICK = function onClick(/*MouseEvent*/ev,  pp,r,t)
//----------------------------------
// Button click event manager [mainDial.]
// this :: Window
// => undef
{
  pp = ev.target.properties||0;
  r = pp.retDlg;
  if( !r ) return; // Extra click.
  
  if( 4 == r )
  {
    // Special case => sub-dialog.
    t = newSetDial(pp.arg);
    t ? (data.new_Name_Set=t) : (r=2);
  }
  
  this.close(r);
};

function newSetDial(/*str*/baseName,  dlg,defName,edi,u)
//----------------------------------
// Extra dialog (called from mainDial.BTN_CLICK.)
// => str [New-Name-OK] | '' [KO]
{
  dlg = new Window('dialog');
  defName = baseName + "_new";

  with( dlg )
  {
    text = "New Set.";
    orientation = "column";
  }

  // Text field.
  with( dlg.add('group') )
  {
    orientation = "column"; // etc
    add('statictext', u, "Nouveau nom :");
    with( edi=add('edittext', u, defName, { def:defName }) )
    {
      preferredSize = [200,-1];
      addEventListener('change', callee.EDI_CHANGE);
    }
  }
  
  // Buttons.
  with( dlg.add('group') )
  {
    orientation = "row"; // etc
    add('button', u, "Annuler",   {name: 'cancel'}); // => 2 (auto)
    add('button', u, "Appliquer", {name: 'ok'});   // => 1 (auto)
  }
  
  return 1==dlg.show() ? edi.text : '';
}

newSetDial.EDI_CHANGE = function onChange(/*Event*/ev,  t,a,i)
//----------------------------------
// EditText event manager [newSetDial.]
// this :: EditText
// => undef
{
  t = this.text.toLowerCase();
  a = data.fileContent; // str[][]
  for( i=a.length ; i-- && a[i][0].toLowerCase() != t ; );
  if( 0 <= i )
  {
    alert("Nom déjà utilisé.");
    this.text = this.properties.def; // reset to default.
  }
};


var r = mainDial("Name02");
$.writeln( "Code de retour: " + r );
4==r && $.writeln( "New name set: " + data.new_Name_Set );

 

Marc

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Mar 18, 2022 Mar 18, 2022

Copy link to clipboard

Copied

Bonjour Marc,

Déjà merci pour ta contribution à mon poste et en plus de m'avoir répondu en Français pour moi c'est énorme car je ne parle pas englais et  le motreur de traduction sur la page n'est pas toujour présise.

 

J'avais suprimé les commentaires pour être plus beau ... erreur !!

je résume, c'est un scipte que je mets à jours il date de quelque années.

J'ai commencé à remettre le dialogue à jour (voir capture ecrans).

Capture d’écran 2022-03-18 à 11.07.16.png

 

 

 

Le scenario est le suivant:

L'utilisateur choisi ces options pour les corrections typo ou autre modification sur un job. Les option sont reprise dans un fichier de Pref. Si il change les options du SET qaund il clic sur conversion, il doit choisir de mettre à jour le set, crée un nouveau Set ou de poursuivre sans memorisé les changment. Quand ils désident de sortire de la fenêtre "New Set" en annulant , ils revienent sur la fenêtre sauve garde pour choisir un option.

Capture d’écran 2022-03-18 à 11.23.04.png

 Les commandes sont passé à la suite du script baser sur le FindChangeByList.jsx 

Je vais faire une tentative de mettre script de dialogue ...

J'ai toujours pas trouvé la possibilité de me connecté à un fichier sur le WEB pour les préf. (donc volume monté par OneDrive)

je dois encore ecrire la partie mise à jour et ajout dans les préf.

 

Voici exemple du fichier pref:

/* 1 **********************************************************/
/* 2 phb731 */
/* 3 */
/* 4 Pref JOB (Set) Script: CommunicationBetaCC2022_Beta04 */
/* 5 */
/* 6 **********************************************************/
/* 7
/* 8 Infos fermeture script : 1
/* 9 0 nom du SET
/* 10 1 00 – Dans le document, enchainement ou selection
/* 11 2 01 — Typo
/* 12 3 02 — Option Typo // ATTENTION 3 option // 2022
/* 13 4 03 — AccentsV2
/* 14 5 04 — ExposantsV2
/* 15 5 05 — IemeV2
/* 16 7 06 — InitialesDevantV2
/* 17 8 07 — InitialesDerriereV2
/* 18 9 08 — pncollesV2
/* 19 10 09 — application des Style de caractaire METTRE toujours à la fin
/* 20 11 10 — Style notes et espace après le chiffre
/* 21 12 11 — Option de convertion suplémantaire
/* 22 13 12 — Application de calour philou007 // choix en 2022
/* 23
Par défaut,0,false,0,false,false,false,false,false,false,true,Tabulation,CUP_V2,true
CUP,0,true,Français,false,true,true,true,false,false,true,Tabulation,CUP_V2,true
Test,0,true,Multi-Lang,false,false,false,false,false,false,true,Tabulation,CUP_V2,true

 

Je regarde votre code et j'essaie de le lire (;-)) et de le comprandre, je ne vais pas si loin ... et c'est bien domage

 

Ps : je suis Dyslexie et dysorthographie, c'est toujours une épreuve et les correcteurs c'est pas toujours top dans mon cas ... désolé .

 

 

 

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Mar 18, 2022 Mar 18, 2022

Copy link to clipboard

Copied

LATEST

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines