HISE Logo Forum
    • Categories
    • Register
    • Login

    Menu & Sub-Menu

    Scheduled Pinned Locked Moved General Questions
    18 Posts 5 Posters 1.7k 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.
    • Christoph HartC
      Christoph Hart
      last edited by Christoph Hart

      Combobox can't do it, but if you use a ScriptPanel, you can use a special syntax to create advanced popup menus:

      Content.makeFrontInterface(600, 500);
      
      const var Panel1 = Content.addPanel("Panel1", 0, 0);
      
      // Enable popup menus
      Panel1.set("allowCallbacks", "Context Menu");
      
      // Align the menu to the panel width (nicer)
      Panel1.set("popupMenuAlign", true);
      
      /** This function returns the correct string for the popup item result.
      *   
      *   Headers & separators do not have a result, so there is no 1:1 correlation
      *   between the array index and the result. This function skips headers & separators
      *   (and also removes the submenu name if desired).;
      *
      *   Arguments:
      *    - array:       the popup item list.
      *    - value:       the item result. Just pass in the value from Panel.getValue().
      *    - removeSub:   removes the submenu name and only displays the item string.
      */
      inline function getPopupmenuItemText(array, value, removeSub)
      {
          if(value == 0)
              return "";
          
          local i = 0;
          local index = value - 1;
          
          for(element in array)
          {
              if(element.indexOf("**") != -1)
                  continue;
                         
              if(element.indexOf("___") != -1)
                  continue;
                  
              if(index == i)
              {
                  // Remove the menu name
                  if(removeSub && element.indexOf("::") != -1)
                      return element.split("::")[2];
                  else
                      return element;
              }
              
              i++;
          }
          
          return "";
      }
      
      Panel1.data.items = [
      "Menu 1::**FirstHeader**",      // Use MenuName::MenuItem syntax for submenus
      "Menu 1::FirstFirst Item",
      "Menu 1::~~Deactivated~~",      // ~~Name~~ creates a deactivated item
      "Menu 2::**SecondHeader**",     // **Name** creates a bold (unclickable) section header
      "Menu 2::___",                  // ___      creates a seperator line
      "Menu 2::FirstSecond Item",
      "Menu 2::SecondSecond Item",    
      "Hidden Item"                   // Top level items will be hidden if you use sub menus
      ];
      
      // Makes a string from the array
      const var itemString = Panel1.data.items.join("\n");
      
      Panel1.set("popupMenuItems", itemString);
      
      Panel1.setPaintRoutine(function(g)
      {
          g.fillAll(Colours.darkgreen);
          g.setColour(Colours.white);
      	
          // Can't help myself...
          g.setFont("Comic Sans MS", 16.0);
          var text = getPopupmenuItemText(this.data.items, this.getValue());
          g.drawAlignedText(text, [0, 0, this.getWidth(), this.getHeight()], "centred");
      });
      
      Panel1.setMouseCallback(function(event)
      {
          this.setValue(event.result);
          this.repaint();
      });
      

      The getPopupmenuItemText() function is necessary because the result ID does not match the indexes - you don't need to understand what's going on in there, just reuse it :)

      JayJ ? 2 Replies Last reply Reply Quote 3
      • JayJ
        Jay @Christoph Hart
        last edited by

        @christoph-hart 0_1535146702844_Screen Shot 2018-08-24 at 5.37.48 PM.png

        is giving me this error

        Joansi Villalona

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

          @jay You've only given it two parameters, the function definition requires 3. Seems pretty self explanatory to me.

          inline function getPopupmenuItemText(array, value, removeSub)
          
          JayJ 1 Reply Last reply Reply Quote 0
          • JayJ
            Jay @d.healey
            last edited by

            @d-healey Yeah, but I didn't do the example @Christoph-Hart did

            Joansi Villalona

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

              @jay You'll need to post your definition for that function. But whichever version your using the error is telling you it wants 3 parameters and you've only given it 2.

              JayJ 1 Reply Last reply Reply Quote 0
              • JayJ
                Jay @d.healey
                last edited by

                @d-healey Is there any way that I can use this menu&submenu script to load instruments out of the sampler?

                Joansi Villalona

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

                  @jay I haven't tried the code but it's just a menu so you can get it to do anything a menu can do, including loading sample maps.

                  JayJ 1 Reply Last reply Reply Quote 0
                  • JayJ
                    Jay @d.healey
                    last edited by

                    @d-healey Let's say I want to connect it like this snippet down here, Can you show me how to do it please?

                    HiseSnippet 2932.3oc6aEtaabbD9njOWqqQI1A4G8Gs.aIZcIkknHoUrcjfQjDEsMSLkHDkcBfqgwp6VRtwGukX26jDqgE5qR+W+YeD5CPA5iPeExaP5r6dGu8jHoDscZBREgivc6Nybe6NyNy2tKRKNykHDLtUtENX3.hUtOxt8vfvd05goAVM1wJ2Ga2DKBIbjtosGN.KDDOqb4l+wxFxsv0rT+99ubarONvkj1jk0yYTWxSo8ogos1Zyul56+HrG4.ZeCoWayFtrfZLeVDfm4sKaM.69ZbWxtXoXyYak6508ngLd6PbHQXk6Zay7F1tG63.s7OmJnG5SjuTwpMXHcyOh46IQr7YqZ8n9dsRF2BKvnsRmElWOK7Y1ModzQsmNabSUGnTMLmOxM2zfWk2Q3ky.dWSCuaY21kSGDl1iDa+Z6FAfipCFbAlvRKq0b+qO0d0kVB8j8ZVuYiuswtOF0X21Gr+yZVe2CZiVZoEcj+CgPaEfHmf6OvmfFvYeGwMDE1CGhDvPQ.ORPQBvsfXcPOoQ65nNLNBGfZDHB4Q8IAgkzlZoUWzYQmZL.UPa8wul7HN7xHTVnRk6UdYz8te4haHkb0UQO7C1uUW8hMHpEZeTcTa3+N.966uAmU.dYfHmHHgns4vbOrJ7hsIrFRDhNByQ8gn11J+HnGRsttTWRXbSExG+Pd4repV05entil3AfZItOrmWMV+CYayNoPdSYxuL59U9hkQOn3FHS6HTBzGOP.V4E4a90sWoZYT8Rsn3.FpE1CT7rs1l0ILtm3FB4zftnZ9PzL0cLZ7XlX.wGUU10W8bT8V2Q9zS2BUKRDx5ipcezi43.OjR7y029T2dHHuku9iloOXYbWhr086w7HBzJnQcO9VgTjLdjXBc9zHQuIz02f48MFaqLZzUId7M1NqdlNePYj11xF1IhAh9Dlu+viYLuy2yvC4TOzNztzPrepMy+RHXvz8VBh9JjmFR5K0N0oV56XzfB4+yA4Kpb7SKPFUGb.68nKcrrdowLu3n565pipSa4Q0or9n5kYAR0jUHUm7Rjpp0H6NZcw1PkOYfuN9W42pCId4Drxcq.ahrxnGXU7YcbUmjmq56uqqJ58Ls1G3T4n56tyLjL+GmT4WvDYMv4ERPMIAQnaiZGc3JpGmxfJa7ZKb.wuR1.NUaExq6Bbx28AqsLZsJ2eT8z5A3CkkwYChFffRyQhEczRqiNfLeriqA+8PHfSElor9IgJblejc1xm1MPU5WZDTHS87.okPGS8ffwBA.SOdwrlW8ckVRoOXdff.I1n.UjC5QEnNQAtgTV.hSBi3AZBFtLNWx6Pny+KYXn9fpwgLjFjVD4qXZ.LVz+8IDfSIW.ytBx.LGCTwDHOFJfEh5gOhfvwZAqFTC.NAA.Plmc8J5OoOVBEs4NjDdLgnG0XNGODQC7HmfjUSjsEifyLJDulBU75MFnnsZAo5Xe..bRe1QD83UDcnZhM.n5hncPPtZJm3UrzForx3cUjqDqqeGRhqP05H8uyL+3SEIyNfjGg8iHlRZNGh9JnLDRRXDFgpdUhi5vgZSJ2oLu3yksUnXpM03GBjk1chCF4vkE3OD4QEC7wCEoedsyUZPHPmF3SCHoyivWrkbzHsTCP5CffxBpA7xZ3AgZuYQGITncJnALrlobQcaHEljATn742P2l9u9LWnfGEVHUdiLsnbtOLdruBpRFsfHvBDH+I3.jSRJfD+odS5WDPRrPkTlauNExuzR4Kh98ODsRECnI+AKsCoAQjMx1b7uoazW8pWMaVMi4hGpODQMT9MYU.VzuuxmltpW5OyJDXqQQAnaeaz4v45qOAXZ3eRTBBOngZUdQ0WdF7S7EjKxBFp71zGMF424Nwh7VSWqYXxakolhyf4gCwkTkOkEmWzIuJeck0Weokp+z50NX+F0.e6xiltdlPmcWtc00WuYbbKR.0pwmnRgEuvPXXqwQKdxcOhergHimnrg.md5NDLrn5Hn7i2omZf3SOUh0SOE4ppMIfDjdohpVjlXmpxg8V016YsOvXXC1Xokj1.RlmZiCgMzhJ.Kj8ov92g5OEgrf5U057hFFUFHu74i9ACC8DGQOxvPtThJWJRlqvvJSlu+jDJCw+IITxN.jQJ4eB0yCpFH8o4QiEwGvFf7IGAkD0QMGS88gpHndZMgz5CYQvdmUYHSpF+xjRrMg8GqFjwk7jIeGU5wjHfz3wt6GhNWrpA4tMLBlyVNtQLovTScVgaAriC2mEA4RHERRJWnaZR2tk5.Cus78KnOwFAfA9q6xgJlE2HQDvP5dGIzw8fuoTfEzx.C7Z3f+DTfl3CLTFJH9cJUpjgAdDjPCHTy5ScQsw.+flsyK4RWpbx2QNon3r7vwW0HDJPaLCArPjMjVRKEudb7wJpJDOslveVF8hxKiJmp02H46TnXZCOgP61KrPwWBzmbg7PPga0j+aO6jZSF37SXakNqBgLAgoyrJyJRPmpyR5J0I.UIAGHV.9nBFeoKjH+6FGzQ0jYA6xBI6ETnnyabVv4smqmNcFWWRJkbXmnvlpFSuxCAjOE0JDD0+PBOoperbV4tV1Ca65WtCayUSd1PPVPi.Z3dCHwumdbbUFywwYEy91xJ2bw.DDMTcrb2L9X4R1FnE0Sd9olaJyRMHLOzTqKkU9jLVo5XLyyZrCDgKOuvXDBnFxVFRkSN41gbDPOWe5gKXuCQ75P1.3SBejAr.43I20u7ChSrxYm6eOmk0P4C2..PerpsaAOpViYM2vb1mu1ly3qm4LtZXNS3jdbzGyiyjx46Lo77NmO2ty4OLFmIdtNNS3PcblvI53LwiywYhmkiSlCxwY7mhiyzOBGYL5kxqd1fprt0eapa0djaMWUa8gT3blSnvI43IbFc1DN5ClHCbVPCmESN.aYpQEVtgsNMoFD+0bwf3uAOjcOppfQi8nZkcOlRk.crxVpyZtOABGGC8MmIyCyY5bvblF+KmIv8xYbbobL3B4bQLZbtH1LNSlIiiAEFK0t1kyV+cX5pmpBl7s0T2Py4twgaZ2j4E4K4dYdYHxa.JtCHmclacPdJ+ABZ3PyrTyvMjTdr2PxXSIeIg6sraQCc6Md7N2XvqLG+Ox3M99lVztdmN.E4TvdM6G8suqWtz6FT9cZn7o1PnLA2GhliO.TEdVvN4sO.2.3fK8M.1hS7YXu1z+hgX+yM2NBlt3Ya8ero5SsUeVTPluULv2G17.Fnf4kAd6u+i4rnAmUqu+KUwJGv0Y4L6Xu.BLsGZZjZblPzAFNJaIL6pUDuqbtx3KBL53hrssaTev0G.I.EIIvfcSJc0T2lXH0xIlRq9JkO.qb2+Q6pqUJ6ui1C9Sm6He7KpodWqRkYWkpytJ2c1UYsYWkOe1U4dytJ2elTIkfj5xpsytf8Wc4HnBpqpDZH41ztFlV1R17tFhNJRTAbiqF+mI268G9r5u+Egl+xA2K3p4WHAisoRWU8fifLWPK5JO6P5fgMvMpUSP1jEvFziEPcyll.V12sKgaB8wNd1JLDxRk1xms49DeBVXjm6Or4Sg8wi4Yy9MSSEUt7SESyc8ar0vEIy7i9kA2g4++dtCSap6iiYNH4fxC+Yte9irU48QRtI+TAU8ot0MotuMPNnMPHxkXRQXNIsC86kkuKATaRfm5ke.9E2YkD9DxNqjzokahofwV7ypiOH27D0MFpnDqNKSyPZAP6RBIn5l0n6SFF1xYNns13iH5LLZ7LQtUMotsXvjIrNRlzwdiYfHpSBQzp+BhI5l+v+YyqXhdESzqXhdESzqXhdESzqXhdESzqXh9SCSz+WLn6ic4rW4pu4O4P+FpV.DDn9+0gEraJeGUI4h9jNq9PcuW45JWUsREKqwqQ0YVi6NyZr1LqwmOyZbuYVi6OyZ7fongjjwVQgr95brPCspqiKyUeTb47V+W.zw7zDB

                    Joansi Villalona

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

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

                        It seems like you can get the menu text so you just need to use that text to load a sample map with the Sampler.loadSampleMap() function.

                        JayJ 1 Reply Last reply Reply Quote 0
                        • JayJ
                          Jay @d.healey
                          last edited by

                          @d-healey in this particular scenario how so I do it?

                          Joansi Villalona

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

                            @jay I don't have time at the moment to study your code. Can you get the text from the menu?

                            1 Reply Last reply Reply Quote 1
                            • JayJ
                              Jay
                              last edited by

                              @Christoph-Hart Is there any way that I can use this menu&submenu script to load instruments(selection) out of a sampler?

                              Joansi Villalona

                              1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User @Christoph Hart
                                last edited by

                                @Christoph-Hart This is so cool!

                                1 Reply Last reply Reply Quote 0
                                • ?
                                  A Former User
                                  last edited by

                                  Hmm... Mysteriously this has stopped working somehow... The panel is there, the script goes through and I've set the 3rd parameter of the inline function getPopupmenuItemText (removeSub) to true but when I click on the panel it doesn't show or react anyhow... Funny thing since it's been working just now... ๐Ÿ˜ค๐Ÿคจ๐Ÿง

                                  d.healeyD 1 Reply Last reply Reply Quote 0
                                  • d.healeyD
                                    d.healey @A Former User
                                    last edited by

                                    @UrsBollhalder Right click ;)

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

                                    21

                                    Online

                                    1.7k

                                    Users

                                    11.8k

                                    Topics

                                    102.8k

                                    Posts