Dug up this old script which I am going to modify for my own uses but I thought it might be helpful for some beginners or at the very least a time saver for others.
It's a very simple preset display bar (a lot of this looks like it was taken from David's videos, which is a good place to start). The script includes:
Preset Name Display: Display the preset name in a panel
Open/Close Preset Browser
Previous and Next Buttons
A few LAFs and Paint Routines some may find valuable.
It's not much to look at but hopefully useful for someone!
ScreenRecording2025-11-15at8.45.48AM-ezgif.com-video-to-gif-converter.gif
Snippet
HiseSnippet 3016.3ocyZrsaabbcorW2R0jlDz7PebCQPAUBixRRQa4ZXTck1BURlUT1wAFBFC2cH4TsbGhcWJa0DCz+fluf9Ozel9bepO225iomyL6kYuPxkLN.cW.ItyYNWmybNm4ROOtE02m6oUYyKucJUqxGn2+V2fwGNlvb0N4HsJ+J8ddTeZvADOsCtcJw2mZqUoxcdB1gJUuql34+7GNf3PbsnIMoo8BNyhdJaBKHo0d68GYNNcI1zKYST58N6chE28PtCeFHL2Q2TaJw5ZxH54Draanq8Th+XsJeg982cf4Cd3vcG1hRGLv5gDayNTp08ICF7.SRyV1Co6Z2ocasJ26XaV.2qe.If5CD8.t8s8GyeiqjAuf4yF3PwOZp0G3rrYsCGybr6EYY70zpb2dI1o6HsSep9YLaVb6I1qOV.vHACUiVkMVjH0bEDoJJhzckhzmn22xiMMHAhb76D2.p2PBL1nJJx9pswe+yzOjC8vMX6Ijqoc8fOhwn9NllMLZaZt0i1bSX7wOv3Fhmgkavqi8JLdrQDAFQCNjOYJ2E9ndsT8pFPgBIfG+M9zRQDYOqkVTFD3FB+b5aClKYR2szBSBL3u2TBRfcKMIl55DB6Hl+TGxsykJ45YZBcs6fPvBWDjFdbm4Rsh6dFSzojggc50GLKH.ZWgdVdT.wS4VDmS47q220tKk5TGofKLyyGlERMhGE2761r5W+0FOt3GEXFce94Gd4IO679F4fU.dLWGlK0X3LWq.F20HfOZjCUxVTRgIWTu5L+mMk5t0lUAov.dX9wvP.fVI6wijfy45r8PHrSh0S14FFCCCFsUHd4Fh11iNE3R.ZUp9tMEpRzHygDGmAPjJ+MERTF8f6l1wKDq5VQBQCXDxYFcKA1em3uB5LrtR63S0icGAjdaGNwFozyA8QR25CIN9nvicCjtkIGn266G4.oDiOye9xR07BRwtrEHIQixNnuog0LOO.pDSXjNTLvoCRHIBAlwndzfIanQ8L39XiZ01RBMjEEOpi5Ss.LbQizrOh1uS9OJnxuGIWob+NwkEvHNr+BUwCrZZmssCm7.l2n9TeNNjHkS6grLjU7hPjKdTsXhTbewHNnls+zoN2Zb59cKRcxEmJershUkxgnP.B+byp46BLRLh4C4F6F5OWulsG4MWJhVI6CL3F4rWeTCC9f+bhmrHyG2CBWcAwlMCCCuCxTDFv39ybuFhhgVoQd7Yt1Idv.Y11FpRHua6HT6dhGPOvepKTZU8WY91tca0AeE7eaBDh+UlWo7QyqZjPgBdPJz1DemOEL9xjuZeEFEElFbUASMhU.9MTuRq.M2Ee+on.sZiuuGTfxJxlCw2eJhbSB99STjGs8PPjt.cfn1WPsBHtf2Y8HDajxEbKE+uSbwvi9iIfmVDoF.N7tmRtEx9F3MKNEYgVf6aJeVGKf4aMWJ1f1uaVcdNJ6qTnAfVyrzQsgVWY7UFsZnZYwFtJsgBZpYBSGQl46yHtG3Lyqdqj1ot1Rikpc8INPQ2FzgCAwaI1ULBwHr6OkxFMFyyoJUegg416rnQfVc5JdVyQfkhMX4Tjt0arnUVJ1J6XwNMT4R9wgVyYbn4RFG12CJCzvO3VnjjQoishglL99u2XIwYkKOsNNU8nCw2RGsPAy86dXqCeXBlwx2QPpDCBJj9J4Kn3ZwdopmfYp3.fI6qMZ8nrX7spXjMxQFLD7rOVKgRBoHSCyVTwT1U+TfZhoBOEJJqdjL+kITtQrh7U4a7aKrwFFM2tSjYZNb3qJhCeYgDKhUofpvgEODt9bds0sRa8Jkt8tnxad7BdTW.Wu8O47KMt3YO+xSN+3xrJNYGD83EDOFYfCE7iSVF527zSt7XvCSjpT77HUvO6h8O+IQvO7A3K.GJ3Jd8Y.rVBjvFY9OEmzRAuSYXn31ytlvPnBAqGVGsADhJ.5fuwuy3LX4KoJgN0lVfybEnDhQ8jR6RWU2.LnGVOWvXlOtnDQ8lGHZstoZz8L0+sqR7oChK7yXTXf8EDqGpPqC91Hj4hX0g+bww4SpynHLAmnvemuBi4DgW1+4WXw4bFXjwk9LyitzJKH11BDpqLArFwY5XRseOj.zrihtUaB2kaM1iOgDvr.3HoTg6CCCztDq.tm.6G1IbFwRxUTTsPELHzItnkUcPvbgXhknb+xleMl.xjopDo0hq4LrqQYciG2wOKNuarA5R9TiwP9YGLG8BrPsMiJpX0sPKBSP4VKCTyLV4xaf.S6NEWTXxLXNrDvIkxtrTsScvX2EYmZ1orT58f8RUpZuR1tVK014YS87ULYJ0L0wDeSjaLYYoBC0PspcUZ1Nb92Rn46OeGUKWQ1hPIUlmtvcOpTYhHqQRncTAs56yVY1.iLokW48wPtTDwJXRs6DIsiE+ThMhHttgUdmHxJBQ6uvpHBq5VIjkmQItKKOmyL7B1D.kLeP6f2JNarnIN6VxINIK8NYM2IK1lrrIBueV87ptr4z1ayBZe8VBbxZeSVz6Oyq1UZ2hSEYf6CeQim6DlHpjpP6XUncrJ.IhalWvaWbf2l432B8e5jxMGHamX11zrP9l0A5R7bAs.16M2vQ3R+WVfgetW6OeJtwCxEvkYo4uT3IaJMBRUuS1ku+sh9jXnV3J7qlYImgbI0hKks0Hh5xYsxeKbeUVdYNJEgc5EjphsJUkTJ1TDl5AWtPhBfesuGEyt8J0IoQQT5HCobkpKWWNdDoCg+VCJ+vbkOQHoZsOL8wkZidQ0qcDcHYlCRuHApgQMb02feSsxuSBpzLknrL5tfpCDqjM9TVhKOfdCPEkiLETdQSaa4vrttHu8hO60OKaFbkMuPTug5gToXERX33h2+e0ExiAyKIcKz5VzlBrLhglz2soxATdNOf9L25agm0M.wHKngCKDV3wX4fggK.LtAFdKBw5tylLf5Ee7mgcTqxcSekQtW4txHVxy2WoibW7PCwwN42c4N13UAA+c9KXhV3ED.upIgRHz0.wEM4WGdQS56vfhDzX.Q9s5EepdZBsQ8RAo87SNhDPhnqv0mOk5EvPsqxQzaXVT4EZop9QT+qC3SANGer8fEPJEeXz0cg3RcDBwGomZ2azdqJeuU8i2vrCFqUQuxOTQSarHyK9UW.TJVsYZEVdDeBd8w5oOcREl8ulsmBy978hYVKMUlge4StgdhqjJ3kxYJAiEnH.YUIl+Y7I.DhGvhJaLQLoelm3Z.8o583fyMyczSIt1gspsxZCt+tpltO++S0lpyyM32nmK.op9b9bzmZUxpOPvT9ah2aPzJcHFzD22PQbFskpfXzbXFrduVoD8ew7E8bWZk44E+W+S6MGu3+M.8lnnBUtCNOKlyePP3sWSx4tNbBZhujA8UNERsol4XtdkEL8AYbNSRQpT3De4r7OROMvAihtEfUuGPv+KxPV.cRRq+ie7G9wzs1JryhGQ3kM9mani2ikZXDv9fiY3wyGsEggPN9sSIt9PfX+8g7aNylf8Pj5HtKh3jdEiNlPvOGMg30gWX.UPIMCoP.8EfAUvFgz911EyhKn38vpXXGQcnAyAVeJwyZLdy6T.zkbC2CLa3csLVJRDBUvoPaliSORv3H39oLRg55IfczlJ2FmTvOe1DooEQqsnI42eC5FcA3swA.uRbmgL2tclmFqX6PyWI3woLeQkTw5YHGZTz+hwRJYWveSOhsMLMnr3Eatk62BhlDvYbuvQnrPR7JyBIxNmC5luKUbj6s54imWNwK2aBIA1d+s8Thfnk+tl9w5mwsm4PBRe0WwKEbH.XNUp6aJdmRAOjfaUuzvqv8g0bg2G1xJhehdOVf03hkwMJPFgBB94PFCuEwen9whM1HQ.uqd2WttWY3kvd4VGN5LRfGCFp0g4k8gXmVTf6tPFHeLF9FXoexuMiB22m5ZK93GgmPfMwuqDBrYDPsIDKO9qsjNa38T9WJZAjIWw83tp9Y32FMyWX3DlM60VVoIUNDastH1dcQbm0EwNqKh2ecQ7AqKh6tbDwa099yBDmzFLsQS6rdGKxzVoxwt3g8J7V09ecu4xY.
Code
Content.makeFrontInterface(400, 300);
const var cnt_PresetBar = Content.getComponent("cnt_PresetBar");
const var cnt_PresetBrowser = Content.getComponent("cnt_PresetBrowser");
const var btn_PresetNext = Content.getComponent("btn_PresetNext");
const var btn_PresetPrev = Content.getComponent("btn_PresetPrev");
const var pnl_PresetDisplay = Content.getComponent("pnl_PresetDisplay");
const var knb_PresetStateControl = Content.getComponent("knb_PresetStateControl");
const var Laf_Preset_Buttons = Content.createLocalLookAndFeel();
namespace PresetBar
{
// =======================
// ====== FUNCTIONS ======
// =======================
inline function togglePresetContainer(isOpen)
{
isContainerOpen = isOpen;
cnt_PresetBrowser.fadeComponent(isOpen, fadeTime);
pnl_PresetDisplay.repaint();
}
// Control Callbacks
inline function onbtn_PresetNextControl(component, value)
{
if(value)
Engine.loadNextUserPreset(false);
}
inline function onbtn_PresetPrevControl(component, value)
{
if(value)
Engine.loadPreviousUserPreset(false);
}
inline function onknb_PresetStateControl(component, value)
{
local currentPreset = Engine.getCurrentUserPresetName();
if (currentPreset == "")
{
pnl_PresetDisplay.set("text", currentPreset);
}
else
{
pnl_PresetDisplay.set("text", currentPreset);
}
pnl_PresetDisplay.repaint();
}
// Initialize Callbacks
btn_PresetNext.setControlCallback(onbtn_PresetNextControl);
btn_PresetPrev.setControlCallback(onbtn_PresetPrevControl);
knb_PresetStateControl.setControlCallback(onknb_PresetStateControl);
// Apply LAF
btn_PresetNext.setLocalLookAndFeel(Laf_Preset_Buttons);
btn_PresetPrev.setLocalLookAndFeel(Laf_Preset_Buttons);
// Buttons
Laf_Preset_Buttons.registerFunction("drawToggleButton", function(g, obj)
{
var cornerRadius = 4;
// Sunken background
if (obj.down)
{
g.setGradientFill([0xFF252525, obj.area[0], obj.area[1],
0xFF303030, obj.area[0], obj.area[1] + obj.area[3], false]);
}
else if (obj.over)
{
g.setGradientFill([0xFF181818, obj.area[0], obj.area[1],
0xFF232323, obj.area[0], obj.area[1] + obj.area[3], false]);
}
else
{
g.setGradientFill([0xFF0f0f0f, obj.area[0], obj.area[1],
0xFF1a1a1a, obj.area[0], obj.area[1] + obj.area[3], false]);
}
g.fillRoundedRectangle(obj.area, cornerRadius);
// Inset shadow
g.beginLayer(true);
g.setGradientFill([0x60000000, obj.area[0], obj.area[1],
0x00000000, obj.area[0], obj.area[1] + 8, false]);
g.fillRoundedRectangle([obj.area[0] + 1, obj.area[1] + 1, obj.area[2] - 2, obj.area[3] - 2], cornerRadius - 1);
g.gaussianBlur(2);
g.endLayer();
// Glass effect
g.beginLayer(true);
var glassHeight = obj.area[3] * 0.4;
g.setGradientFill([0x25FFFFFF, obj.area[0], obj.area[1],
0x05FFFFFF, obj.area[0], obj.area[1] + glassHeight, false]);
g.fillRoundedRectangle([obj.area[0] + 2, obj.area[1] + 2, obj.area[2] - 4, glassHeight], cornerRadius - 2);
g.gaussianBlur(1);
g.endLayer();
// Arrow styling
if (obj.over || obj.down)
{
g.setColour(0xFFDCDCDC);
}
else
{
g.setColour(0xFFAFC2C9);
}
// Draw arrows
var centerX = obj.area[0] + obj.area[2] / 2;
var centerY = obj.area[1] + obj.area[3] / 2;
var arrowSize = 4;
if (obj.id == "btn_PresetPrev")
{
g.drawLine(centerX + arrowSize, centerX - arrowSize, centerY - arrowSize, centerY, 1.5);
g.drawLine(centerX - arrowSize, centerX + arrowSize, centerY, centerY + arrowSize, 1.5);
}
else
{
g.drawLine(centerX - arrowSize, centerX + arrowSize, centerY - arrowSize, centerY, 1.5);
g.drawLine(centerX + arrowSize, centerX - arrowSize, centerY, centerY + arrowSize, 1.5);
}
});
// ============================
// ====== PAINT ROUTINES ======
// ============================
// Variables
const var WHITE = 0xFF000000;
const var ORANGE = 0xFFC7C7C7;
reg fadeTime = 200;
reg isHovered = false;
reg isContainerOpen = false;
// Paint Routines & Mouse Callbacks
cnt_PresetBar.setPaintRoutine(function(g)
{
var bounds = this.getLocalBounds(0);
var cornerRadius = 8;
// Background gradient
g.setGradientFill([0xFF353535, bounds[0], bounds[1],
0xFF1a1a1a, bounds[0], bounds[1] + bounds[3], false]);
g.fillRoundedRectangle(bounds, cornerRadius);
// Noise texture
g.beginLayer(true);
g.addNoise({
"alpha": 0.05,
"monochromatic": true,
"scaleFactor": 0.95
});
g.endLayer();
// Inset shadow
g.setGradientFill([0x50000000, bounds[0], bounds[1],
0x00000000, bounds[0], bounds[1] + 16, false]);
g.fillRoundedRectangle([bounds[0] + 2, bounds[1] + 2,
bounds[2] - 4, bounds[3] - 4], cornerRadius - 2);
// Top highlight
g.setGradientFill([0x30FFFFFF, bounds[0], bounds[1],
0x00FFFFFF, bounds[0], bounds[1] + 6, false]);
g.fillRoundedRectangle([bounds[0] + 1, bounds[1] + 1,
bounds[2] - 2, 4], cornerRadius - 1);
// Bottom highlight
g.setGradientFill([0x00FFFFFF, bounds[0], bounds[1] + bounds[3] - 8,
0x15FFFFFF, bounds[0], bounds[1] + bounds[3], false]);
g.fillRoundedRectangle([bounds[0] + 1, bounds[1] + bounds[3] - 3,
bounds[2] - 2, 2], cornerRadius - 1);
// Borders
g.setColour(0xFF505050);
g.drawRoundedRectangle(bounds, cornerRadius, 1);
g.setColour(0x30000000);
g.drawRoundedRectangle([bounds[0] + 1, bounds[1] + 1,
bounds[2] - 2, bounds[3] - 2], cornerRadius - 1, 1);
});
pnl_PresetDisplay.setPaintRoutine(function(g)
{
var a = this.getLocalBounds(0);
var cornerRadius = 4;
var currentPreset = Engine.getCurrentUserPresetName();
// Sunken background
if (isContainerOpen)
{
g.setGradientFill([0xFF252525, a[0], a[1], 0xFF303030, a[0], a[1] + a[3], false]);
}
else if (isHovered)
{
g.setGradientFill([0xFF181818, a[0], a[1], 0xFF232323, a[0], a[1] + a[3], false]);
}
else
{
g.setGradientFill([0xFF0f0f0f, a[0], a[1], 0xFF1a1a1a, a[0], a[1] + a[3], false]);
}
g.fillRoundedRectangle(a, cornerRadius);
// Inner border
g.setColour(0x80000000);
g.drawRoundedRectangle([a[0] + 1, a[1] + 1, a[2] - 2, a[3] - 2], cornerRadius - 1, 1);
// Glass effect
g.beginLayer(true);
var glassHeight = a[3] * 0.4;
g.setGradientFill([0x25FFFFFF, a[0], a[1], 0x05FFFFFF, a[0], a[1] + glassHeight, false]);
g.fillRoundedRectangle([a[0] + 2, a[1] + 2, a[2] - 4, glassHeight], cornerRadius - 2);
g.gaussianBlur(1);
g.endLayer();
// Glass highlight line
g.setColour(0x40FFFFFF);
g.fillRoundedRectangle([a[0] + 3, a[1] + 3, a[2] - 6, 1], cornerRadius - 3);
g.setColour(0x10FFFFFF);
g.drawRoundedRectangle([a[0] + 5, a[1] + a[3] - 5, a[2] - 10, 1], cornerRadius - 1, 1);
// Text color
if (isContainerOpen || isHovered)
{
g.setColour(0xFFDCDCDC);
}
else
{
g.setColour(0xFFAFC2C9);
}
// Dropdown arrow
var arrowX = a[0] + a[2] - 15;
var arrowY = a[1] + a[3] / 2;
var arrowSize = 4;
g.drawLine(arrowX - arrowSize, arrowX, arrowY - 2, arrowY + 2, 1.5);
g.drawLine(arrowX, arrowX + arrowSize, arrowY + 2, arrowY - 2, 1.5);
// Preset text
var textArea = [a[0], a[1], a[2] - 25, a[3]];
g.setFont("font", 20);
if (currentPreset == "")
{
g.drawAlignedText("Default", textArea, "centred");
}
else
{
g.drawAlignedText(currentPreset, textArea, "centred");
}
});
pnl_PresetDisplay.setMouseCallback(function(event)
{
if (event.clicked)
{
togglePresetContainer(!isContainerOpen);
this.repaint();
}
if (event.hover)
{
isHovered = true;
this.repaint();
}
else
{
isHovered = false;
this.repaint();
}
});
}