HISE Logo Forum
    • Categories
    • Register
    • Login

    3 buttons, 3 panels, and lots of potential scripting...

    Scheduled Pinned Locked Moved General Questions
    18 Posts 5 Posters 714 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.
    • Matt_SFM
      Matt_SF @DanH
      last edited by

      This post is deleted!
      1 Reply Last reply Reply Quote 0
      • Matt_SFM
        Matt_SF
        last edited by

        @DanH not so much scripting after all, and I'm sure one could come up with something nicer :

        HiseSnippet 1077.3ocsWE0ahaDDdMfihc6U0qpObOZwSFcDDXRudRQmNJjjJTaRnkznVEEcZwdAVE6csrWeInpH0eJ8mRer+b5+.5r1FXIwI5f6N+PT1Yluweyrq+1gAQbWRbLOBoYb9rPBR6K0GNiIl1aJlxP8OTZHDyH9VBRr.0cVHNNl3gzzJ+ixHzLpfRe9u21E6iYtjUlPnK3TWxOSCnhUVGz4mn99Gi8HmSCThd+N8c4rdbedBvlx5MQgX2qwSHmhkgURGosyQdTAOZn.CjAoUoK2a1vo7aXYweAMlNxmHWzBMDRTl4i49dRFKsh5Mk56MXQUGifrLXUOnbVO3a0Og5QWZeUu3qScXsBgZ+Pqz5zq7ZzqkJ8ZpPuBnjlBkpjQomqOzMhFJV4QxmuPuOSPhFig1tJUxhEUZ+J583PDLQi.70jiifEKQX+plMqaA+o1AllPqOVX8dbj0jnvtBl0artbAzIDQOdPHmAKrq1MQH3rVUqU2zpfmmBjy1.pc0ZWcf4Xdj8HKJKmd0rF0HVFLSDw86g88GAGVr4LvWtwGTUCX9OdUMPdFeCKpTLNaAlrRJmcyFvik7pkCra3H2RbdcSoaJymxHViSXtBJmYoVb1tKRYcn77SH0L+SSCetK1GZRdjagLl0oZjt7rwqP.Ml7HiSBrf.syh7xlWII6ExzYWy5k4I3xVplkfANDy8IMBinPIAIQZzzfN1N+U+Fql0LM.BYj01uL09UMhgOFVT.s1Ki2GbundI75fcV6pypVOs2bYdjW8vPctenNJgdmoAwOlXoRqVeBokydPkq9l1fTem4cGnrudJWPNiYmtGZdmo08cMdbg9xSrOIpP2R40nmBnMKIXDIR8DjLPPyYcgL8GWHSUm0M6.uRfbVeFUbVHg8Xpun7uR.Qux4rB9OQpj2WkK4kICfnfxlgdt5CJkxpW0f1.3NebvaW.7eq+gXAVpcmWQPUFRhDTYCT6Px6gKByTxMzOjDesfGB2msTX.54e.E8sqdk+QmYKW7W+RGzFkIG0Lw9XxTakL8O273YZ2rL8rE2hIUASSzt5YJuOr11417V6MTOwzkd+6YclRnSlpLQw4cnBRvhIGL1AglOWZekUGUyaBubJfW+6Vyq4eSg7J27lvq1EvqWnsk7ZNpdQ7ZgYzCmFAlCh6k3iEqObjbhvbGfPyZSjHm5fESEyTmX7S1DSenT745CnB2oEywREvQ3C5OGbLeNymoez3wDWwJBVQ+3e+yyPknekmHnrImfEQT3vi9oIACgsZWB71YvQJoPuVI4wvr0MkqkcfgDlW5h4vStyVx0Z4NasvIJ.6FwemalTpbR1cSs.bhkNDug9Ix0VK0u00a1nIJ.Fp9cttxxeO3Vhhw3rEXZuEX1eKv7caAlWsEX99s.yqeRLxeOyOjH3AYeN.FFbT5MYZZGwvvIqzSgn+G.yi9L2
        
        DanHD 1 Reply Last reply Reply Quote 0
        • DanHD
          DanH @Matt_SF
          last edited by DanH

          @Matt_SF this looks very nice indeed, thank you! However, when clicking out of a couple of button positions the panels are then left out of position. So if you click 1, 2, and then 1 again, Panel 3 is out of position. I'm going to have a crack but I've added labels to the panels to make it less confusing!

          HiseSnippet 1182.3ocsW0saaaCElJIpHRacXcXWrKExUxnIF1xYcEHnntwwYHX4Gs5rfMDjVPKQGSDIRAI5j3MDf8brq1iRubON8MH6P8iEchbPsSqtvv77G+Ne7nCOxMl6QRR3wHMiiGGQPZesduwLwvNCwTFZucjBbeygc2253t8NFs83HbRBwGoos7OKsPyXET5yGe813.LyiTJBgNgS8H6SCohRots+EZPvtXexwzPEq2r8ddbVGd.eDflk0afhvdWfOmbHVZ1R5Hsmz0mJ3w8DXAIAosx1b+w8FxuhkY+IzDZ+.hbQSTOHPYh2kG3KQrTJpyPZfuaQVmffn3VxAKmwAeu9ATe5D4kbw2lpvpzCU9Paoog2xSAulpvqgB7p.RZJPZkLH8L8ddwzHQoFId9J88XBR7.LP6pPIyVzRathdGNXASTODeAY2XXwDOreQiFqaA+TaKSSf5SDVWhisNONZaAy5UVmV354DQGdXDmAKrWa6QBAm0bsZqaZUwyC4jyh3Tq0pc1VlC3w18snrb3Uype8DowLQLOnCNHnOTrXyYftbg2KqbYAyNqbwLRvblTo93r.9jkR4narKOQhqlNvogi7Hw4kMjpor.JiXMXDySP4LK0jy1qHjqCoWvHRMy+xzHf6gC.RxmbMDwLlpd5xiFT5APL4VlLJzBLzNyxSablDrmHCmcMqmmGfSapJV5LfgDd.odTLERIHHRglFzA14a8qrZTyz..jQFseZp7ypm.uLTj.M2HC2acGqdNrcvIq8ZiWa8Tt4zbKO69l5bWScTL8FSCRPBwREVM+LBKmMfLWcmliPei4MaobtdHWPNhYmdFZdio0cUMXPk5xCb.ItR0x1qwOji1rQg8IwpUPRCgdNS2HSe1MxT6y5kUvqXHmsGiJNJhvlU2WT9aIPSukyQE7OQZKuuIukWVa.DE5rYnm28AkBY0qZPyg6N208O954w8VUr6+1d6fEXYu67LBxxHRrfJIPscHWBWDl0I2PeGRxEBdDbe1jFC.m+IjzWWtk+Q6wSV72+ZazbEIG0HwdLQpkRj9vUyNRqlEomVbKlrKXZfVUOqy6rxMz6ZeE0WLbhf+cb6gD54CUln331TAIrXxAimfP2dqTdoTGUwxinI.yXZfsOt+Dfk9+TfoqI8abwexAjt1+.KK.itlKnRPtVjlTxQlZhF.0B8n+YYoxGda6HbLrypbSAEflMttGg4beB6I+Wds37SX29cURX4hur38cXFm4g6bdDbmybwcNn4oXqUEb2Onsfb2sn0qh6JDOWDVqGAg0ZtHrVvb32aFSX5Vt+n.rX5Qdky4mq.t9Xp4LkyRxRnhwpsR+rMG7mJDeltKU3MrZLtTEXDNV9Rfw7ud3o5cGLf3IJA3J5696eY9TAza4iDT14GfEwTYwygiB6A0fdDX2YvAs75askjWOlstQQcUOByOcwsvStxlx0Z4JaVnDEh8h4u2K6BR42mrZpD.SrzOMyP+.4ZqI2Jqq2ndCTH7oRu2ySl9a.M2p1GmEvmVKfOat.97iKfOuXA74mV.ed4C5i7qTeyHAOL60APfa2z4Szz5xvPkUZUH5+AcW8y.
          

          DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
          https://dhplugins.com/ | https://dcbreaks.com/
          London, UK

          Matt_SFM 1 Reply Last reply Reply Quote 0
          • Matt_SFM
            Matt_SF @DanH
            last edited by

            @DanH You're right, depending on the clicking order, it might mess up the whole thing :detective: :grinning_face_with_sweat:

            DanHD 1 Reply Last reply Reply Quote 0
            • DanHD
              DanH @Matt_SF
              last edited by

              @Matt_SF I can't figure it out 😆 Let me know if you have any more brainwaves!

              DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
              https://dhplugins.com/ | https://dcbreaks.com/
              London, UK

              d.healeyD Matt_SFM 2 Replies Last reply Reply Quote 0
              • d.healeyD
                d.healey @DanH
                last edited by

                @DanH I'm on it

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

                1 Reply Last reply Reply Quote 0
                • Matt_SFM
                  Matt_SF @DanH
                  last edited by

                  @DanH funny how it seems so simple at first.

                  If you, HISE master who sees this post and has the answer, please send it to Dan in PM, I want to figure it on my own! 😂

                  1 Reply Last reply Reply Quote 1
                  • ulrikU
                    ulrik @DanH
                    last edited by

                    @DanH try this

                    HiseSnippet 1210.3ocsWE2SaaDE+LfY3r0o0o8Avi+JoPgD6ttJwpVJAXBsAjsvPqZZp5h8kjS3bmk8kBQSHsOJ8ix9H0uAr2c9brM0wPRWif.26898teue97cuqaD2iDGyiPFVmOMjfL9BydSYhQcFgoLzwGHMDhYj.aAIVf1eZHNNl3iLLV8mjQXXsFR848+393.LyijYBgtfS8H+BcLUjYsa6elFDbD1mbNcbtneV6i83rN7.9DfMqZ1DEh8tDOjbJVF1JlHi0OzmJ3Q8DXfLHi01m6Os2H9Urj3ufFS6GPjCZg5AIJw7Q7.eIikVQcFQC76lV0wHHKcyzfUSzfuw7DpOcl8Ls3qTNryPjWOLVoH8Vs.8ZkmdMyQuRnjQNJsVBkdrYOuHZnHyijOet4wLAIZ.Fj87TIIVzJ89LyNbHBlXmw3KIGEAClgn9ya1baa3qF6UqFH8wB62hir2ehPvYsreocJzgDQG93PNCFTeSs+MAT2Ejy8.xoLPt2CH2MKxutxUiymdItKNQJaNUCwoDHtUCIOy5KXwEi9UAAy.DmVLYSRHKnZ.poPMC0nr.JiXOXBySP4LaNSNcRnQ7f5dof1FXdvDRiZ+cMq.tGNvd547PXRZ4zbuTSiHzgiDfwWHskZk5eMXRl0cnLex0mMHKsMlgcJDSBpA7H65T0Pap8OX6B+YqsZTyBlZK5.65eqLW+I8ujE1ERVUuA3U41RV5RWwv6FoEgHBH9dRuSs25kZVtWgnIftOcysAVrk1uBvMvujfXRUYe.FBHMZ3mZ2.xppF5aSYp5FXWe4bngzAGDzG1+odAsFRwtOoVDYndU3qSE2YlbjlbZl2jqxjTtK6Io90oJeXJET8HUMlL4EpvlppKgBYRklkY9buiOGkOohn0v4j9VyO8NUjdWc5U588rcR4heQ4oQUZnyhqgNySCKWmr1c2ETEclmJVtRUsJdehnS0hnyCQDcqTDSoW9Z5oZ+6cu7ysZ94lieOY2bL6TtfbFqthA0tol8ccMXPo9zoKfDUpaY2GQUArNax39jn70uLP3H4hmyaN+y4y2FhWhxjKPN6XFUbVHgMulSPZ4D5IXUMqf+Sn5H3K0cDjHdHJbvuko90Ejhx46DCs.vc93f6VB7e+3CvBrr0FcEAUYHIRPkBnwAj2B8Ilznik4Aj3KE7PncuYqf.M+ATzWmMkut8zYC9mesMZgxjS9Lw9XxjatL8uWM+LsQRldTZSdxWyTIZCyjMi+vZa82ok1qn9hQy79tosSNaLK9yaSEjwoMVasNBc6sR6YVcxadQ3kSI758KMut8qKkWZyKBubKgWsMVRdcKZ6x3UpYzG1rNbMAt+j.rn3cGjWXR6.1noPC6xlxYwTwz7Wn5+sKT7Po3iM6REdiJmiqTBGgWn+TvQ80vdj4gCFP7DYDbMyi9iOM24B8a7IBJa3IXQDEV7Xd5jw8fG0dDX1YvRJ4F8FqHWFlLtobrTA5QX9pA2BezNaIGanc1J0IZL1Kh+FujsRkWzaCkEfSL0cbsLOQN1d192llM2oIZLbmy234IK+mBmRTNFmk.i6Rf4YKAluaIv77k.y2uDXdQkXjW2+USD7wIuN.F5dn5jLCiCYXXkkZUH5+.d1P0C.
                    

                    Hise Develop branch
                    MacOs 15.3.1, Xcode 16.2
                    http://musikboden.se

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

                      @ulrik You're making good use of that getAllComponents function again. I need to do that more.

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

                      ulrikU 1 Reply Last reply Reply Quote 0
                      • ulrikU
                        ulrik @d.healey
                        last edited by

                        @d-healey yes it's handy, but it's easy to unintentionally collect wrong components if you're not certain of how you named the components

                        Hise Develop branch
                        MacOs 15.3.1, Xcode 16.2
                        http://musikboden.se

                        DanHD Matt_SFM 2 Replies Last reply Reply Quote 0
                        • DanHD
                          DanH @ulrik
                          last edited by

                          @ulrik brilliant, thank you!

                          so .getAllComponents will give me an array of all named components? Eg. Panel1, Panel2 etc ?

                          DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                          https://dhplugins.com/ | https://dcbreaks.com/
                          London, UK

                          1 Reply Last reply Reply Quote 0
                          • Matt_SFM
                            Matt_SF @ulrik
                            last edited by

                            @ulrik Elegant!
                            @DanH Content.getAllComponents returns all components whichs name matche the string you pass in the function.

                            I.e. Content.getAllComponents("pnl_") will retreive all components which have "pnl_" in their name. Obvisouly you have to be consistent in the naming of your GUI elements but it's quite handy :)

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

                              @Matt_SF said in 3 buttons, 3 panels, and lots of potential scripting...:

                              @ulrik Elegant!
                              @DanH Content.getAllComponents returns all components whichs name matche the string you pass in the function.

                              I.e. Content.getAllComponents("pnl_") will retreive all components which have "pnl_" in their name. Obvisouly you have to be consistent in the naming of your GUI elements but it's quite handy :)

                              to be honest I prefer this naming approach;
                              Button_01
                              Button_02
                              Button_03
                              etc.

                              and then load in a sequenced and ordered way into my array

                              const var NUM_VOICES = 4; //some number of voices
                              const var myButtonArray = [];
                              myButtonArray.reserve(NUM_VOICES)
                              
                              for(i=0;i<NUM_VOICES; i++)
                              {
                                  myButtonArray[i] = Content.getComponent("Button_0" + (i+1));
                                  myButtonArray[i].setControlCallback(onMyButtonControl);
                              }
                              

                              This gives me everyone in the array in the correct sequenced order....and lets assume these buttons are turning some filter on or off, I can also add the filter itself(again in the right order):

                              const var NUM_VOICES = 4; //some number of voices
                              const var myButtonArray = [];
                              myButtonArray.reserve(NUM_VOICES)
                              const var myFilterArray = [];
                              myFilterArray.reserve(NUM_VOICES)
                              
                              for(i=0;i<NUM_VOICES; i++)
                              {
                                  myButtonArray[i] = Content.getComponent("Button_0" + (i+1));
                                  myButtonArray[i].setControlCallback(onMyButtonControl);
                                  myFilterArray[i] = Synth.getEffect("Filter" + (i+1));
                              }
                              

                              which means the callback for the button only needs to be this:

                              inline function onMyButtonControl(component, value)
                              {
                                  local pos = myButtonArray.indexOf(component);
                                  myFilterArray[pos].setBypassed(1-value);
                              }
                              

                              always interested in a faster - cleaner- better way if someone has one...

                              HISE Development for hire.
                              www.channelrobot.com

                              Matt_SFM 1 Reply Last reply Reply Quote 0
                              • Matt_SFM
                                Matt_SF @Lindon
                                last edited by

                                @Lindon if your elements are numbered the function will sort them automatically. I usualy don't number them and I also liketo have control on my elements (like the script you wrote) but sometimes it can be useful to get all of typed elements quickly.

                                1 Reply Last reply Reply Quote 0
                                • Matt_SFM
                                  Matt_SF
                                  last edited by

                                  This post is deleted!
                                  1 Reply Last reply Reply Quote 0
                                  • d.healeyD
                                    d.healey
                                    last edited by d.healey

                                    I rarely put the full type of component in the component id, it seems redundant to call a button button.

                                    I use a prefix to describe the type of component followed by a name that describes the button's function, if the button is part of a group of buttons I follow this with a number, almost always indexed from 0.

                                    So I could have 10 buttons that toggle 10 panels, I might call them btnToggle0, btnToggle1, etc.

                                    Then I could use either the loop technique or the getAllComponents technique to populate an array of references. I usually use the loop technique because most of the time I will also assign a LAF object and callback to the controls at the same time. From now on I think I'll be using the getAllComponents function when I only need a reference.

                                    The getAll... functions are also useful when you want to loop over a set of components/modules that you haven't stored references to already. For example if I had 5 filter effects and I wanted to change a parameter on all of them but I have no other need to keep references to them:

                                    for (x in Synth.getAllEffects("filter"))
                                    {
                                       // Do the thing
                                    }
                                    

                                    The getAll... functions don't require additional allocation (as far as I know) so they are safe to use at runtime. By contrast you don't want to use Content.getComponent() at runtime.

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

                                    Matt_SFM 1 Reply Last reply Reply Quote 2
                                    • Matt_SFM
                                      Matt_SF @d.healey
                                      last edited by

                                      @d-healey said in 3 buttons, 3 panels, and lots of potential scripting...:

                                      The getAll... functions don't require additional allocation (as far as I know) so they are safe to use at runtime. By contrast you don't want to use Content.getComponent() at runtime.

                                      Good to know 👍

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      17

                                      Online

                                      1.8k

                                      Users

                                      11.9k

                                      Topics

                                      103.7k

                                      Posts