// 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);
        }
        public static void DoColorPickerUpdateCallback()
        {
            GuiSwatchButtonCtrl myColor = "myColor";

            if (omni.sGlobal["$ColorPickerUpdateCallback"] != "")
            {
                omni.Util.eval(omni.sGlobal["$ColorPickerUpdateCallback"] + "(\"" + constructNewColor(myColor.color.AsString(), omni.iGlobal["$ColorCallbackType"]) + "\");");
            }
        }
        // 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());
        }
        public void writeSettings()
        {
            Settings EditorSettings = "EditorSettings";

            ShapeEditor.ShapeEdPreviewGui ShapeEdPreviewGui  = "ShapeEdPreviewGui";
            ShapeEditor.ShapeEdMaterials  ShapeEdMaterials   = "ShapeEdMaterials";
            ShapeEditorToolbar            ShapeEditorToolbar = "ShapeEditorToolbar";

            ShapeEditor.ShapeEdMountWindow ShapeEdMountWindow = "ShapeEdMountWindow";
            ShapeEditor.ShapeEdShapeView   ShapeEdShapeView   = "ShapeEdShapeView";

            GuiSwatchButtonCtrl previewBackground = ShapeEdPreviewGui.FOT("previewBackground");
            GuiCheckBoxCtrl     highlightMaterial = ShapeEdMaterials.FOT("highlightMaterial");
            GuiBitmapButtonCtrl showNodes         = ShapeEditorToolbar.FOT("showNodes");
            GuiBitmapButtonCtrl showBounds        = ShapeEditorToolbar.FOT("showBounds");
            GuiBitmapButtonCtrl showObjBox        = ShapeEditorToolbar.FOT("showObjBox");
            GuiBitmapButtonCtrl showAdvanced      = ShapeEditorToolbar.FOT("showAdvanced");
            GuiBitmapButtonCtrl showGridBtn       = ShapeEditorToolbar.FOT("showGridBtn");
            GuiBitmapButtonCtrl renderColMeshes   = ShapeEditorToolbar.FOT("renderColMeshes");
            GuiCheckBoxCtrl     renderMounts      = ShapeEdMountWindow.FOT("renderMounts");

            EditorSettings.beginGroup("ShapeEditor", true);

            // Display options
            EditorSettings.setValue("BackgroundColor", ColorPickerDlg.ColorFloatToInt(previewBackground["color"]));
            EditorSettings.setValue("HighlightMaterial", highlightMaterial.getValue());
            EditorSettings.setValue("ShowNodes", showNodes.getValue());
            EditorSettings.setValue("ShowBounds", showBounds.getValue());
            EditorSettings.setValue("ShowObjBox", showObjBox.getValue());
            EditorSettings.setValue("RenderCollision", renderColMeshes.getValue());
            EditorSettings.setValue("RenderMounts", renderMounts.getValue());

            // Grid
            EditorSettings.setValue("ShowGrid", showGridBtn.getValue());
            EditorSettings.setValue("GridSize", ShapeEdShapeView["gridSize"]);
            EditorSettings.setValue("GridDimension", ShapeEdShapeView["gridDimension"]);

            // Sun
            EditorSettings.setValue("SunDiffuseColor", ShapeEdShapeView["sunDiffuse"]);
            EditorSettings.setValue("SunAmbientColor", ShapeEdShapeView["sunAmbient"]);
            EditorSettings.setValue("SunAngleX", ShapeEdShapeView["sunAngleX"]);
            EditorSettings.setValue("SunAngleZ", ShapeEdShapeView["sunAngleZ"]);

            // Sub-windows
            EditorSettings.setValue("AdvancedWndVisible", showAdvanced.getValue());

            EditorSettings.endGroup();
        }
        public void readSettings()
        {
            Settings EditorSettings = "EditorSettings";

            ShapeEditor.ShapeEdPreviewGui ShapeEdPreviewGui  = "ShapeEdPreviewGui";
            ShapeEditor.ShapeEdMaterials  ShapeEdMaterials   = "ShapeEdMaterials";
            ShapeEditorToolbar            ShapeEditorToolbar = "ShapeEditorToolbar";

            ShapeEditor.ShapeEdMountWindow ShapeEdMountWindow = "ShapeEdMountWindow";
            ShapeEditor.ShapeEdShapeView   ShapeEdShapeView   = "ShapeEdShapeView";

            GuiSwatchButtonCtrl previewBackground = ShapeEdPreviewGui.FOT("previewBackground");
            GuiCheckBoxCtrl     highlightMaterial = ShapeEdMaterials.FOT("highlightMaterial");
            GuiBitmapButtonCtrl showNodes         = ShapeEditorToolbar.FOT("showNodes");
            GuiBitmapButtonCtrl showBounds        = ShapeEditorToolbar.FOT("showBounds");
            GuiBitmapButtonCtrl showObjBox        = ShapeEditorToolbar.FOT("showObjBox");
            GuiBitmapButtonCtrl showAdvanced      = ShapeEditorToolbar.FOT("showAdvanced");
            GuiBitmapButtonCtrl showGridBtn       = ShapeEditorToolbar.FOT("showGridBtn");
            GuiBitmapButtonCtrl renderColMeshes   = ShapeEditorToolbar.FOT("renderColMeshes");
            GuiCheckBoxCtrl     renderMounts      = ShapeEdMountWindow.FOT("renderMounts");

            EditorSettings.beginGroup("ShapeEditor", true);

            // Display options
            previewBackground["color"] = ColorPickerDlg.ColorIntToFloat(EditorSettings.value("BackgroundColor"));
            SetToggleButtonValue(highlightMaterial, EditorSettings.value("HighlightMaterial"));
            SetToggleButtonValue(showNodes, EditorSettings.value("ShowNodes"));
            SetToggleButtonValue(showBounds, EditorSettings.value("ShowBounds"));
            SetToggleButtonValue(showObjBox, EditorSettings.value("ShowObjBox"));
            SetToggleButtonValue(renderColMeshes, EditorSettings.value("RenderCollision"));
            SetToggleButtonValue(renderMounts, EditorSettings.value("RenderMounts"));

            // Grid
            SetToggleButtonValue(showGridBtn, EditorSettings.value("ShowGrid"));
            ShapeEdShapeView["gridSize"]      = EditorSettings.value("GridSize");
            ShapeEdShapeView["gridDimension"] = EditorSettings.value("GridDimension");

            // Sun
            ShapeEdShapeView["sunDiffuse"] = EditorSettings.value("SunDiffuseColor");
            ShapeEdShapeView["sunAmbient"] = EditorSettings.value("SunAmbientColor");

            // Sub-windows
            SetToggleButtonValue(showAdvanced, EditorSettings.value("AdvancedWndVisible"));

            EditorSettings.endGroup();
        }
        public static void updateColorPickerAlpha(string alphaVal)
        {
            GuiSwatchButtonCtrl myColor = "myColor";

            //lets prepare the color
            string red   = omni.Util.getWord(myColor.color.AsString(), 0);
            string green = omni.Util.getWord(myColor.color.AsString(), 1);
            string blue  = omni.Util.getWord(myColor.color.AsString(), 2);
            string alpha = alphaVal;

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

            myColor.color = (red + " " + green + " " + blue + " " + alpha).AsColorF();

            DoColorPickerUpdateCallback();
        }
            public void guiSync()
            {
                GuiPopUpMenuCtrl PEP_ParticleSelector = "PEP_ParticleSelector";

                ParticleEmitterEditor.PE_EmitterEditor PE_EmitterEditor = "PE_EmitterEditor";
                MaterialEditor.gui.CodeBehind.MaterialEditor.MaterialEditorGui MaterialEditorGui = "MaterialEditorGui";
                GuiSwatchButtonCtrl PE_ColorTintSwatch0 = "PE_ColorTintSwatch0";
                GuiSwatchButtonCtrl PE_ColorTintSwatch1 = "PE_ColorTintSwatch1";
                GuiSwatchButtonCtrl PE_ColorTintSwatch2 = "PE_ColorTintSwatch2";
                GuiSwatchButtonCtrl PE_ColorTintSwatch3 = "PE_ColorTintSwatch3";

                GuiBitmapButtonCtrl PEP_previewImage                  = this.FOT("PEP_previewImage");
                GuiTextEditCtrl     PEP_previewImageName              = this.FOT("PEP_previewImageName");
                GuiTextEditCtrl     PEP_lifetimeMS_textEdit           = this.FOT("PEP_lifetimeMS_textEdit");
                GuiTextEditCtrl     PEP_lifetimeVarianceMS_textEdit   = this.FOT("PEP_lifetimeVarianceMS_textEdit");
                GuiTextEditCtrl     PEP_inheritedVelFactor_textEdit   = this.FOT("PEP_inheritedVelFactor_textEdit");
                GuiTextEditCtrl     PEP_constantAcceleration_textEdit = this.FOT("PEP_constantAcceleration_textEdit");
                GuiTextEditCtrl     PEP_gravityCoefficient_textEdit   = this.FOT("PEP_gravityCoefficient_textEdit");
                GuiTextEditCtrl     PEP_dragCoefficient_textEdit      = this.FOT("PEP_dragCoefficient_textEdit");
                GuiTextEditCtrl     PEP_spinRandomMin_textEdit        = this.FOT("PEP_spinRandomMin_textEdit");
                GuiTextEditCtrl     PEP_spinRandomMax_textEdit        = this.FOT("PEP_spinRandomMax_textEdit");
                GuiTextEditCtrl     PEP_spinSpeed_textEdit            = this.FOT("PEP_spinSpeed_textEdit");
                GuiTextEditCtrl     PEP_pointSize_textEdit0           = this.FOT("PEP_pointSize_textEdit0");
                GuiTextEditCtrl     PEP_pointSize_textEdit1           = this.FOT("PEP_pointSize_textEdit1");
                GuiTextEditCtrl     PEP_pointSize_textEdit2           = this.FOT("PEP_pointSize_textEdit2");
                GuiTextEditCtrl     PEP_pointSize_textEdit3           = this.FOT("PEP_pointSize_textEdit3");
                GuiTextEditCtrl     PEP_pointTime_textEdit0           = this.FOT("PEP_pointTime_textEdit0");
                GuiTextEditCtrl     PEP_pointTime_textEdit1           = this.FOT("PEP_pointTime_textEdit1");
                GuiTextEditCtrl     PEP_pointTime_textEdit2           = this.FOT("PEP_pointTime_textEdit2");
                GuiTextEditCtrl     PEP_pointTime_textEdit3           = this.FOT("PEP_pointTime_textEdit3");
                GuiCheckBoxCtrl     PEP_inverseAlpha                  = this.FOT("PEP_inverseAlpha");
                GuiSliderCtrl       PEP_lifetimeMS_slider             = this.FOT("PEP_lifetimeMS_slider");
                GuiSliderCtrl       PEP_lifetimeVarianceMS_slider     = this.FOT("PEP_lifetimeVarianceMS_slider");
                GuiSliderCtrl       PEP_inheritedVelFactor_slider     = this.FOT("PEP_inheritedVelFactor_slider");
                GuiSliderCtrl       PEP_constantAcceleration_slider   = this.FOT("PEP_constantAcceleration_slider");
                GuiSliderCtrl       PEP_gravityCoefficient_slider     = this.FOT("PEP_gravityCoefficient_slider");
                GuiSliderCtrl       PEP_dragCoefficient_slider        = this.FOT("PEP_dragCoefficient_slider");
                GuiSliderCtrl       PEP_spinRandomMin_slider          = this.FOT("PEP_spinRandomMin_slider");
                GuiSliderCtrl       PEP_spinRandomMax_slider          = this.FOT("PEP_spinRandomMax_slider");
                GuiSliderCtrl       PEP_spinSpeed_slider              = this.FOT("PEP_spinSpeed_slider");
                GuiSliderCtrl       PEP_pointSize_slider0             = this.FOT("PEP_pointSize_slider0");
                GuiSliderCtrl       PEP_pointSize_slider1             = this.FOT("PEP_pointSize_slider1");
                GuiSliderCtrl       PEP_pointSize_slider2             = this.FOT("PEP_pointSize_slider2");
                GuiSliderCtrl       PEP_pointSize_slider3             = this.FOT("PEP_pointSize_slider3");
                GuiSliderCtrl       PEP_pointTime_slider0             = this.FOT("PEP_pointTime_slider0");
                GuiSliderCtrl       PEP_pointTime_slider1             = this.FOT("PEP_pointTime_slider1");
                GuiSliderCtrl       PEP_pointTime_slider2             = this.FOT("PEP_pointTime_slider2");
                GuiSliderCtrl       PEP_pointTime_slider3             = this.FOT("PEP_pointTime_slider3");

                // Populate the selector with the particles assigned
                // to the current emitter.

                bool             containsCurrParticle = false;
                GuiPopUpMenuCtrl popup = PEP_ParticleSelector;

                popup.clear();

                foreach (SimObject particle in PE_EmitterEditor.currEmitter["particles"].Split(' '))
                {
                    if (particle.getId() == this.currParticle)
                    {
                        containsCurrParticle = true;
                    }

                    popup.add(particle.getName(), particle.getId());
                }

                // Just in case the particle doesn't exist, fallback gracefully

                if (!containsCurrParticle)
                {
                    this.currParticle = Util.getWord(PE_EmitterEditor.currEmitter["particles"], 0).getID();
                }

                SimObject data = this.currParticle;

                popup.sort();
                popup.setSelected(data);

                string bitmap = MaterialEditorGui.searchForTexture(data.getName(), data["textureName"]);


                if (bitmap != "")
                {
                    PEP_previewImage.setBitmap(bitmap);
                    PEP_previewImageName.setText(bitmap);
                    PEP_previewImageName.tooltip = bitmap;
                }
                else
                {
                    PEP_previewImage.setBitmap("");
                    PEP_previewImageName.setText("None");
                    PEP_previewImageName.tooltip = "None";
                }

                PEP_inverseAlpha.setValue(data["useInvAlpha"]);

                PEP_lifetimeMS_slider.setValue(data["lifetimeMS"]);
                PEP_lifetimeMS_textEdit.setText(data["lifetimeMS"]);

                PEP_lifetimeVarianceMS_slider.setValue(data["lifetimeVarianceMS"]);
                PEP_lifetimeVarianceMS_textEdit.setText(data["lifetimeVarianceMS"]);

                PEP_inheritedVelFactor_slider.setValue(data["inheritedVelFactor"]);
                PEP_inheritedVelFactor_textEdit.setText(data["inheritedVelFactor"]);

                PEP_constantAcceleration_slider.setValue(data["constantAcceleration"]);
                PEP_constantAcceleration_textEdit.setText(data["constantAcceleration"]);

                PEP_gravityCoefficient_slider.setValue(data["gravityCoefficient"]);
                PEP_gravityCoefficient_textEdit.setText(data["gravityCoefficient"]);

                PEP_dragCoefficient_slider.setValue(data["dragCoefficient"]);
                PEP_dragCoefficient_textEdit.setText(data["dragCoefficient"]);

                PEP_spinRandomMin_slider.setValue(data["spinRandomMin"]);
                PEP_spinRandomMin_textEdit.setText(data["spinRandomMin"]);

                PEP_spinRandomMax_slider.setValue(data["spinRandomMax"]);
                PEP_spinRandomMax_textEdit.setText(data["spinRandomMax"]);

                PEP_spinRandomMax_slider.setValue(data["spinRandomMax"]);
                PEP_spinRandomMax_textEdit.setText(data["spinRandomMax"]);

                PEP_spinSpeed_slider.setValue(data["spinSpeed"]);
                PEP_spinSpeed_textEdit.setText(data["spinSpeed"]);

                PE_ColorTintSwatch0["color"] = data["colors[0]"];
                PE_ColorTintSwatch1["color"] = data["colors[1]"];
                PE_ColorTintSwatch2["color"] = data["colors[2]"];
                PE_ColorTintSwatch3["color"] = data["colors[3]"];

                PEP_pointSize_slider0.setValue(data["sizes[0]"]);
                PEP_pointSize_textEdit0.setText(data["sizes[0]"]);

                PEP_pointSize_slider1.setValue(data["sizes[1]"]);
                PEP_pointSize_textEdit1.setText(data["sizes[1]"]);

                PEP_pointSize_slider2.setValue(data["sizes[2]"]);
                PEP_pointSize_textEdit2.setText(data["sizes[2]"]);

                PEP_pointSize_slider3.setValue(data["sizes[3]"]);
                PEP_pointSize_textEdit3.setText(data["sizes[3]"]);

                PEP_pointTime_slider0.setValue(data["times[0]"]);
                PEP_pointTime_textEdit0.setText(data["times[0]"]);

                PEP_pointTime_slider1.setValue(data["times[1]"]);
                PEP_pointTime_textEdit1.setText(data["times[1]"]);

                PEP_pointTime_slider2.setValue(data["times[2]"]);
                PEP_pointTime_textEdit2.setText(data["times[2]"]);

                PEP_pointTime_slider3.setValue(data["times[3]"]);
                PEP_pointTime_textEdit3.setText(data["times[3]"]);
            }