// this is called from ColorRangeSelect.updateColor
        public static void updatePickerBaseColor(bool location)
        {
            GuiColorPickerCtrl ColorRangeSelect = "ColorRangeSelect";
            GuiColorPickerCtrl ColorBlendSelect = "ColorBlendSelect";

            string pickColor;

            if (omni.bGlobal["$ColorPickerSignal"] && location)
            {
                pickColor = ColorRangeSelect.baseColor.AsString();
            }
            else
            {
                pickColor = ColorRangeSelect.pickColor.AsString();
            }

            omni.bGlobal["$ColorPickerSignal"] = true;

            string red   = omni.Util.getWord(pickColor, 0);
            string green = omni.Util.getWord(pickColor, 1);
            string blue  = omni.Util.getWord(pickColor, 2);
            string alpha = omni.Util.getWord(pickColor, 3);

            ColorBlendSelect.baseColor = (red + " " + green + " " + blue + " " + "1.0").AsColorF();
            ColorBlendSelect.updateColor();
        }
        // this is called from ColorBlendSelect.updateColor
        public static void updateRGBValues(bool location)
        {
            GuiColorPickerCtrl  ColorBlendSelect = "ColorBlendSelect";
            GuiTextEditCtrl     Channel_R_Val    = "Channel_R_Val";
            GuiTextEditCtrl     Channel_G_Val    = "Channel_G_Val";
            GuiTextEditCtrl     Channel_B_Val    = "Channel_B_Val";
            GuiSwatchButtonCtrl myColor          = "myColor";

            string pickColor;

            //update the color based on where it came from
            if (omni.bGlobal["$ColorPickerSignal"] && location)
            {
                pickColor = ColorBlendSelect.baseColor.AsString();
            }
            else
            {
                pickColor = ColorBlendSelect.pickColor.AsString();
            }

            //lets prepare the color
            string red   = omni.Util.getWord(pickColor, 0);
            string green = omni.Util.getWord(pickColor, 1);
            string blue  = omni.Util.getWord(pickColor, 2);
            //the alpha should be grabbed from mycolor
            string alpha = omni.Util.getWord(myColor.color.AsString(), 3);

            // set the color!
            myColor.color = (red + " " + green + " " + blue + " " + alpha).AsColorF();

            DoColorPickerUpdateCallback();

            //update differently depending on type
            if (omni.iGlobal["$ColorCallbackType"] == 1)
            {
                red   = omni.Util.mCeil(red.AsFloat() * 255).AsString();
                blue  = omni.Util.mCeil(blue.AsFloat() * 255).AsString();
                green = omni.Util.mCeil(green.AsFloat() * 255).AsString();
            }
            else
            {
                red   = omni.Util.mFloatLength(red.AsFloat(), 3);
                blue  = omni.Util.mFloatLength(blue.AsFloat(), 3);
                green = omni.Util.mFloatLength(green.AsFloat(), 3);
            }

            // changes current color values
            Channel_R_Val.setValue(red);
            Channel_G_Val.setValue(green);
            Channel_B_Val.setValue(blue);

            omni.bGlobal["$ColorPickerSignal"] = false;
        }
        // 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());
        }
        // This function is used to update the text controls at the top
        public static void setColorInfo()
        {
            GuiTextEditCtrl    Channel_R_Val    = "Channel_R_Val";
            GuiTextEditCtrl    Channel_G_Val    = "Channel_G_Val";
            GuiTextEditCtrl    Channel_B_Val    = "Channel_B_Val";
            GuiColorPickerCtrl ColorBlendSelect = "ColorBlendSelect";

            string red   = Channel_R_Val.getValue();
            string green = Channel_G_Val.getValue();
            string blue  = Channel_B_Val.getValue();

            if (omni.iGlobal["$ColorCallbackType"] == 1)
            {
                red   = (red.AsFloat() / 255).AsString();
                green = (green.AsFloat() / 255).AsString();
                blue  = (blue.AsFloat() / 255).AsString();
            }

            omni.iGlobal["$ColorPickerSignal"] = 1;

            ColorBlendSelect.baseColor = (red + " " + green + " " + blue + " " + "1.0").AsColorF();
            ColorBlendSelect.updateColor();
        }