HISE Logo Forum
    • Categories
    • Register
    • Login

    A/B comparison

    Scheduled Pinned Locked Moved Scripting
    22 Posts 6 Posters 1.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • d.healeyD
      d.healey
      last edited by

      This has been asked for a few times. Here is one solution I have found, although I haven't tried it in a real world project so there may be some unintended effects.

      Originally I was thinking of exporting the state of the controls to a string and storing them in a panel but unfortunately HISE prevents us from getting a reference to the main interface from within the main interface script so that won't work.

      The method I'm using instead is to export as a preset XML outside of the usual preset system (I think).

      HiseSnippet 1083.3ocsV07aaaCEmJwpqVatXEnm1IhbRFI00tesglEjZ67AL5RhwbWv.JBJnknrIBEo.EcVLJx+J6xNtq6OncY22+AaORIYI24kEWfoKRuu3626GIeOMTICnooRExo9ammPQNeg6n4B8z9SILAZvAHm66RFqooZTu4IjzTZHxwYyiMVcpWCYe9y86Q3DQ.sTEBctjEP+NVLSWpc3qeCiyOhDReKKth2O+0CBjh9RtbFfjMcaiRHAWRlPOkXbaCWjy8NLjokpQZB.FjSsdxv4ilJ+IQl+myRYi4TiPGzHXgxTejjGZPr4aT+oLd3vhJNEAqxvx5eyr5+QtmvBYKzWxCeo0.tLhp7gyF2F757IBOmJvqVF7dn6n.EKQWZwfsO2cfPSUQDXKnJrx7EswOuoaeI3gP2JlbI8HEHrHB+W1t8N3Wztcyca30vyt82JjFQU8Ib9XXiH0WqlQyLqnSvL3KX+JUiuhnvi0ht8v6ge2Ef5HoB6y.o16hY3uE+T301a2rg2GZ3ggGqyuicA3QAhlP08kwIRAH3uUuYZsTr01LS5pFQqTieBsRxKvkuTXslqt4td2XfHSvYBJNZlHPyjB7xd4Gj8dG.7bnp.nYRSVxXQXeqZ7d6g6zLSYNzMObY.giYgWC32tnsXhP50mEUrpM2E+jmbLUi0SoXhRQlisdfkQVU.SM1VgfDA7RwlLgpng3f7ZpLW.dSkbZqDECHFHmELhEnFH.rLd+E7nBtjJUztbddklB6ywCA0TfW6tUS7qti91aKfJMY4lhz4cSE17Toldlvuo2G7p6ci2GaIJZUlxyCmpVkUS6.0sDluXV7XppXOy3mYqZ4sfLeZZ3kG2oIrOLXh.JxRNOMe+LunVvlYGwZeg4n34lD3aWjNUH2Olt5lVRr6fiH7TZU98e28dKbOmhg5Etcub6i6c2ZeDjksJNJECDL8YIzb4xFLcVQCFTNbMsZxQJ3p11n4A4MZFwYgTEhAKxm49FgbbGjcOHu48u+KI+w9neXvADMoXYfUDxRBUoYlhw4.5Uvnfr9W0cOfldoVl.IZwsdXoWNoYMArIstalPaz0HGWmG.4bt4iuB9PSuVapstHEIjIOVImkjUqojqnCDYbtoQHZsxUmrb8aqJW8VqbU6+jLsYZRQl9U6Tx+QWeX1iLbFmnWdfjYJbtA31xRc9Mc2EoL87pSoWioTsW4TpUdH5NB2G5NjoCltZ7twJvKbb5+a7lOyug6gQQz.cIXq4dzO9oNfeMfx2KmoYhImPf4.lCBmNKdD7KPAT.IBAkmZNSrg4hZlbairgYFQEgVg+BdxM1wH6jarSgQTLIPIee93IyeUbeqF.SB6OWU28DiLdw8ZCtige048AAFh3w.xWcDOcsi3YqcDOesi3EqcDubsi3qW6H9laIBy+U1clVFmcs.TL7Pa+TGmCED3Tk8DH5ugyQVSL
      

      Libre Wave - Freedom respecting instruments and effects
      My Patreon - HISE tutorials
      YouTube Channel - Public HISE tutorials

      d.healeyD orangeO 2 Replies Last reply Reply Quote 1
      • d.healeyD
        d.healey @d.healey
        last edited by

        Actually it seems there is a problem with this method too, it only write the value the first time the state is exported. @Christoph-Hart is this intentional?

        Libre Wave - Freedom respecting instruments and effects
        My Patreon - HISE tutorials
        YouTube Channel - Public HISE tutorials

        1 Reply Last reply Reply Quote 0
        • orangeO
          orange @d.healey
          last edited by

          @d-healey Very good starting point.
          In A/B comparsion, There is an A to B copy button (so the user don't have to start a new preset from scratch, just continue from the A) and undo, redo options.

          Overloud-Comp-G.png

          develop Branch / XCode 13.1
          macOS Monterey / M1 Max

          1 Reply Last reply Reply Quote 1
          • FortuneF
            Fortune
            last edited by

            This solution is not working properly? Anyone didn't implement it yet?

            1 Reply Last reply Reply Quote 0
            • d.healeyD
              d.healey
              last edited by

              Now that we have the ability to read/write JSON files I think that would probably be the direction to go in with this.

              Libre Wave - Freedom respecting instruments and effects
              My Patreon - HISE tutorials
              YouTube Channel - Public HISE tutorials

              LindonL 1 Reply Last reply Reply Quote 0
              • LindonL
                Lindon @d.healey
                last edited by Lindon

                @d-healey hmm, but that would mean writing to the JSON file every time the user changed a UI element no?

                Given this is all transitory data - cant you just keep it all in an array? Or am I missing something obvious?

                HISE Development for hire.
                www.channelrobot.com

                d.healeyD 1 Reply Last reply Reply Quote 0
                • d.healeyD
                  d.healey @Lindon
                  last edited by

                  @Lindon You'd only need to read/write the JSON when the A or B button is pressed. I'm sure there was some reason why we couldn't just store it in an array but right now I can't remember what that is... perhaps it is doable!

                  Libre Wave - Freedom respecting instruments and effects
                  My Patreon - HISE tutorials
                  YouTube Channel - Public HISE tutorials

                  LindonL 1 Reply Last reply Reply Quote 0
                  • LindonL
                    Lindon @d.healey
                    last edited by Lindon

                    @d-healey - maybe - but my thinking went like this:

                    on init

                    • read all the GUI element values - store them in Array_A and Array_B

                    on ui change

                    • store its value in Array_A (if A button = true) or store it in Array_B (if B button = true)

                    on button A

                    • set everyone to Array_A values and issue .changed()

                    on Button B

                    • set everyone to Array_B values and issue .changed()

                    Or (as I say) I may be missing the point here...

                    HISE Development for hire.
                    www.channelrobot.com

                    d.healeyD 1 Reply Last reply Reply Quote 1
                    • d.healeyD
                      d.healey @Lindon
                      last edited by

                      @Lindon

                      on ui change
                      store its value in Array_A (if A button = true) or store it in Array_B (if B button = true)

                      This might add some unnecessary overhead and extra code. Why not just store all values in array A once when button B is pressed? I'm also thinking we could avoid using an array and use a base64string using MidiProcessor.exportState() although I don't know if this function can be used from within the MIDI processor that is being exported/restored.

                      Libre Wave - Freedom respecting instruments and effects
                      My Patreon - HISE tutorials
                      YouTube Channel - Public HISE tutorials

                      LindonL 1 Reply Last reply Reply Quote 0
                      • LindonL
                        Lindon @d.healey
                        last edited by

                        @d-healey sure that'd work too...

                        HISE Development for hire.
                        www.channelrobot.com

                        1 Reply Last reply Reply Quote 0
                        • Dan KorneffD
                          Dan Korneff
                          last edited by

                          Has anyone explored this further? I'm experimenting with exportState() and restoreState() at the moment.

                          HiseSnippet 1068.3ocsVEtaaaCDlx1paVadXEnO.b4W1.YNxaqcEnXXw1ItvnKIFyccCqnvfVhJlHRjBTTswKHOC6UZOB6QY+e+X6HkjkblRVpwl7OLOd22wu63wiblT3QSRDRjU6WtNlhr9X64q4pUiWQXbzziPV11CWLBMZcLIIg5irrZ9bsJq1sP4eiHgDtGs5TuRv7neGKhopL6gufEFNg3SeIKZKqm5I3iEghTfFMscQwDuKHmSOknMqgMx5AG6yTB4bEQQS.aFI7WOek3c7L6eEKgsLjpEFflCNJaZz3UrP+YEgXBBY0ZVY.2LKfej8ILe1l4KC7O0n.WhnZNvpw1Tp0VTZvsQoIhPesCtE5YUgdsxn2Csm6IYwpRMZt8Q1S4JpLf.o8pzJyVTi+ro8XAXAW0OhbAchDD1fn6Sbc2G+XW2dOqiSGmCN3bpBKoATIE1FwJANBxAXXSQA+SkcbfgIJ7aIRLTKf+FroDoO.yDBFot6Ap1qviF6VlpTBNlHkj0a4iQKFpmCbzqKXo1WhnXAGD.WsWu863fq8qdDvR+lh01rf5vHA1fnXyVDVDfGhGciPYwbvBnRSyjMvYblhQBY+BM2SuioVg8RkP5QgCEPArO3Zvocbp3iW69FvMvD8oWFKjJyx1UmPpZzfaynreLdHjwwAobOECxcZnSxE55UDt6C7OLk1qiyUYYoCNHKTMrByBvwoIqn9YJYAcKLWKdUYhMT3QBwL+K0bJeSoOi6Su7rfxUSytBDUCE.2sELZSuN6uBBJovZEVxPtPcSV9Y+WRy9RpImjQJ.bEd0tiy0lTdfP1krjrD1y234dX8L8SzkWbkTDNF38RniT2paF8d1l8HA+TghdFuaOmqbZ6bsC9lpBBpUWt+CoxZUq6RJuKfc4oQKoxhpgBCgVGa2a5A2udSdYGrpXnfOENKbVLMWtr60fZ5dgxOYB8wZlyPXjxzE6Sx6hMxzR.wLNYHxP7xaB9iuEcu.N5l.yW75.NOj4SkFfef8K3hkCpA7OL8Hhhna.mGCPbESkJlN8YcD8svsYYsiaaeDM4BkH1Dj4kdvkj2YXdIXf0uBqyZ8feFFHI9Lwykhz3hr48yWiz9Jm3+dxgqKihe7v6xms9WSJk9EGUwu+14Gh9mWJAWMJ7SCIpsuuT+vfbEPg5VWLou7gmvTqqta+dbIpasWhVaY38jtOzdFS4spd91nF9BkG+ey27mjzw93f.pmpjrsrm7S656OdOnx2KRUL94mPTRltn8zzn4vqx7n.S3bZXht9sg9zVlrqVVmYlS49Fg+B9xUNPKakqbPgRTDwSJV3kcbU+nmOzLCvIt48dssOQKi2bN011suKJBdK1BOOcp3yAtWOluXGv7k6.luZGv73c.yS1ALe8Nf4o2IF8yfGlpDQYGSfIlcroeok0wbBTkYpHQ+c3rG0t
                          
                          Content.makeFrontInterface(600, 500);
                          
                          //get reference to main container
                          const var A_B = Synth.getChildSynth("A_B");
                          
                          // A_B button array
                          const var AB_Array = [Content.getComponent("A"),
                                                Content.getComponent("B")];
                          
                          // array to store State of A B
                          const var A_B_Storage = [];
                          
                          // initialize array with current loaded state
                          A_B_Storage[0] = A_B.exportState();
                          A_B_Storage[1] = A_B.exportState();
                          
                          
                          
                          inline function A_B_Function(component, value)
                          {
                              //store state if pushed
                              if(value)
                              {
                                  local idx = AB_Array.indexOf(component);
                                  A_B_Storage[idx] = A_B.exportState();
                              }
                              
                              //recall state if not pushed
                              if(!value)
                              {
                                  local idx = AB_Array.indexOf(component);
                                  A_B.restoreState(idx);
                              }
                          	
                          };
                          
                          for(abab in AB_Array) abab.setControlCallback(A_B_Function);
                          

                          The exportState() appears to be working and I can store that value in an array, but restoreState() is questionable. At the moment, it only sets the master container volume to -100.

                          Dan Korneff - Producer / Mixer / Audio Nerd

                          Dan KorneffD 1 Reply Last reply Reply Quote 0
                          • Dan KorneffD
                            Dan Korneff @Dan Korneff
                            last edited by

                            I spot an error in my function. in the second half idx is undefined.

                                //recall state if not pushed
                                if(!value)
                                {
                                    local idx = AB_Array.indexOf(component);
                                    A_B.restoreState(idx);
                                }
                            

                            it should be

                                //recall state if not pushed
                                if(!value)
                                {
                                    local idx = AB_Array.indexOf(component);
                                    A_B.restoreState(A_B_Storage[idx]);
                                }
                            

                            but changing to this value causes an instant crash.

                            Dan Korneff - Producer / Mixer / Audio Nerd

                            LindonL 1 Reply Last reply Reply Quote 0
                            • LindonL
                              Lindon @Dan Korneff
                              last edited by

                              @dustbro yeah I have A/B running in my synth - export and restore are not any use to me - as I want to be able to morph states a-to-B and to include/exclude voices in that process.. so it's all hand built.

                              HISE Development for hire.
                              www.channelrobot.com

                              Dan KorneffD 1 Reply Last reply Reply Quote 0
                              • Dan KorneffD
                                Dan Korneff @Lindon
                                last edited by

                                @Lindon said in A/B comparison:

                                it's all hand built

                                Any hints on the method you used?

                                Dan Korneff - Producer / Mixer / Audio Nerd

                                LindonL 1 Reply Last reply Reply Quote 0
                                • LindonL
                                  Lindon @Dan Korneff
                                  last edited by

                                  @dustbro see the post here from April 9th

                                  HISE Development for hire.
                                  www.channelrobot.com

                                  Dan KorneffD 1 Reply Last reply Reply Quote 1
                                  • Dan KorneffD
                                    Dan Korneff @Lindon
                                    last edited by

                                    @Lindon Are you using

                                    Content.storeAllControlsAsPreset()
                                    

                                    or

                                    Engine.dumpAsJSON()
                                    

                                    Dan Korneff - Producer / Mixer / Audio Nerd

                                    LindonL 1 Reply Last reply Reply Quote 0
                                    • LindonL
                                      Lindon @Dan Korneff
                                      last edited by Lindon

                                      @dustbro said in A/B comparison:

                                      @Lindon Are you using

                                      Content.storeAllControlsAsPreset()
                                      

                                      or

                                      Engine.dumpAsJSON()
                                      

                                      no. neither.

                                      I have a two array-dimensional array of "sound affecting controls"(lets call them slots) - and a button (in stateA or stateB).

                                      I save the array in the preset(panel.data) and depending on the button state I load one or other dimension.

                                      This allows me to :

                                      1. have a morph slider so I can move between slots
                                      2. Include or exclude any set of controls from this morph
                                      3. on preset load I can overwrite the loaded preset with these values if I wish

                                      So I have a 4-voice synth - the user can morph between Slot A and B - and include or exclude any voice, and they can include or exclude any voice from a preset load.

                                      HISE Development for hire.
                                      www.channelrobot.com

                                      Dan KorneffD 1 Reply Last reply Reply Quote 2
                                      • Dan KorneffD
                                        Dan Korneff @Lindon
                                        last edited by

                                        @Lindon Got it! 👍

                                        Dan Korneff - Producer / Mixer / Audio Nerd

                                        1 Reply Last reply Reply Quote 0
                                        • Dan KorneffD
                                          Dan Korneff
                                          last edited by Dan Korneff

                                          Can I get some extra eyes on this AB script? This is a simplified script with 2 knobs controlling an EQ.
                                          If I comment out Compare_Elements_Array[i].changed(); the knobs store/recall as expected but module doesn't update (also expected). With .changed() left in, one knob works, and the other stops updating.
                                          I can't see why.

                                          The full version of this script is getting Time Out errors on the for() loops and crashing HISE... yay!

                                          Content.makeFrontInterface(600, 500);
                                          
                                          
                                          //--------------------------eq stuff------------------------------------
                                          const var ParametriqEQ1 = Synth.getEffect("Parametriq EQ1");
                                          const var band_enable = Content.getComponent("band_enable");
                                          const var eq_gain = Content.getComponent("eq_gain");
                                          
                                          const var controls = [Content.getComponent("eq_gain"),
                                                                Content.getComponent("band_enable")];
                                          
                                          //function to disable all EQ bands
                                          inline function DisableAllBands()
                                          {
                                              //diable all bands
                                              for(i=0; i<3; i++)
                                              {
                                                  ParametriqEQ1.setAttribute(i * ParametriqEQ1.BandOffset + ParametriqEQ1.Enabled, false);
                                              }
                                          };
                                          
                                          
                                          inline function eq_function(component, value)
                                          {
                                          	DisableAllBands();  //disable all bands
                                          	
                                          	//enable only selected bands
                                              local bands = band_enable.getValue() +1;
                                          	for(i=0; i<bands; i++)
                                              {
                                                  ParametriqEQ1.setAttribute(i * ParametriqEQ1.BandOffset + ParametriqEQ1.Enabled, true);
                                              }
                                              
                                              // set gain
                                              local gain = eq_gain.getValue();
                                              for(i=0; i<bands; i++)
                                              {
                                                  ParametriqEQ1.setAttribute(i * ParametriqEQ1.BandOffset + ParametriqEQ1.Gain, gain);
                                              }
                                          	
                                          };
                                          
                                          for(c in controls) c.setControlCallback(eq_function);
                                          
                                          
                                          
                                          
                                          //--------------------------A B Compare---------------------------
                                          
                                          
                                          //compare panels
                                          const var Compare = Content.getComponent("Compare");
                                          
                                          //components to store
                                          
                                          const var Compare_Elements_Array = [Content.getComponent("band_enable"),
                                                                              Content.getComponent("eq_gain")];
                                          
                                          
                                          //array for value storage
                                          
                                          const var Compare_A = [];
                                          const var Compare_B = [];
                                          
                                          //populate both compare arrays
                                          for(i=0; i<Compare_Elements_Array.length; i++)
                                          {
                                              Compare_A[i] = Compare_Elements_Array[i].getValue();
                                              Compare_B[i] = Compare_Elements_Array[i].getValue();
                                          };
                                          
                                          
                                          inline function onCompareControl(component, value)
                                          {
                                          	if(!value)
                                              {
                                                  for(i=0; i<Compare_Elements_Array.length; i++)
                                                  {
                                                      Compare_A[i] = Compare_Elements_Array[i].getValue();
                                                      Compare_Elements_Array[i].setValue(Compare_B[i]);
                                          //            Compare_Elements_Array[i].changed();
                                                  }
                                              }
                                              
                                              if(value)
                                              {
                                                  for(i=0; i<Compare_Elements_Array.length; i++)
                                                  {
                                                      Compare_B[i] = Compare_Elements_Array[i].getValue();
                                                      Compare_Elements_Array[i].setValue(Compare_A[i]);
                                          //            Compare_Elements_Array[i].changed();
                                                  }
                                              }
                                          };
                                          
                                          Content.getComponent("Compare").setControlCallback(onCompareControl);
                                          
                                          
                                          HiseSnippet 1542.3ocuX0saaTDEd23rHrAW0J0GfgbCNjzD6l9SPgp5ehMJBZqAWppnJJc7tiiG0wy3r6rkZhpD2xkbAHk65KAWvc8Qf63VdD3M.Nyty5c7Z6DWKZ1Dk34727c9YN6bbaegKIHP3aYm+wiFRrr+XmNi3x9M5iobqC12x9CbXBwPq5iFhCBHdV1149REO67qZE87O2uNlg4tjTRVVOQPcIeMc.UlRsc0uhxXsvdjGSGXH8spdfqf2PvDg.Nx4T1ZH18E3iIODqDaEG.DM8nRgeGIVRBrrWstvaTm9hefGK+SnAztLhZQEqNfghI2Rv7THVQ0pQeJyqch+FXAVocp2mK16utyCndzwzSiBWMhAJUCy3g8JmG7pXBuxKN7rMf2pwv6ZNcb8oCkobTX6ibNfKI98vPJvDVwxZsxuUvog.jfK2Z.9EjV9vhwZT5NkKuI51kKu9dEKn9Y6suwbeHmfBjg85ciE3oXAHoFHQuD6iZi8gTozmdRyuoB5dnnRrsNlHa1qGwUVZsTAPfDqovRp1cwbuiHbLDBAcSbEP6FhACEbXQo0LjIi1jSN5XHKNWM07WK1+S0C9jzWvB.Ee1En4lEKfl4yBf0C2KNn2Kj6JoBNRJPdzfHmEyXP3Hx+CJVfxYTNAMVv8ikpFiUWIPo0KV3zXfr81dzwFPqshdOgeI58JuGh9E6.+YiMVOl9oo3ehL0VADYMIrnanjThh9rLrU66i50CjBsQFVMibOuMQ8vr.hJ1pr9qKV305xrrdCDLS9bI2jX0lPlfERh8r7S4v6E6pAY807vuausthQvYiPADFTmQ7LiFLgKVqBjiMRJpz0ST6ao0QaTAvadi.Wj7WVAOoenYrS8ujLLRonp7yzYzE55BSC+XuoJ.tL7C06I1LBTFNQ9jZ.EXbQ.fSNosNxUsYMhW1.Rncg2CTxnxHoG0E0mpFpNRcfC6SN2NTw1wMVRzPLmvBL6Answb6cn4q6cDaoHVApiwAvqDHS1TQqvQMYjAJwNpluOdz7awLQqh41lYQZ5LtY0gi6yii1aHMDeJKBuvacmMhqo.4g6MKV0SXoL5PwvPF7ZPTWgrOJIzFsUAw4bcA3rCEawH7ik8SJL0EkiAwynGFkLlkp.uoq3Giw2IMmWSJ0sThLftFcdcpn8J8IIqyb15cMBjn2oSl7W9HRVKLsJAIpXF7TpCccVHC31GyOl3Aa43c70S2CCBRWNwn5WFwnZ+OFihK+tfVNypUY15SEfLJdenPRdDuz5ENsP9BvtkkUudyjm1XLh+LYqtLu+4oXId3ftD+jiHIBB2pcxqM6L+qMadqd233hgfB9Abp7QCI74cYZKcvDtVcNMpfOIitT8UzWptCi5Q7snvcmK5Xz30JB1FC2T0ZALQdGcG2IT+uO6rhyW85gRofqUWmImZ2sr9tC1GKwpIDzdE3oCI9RpJHZuO4kvnWwyKj2YeRvKjv3aJ2VWCASSsfN9qFusOGWcz3E+jW0.IYXG5ORLmBb.9UYBRi2vBKPXJU4pRiMyhTcfvS6KtztDl0.yoO28sSru6lEZu4ry9i6G.yrPAobbPd0A887Xj1h.ppNchPqAlWcAxMoa7a3FX9OCqZM8vavHjBO06FmbtR0kjzLTnwb.N0PZb.kiLCyuWF1bQg60bZSkt8mMdWYF3EpReeiW8n6EchGlLErq5z5oK6b5y9qQn7EMm90SN20Hz+kjlmnywSNd6DX5ggCZQYvv3pFf14.WScg5xoQvO8sJBUzDd9U90uuphvMm7Kfg6sSVB2JkvUiT41YM5cRL5ubseNRh6l0F6lkvmm0nURf5aUs1hnjf0pE9qeOlxTfsxNlkHQTl.tsZ8X8PPQ4sbSl2xsX4sYT17shPIke7CvPtP0O.h9cDg9tDnpgqt8uJIrhpQP75xp0JH0gDkTbr+W3QyrhZsslYkDlWJ6w.rqu3njAmfhvOLhB327nuyr7NOPsFUI40GNNk2prpyG8HWW0Qia.GqlsN2bIzYmkPmasD5b6kPm6rD5b2kPmcOWcTe8g0BkhAwsMABsaF8ZbaaiJcq+Sw4ldg
                                          

                                          Dan Korneff - Producer / Mixer / Audio Nerd

                                          ustkU 1 Reply Last reply Reply Quote 0
                                          • ustkU
                                            ustk @Dan Korneff
                                            last edited by

                                            @dustbro I don't fully understand why but calling changed() at the end works:

                                            inline function onCompareControl(component, value)
                                            {
                                            	if(!value)
                                                {
                                                    for(i=0; i<Compare_Elements_Array.length; i++)
                                                    {
                                                        Compare_A[i] = Compare_Elements_Array[i].getValue();
                                                        Compare_Elements_Array[i].setValue(Compare_B[i]);
                                                    }
                                                }
                                                
                                                if(value)
                                                {
                                                    for(i=0; i<Compare_Elements_Array.length; i++)
                                                    {
                                                        Compare_B[i] = Compare_Elements_Array[i].getValue();
                                                        Compare_Elements_Array[i].setValue(Compare_A[i]);
                                                    }
                                                }
                                                
                                                for (comp in Compare_Elements_Array) comp.changed();
                                            };
                                            
                                            Content.getComponent("Compare").setControlCallback(onCompareControl);
                                            

                                            Can't help pressing F5 in the forum...

                                            LindonL 1 Reply Last reply Reply Quote 2
                                            • First post
                                              Last post

                                            58

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            102.1k

                                            Posts