Dynamic keyboard colouring



  • Hello,
    Im trying to colour the keys with a user chosen colour from a colour picker (created by @d-healey) but the colour does not want to appear on the keyboard.
    I can colour a key I want if I directly specify the colour, e.g.[Engine.setKeyColour(i, 0xFF1C00FF);] but, it does not work with the colour Picker value.
    Why could this be?
    Is there a way to REPAINT the key[s]?

    Thanks very much!

    const var samplers = []; 
    samplers[0] = Synth.getChildSynth("Sampler1");
    
    
    reg i;
    reg colour = [];
    reg colourString;
    
    const var alpha = Content.addKnob("Alpha", 0, 0);
        alpha.setRange(0, 255, 1);
        alpha.set("style", "Vertical");
        alpha.set("itemColour", 0xFFAAAAAA);
        alpha.set("bgColour", 0xFF000000);
    const var red = Content.addKnob("Red", 150, 0);
        red.setRange(0, 255, 1);
        red.set("style", "Vertical");
        red.set("itemColour", 0xFFFF0000);
        red.set("bgColour", 0xFF000000);
    const var green = Content.addKnob("Green", 300, 0);
        green.setRange(0, 255, 1);
        green.set("itemColour", 0xFF64FF4E);
        green.set("bgColour", 0xFF000000);
        green.set("style", "Vertical");
    const var blue = Content.addKnob("Blue", 450, 0);
        blue.setRange(0, 255, 1);
        blue.set("style", "Vertical");
        blue.set("itemColour", 0xFF1C00FF);
        blue.set("bgColour", 0xFF000000);
    
    const var code = Content.addLabel("code", 160, 70);
    code.set("bgColour", 0xFF000000);
    
    const var pnlColour = Content.addPanel("pnlColour", 0, 50);
    pnlColour.set("width", 150);
    pnlColour.set("height", 50);
    pnlColour.setPaintRoutine(function(g){g.fillAll(parseInt(colourString));});
    
    
    inline function convertToHex(v)
    {
    	reg hexTable = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"];
    	reg d1 = hexTable[Math.floor(v/16)];
    	reg d2 = hexTable[Math.floor(v % 16)];
    	
    	return d1 + d2;
    }
    
    reg cs;
    
    inline function updateCode()
    {
    	code.set("text", "0x" + colour[0] + colour[1] + colour[2] + colour[3]);
    	colourString = "0x" + colour[0] + colour[1] + colour[2] + colour[3];	
    }
        cs = code.get("text");
        //Engine.setKeyColour(27, cs);
        Console.print(cs);
    
    
    for (s in samplers)
    {
        for (i = 0; i < 127; i++)
        {   //Sampler1
            if (samplers[0].asSampler().isNoteNumberMapped(i)) 
                Engine.setKeyColour(i, code.get("text"));
                //Engine.setKeyColour(i, cs);
                //Engine.setKeyColour(i, 0xFF1C00FF);
            }
    }
    
    


  • It will be easier to assist if you post a HISE snippet



  • @d-healey said in Dynamic keyboard colouring:

    It will be easier to assist if you post a HISE snippet

    Sure!

    HiseSnippet 3132.3oc6as0aabbEdojVYQlnbwH.sEHOrgosfBQQlj5lcTCBknDsUijsfnhcJBBbFs6PxAd4NK1cntTCCzG6uf7bdNO0eBF809X+CjeB4w9TUOmY1KyRRIQkH6X2PBi06blyLy24Lm4LeyPp8B31zvPdfQt7GbpO0H2aZ17TOQm5cHLOis2zH2zlaR6xM13TeRXH0wHWtIuKVWt7SYH+7ie1FDWhmMMUjgwC4La5NrtLQpzuo1mybcaPbnGv5po8R011l6Um6x6A3XRyxF9D6mPZSuOAUaBS.Da4vD7flBhfFZjapM3Nm1rC+XOk9OjExNzkhEpXzD5Hk3FbWGDwnTi5cXtN6EaugFF4twdoV+jJq+8L2k4vRjm5EdGYEVosP2ejahKBdUzgW4QGd4zf2TJ38tlMsCX9hzZPr81l6BvbaOAMnEAlFzglReiIt4aXVmCZ3IVHjJdDyQzozsWt7bqMaAM42ixZ2QTZ4xxJls.LsDJrNhDXER556RCBs9Tqu5qWypPb4up7WChjgLKzlJjVgrTohMUpTo3bqUnPg.ZaK1Zx+yVNSq5IMAMEALu1ftoiJw0uCATLFhDGmO2ieXohqiUTbdqxv+ft2B9H0EMh8IdsokfZpt7xyaUo+pKULTbpKEZbwGRCDLahawA0gIncUQj3nbRiFqK+LnhG1NiZkke.0RMh.pyvLg8oNPaprrlI.Zd9FPTkW.7SzX.vqvU+pc4Puc.k5MLveWrBncKVVC9RsOeCHo5g.vUVpQik1ZPEOOH1mZC0kjZFG51iNLqXCPNzpkzmCPcOeaHt1KXVHUkArxJ0KWtQiAz67LRMKvl6zmErC4PpaohXEXXzJ.RWUM44L5cquma83EiZ88dDOruSpUsPCyVTHQlZLNFSjnBiGrxNxrIEGVK2CRXI1m2Sv7nkZ0yyVv3dkZO2SauPKXOh0ccK4SBBoPRsR5YGlat0dFzWXtIlmKzXq3FCtHuifohC32idRoilqvSKjGyszgdxADH4KltoXYbBqB9nJ9XQ7wR3ikwGqfOVEeba7wcvGqiO1.eTGerI9XK7QihPxK4H3TA563g4q1k.YBa4x4AkN5VUVYtDspddZY8GrhzC0TzKvC6xOBZwZEdFXnxLjgP93AL4d9NvFN0gY7RR6MctWPOAc7EKeRQnmTdPLUcx6Uzdup16K90f6MutKGf8OktYs7yV3Y37DFqeqa42SnBhg4ctkG8XL9ig9BkF13NKR72NA+3dPpVukWavvQS6yomphhJUc04gVEqCD8FxcoK3CPFBYBU6eMagV7.qRgvnlrCF5ovVHqgAiZ40rXV+IqJUWEd4i9n4j09T43FuElTD9g0B5szs9VfDFoRo4VfEdetfd+dcOjFrKw2m5ThM2bPu.CenknCMFBVGRQ+pcGp8SnNyacL0BLZqPqVA7tREgEFfZP3gexHieFlafM+.tsXeR7mg6+X5tuKUU8zWoM4YpoXvMGGRx8PmvC7TAjP7qU+U0p0PqCS+DvcktxgTMxXL3hZXIOoiedHtBRrJUL7XlvtiUTMyUHOHKuMIjp1+9SfR4Sio+zrYPRR+n5ObUQ975K3jBRSpEP8wbZa2sK0gAJ4dZIzSkOO5mf+6v.J4IXahw.rMrNBp7hEACEBxcP0AQ0WbfH+vg.tKnNBV7EFBRGdbzgHWfUcVZ6ENeZ65mpvVsQolhbf7MS7.eZRY0hfXIkMRh80EkFxqKUFoOD0REM3YELh17FN0fYj5fpB4YFdqnyLzzk4PCLXvwBtgoj+rgzilbNruqcMiQnwll.y09Z5O3LRM8FlRdi82X9H03oMQ5Z82V5fsc1n1JYHE0TLEYbSeSyxmrwlquJvouggwWr8lDAAOtUjOD7q9HkNLhH2lzifywpN7Ud3fvgOQv8ACoNuqO2C834lN6nJ4NIG0YLkuWw3D8CFeZp+lUSReJQv+4uUSQYJQhePMDWIi0rhnSopFqFtbBvfp8ALHJEGx21TWTlQtRszQtFouQ9aFXjM9xZQ9CkwWvD1N3PNIvwHlWIn6zNNNmgZmR0Ekd1Ym86xJsZjXox3tToJ+udtRpbZXB2blOE2eoHLbxSoV7SrprzBkmWJbSVnuK4zGXKHGEsSKTeKhaHUovN7igFBxtip78Xphvl6JA06EJ3cua.wuCyNLai2j1hzyUrNr0MI.uPCnZQPunZ2vkX+Dn21G7ubnlxKrxcjet8sKu5cJuZEkZGva21ktKRKOSmiWeP8NDOHh.wiR3WDReH0FRAoAnzQDpsgKQzTdRirc1daEOcLPEP1r.Q5HUMohs7bz.vJ.8LCH2JLCqEfkDyZnIL+klHAhyLyEEcqdQd7HLrI93QfDpeS1ekpewQcImnmFHaTz2+8euLvPOdCJJkMZvSkpRBtu8ZFb.N9YBt3jgR3MetqW3c+yb9YBunzsRz8OulQ2YFu+HgtoujD5Rv8cwyrMNmdDS2zeV+QI+8aXlPpnu.7pvKwIPm9aiRrmj.c5pw45G7B7dGSHyPOXQc16VDuP0nJ.RsYt.O7Z87BYhS08tuPtvwQEtuq4dHu5gi2I9kAuQWe6rla0pEjPMErSY13KeIbWsSngkYRtHcFdbu6FCkYiDXIkb92mNrUHE1jSWviz1s969umM4yGxMtusjy7dbW3b0hLsN2jYM4IGMdtCwLmZjCQPSx50lP5aZJc4uNAXYHwqO.9cPhEuB.W0cN1dWhHfgI0ARjMgD71zHpQgX98IvsgTkKGm3uI0yQV.YwFUYErbtnJqDWotK4lw4k.xzGwc6IMcze7d5Rr1mBqcOLiOYyfS6Osvinhrh9KOeGv23YmY091c86A7A2g50VigO3Pif01d98D5xAZla.TaaGv644bPG3HxN582dATm9yGcOVcs93u+uqsIoqO3V00oQiChN2TpH3PIpuSuOv7o6s+C9yaU+fG23A6r4V6+rCnghHnuvwjiL5hFpx0K4RXlqbSCC7JwjDbiqCE.Daiq+ZKU2K6.k2W4qtoYSALA.Fe6nKVTFsTvL9lHe498vBy8v4IcxRt6401nGrKaPVo+iZxgZ8tPTTlwJB46SgSUIvyEkV4Or996eWHryu+VAAqHEiCBf3xLgU+3m8.OJLeJzsw5A7vvVf4H6qvLAu8BZSyDNKWpElUFL2pOqhSTvhBLFhYGG.jpsbTJKuGe4WNsrbk9JWsuxK1W4k5q7x8Udk9JuZZ4blYiwuwnEiuKwWxsUSyMXQQYPcJI5YOSbqxgV6aaeHDCl9U5uJ8WdDwmbzf6kvfLeLFUDF2BX14xAIJpUQWSQhTcPtK2i62g6wryFyCwvsaSCxxWbH1y5BArjKUx6UaepKkDpsn82WaGlGkDjco7UxUbIrLyMhSW+VSEbsvzXuZQEZl3aM6gvbjMN5p4tnjgIRuTjB4ghV4mJSwzOaJrMo1L3zwYmTfz+QCjrOj2vlLCx00T00xQFm7WkGYbTccuUTLikh1yq1r7eSS4lUVH2h+elgucbWA1Vz6pEWSR8vUZxaBwEXZ3puXLDnMgPBVAZn9pf6h66NUzuxNztaRNhpVCiVWeriPQ6xr2iCNRXMDtv0bMXjT8kQteC1QROTBO6ObPd1ALhWaW5i+3Ub1PxzdeNRmZJykVwPdc4nU9A.b2gKKLk4hUg2eHZKXmeOl7USyJUWMFgQyWvwY5FMcATMTubedPWhKPUzIpBLQPzTpD2Qz4SEHoyeCykVpR4L5.9EkZ6jdHf3hYZCJ3KkgfZ0GMsf3bG9woof0T7K78Gp7DLHhDrYOeWlsrHDIc0YwW85fEu+KQV79WDK9YpMlE+XV7iYw2O00KhE+M6mEe0eZz3Qxfiow+p2WCxvvqgwXNsi4z9qHNsyXpH+8KJq1UVJkU6eLkUqYtOTVXLs1qOZsKNlV6XZsio0NlVaJs1EGSqcLs1wzZGSqcLs1WbzZWQmV67io0dgzZeYDy0kXGvers5uKALxaFoD.NdxI5YLib9Q+EIXZVdgxFcAhGO11VAZHXM9uNDmG6SBf1Ij6Ph+xTG5OdHMkP2VRwGqFy2v7QTg0Nx.c4uslYL+Xv8iiq7mWiDBt7i0pnCqcm3ZXIemiH5veiPbO2SiVYm05tg5GS2EXb80f7l6hksV7p2jkt5MY4qdSV4p2jUu5M41WTSPVoq2Sv6p1SFDr2Vp7X4RVsjaRi+GvFyu1n
    


  • Console.print(cs); prints the hex colour code correctly.
    I cant figure out why when calling: Engine.setKeyColour(i, code.get("text")); or Engine.setKeyColour(i, cs); the key does not colour.



  • There are a couple of things.

    Passing a string to Engine.setKeyColour() won't work. It needs to be a number or hex value. The simplest solution is to convert it to an integer. parseInt(cs); should work.

    You are setting the key colour in on init. This is only triggered once, when the instrument is first opened. You need this code to be triggered every time the colour is changed. That hex picker I wrote is an old script, I'd structure it quite differently now but in the current state I think your best option is to set the key colour inside your updateCode() function.



  • @d-healey said in Dynamic keyboard colouring:

    parseInt(cs); should work

    It does work! Thanks so much!



  • Coming back to this. Now that the basics are working..

    Im trying to create the ability to colour the background of a Specific panel/label.
    To have multiple Panels/Labels with different colours.

    I've created functions which update the required variables depending on which Panel/Label is selected (via buttons).

    In OnInit I tried calling the functions in an inline function onControl but it does not allow me to run a function... ??
    So I tried calling the functions in onControl using switch/case but although it compiles , it does not work.

    Cant manage to get my head round where I'm going wrong...
    Could someone help a poor guy out? 😕
    Thanks!

    HiseSnippet 2979.3oc4Z0sbaabEFTRvVjIJMIimo8hbABa6LTSRjIg9wwgMiIEonsZjr4HpX6LY7nBArhDiAwhAXo9odzL9x9Jz65M8hlq5ifeG5KPdDxSPcOmcWPr.jTjRQw0tk1Fl6YOmc+N+rGbN.rcH0lDEQC0xke+yBHZ4de8Nm4y50nmkqu11M0xcC8lj9TsMOKvJJh3nkK272GmKW9Ez3e9o6sokmkuMIgjl1iot1jcb66xRn9mp8MtddsrbH661Wg60pssM0uA0iN.vw75k0BrretUWxCsP1lSG.wVNtLZXGlEiDokagMoNm0oG8DeA+O1Mx8POBNnhVGXgDjaQ8bPDiT0Zzy0yocr9FookSuch1OuP6uk9ttNtComXE9P9DFIRnZOxM2EAuJpvq7rCubJvaAA79H8N1gtArjYPr8qz2Ef419LR3QVfaPEZB90ly4CzaPAN7YqDQXOw0g0qzWtd4kqtTAE5Of31sGqz5k4Sf+Ijz0vsp3+sipJoXy8UFesw2+rpJD5vBc86xkDbnQLiisBM5P7H1LhyAss7IdfLw6WWBqAse.0GFTpHe1JEWtZ0wJ7NVGdABymUJ7su8UauMu.wmgcWJdAEva4EzyRQJKGmuwmdXoh0wIJ94Fkg+tb0BFvGNunKXOK+tjRvLlqu9maTI6zkJFwNyi.BW7wjPlqskWwQ4wkQ5KNOg6xosZUm+YTFOraJ1Jy+.rknDgDmwoB6Qb.YVuRhF.LNY7Km7BP+PNFA6BXkksoi7tgDh+3v98wI.4pT1LA9btmrBLb5w.vMVqUq01ZTFmDDyv1XMIIpwgdCHiSK1DniJw5qlnDHuSVGhm8B7BIrLhVVoQ4xsZMBeSRIUz.apSFMfehoTQbBPNSy0PmwxX1EWeOWehwQC7sYtTePV+iALtO8AjSKc7xEdQg7X9ldjS22BRohofJVF0jJ3ES7xp3k0vKqiW1.ubG7xWhWtKdoNdYS7RC7RS7xV3kVEgDZ7cvoBr1way2uqEq2JG4QogkN91U1X4gbYNItL98FR9PNYCB8wk7y.IpV37zYHEFvJGbHyeh4XT3o3xoRQJx8M8TipxHR1N8bwiCmly.NMmDNMmdRzQvo4zyaKtW0nQOCBbf6HiBGR8hpTBheVhG+dYuoTFolw6FYrjvUewvx7pAKye1vBta0jPlCIAT3oTwYcF4TFdJo7oEgHYw87+9xOK46UT9tox2W8Yx7Fp0I..8prRRkVb812tCgYzt9C2ZGiCghF6FRG36DWexgVPUPFXVjdzHhuj7RExm1NiJWanBJ1dzALvbTJ1bTp6xun6JGAEsV2yqTfUXDApxpjpRr7xUOGrnb.AKr.O6TeyqHd39nQRrlZCqNz6k04EWCMOKgL5B.qL.3ygSTPV6kWpvK.zlWX+LDFwQNmviQTpM7BRFgnUJYCKOOTqKMNjjbJcxH2bZHWfZfiHpGYk.vffVJluozF8UFEMvMJ+zgu4zgu4DfuBteHkQdjeI9MlJbdAirSczQicN4h5QBG6zX+QgWjfk7Gz+PRXrkAYL5DWlcOC4LKWHOXrxKBLyK7xhOvv71Pfn5sc9JknA3yXCGhmL4aGFRrdd0BoIprzlScoMSuziw2ZZbFI5dwkmjrqo0sjkHV43039Uvn7IIW95zUSL77rvFBaAvsZBvph0Spl4yGu1PMnpqbkqvJOtkkWRn5BadEV37iGxX8ZpK8pWkkd3BmGigR9mvtedgyg9TS2HbgI2HrZe51hioJLRg1YcYOJfLbr3fVLkxZCOeoRJ4XkJU9oowvVBoQ69VSl5.5COujcfUFuK7OP1EdGOWGRnlKzn8M048zowMdCexF0ddMsYPXccnaprh1alD8l57lYxH7qrmIgugN1CQ1MlLprKIkke2IonXUAwh995kOsY8Fl2cq500l3Nu4.Fi5yEeIckjOwqhdNN.l9luntnTlXAmS+RsolpaZxCwZ12XS0M9a2toEyBebMxHFHJJ.6pBi+y0jbrqMQ7vaxq2jD8bFM.baCuajVt2apAUmFaaNK9K792fiW5w8uATHAcb+yozn9VmNb3ORqkzQGP8F+vO7CuFmHtLCjFLjS6D7wCkrRaWqG+4BoRQalz.QjMG+qdMie.p+xi+3iWbM3nqYM3gu14WdMPdFmq.+0qYE30Zex0kBbiojngi+eLF+Elvlh8mLZ1nIsI7Z+4axB5Mpncp5iu9rgCd4SqkVWp0OqtT6w0xM+n6yTy6kri09tZI6n1cqEZ43RuOz6Pfpy.tEMr9JaDG2pZX9olxTQKWUcOamQKe4t0DVSHGWVW250FORRbISzEjeRtfE0E8ZOQ.pMJ.yfqWtyTwEDyt0e+efLCk5SOItf+H7YnCs3YjPXViaLmTbiQur.dj3lWdoiaLyD2nkJt4ObIhaLuTwMozRSk87Usqk0quZctW+ma3TZ.t3ThalH.0t0UMtwLS7b86twZqsdqVvYkQduLen9tTmAdVrzuxH78jIm.5dK06kAeaM9QtryTcT+h7djlU39Q5swFHGOdm6+N3U9V4VReqiNhXyR.6B5sd5afWA2bJXYwgueT29Adj6GCkkjDL3Tl7qIUSqIwyRMil1SThL+a+6WO+qFyKRcadOZsodVgor9.5lOsJO+r0r0XTyEl4PDTkLdmIj9i04l72k.LOj3cG.+gX522Bfq3I21cWKVnKVq3CGzuCj41l.P0Gt+PDV13bX2khwkiKCtCw2gO30vG4jUvw4jSVIdRUSxGGmWB546Xp2.tpi1iaoRwXOBb18vT1jlgmkMsvSHrzj9tWsCXa7sScZe69AC7hH6P76pVX8OcOIr11OX.Sk92FQ1b3Sfd+dgDKG00qcHwIa9nG31PYM9K+qZMs5G.lUUdZ0ZeY6rIjb8j+TM9T8WzduG8G2pw9Gz5Q6zbq8NeeRDSB8UNw5Xs9nhJL87dKzyUtillGkF.ADgr34PBa46DO+0Vpt2zAJehvV8w5cXfC.T9tcrvaVH9gaLudm2r+tZ.mtG0xIcWdup1lCfauFll5+rFeqp2GBeRsWREXOR.whsK1b1vI+w56sGu5yrRAQoXsE6GBAjohm9o68HeB3HYp5XiPZTzQf5vWqnTQsCB6RREGyOiEklF3TUcmnGBNMfAOt1wd9Dt46RY9avkWeJebkLiMyLd0LiWKy30yLdiLiuSx3b5oCtu4rEbuqU.uzWEN2zUFdAyInnl1bnYku0J+5oFSEA23s5eZTu4p.e9YCtSozw7wXTTo3VPIcdTfhnlpljirF3wFRUEj6R8oA8n9t1oi4gX3tcIgoKTbL5ScFCNxo1MzdDOhUjxg1eWscb8IVgoOJeoLESo7xbyn652nKfqAlF6sqZfjE+iOsLOpMt6BemLY3PpSEoPdH4I+DZhR7SmBqIw1EZ7NsSAR+K2H9Zvevy7LHWWtpqkdEm++K6UbVMcefLlwPTuya2k2+957aVYf0V7+xk1aGuTftI+t3v07De7jF+Qf3AUZ3odXLBJaBgD9Zfh3N0938cWP9qlF06NVGSDmgQsKS0QHoccsaSACIbFBO3pWE1IwZok6WKpQrrRA1+1QKvNz0xuqG4fuXCmM4kXuGkxeBVqsATP+2P3Ow7OEf6NT9fEzW0D99iQcAW7G3x+ptdEy6DiPo+B5iouzcAkZH9xCog8s7fREcjSfIBjtTNtk0wmPfWG+M0WasJkSwCXWDrsSR0+wCSICR3o7PPk4ktEDm6POIIErBieaPvXoODCLIglCB7bs4CgHo2DAb8srCoGXK+YP.gcKxo.vwm6mWTWZ7ie2n5kWoLz7ji6A11BPCQpwusamCBrBA4X7JBvGK5X6CUgIzrMb3Ah878zeB9aWhGkyaSaQ8u.L+39x6TiCAO5IJSzysau3YbGdWLDcX6lTeuyjGqSqc2T7bYt.kKi.402EGar5kWj0t7hr9kWjMt7hbmKuHe4EIBVDd8ALZewMjABs2RjDK2vSK4lW6+fQI.ES
    


  • Put the buttons and panels into arrays then in your updateCode function you can just assign the colour to the panel index that matches the button index.

    If you have no idea what I'm talking about you should watch this



  • So i watched the video tutorial @d-healey suggested.
    It has helped A Lot!
    I've managed to associate/index buttons to Panels and Labels to change their colour, but....
    I can't manage to get the keyboard keys to colour correctly.

    Instead of colouring a single key(associated/indexed) to a button which is pointing to Sampler1, it colours all Samplers from the Sampler array(SMP).
    I can't figure out where its going wrong...
    Please help!

    Also the Panels and Labels don't save their colour. Is there any easy way to save their state? I'm guessing i have to code this manually?

    Thanks!

    HiseSnippet 3810.3oc6as0baabEFTRvVjIJW7jNsclzYPUZ6PEKSQRcw1Q1MjRhzV0TRbHkkcFOdTVArhDiAAv..JIFOdper8mPequzGZdp+D768kNS+CjeB4WPcOmcwkEfWDkhrqSiXRPvd1yt641d1ucwp5NVpTWWKGoTo2smMUJ06K2rmoW60aSzMk1bCoTSKu9N014gMjVqmMw0kpIkJ0j2CqMU5ojX+99ubMhAwTkFQRRZOKcUZM8N5dQT+5ROP2vnJQitqdGAtWpzlpVlqaYX0EjjIkyKYSTeFoEcaBx1DxRotREMcOKmldDOpqTpoVyRqWy1VGax4eOcW8CLnXgBRMgNhStpkgFJwHUo0aqanUOPickjRc05Q5+jb8+Sj2RWSOjdjc3iXUnD0BQ6QpIFk3UPT7xO9hWJAwaJt38wxMUczs8hpAksOTdKPL2zzi5bHAbChhFmeoI9Yer75V.Gld45PdFspCTHrEYu0x4mWY474ma0Lyjwg1RQeU++eQ+WTcCdg4lTtqxSd5pBDZ54na1Z0LY.OoqmxQDGEhgcaBvXv3Rzzdfo0AYmsLVwryq.iINhJvOFu4bodMHlsnYgZJt7xyqTHY0Ym00qmAEZ7r6Qc7zUIFy1OO5dzN7vIbTNoZ0xre8y3AshwVd1OfsHkvgpMHUnAUCZyxEhz.fwgK+9UNBoOji9jctXkjsSWxa4PolCR1uGVAztB4KFI9LtGtBDV8.DvUVpZ0kpzOiCSDSv1.MIQpwAFcoCRKVCniJwxKFoDHuCWGBpcDdgHV5SKKrd97Uq1GemteP0RKgBTib.0H6rXEPyJVbIzWvl5oaZnaRUNrqopmtkIzVyi.QbWq6SOI6Qyk44YRiS4ZSOYWBjPAmENadTQJfOJhOVDerD9XY7wJ3iahOtE9313ix3i0vGqiO1.eTAeTcVXNMaDzJ.8cvv7jsHdsycngkkS1iVnvJyExUwgwkxuUIjOutNlXGdcf+Uy7hY.8bgg+S4NMqrqBeQmeuxHXbgYDLxa+vs1u4V02m2t8W6g6t6Na2DjthhtBANNnqmGPmmGalAyiMwjZLZVLPW4fYgSDz.kx0pozjzw1f53lAp4I4eJTIag1bsndrL+rRq0aSSMvSOKvTAHlDZbYMMEWdaUJn3YoPbbH8X8RgwnWJ1euTblLYNzxQIqNz77qpnqbmgX9f5t90gftYXw78a7dh9SEBrQYvpiskIT.lW3YFvM1vYAueV8qWXt4VsudialGUmYaZLtcF2gLpNy3fSsy3Me.lVlMMVKFgsASPfhfikw5DCiC.LMYsLSXX7Y.l8+hAL+eXrmUMPelGB2fjQyMC5lRaXAIyTz0NAE+9job5XbwNGF0ZTCRy+2jgD84fxYPMa40lGTvUa+Hig4Oy4BPfBjXlPcWEc+Lnuf2zQLpbO4XOpgN9y2ndpiC1yCbZ1fGBkY3Y5R5Q6ZqAXDWGR8mMblEtP.e0DO5IdXh37mfAYbjUX1hv2KH7dQg2W7o9CuHZLPAOO8j+7fEVvtqWnro3x6RcSHGz1ziwrb5r0fPi4Cn8Nvh3nw5DGBpo9pFlaj0GsB0ufIZACyY+Gukmyfc9f1DTo5k2tRMe89TCGO+SBnd0A34dMr55AgBYCBEx1Ztm2J2gvNhJaXj0l33RA.4YEcfPFlWL2pCHBKMWApUdMAEH8ajISI.4DS7VcHA+bo6AU9pfcKDP9F23F9TdFsmqhWaBFgY5A1GEh+JTmwonoC41EBNQ9lKTidd3aQcYQ+9rHzoEJdS7MbQNQFedXvYvOPg3qdFip9gJY8yLPb8YH6b4zc21xitc2NGPc1hXaS0fQct4h2i3uJlsf.BzDCye3VXfy4UhhEbCWUJ32KhWLSB5BNjYD8H9Yi3+ivxKnjtiYVFxRXEHkjUc3gCrN+zqL8c.Uiau2YTMLqIy5Dr3Exn6w5dpsU7qYtLoC7s9+uE9b3kzpDWpRh0DK7EwsIQkNvgRd1pYhSbPcQwDcAHltVFzb1PXtGGHEH7+Zkf8ID049R2muPnzNpDW93ZUFZds.UjsG0u.JkNJ08ciucfvnDtMLYfh3BMnTl12XjNcvX.6kTbDJb5i.xcr9cPcKaqchcbwKnNF2zkX+t3Oj9E50Wj4ERolJ9I2jY3mbi3AKoxQVJvnk4ll5d6XSCKymZEPIuT3LJQRQSjDoxl+L.1hH0+wEI4i1URJ064yNvpG6Xi9.+iMpogtF0QRWSJ0UkYmBiDyREdTbemUIownwxxMnZIZpj4X0zqJyN9gjMlNVM9Jx3t9S1VecWrsy32V1Ns8aJhBInouuL6jUxW9V4yKMzQdMFRBVyulbxjNIkhu+KGCo3ZxI18QX2Lg7v0h5HVB+1mXqPEFCiw3nNEC5G4TioAsOUo3OPUo3.TkGt4FDOBdVn9Q2PDuMdlM3b0TaPORWkxOYzzxaPcelmksTpoC2rG3n87OVW9vW0vB.mZ1ZWcXNMJEenrHoBRmHN78BKTpWoi007ZGR3qeYo1T8VsENc6GWxWF4BTF4.PwRAvm.duhll1qQtiNeIj5qe8q+kwoVzmLiYD1bDy+yWwoxLMSXjRlggaVX3dDJiy9EJEVJW94YD2P201fzaGUOxQ9PRf5OjX3R4LTy5Xng.sayKeecdQ.ZDmv5cc8r5bOGhcacU23MdC5gjtFdkALNDG7K..U64z0u10Lfc7B8VCb+.PM4ysxsY+t0sxeyam+lE3rsqUqVFzsvCCKVmim295sIlP.CJObhOzktGUERXKHPQiHTaUChWS1w6EuypWIvczWEPteGunQpXXEUL0DDfU.LTXfcXr06cpIWOIX9TufWXm7HFbDbxi.EpcS8uIVljNjSDSIGOV4a+1uk49EipfhLZwCRk1rufzMKMdZ.OCOS9W7BV9AQ8Mu7GrLCSCN7BVC190Zu40.+05XJve4BVAdszmdQo.W4TVvkI+eWf7mYHCJlfq+UkG1fDsHRF4lk2pdsJMFZl6W93DYt+WeSRMpzdkRMovnM8YAEPzvV5qJEMrR2tjCQS25dNVcsE8K.DUXPDFMAUHtfpP5yze2Xl9zmATFBVmEEEy5IrNubqRbeArHdxQe4RiR3ibqC0Ml4L.qYXBrT+BbB47k0FS4DlGT4u82wlPLLrNN3LZcQTAkMLThH3BKdtoYcGJrUc.2wDmsXyhCK1To8axXyXCarXy6bliMKFDaJm5OCrFHjxo9UbvhCyEOR3hBhWQAw6U0KMjXoKlPU.mYvl5RM44K7bnxtzm7CK7rXhoQku8JKszxUq1WDnnJz+0D3ijA3TcAjPwuAC301vuBcHpQ7ZBfWE.SWcudhwCuQtVCiq39wx0wCDZvx6D+uQd8ujHyHW4vCATnQB6TxUe7agaDxDBxxzgWXGc7fGuWfnLiOAEFkgeqcf8OPgcFHR3QBgt+0+yqm7UC3d8rI63VpaYPbhY8Aoax3p7ji2QoL.0bpwNDAUIkezDReMYlI+GSBLKj3GOB7GICYseGPb4eqmVaQ7bzQDvvNuaBI0Uo96mzEW6bBboSd47Af6aRM0XEvs96WYArbJ+JKDTonI4ZA4kV2x7HKitLUGsGehHEkFTXt6AwrIa3zKYZgGQ8hS5qdUMv1XpFa19lcr6BahtF6SxHZP8EqMMs65IRG1a9Z.XpV.nCSsca6PIZh8GrzlVx7Q2Wecg93O8uKsAoiMXVE4oZ0c8O.nHR5FQ2bvNnlvssrsDwe0vxxlsseQBv18CJdgkK6scjvmxMFWStoGXgAkuk+2khENbEY7hk718pbBNVCKhV78m9pRq0EVB0IN0+QI1PUtCDhDar70gFTaJwCOonnJ+txMZv.xlrUPjHheXWGHnKVLy2+k6XRAeomnNttikq6gf5v5K2XQlccZQiEqxlG4FmF3WE8nnSBh3w3Gc0.meD2rQIO6ZSwhRYkKjnbwDkWLQ4kRTd4DkWIQ4aFUNkb736qNdw2aQrYnhE3bMc+HLnNNEwTiglU1PKbgcGvp9W4c5ai6aOT1SNdh6o.OLcfLxQCVAfsYXAT33l7O31PphB4VVlV1ssL0UiGyCwvsZQchCFb.5SYOOXJm3VhZPMnDWgIs+lR0zMoDm3SkOSlhSABYpwzc8Kj4hqBlF6cKbNSG7cD1C7Qp3ny8c9ICCodpRJjGxeleDMNL93ov1fppCaWOtSAR+6OPr9f8MGXYPtnbUWH6GbxeRtevw0z8A9wLJbHOuaCg+8kYKVofXK9+Y36pAcEna9uymbMI0DmowNlCC.ogg3jQW.1DJR32Xkeco5fq6NEGc2Fnd2jbDkOGF0tDniPRaoqV2BLjvbHbhq7pvHw6KHoSCKKFn36.CVMqGP6ETf8gAipYOTt3J8808K7GQSWC+iUjqyQXwIxKrGrQjNT2E1BV5AR2poSVXuhkw+SIqC8nh4NYtE.+fVWUpyMZRczAdWai4atw70qzXcFOKlK+bKrFnKfyZgCzJbCSqcI1zbGSNRZit1F5pPbPxSEaL.EW7h.Tr8aQPw1iBT7zktDT7kfhuDTbRjfiBT70RBJt34CULhs5RTwu68ICFj7JIcIDwKgH9SHHhSKuskSGhw4Bj3DAfD+4XWwrQgn69L4mWuwN+gJqu69U2o1FUZ7hcczIlsLn6eiUzVigOiCsbJ4UVJBL4uSDl4mEgrD68.bkxEJdyHbkLWFCHoOTJh+pmbMCvNo4WAlKv2qxDb+C7Mh.6.eup7RKUHeLd.CCmsZQGSbPwXsAI7XVTnP89dFTNqYcbzF0EX7g11CjdnL34SHNj19.oupn0aUQP5qd9.oq9lAj9w5dsuPfou3kvzuDl9kvzuDldDL8EuDl9kvzuDl9kvzuDldhyx8BDl9Jh.Mm+RX5iDl9aiXtNDUGq8U4+UVgQdSyn.hiIyQOsruwO3OqK474xK0A.drupJWngf0f+3C012l3.syisBIdkWG3EGRfIzrEVbe9X9dxOB+aRmEnyt1MSKeCv7iiK6l2vDACqiEpnsdq1A0nG9IIQoCuePVlF87mYGW6tJ+hzMBkKQCRKuEVVYwydSV5r2jkO6MYkydSt4YuI2ZTMAQkVtqmUG9Zx.g5U34wRENaAht+uvjIl1N
    


  • SMP[i].getChildSynthByIndex(idx == i);

    That doesn't do anything.

    local idx = SMP_COLOUR_buttons.indexOf(component);

    That doesn't do anything either (really it should return an error) since there is no component in that function. So what it will always give you is the value 0.

    or (i2 = 0; i2 < 127; i2++)
    Something just feels wrong about a variable called i2 call it j or k or x or something less weird 😛

    What's this for?
    (idx == i);



  • @d-healey said in Dynamic keyboard colouring:

    SMP[i].getChildSynthByIndex(idx == i);
    That doesn't do anything.

    I don't know what else to call...
    Im trying to get the index for a sampler based on what button that was pressed so I could colour the correct key(inside the updateCode() block),

    local idx = SMP_COLOUR_buttons.indexOf(component);
    That doesn't do anything either (really it should return an error) since there is no component in that function. So what it will always give you is the value 0.

    Appologies, I should have removed it from updateCode()
    But, on line 60 (inside the onbtn_COLOUR_SMP_Control) its calling the index of the buttons.

    What's this for?
    (idx == i);

    Index of a button. ??

    Heres an updated snippet;

    HiseSnippet 3797.3oc6a0sbaabEFTxvVjIJwwSlosyjNCpRaGpXYIRpercjcConHsUMkDGRYYmwiGkU.qHgMH.F.PIw3QSyksOB8tbSun4p9H366Mcl9BjGg7DT2yYW7yBveDkirqSiXaf4d1yt624mc2ucITcGKUpqqkiTpz6zylJk58ka1yzqc41DcSoMVWJ0Txk2t11OrgzZ8rIttTMoTol7dXsoReII1me3KViXPLUoQhjj10RWkVSuitWjzup3CzMLpRzn6n2QP6kJtgpkYYKCqt.RlTNmjMQ84jVzsHnZSHKk5xUzz8rbZ5Q7ntRotzZVZ8Z115HSt96p6puuAEKjWpIzQbwUsLzPDiRkJ2V2PqdfE6JIk5J0ir+I41+GKuotldn7H+vUYUnD0BQ+QpIFE7xKBubiO7RI.uKwg2GI2T0Q21KpFDaen7l.L2vzi5b.ABChPiquzDtWUtrEngo27cHOmV0AJD1hr2Z4byorbtbytZloy3PaonuJ+eel++p5F7EVTR4tJO4oqJHnomitYqUyjABjtdJGRbTHF1sIfhACKQS6AlV6mclRXEyLmBLj3.p.eX5NuK0qAwrEMKTSgkWdNk7IqN6Ltd8LnPimYWpimtJwXl90Q2i1gmMgixwUqVh8oeE2uUL0xw9.pEYDNTsAYBMnZPaVNejE.JNb76W4HPenF8gcNrRp1oi7VNTp4fv98vJf1kOWgH3yzd3FPX0C.fqrT0pKUoeEGFDSn1.cIQlw9FcoCxJVCjiFwxKFYDntC2FBpcDQgHU5yJyWNWtpU6SuSONnZokv.pQ1mZjcFrBnYEJrDFKXy7zMMzMoJGz0T0S2xDZq4g.D2w59ziyd3rYdQlz3Tt1zi2g.qmfyBmIGZH4wGEvGKhOVBerL9XE7wMwG2Beba7QI7wZ3ix3i0wGUvGUmAlSyFAs7PeGLLOYShW64OvvxxI6gKjekYC0pvvzR42oDpmWWGSrCuNn+pYNYZvNWX3eTtSyJ6nv2y4OnLBEWXZAm7VOby8ZtY883sau0d3N6r8VMAzUPLTHnw9c87.470wldv5XSLoFiVECLTNXU3BAKPoTsZJMIcrMnNtYfZdRtmBUx1mc9VTO1B+rRq0aCSMHROCnTdHmDZbIMMEWdaUxq3YoPbbH8X8R9wnWJzeuTX5LYNvxQIqNz7bqpnqbmg39f5t90gjtoY47867dh9SERrQLX0w1xDJ.yK7LCzFa3LPzOq90yO6rq1WuwcyipyrMMF2NiGPFUmYr+o1Y7lO.WKymFqEiv2fKPfPvwxnLwvXefRSVKyDNFeEfY+mLf4+CS8rpA1ybP5FrXzrSigozFVvhYJ5ZGivuOLMuNlWr8AQsFsfz7+exTh9BPyaPMa40lmTvMa+LigEOm2EX.EfXFntqht+Jnmva5HFUdjbrG0v.+q2ndpiC1yCbZ1fGBko4qzkLh10VCnHVFV5Oa3LKbi.9tIdzi8vEhycLljwYVgqVD987Beufv2W7o9CuHaLv.ec5I+4AKrfcWuPro3x6RcSXMnsnGgqxoy1CBclOf1aeKhiFqSbHnk5aZ3Zir9nUn8ELQKXXZB8d8RaUolODN0LiW+7QpWcfnrWCqtdPTIaPTIaqYeQq4O.NaRICir1DGWJPMNqnuDlreRTDNMG00Jsl.pS+FIYNAIiXXJVFGGROnxWFPQOP7MtwM7k7bZOWEu1DLrZ5AdBEh+1Bmw4EoC01ExHP8lMzLdQ32BU5Y7t7YPWluvMgufaqHp0KBSGB9.VCe+pXR0OPIq+bQhquBYmcdc2sr7na0sy9TmMI11TsrOa1Yi2g3mJlsfvN5SgDVtKM6ylSIJf6FtKPvmShWLSB4mDjJylry+eBqdivZayrLhavB7JIq5fCFXc9qdwLtATMd3YmQ0vrlLWQvdCnhtGo6o1VwulYyjNHJ5+OK7YvWRqRboJI1xI+mG2EDUZeGJ44qlItvA0EERzE.LcsLnyaCYwdbdJ.3+MJAzvi5bez8YKDh1QwHzm1nxPILFXhri.94PozQqLd23rsCSJ39vj4EhqiinLsuyHc5fw.Npl3Hj+zGAT6X86f5V1ImD63BmScLdlFw9cweL8Kzqmj4DoTWJ98hjY32Kh301nxItInnk4Fl5daaSCKymZEHImT3LJQQQSjDkxl+L.0hD0+kwH4SlTRJ064qNnpG6RY9.+KkoogtF0QRWSJ0UjYWxgDySEdQWeuUQownwxxMnZIZ529rwpoWQlc59DMVhNVM9xx3gpS1VeaWrsS62V1AY8aJtIePSeeY7rvquboakKmzPG40XrRYM+ZxIWzIIJ9guXLPw0jSPtOralPd3VQcjefe6SbRi7igyXbLmBA8ibpwzg1moT3GooTX.lxC2XchGAuoQ+raHi2FuRDbtZp0oGpqR426XZ40otO2yxVJ0TgmkBBzd9WZJe3qZXAb+LasiNLmFQwGJKJJuzwhCeuvBE6U7HcMu1gB9puoXapdq1B2c7iK5iQNfxHGv4TJfcDn6k0zzdEpcz02fRe0qd0uJtzB9hYJirRiT9e9RtTlqYBiTxLJZy.C2iPLNymqjeo4yMGS355t1Fjdaq5QNzm+AT+ADCWJWgZVGAMDjcad46qyKBzf3BJ200ypy8bH1s0Uci230oGP5Z3UBHzPbv6WGp1yoqesqY.GnD5sFHcanlbyuxsYet0sxcyam6l44psiUqVFzMw6ZJVmi2lc41DSHgAwCW3Cco6RUgErE.TzHB0V0f30jc6Yw6r5UBBG8UAr1uiWzHUHrhJlZB.XEfCElXGla8dm5hqGGLepWvWXWrGlbDbwdfDpcS8uN1JIcHGKtjb7bku669NV3WLqBJxjEOIUZi9RR2n33YA7U3Y3ewyY7CP8MO9C1lgYAGbNaAa8Js27Vf+dcLC3udNa.uR5SNuLfKeJa3xv+2Gf+LCYPwE35eW4gMHQahjQtYoMqWqRigtx8273Dqb+u95jVTwcKlZRgQapyBKfngs3WVLZXktcQGhlt08br5ZKFW.JpvfHLZBlPbfpP5y0e2Xt9zmAVFBdmEEgY8DdmuYyh7XArIdxQe4hiB7Qg0gFFybFn0LL.K0OfSfyuo1XhSXdPk+1eGaBwvv5nfq.0EYETxvPIRfKr44Fl0cnvAyAdGSb1xMKLrbSk1uIyMiMrwxMuyYN2rPPtobp+BnZ.HkS8q4jEGVHdjzEEfWAA38x5EGRtz4SpJvyL3Pcol70K8bnXW5i+wkdVHwznR2dkkVZ4pU6KCTzD5+Gg+px.cpt.Sn3ue.3KEgeE5PVi3OBO9Csa5p60SLe3MxKMv3B2ORtNdgPCFuS7+F75+JXLsbkCN.XgFA1KIW8wuEdeKlP.KSE95vni2x38Bfxz9BTXRF96DCb9AJbx.QAORH08a+OuZxWNf2ZlMXW2RcKChSLuOftIiaxSNdWkx.LyKM1oHnIo7SlT5qIyb4+TBvrThe5.3qJCqZ+N.b4+9Ms1j34niLfgSd2DVTWk5edRWbuyIvsN4kyEPtuI0TiU.O5uek4wxo7qLePkhtjqErtTYKyCsL5xLcze7whRTZPg4t6GymrtSujKK7HpWbQe4KqA9FS0Xy12nicW3Pz0X+3KhNTeXsgocWOQ4vYyWCHS0BHcXpsSaGJQSr+fs1zRtdz80KKzG+4+cw0IcrA2pnNUqti+E.EIR2H58xqCZIbeK6HQ7uZXYYyN1un.339AEO2VK6sclvmvcFWStoG3gAiuk+OBEKc3xx36swa2WTRHvZXQzhe9zWVbstvVnNwk9OJxFpRcfTjXikuMzfZSId3MEEU42WpQCFQ1jsBxDQ9C63.IcwxY9guXaSJDK8DswxNVttG.lCqubikY10oEMVtJadjabYPbULhhAIHiGyezUCB9QZyFkbr2JIVVJqb9DkKjn7hIJuThxKmn7JIJeynxojimeekwK+dShMiUrflqo6mgA0wkHtzXnakMzBuNrCXW+K+N8655aOV1SNdv8TnGlN.ib1fU.ZaFVfDNuI+KtMTpHH2zxzxtskotZ7bdHGtUKpSbxfCvdJ44AS4DORTCpAk3JLo82VrltIk3Dep7YxUbJTHSMlgqeoLGtJ3xXuawyYpfeGgcgXjJN57Xm+hggROUjBqC4OyORFmFe7kvVmppCGWOdPAV92efX8A62bfsBx4Un5b47fS9yxyCNtttOvOmQgS44caJ7uuLayJEjaw+OSeWMnq.ay+67IWSRMwYZrq4v.XZXHNYzEnMgPB+MV4uXTcv8cuDmc25nc2jbHkOGFstDriPQapqV2BbjvbHbhq7pvHw6KXQmFVVLRw2AFrZVOf1Kn.6GFLplcQbwM56q6W3OgttF9WqH2li3hSjWXW3fHcntKrIr0CrbqlNYgcKTB+OkrNzCKL+wyt.DGz5pRctQSpiNn6ZqOWy0mqdkFkY5r374lcg0.aABVKruV9aXZsCwlN+QjCkVuqsgtJjGj7VwFCRwENOHEa+VjTr8nHEOUwKHEeAo3KHEmjI3nHEesjjhK75wJF4VcAq3289ICFDdkjtfh3ETD+YDEwoj2xxoCw30hj3DAjD+EXWw7Qgr69T4WTuw1+wJk2YupaWa8JMNYGGchYKC5d2XEs0X7y3TKuj7JKEQl72KRy7SiXVh8d.uR47EtYDuRVHiQjzmJEwe2StkAbmz7q.WKvOpx.t+E9FIfcguWQdokxmKlNfigqVsnqINnXr1fBdLKKTnd+HChyZVGEcPcAEens8.kGhAOeAwoz1GI8UE8dqJRRe0WOR5puYHoejtW6yEZ5KdAM8KnoeAM8KnoGQSewKnoeAM8KnoeAM8Knom3tbOGoouhHQy4tfl9Hoo+1HmqCQ0wZOU9ekUXl2TLI.bLYA5oj8c9A+YcIma9bRc.hG6opxAMjrF7Gen1d1DGncdrcHwW40A9hCInD51BKtGeLeO4Gg+ImyRzYu1MSIeCv8iiK6MugAACqiDpnsdq1A0nG9SRhnCe+frLM54OyNt0cE9KR2HLtDMHs7lXYkEO6MYoydSV9r2jUN6M4lm8lbqQ0DjUZotdVc36ICBpWguNVpvYKP18+EfgRBUO
    

    but I'm still puzzled on how to correct this.😕



  • @ten7kur

    SMP[i].getChildSynthByIndex(idx == i);

    This line isn't doing anything for a couple of reasons. Firstly you are not storing the return value anywhere. It should be variable = function();.
    But this won't work anyway because SMP is already an array of child synths, you have this on line 53
    SMP[i] = Synth.getChildSynth("SMP" + (i+1));

    Im trying to get the index for a sampler based on what button that was pressed so I could colour the correct key

    Why do you need the index of the sampler when you have the index of the button?



  • You're right, I don't need the index of the sampler.

    In the SMP loop from @Line 71 SMP[i].getChildSynthByIndex(idx == i); I can't use .showControlfor the keyboard. What else can I do?



  • @ten7kur Just get rid of that line because it's not needed.



  • @d-healey
    Even if I remove the SMP for loop, I still have the problem of both sampler1 and sampler2 keys being coloured on the keyboard.



  • @ten7kur I know but removing any code that is not doing anything will make it easier to work out what needs to be fixed.



  • @d-healey
    Yes. That is true.😂 😂
    I actually had the code like this before. ⁉ I don't understand why its colouring both sampler keys...



  • Any thoughts?



  • I don't have time at the moment to look through the code again, so for now you're on your own. I'll have another look when I get chance.



  • @d-healey
    Ok. Thanks. Appreciate it!
    Ill keep trying..


Log in to reply
 

10
Online

502
Users

1.8k
Topics

13.6k
Posts