public void CreateColorButtons(string dimension)
    {
        if (this.dimension != dimension)
        {
            this.dimension = dimension;

            DestroyColorButtons();

            List <float> paletteValues = ChartManager.Instance.DataSource[dimension].MetaData.categories.ToList();

            for (int i = 0; i < paletteValues.Count; i++)
            {
                GameObject button = (GameObject)Instantiate(Resources.Load("ColorPaletteBinderButton"));
                button.transform.SetParent(transform);
                ColorPaletteBinderButton paletteButton = button.GetComponent <ColorPaletteBinderButton>();

                paletteButton.Text            = ChartManager.Instance.DataSource.getOriginalValue(paletteValues[i], dimension).ToString();
                paletteButton.NormalisedValue = paletteValues[i];
                paletteButton.ButtonClicked.AddListener(ColorButtonClicked);


                buttons.Add(paletteButton);
            }

            // Sort the buttons
            sortedButtons = buttons.OrderBy(x => x.NormalisedValue).ToList();

            // Position the buttons
            for (int i = 0; i < sortedButtons.Count; i++)
            {
                sortedButtons[i].Color = Color.HSVToRGB((i * 0.09f) % 1, 1, 1);

                float   height    = sortedButtons[i].transform.localScale.y;
                Vector3 targetPos = Vector3.zero;
                targetPos.y -= (i * (height + spacing));
                sortedButtons[i].transform.localPosition = targetPos;
                sortedButtons[i].transform.localRotation = Quaternion.identity;;
            }


            ColorPaletteChanged.Invoke(GetColorPalette());
            // Reset the page
            ButtonClicked(null);
        }
    }
 public static void PaletteChanged()
 {
     ColorPaletteChanged.Invoke(currentPalette);
 }