// return mycolor.color
        public static void DoColorPickerCallback()
        {
            ColorPickerDlg      ColorPickerDlg = "ColorPickerDlg";
            GuiSwatchButtonCtrl myColor        = "myColor";

            omni.Util.eval(omni.sGlobal["$ColorPickerCallback"] + "(\"" + constructNewColor(myColor.color.AsString(), omni.iGlobal["$ColorCallbackType"]) + "\");");
            ((GuiCanvas)ColorPickerDlg.getRoot()).popDialog(ColorPickerDlg);
        }
        // This function pushes the color picker dialog and returns to a callback the selected value
        public static void GetColorI(string currentColor, string callback, string root, string updateCallback,
                                     string cancelCallback)
        {
            GuiSwatchButtonCtrl oldColor         = "oldColor";
            GuiSwatchButtonCtrl myColor          = "myColor";
            GuiColorPickerCtrl  ColorRangeSelect = "ColorRangeSelect";
            GuiColorPickerCtrl  ColorBlendSelect = "ColorBlendSelect";
            GuiSliderCtrl       ColorAlphaSelect = "ColorAlphaSelect";
            GuiCanvas           Canvas           = "Canvas";
            GuiTextEditCtrl     Channel_A_Val    = "Channel_A_Val";
            ColorPickerDlg      ColorPickerDlg   = "ColorPickerDlg";

            omni.bGlobal["$ColorPickerSignal"]         = true;
            omni.sGlobal["$ColorPickerCallback"]       = callback;
            omni.sGlobal["$ColorPickerCancelCallback"] = cancelCallback;
            omni.sGlobal["$ColorPickerUpdateCallback"] = updateCallback;
            omni.iGlobal["$ColorCallbackType"]         = 1; // ColorI

            oldColor.color = ColorIntToFloat(currentColor).AsColorF();
            myColor.color  = ColorIntToFloat(currentColor).AsColorF();

            ColorRangeSelect.showReticle = true;
            ColorBlendSelect.showReticle = true;

            // Set the range according to int
            ColorAlphaSelect.range = "0 255".AsPoint2F();

            // Set the RGBA displays accordingly
            float red   = omni.Util.getWord(currentColor, 0).AsFloat() / 255;
            float green = omni.Util.getWord(currentColor, 1).AsFloat() / 255;
            float blue  = omni.Util.getWord(currentColor, 2).AsFloat() / 255;
            float alpha = omni.Util.getWord(currentColor, 3).AsFloat();

            // set the initial range blend to correct color, no alpha needed
            // this should also set the color blend select right now
            ColorRangeSelect.baseColor = (red.AsString() + " " + green.AsString() + " " + blue.AsString() + " " + "1.0").AsColorF();
            ColorRangeSelect.updateColor();

            if (!root.isObject())
            {
                root = Canvas;
            }

            ((GuiCanvas)root).pushDialog(ColorPickerDlg);

            // update the alpha value first
            ColorAlphaSelect.setValue(alpha.AsString());
            Channel_A_Val.setText(alpha.AsString());
        }