public void AddSmartButton(string rawButtonText, string rawCallbackCode)
        {
            // Setting the prefabs text
            // because setting the clones doesnt update the preferredWidth instantly
            buttonPrefab.text.text = rawButtonText;

            SmartButton clone = Instantiate(buttonPrefab);

            clone.transform.SetParent(container, false);

            clone.name = "[" + rawCallbackCode + "]";

            clone.button.onClick.AddListener(() =>
            {
                // All variables used in here will be excluded from the GC
                // They're kept in memory as long as the callback exists, which is as long as the button exists.
                PMWrapper.AddCode(rawCallbackCode, true);
            });

            float width  = clone.text.preferredWidth + padding * 2;            // x2 for left and right padding
            float height = clone.rect.rect.height;

            // Check if fits
            if (offset.x + width > container.rect.width)
            {
                // Move to next line
                offset = new Vector2(0, offset.y - height - margin);
            }

            // min.x = west
            // min.y = south
            // max.x = east
            // max.y = north
            clone.rect.offsetMin = new Vector2(offset.x, offset.y - height);
            clone.rect.offsetMax = new Vector2(offset.x + width, offset.y);

            offset.x           += width + margin;
            container.sizeDelta = new Vector2(container.sizeDelta.x, height + margin - offset.y);

            // Enable background if needs scrollbar
            background.enabled = container.sizeDelta.y > background.rectTransform.sizeDelta.y;

            buttons.Add(clone);
            UISingleton.instance.manusSelectables.Add(new UISingleton.ManusSelectable
            {
                selectable = clone.button, names = new List <string> {
                    "sb-" + rawCallbackCode
                }
            });
        }