HISE Logo Forum
    • Categories
    • Register
    • Login

    How to make it

    Scheduled Pinned Locked Moved General Questions
    16 Posts 4 Posters 867 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.
    • LindonL
      Lindon @Jay
      last edited by

      @Jay build your own preset browser using panels and their associated paint callbacks...

      HISE Development for hire.
      www.channelrobot.com

      1 Reply Last reply Reply Quote 0
      • pluginboiP
        pluginboi @Jay
        last edited by

        @Jay using panels and filesystem API. this was the starting point for this preset browser.

        Custom Mini Preset Browser Example using FileSystem API:

        Hey folks!

        This seems to be a hot topic with the new FileSystem API, so for those who need a starting place for building a custom mini-preset browser in HiseScript, here's a simple snippet showing how to achieve the most basic steps for:

        • Loading presets from the user preset directory
        • Saving a set of controls to a file in the user preset directory with user input for the preset name
        • Fetching all preset names in a given directory and displaying them in a viewport
        • Showing the preset directory
        HiseSnippet 2295.3ocsZ0ziaabFd3tKCrjsRrcC5odfXOoscqhVWmzFajZ48q1MwqWUK6Ew0wMlhbzpIhhi.GpcsRvhZfdnWxk.zS8TAxgh.TTTzeAEnsW5ugV.+SH28A224CRNbHor1EwBvFly7Ny6y6Gyy7Ny3tQTOLiQiPV0t+rIXj0kr6MKLd3VCcIgn81FYcA6tQXFNFs4rItLF1GYYs7uf2qUsUPhee6s1zMvMzCm0DBcHk3guCYLINq0tc9HRPvtt936SFqI806rmGMbKZ.cJfjksail35Mx8H7cc4hsjMx5M1wmDSi5E6FiYHqU1j5Oq2P5IgR4OjvH8Cv7O1.0ClHYy6RC74Hl2JZqgj.+tIVLCAyR2L6eYo8+116S7Iosm4GtrnCmrQn6OrVZdvaCc30dwgmkF7VQBuqX2yKhLINqGN1tn8dgw3nAtPHPGVRYQKc5aYuEEjHLt0X2Q3cifORGQy2qc60cd21sW6lMp2n967NNbYinALmXpSerCy8XruCIzYhHQnQcHVwhcN1MxoW.waD7W93HmOvIQGGgi2hNdBMD9n4pZxrJWEYidSr6zXxfoAaNMNlFV4LXH2pRfJf513AjPLywMHvwKA1tg9NdPK8gjHly.ZjB4N8inmvvQMpGB4ULHGC6HSt2T1gyWzntC7KChxtuCA9rJzkIh.X7wm0TKFWVAt1Rgnlzvr9U8kLPS0ySgjBKRUliS1PvTnX1Q4.xTpWErfLBo3UCnTQxfRZSU.hz9WX0evjXBz7BfBkjoforY69j3.7BLWB4JYlj8x4rtOkK8qHkISvUmmkdvn4BoCFkyAevnpctGLRywVlp1hShGLW0IEImJkMUsZk8WZLcBcxz.fxLaAQy7B.Kw6pjgkrJ9XB9jIzHX47LmA3XugjviDD.CHP3SrzlyVEOD67.XQsJQ0mDg8.J5YxIlDF.DGNClF5wSLJEIIzA7eATfQQgf6JTwGnh2+RftI.VXIfRVjkAVR5nySHzbURLdLa000muVeFkD1b0OAn2TC7TcGgIdKgDooWRnZcHhFLEWhAHTL.8TQ4g3D7rVK1j.RrDD2rTSufUGPc8ULGf2uoXhdjP6ONIRx+kkbbHuOVS4zkHxo2b91ZE7Sy2hICbZpZMOlYFyVyEFFlLTyG.EXeDZNYnR4OCZNc46Ba1ZsVVNbZvLiIRlNDieZFsc9b3TeXpsIh6YS55NGYFqWybpxuSfPplCbCX34Hn2P2viv9MMEYNTHZKhVD+aNdpEMxNGCXNfe9vonCTW2Q33oQglw1bkYcC8By3gTIBWaciwXVX0MLKISarYdzEfcpvxce2X27dPM.l5B4R0RqGcuoIxxOHidSXPqeppNQnd4igYjkBQYcgb1KwtGPEiPFM+ep3436k.xDQGK1HQr0BaFCn2JV8nZMQh4UR3LOaSIQS9hndhom6xUBp0X1FYr76NTulo5JtOjyWTuVM8E+7c.zlbnDZe9mrlEf55Nq9CaIGDrcUbDmwxXxR1M7QOl2C2q1T3sROv.aMn8Z5a0MYJanPnVwzdwQfau4FBRBPN3OJeh1HfY9z5EMUiMexFPQSlKvYvp0HI+QNqVhGHGF4SyiZ+Xwlg2lcP+OCpzfu8eofdNLmpUIkC8BnTTcF+PiFyiNhEXMaZZcRDrCsBfBsUAHylscdJPoxJ3aU1+4CTsHLQ2U5hJrAsPmEUFWP0rbpFa9cofQFBbVvnpeZcGytFLnz9TTVA7otjt42YQz7FXyvoi6iiR1vHQP3v64uc.6puc.8KuvSVDtlfzv8BIPwD3vpty.jpxcDxZIEp.QiE2cvapt6.I2Jh3irZXqw1hDvleqLVHzy+5I+uagpZJjrrho3J1FbuYSSxUAgdvdaC4Z7azPAO.xSvQwDt2vZa7wDOr79MpYuMlMJlNQfe0NvHq5R02H41ObCwABs+V14N.O5oo58eD0YlNHNg3GOTu2gXxQCytbpN+1N8OJ4Jnp8Fu7kuTzLuTnhsxKyMqUFa5I4a8Z7lgV9c7lsr0rjZ4sj631WYIeekk3jbWDhSYpYPn2maP1V+cKSioC0zXP62YhaDnPMMa5p3VF+ZsxqVz.HB0i744tcNTwPQIYBW01rLcczumd33i6H0dCwPbTRSX6SGCJwMBD0Zo7FI5gc3Lm6oN2C+5sdklnoW4mmyRpUokbI6rZ2zrgm3UgMvOquR5BftHFNylgNnunDzWUAZr+gpSCq.dVYvU47exS5jGj+IhIHedzYGjhS9grVydyHWW2w02hRC5EOcvfr+00pu6zvQy1mFNBOCMkgEvDhz5K7788kqwzz0kpZ4+2ytvYrpLm6sMLaTAytyCVrUMYfMgbQ2.RZKOGwW9k+w1kvQjz7wIaAXsr0JKBcwUrMtOJM69Yali5yvtcdRgbxqWztKyyJy2eS878agvvVatJnOmXVFxups4gNKPxk8Qdn+79Ef96uXPWO.8Ue0e3uURnX3P5KJF2fF9m7VKRKttZ8+kryRvQKFS4ErkmmW2v+05F9cLL7m8qNuFtDiqXCJybIsAc6hAcI0n7nxUF29tF9WvVovytITjyntcx6anieD5rVsP97j+8+4EkUCve9u7eOoJBhxoRrVt53PkUtos1+P8.gIUO52XZHOqaw.glGRG223F+qGThIdu68Munn4LZzWWfF+hmghHqvhdVvq1h9nE1ht8s+qkYQe3G96KgI3gO7aFjXmbVrTD6nfLZQ3subJRJVf200Lzu8y6bdJxSyPk37GnoOp3Job1KLoXkRq0q3iNdY68o97KYK+6gxeDXUGvZ0bO7H+wECYj3Y5OR7qkGIcQg6Ur6Rh8FVNdWpD7xOA0qY7pdx4F16LX.bf7Lvth8te7q+2WFcOJj.Gdz9twQDHMz9tSG2CR18v.RBA5R9QUARU9PEe2l+M2yzCG5K9.NOzKUctA+aKUmajzIZrqWD8SSdZVvodAQK.lBEuseM684e6rQxwFssa2pMZLwm7oddbWwOFvd4i4Zmiw7SNGi45miw7tmiw7dmiw7SOGi4mM2wv+u4vsmFSGKWl.MzcGww2sr1IjWomHiD8+gi7rcn
        

        Hope this is helpful! 😀

        A few extra things to consider:

        • This example saves the preset files in a certain format (key-value pairs), but it's up to you to choose how you'll save your controls and load them from your custom preset files.
        • This is completely separate from the built-in preset browser, so proceed with caution. The actual HISE user presets are formatted differently.
        • This doesn't include any protections for overwriting files or checks for invalid files / objects loaded.
        JayJ 1 Reply Last reply Reply Quote 0
        • JayJ
          Jay @pluginboi
          last edited by

          @pluginboi is giving me some errors and is quitting HISE

          Joansi Villalona

          pluginboiP 1 Reply Last reply Reply Quote 0
          • pluginboiP
            pluginboi @Jay
            last edited by

            @Jay Oh weird, I havent opened that snippet in like a year. but I just got to my computer and heres the base script for the presetbrowser in the pic above

            HiseSnippet 1540.3ocsW80aaaCDWJMpnwacXEXOOP3mjWScs655FRQwRqSbavVRMpSSKPVQAiDsEWjHEDoZpQQ9Zrua6s8QXeC1tSjxRx1Ks0.SOjXd+m+tiGONJSFvTJYli6VGOKk439kdimIzQChnbgyA6439UdGRUZVFwP5IyRoJEKzw08ZOEI3t0lNEe+8O+DZLUDvpH43bhjGv9UdBWWQczt+BONdHMjcLOolz2e2CBjhAxXYNDOWyqmSJM3b5T1QTTrM7bbu99gbsLarlpYJPlmHCmMNRdgvH+IbE+rXFtnuyXvPFxNCh3wgiJ2qJGG2MGUsyulYm+MdGxC4yoWg.ecACRkF0w.2MtpPp+mQH4VKj1zDR2xabPFOUWwAimuv6.AjPlPAntdnXj0Yi+7FdCjfDBc2D54rgYvh4Z3+fd81l.+oyCa0Bfakl7NZF4n8e0nGeD4QjRMmxzCjIoRArvusgcaTGAjLTPhgA.BSwzOiJBigxiOzh.e28tDLaoHxIDcDijVHCYhLNjkoJDAcmg7PCUvqm1dHM.PwYs2lz9kJVV62.txZvg4h.MWJ.CRASwzAQfCLlPQljISHThJkEvmvYgVeUnLWDyELxjRCTnqIrU.rjXB.eiFcraA7KVFPisVZDUGAg3PdLa7L3jPBhMVMqQDiZqo6TfdXBF4WZ9Gtf0K2.ML8DtnPIkekyAH465ZjFfGcVN6+vVFjGPy2TwehLi3OArH.FktD1o00naZtJpPltZ4XcFWL0uemNOjb4bqjwz4Yh5JY7fQBahJBh3ZIcapgQChpmSvzucuMG.9vkqJaKM4qExzwk4EEAp7HJnpggdMYkYbtfq8qmYM3QgApPDagXc4LxVKLO0r5MP3d0kQUX+kVLB2cvNa.F6H9fAUUHNeeVC5Z03rUWytvXk53SpLMOF56XTkJXwjK355VhTbbs0hvRohiPc5OGfrES.yzCYh7CfJRL8ztsYOs.10LFa.V0QxEL2sejEWI2lzdmcZC+6JLTIp282kbge6eSfx2P+N3+A50KHMsq5BFvucS2CGfZR.P0KKv0QKgksVDkLIfw.plmBsbRj4JFAPr3yf6oJPmJcqBgCQwFXkxuLE3ydGzYsDmzQbEJ6Iz3blgUW..xi01xoBABhnhorPLPtbwfoQXbQDSTqlfqHVUI97trtaaDfVVi.7UrXVflE1YoREovrUvKFxjw9Ak2JrMbTFh1l0Nb.SOl8dMT0LWPra3R4gNcUowPUMl55bZCYMfPGxcH8sMxZzNtHlGiJCNozekVCKHVVGriE4QKafS60vAUs2ZX47yTllhUFqaLSLENncax81tRRCQq+A7RIgVpofpZ+JSaYuuXJ.ycikzvpaNp4Arp9tXwdsfBHUdOv7xVr..yzAlzyGubzlGmWPtP9Eqqpm6kZ1yE9cZ8gVaAdjrHqISVIOqwfiyqjMN2W1UonuHO4LVVYIVofvfQMm155eZSaEXFpolfRwAPO0mmxrqKZgGZ98xyl4XmJB90KOXOplhiqYoAxkxxzbLbb2i8NXdWyvaa4sGSctVlVHqs91wsktf6MKGsCSONbv02vyjHbd+7Qh+qzcmUMe7d617Ljiapmcroc1YO1DJztnEVLsyNOMCP3YjAwzTkkDtes+7EPifmUz75o4bMMqTjiynoo.uSvSCVZuhlkPNFt38Y4Sa4TD.OW7B9zH8fXdv43bmyipGGymB3o6FPsk7hxJLE9FhBvBZKfh4bAOTG43549GvtJhgFCW8sEONXogfgwukgXe3lyjiO9vx.JcZLHLNrqPw0yp+3jOiA06ckCp+oFh2xaDGtVe0w3FqHFghp+OhQ6yato29Sl.83qBvM8F9508sLeD2+BYtF5XdHEZbBkydGkmLFdUW.C7t.J3UX9dC7fkYcObMh.iYhvhE+C7YY1GW6ZY1ujoSBMHS9VaeO7AT2nfBDShh2KtE7vUXMouSQSDPOudc64j.uk6sAA31+NvY8Uqy8VCc990Pm6uF57CqgNOXMz4GWCc9oqTG7YzONWKSLGG.Bi1unapq69BJTYUTE57u.WHz88C
            
            JayJ 1 Reply Last reply Reply Quote 0
            • JayJ
              Jay @pluginboi
              last edited by

              @pluginboi when opening the snippet is giving me this error

              Screenshot 2023-07-02 at 4.02.58 PM.png

              Joansi Villalona

              pluginboiP 1 Reply Last reply Reply Quote 0
              • pluginboiP
                pluginboi @Jay
                last edited by

                @Jay Do you have different sub Preset folders set up in your Userpreset project folder? and then edit this line to be the names of each folder

                var presetFolders = ["Factory", "User"];  // update this with your actual folder names
                
                
                JayJ 3 Replies Last reply Reply Quote 0
                • JayJ
                  Jay @pluginboi
                  last edited by

                  @pluginboi Thanks a lot.

                  Joansi Villalona

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

                    @pluginboi what to add, to make it show the selected preset on a label?

                    Joansi Villalona

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

                      @Jay I figure it out

                      Joansi Villalona

                      1 Reply Last reply Reply Quote 0
                      • JayJ
                        Jay @pluginboi
                        last edited by

                        @pluginboi I was wondering if you know how to save a preset to a file because I'm using this and is not working

                        inline function onsaveOkControl(component, value)
                        {
                        Engine.saveUserPreset(presetNametoSave);
                        };
                        Content.getComponent("saveOk").setControlCallback(onsaveOkControl);

                        any idea why?

                        Thanks in advance!!!

                        Joansi Villalona

                        pluginboiP 1 Reply Last reply Reply Quote 0
                        • pluginboiP
                          pluginboi @Jay
                          last edited by pluginboi

                          @Jay this is how i save them to the 'user' sub folder but you could get rid of the child folder to make it general. I found this in an old thread I think @Dan-Korneff posted about out so he may have more info if you're doing more customization

                          var pre_folder = FileSystem.getFolder(FileSystem.UserPresets).getChildFile("User");
                          	
                          	function save(file)
                          	{
                          	    Engine.saveUserPreset(file);
                          	}
                          
                          
                          //// Save as Button
                          inline function onSaveasBTNControl(component, value)
                          	{
                          	if (value)
                          	    	
                          	 FileSystem.browse(pre_folder, true, "*.preset", save);   
                          	 
                          	 PresetHandler.init();
                          	 populatePanel1(); 
                          	          
                          	 UpdatePresetLabel();    	  
                          	};
                          	
                          Content.getComponent("SaveasBTN").setControlCallback(onSaveasBTNControl);
                          
                          
                          JayJ 1 Reply Last reply Reply Quote 0
                          • JayJ
                            Jay @pluginboi
                            last edited by

                            @pluginboi T h a n k Y o u

                            Joansi Villalona

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

                              @pluginboi

                              This is always showing one preset name behind it. Do you think you can help me with this?
                              note: it's doing it in both examples

                              namespace UserPresetWidgets
                              {
                              	inline function createPresetButton(name, x, y, up)
                              	{
                              		local widget = Content.addPanel(name, x, y);
                                  
                              		Content.setPropertiesFromJSON(name, {
                              		"width": 10,
                              		"height": 15,
                              		"saveInPreset": false,
                              		"allowCallbacks": "Clicks & Hover"
                              		});
                                  
                              		widget.data.up = up;
                                  
                              		widget.setPaintRoutine(function(g)
                              		{
                              			g.setColour(this.data.hover ? 0xFF65B17c : 0xFF2C4433);
                              			g.fillTriangle([0, 0, this.getWidth(), this.getHeight()], this.data.up ? Math.PI/2 : 1.5 * Math.PI);
                              		});
                                  
                              		widget.setMouseCallback(function(event)
                              		{
                              			this.data.hover = event.hover;
                                  	
                              			if(event.clicked)
                              			{
                              				if(this.data.up)
                              				{
                              					convoLbl1.set("text", Engine.getCurrentUserPresetName());
                              					Engine.loadNextUserPreset(true);
                              				}
                              				else
                              				{
                              					convoLbl1.set("text", Engine.getCurrentUserPresetName());
                              					Engine.loadPreviousUserPreset(true);
                              				}
                              			}
                              			this.repaint();
                              		});
                              		return widget;
                              	};
                              }
                              
                              const var UpButton = UserPresetWidgets.createPresetButton("UpButton", 749, 10, true);
                              const var DownButton = UserPresetWidgets.createPresetButton("DownButton", 736, 10, false);
                              
                              
                              
                              
                              
                              // ============== second attemp
                              
                              // next
                              inline function onnextBtnControl(component, value)
                              {
                              	convoLbl1.set("text", Engine.getCurrentUserPresetName());
                              	Engine.loadNextUserPreset(true);
                              };
                              Content.getComponent("nextBtn").setControlCallback(onnextBtnControl);
                              
                              // prev
                              inline function onprevBtnControl(component, value)
                              {
                              	convoLbl1.set("text", Engine.getCurrentUserPresetName());
                              	Engine.loadPreviousUserPreset(true);
                              };
                              Content.getComponent("prevBtn").setControlCallback(onprevBtnControl);
                              

                              Joansi Villalona

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

                                @Jay You have to load the preset first, then get the name, you have it the other way around

                                if(this.data.up)
                                				{
                                					//	First load the preset
                                					Engine.loadNextUserPreset(true);
                                					//	Then get the loaded preset name
                                					convoLbl1.set("text", Engine.getCurrentUserPresetName());
                                				}
                                

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

                                JayJ 1 Reply Last reply Reply Quote 0
                                • JayJ
                                  Jay @ulrik
                                  last edited by

                                  @ulrik Thank you so much, you're right

                                  Joansi Villalona

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

                                  14

                                  Online

                                  1.7k

                                  Users

                                  11.7k

                                  Topics

                                  102.3k

                                  Posts