public void inspect(SimObject obj)
            {
                GuiMLTextCtrl MissionAreaFieldInfoControl = "MissionAreaFieldInfoControl";
                string name = "";
                if (obj.isObject())
                    name = obj.getName();
                else
                    MissionAreaFieldInfoControl.setText("");

                //RiverInspectorNameEdit.setValue( %name );
                base.inspect(obj);
            }
        public override void onRightMouseUp(int itemId, string mousePos, SimObject obj)
        {
            MenuBuilder popup;
            GuiCanvas Canvas = "Canvas";

            bool haveObjectEntries = false;
            bool haveLockAndHideEntries = true;

            // Handle multi-selection.
            if (this.getSelectedItemsCount() > 1)
                {
                popup = "ETMultiSelectionContextPopup";
                if (!popup.isObject())
                    {
                    ObjectCreator popCreator = new ObjectCreator("PopupMenu", "ETMultiSelectionContextPopup", typeof (MenuBuilder));
                    popCreator["isPopup"] = true.AsString();

                    popCreator["item[0]"] = "Delete" + '\t' + "" + '\t' + "EditorMenuEditDelete();";
                    popCreator["item[1]"] = "Group" + '\t' + "" + '\t' + "EWorldEditor.addSimGroup( true );";

                    popup = popCreator.Create();
                    }
                }

                // Open context menu if this is a CameraBookmark
            else if (obj.isMemberOfClass("CameraBookmark"))
                {
                popup = "ETCameraBookmarkContextPopup";
                if (!popup.isObject())
                    {
                    ObjectCreator popupCreator = new ObjectCreator("PopupMenu", "ETCameraBookmarkContextPopup", typeof (MenuBuilder));
                    popupCreator["isPopup"] = true.AsString();

                    popupCreator["item[0]"] = "Go To Bookmark" + '\t' + "" + '\t' + "EditorGui.jumpToBookmark( this.bookmark.getInternalName() );";

                    popupCreator["bookmark"] = "-1";

                    popup = popupCreator.Create();
                    }

                ((MenuBuilder) "ETCameraBookmarkContextPopup")["bookmark"] = obj;
                }
   
                // Open context menu if this is set CameraBookmarks group.
            else if (obj.name == "CameraBookmarks")
                {
                popup = "ETCameraBookmarksGroupContextPopup";
                if (!popup.isObject())
                    {
                    popup = new ObjectCreator("PopupMenu", "ETCameraBookmarksGroupContextPopup", typeof (MenuBuilder)).Create();
                    popup.isPopup = true;

                    popup.addItem("0", "Add Camera Bookmark" + '\t' + "" + '\t' + "EditorGui.addCameraBookmarkByGui();");
                    }
                }

                // Open context menu if this is a SimGroup
            else if (obj.isMemberOfClass("SimGroup"))
                {
                popup = "ETSimGroupContextPopup";
                if (!popup.isObject())
                    {
                    ObjectCreator popupCreator = new ObjectCreator("PopupMenu", "ETSimGroupContextPopup", typeof (MenuBuilder));
                    popupCreator["isPopup"] = true.AsString();

                    popupCreator["item[0]"] = "Rename" + '\t' + "" + '\t' + "EditorTree.showItemRenameCtrl( EditorTree.findItemByObjectId( ETSimGroupContextPopup.object ) );";
                    popupCreator["item[1]"] = "Delete" + '\t' + "" + '\t' + "EWorldEditor.deleteMissionObject( ETSimGroupContextPopup.object );";
                    popupCreator["item[2]"] = "Inspect" + '\t' + "" + '\t' + "inspectObject( ETSimGroupContextPopup.object );";
                    popupCreator["item[3]"] = "-";
                    popupCreator["item[4]"] = "Toggle Lock Children" + '\t' + "" + '\t' + "EWorldEditor.toggleLockChildren( ETSimGroupContextPopup.object );";
                    popupCreator["item[5]"] = "Toggle Hide Children" + '\t' + "" + '\t' + "EWorldEditor.toggleHideChildren( ETSimGroupContextPopup.object );";
                    popupCreator["item[6]"] = "-";
                    popupCreator["item[7]"] = "Group" + '\t' + "" + '\t' + "EWorldEditor.addSimGroup( true );";
                    popupCreator["item[8]"] = "-";
                    popupCreator["item[9]"] = "Add New Objects Here" + '\t' + "" + '\t' + "EWCreatorWindow.setNewObjectGroup( ETSimGroupContextPopup.object );";
                    popupCreator["item[10]"] = "Add Children to Selection" + '\t' + "" + '\t' + "EWorldEditor.selectAllObjectsInSet( ETSimGroupContextPopup.object, false );";
                    popupCreator["item[11]"] = "Remove Children from Selection" + '\t' + "" + '\t' + "EWorldEditor.selectAllObjectsInSet( ETSimGroupContextPopup.object, true );";

                    popupCreator["object"] = "-1";

                    popup = popupCreator.Create();
                    }

                popup["object"] = obj;

                bool hasChildren = ((SimGroup) obj).getCount() > 0;
                popup.enableItem(10, hasChildren);
                popup.enableItem(11, hasChildren);

                haveObjectEntries = true;
                haveLockAndHideEntries = false;
                }
   
                // Open generic context menu.
            else
                {
                popup = "ETContextPopup";
                if (!popup.isObject())
                    {
                    ObjectCreator popCreator = new ObjectCreator("PopupMenu", "ETContextPopup", typeof (MenuBuilder));
                    popCreator["isPopup"] = true.AsString();

                    popCreator["item[0]"] = "Rename" + '\t' + "" + '\t' + "EditorTree.showItemRenameCtrl( EditorTree.findItemByObjectId( ETContextPopup.object ) );";
                    popCreator["item[1]"] = "Delete" + '\t' + "" + '\t' + "EWorldEditor.deleteMissionObject( ETContextPopup.object );";
                    popCreator["item[2]"] = "Inspect" + '\t' + "" + '\t' + "inspectObject( ETContextPopup.object );";
                    popCreator["item[3]"] = "-";
                    popCreator["item[4]"] = "Locked" + '\t' + "" + '\t' + "ETContextPopup.object.setLocked( !ETContextPopup.object.locked ); EWorldEditor.syncGui();";
                    popCreator["item[5]"] = "Hidden" + '\t' + "" + '\t' + "EWorldEditor.hideObject( ETContextPopup.object, !ETContextPopup.object.hidden ); EWorldEditor.syncGui();";
                    popCreator["item[6]"] = "-";
                    popCreator["item[7]"] = "Group" + '\t' + "" + '\t' + "EWorldEditor.addSimGroup( true );";

                    popCreator["object"] = "-1";

                    popup = popCreator.Create();
                    }

                // Specialized version for ConvexShapes. 
                if (obj.isMemberOfClass("ConvexShape"))
                    {
                    popup = "ETConvexShapeContextPopup";
                    if (!popup.isObject())
                        {
                        ObjectCreator popCreator = new ObjectCreator("PopupMenu", "ETConvexShapeContextPopup", typeof (MenuBuilder));
                        popCreator["isPopup"] = true.AsString();

                        popCreator["item[8]"] = "-";
                        popCreator["item[9]"] = "Convert to Zone" + '\t' + "" + '\t' + "EWorldEditor.convertSelectionToPolyhedralObjects( \\\"Zone\\\" );";
                        popCreator["item[10]"] = "Convert to Portal" + '\t' + "" + '\t' + "EWorldEditor.convertSelectionToPolyhedralObjects( \\\"Portal\\\" );";
                        popCreator["item[11]"] = "Convert to Occluder" + '\t' + "" + '\t' + "EWorldEditor.convertSelectionToPolyhedralObjects( \\\"OcclusionVolume\\\" );";
                        popCreator["item[12]"] = "Convert to Sound Space" + '\t' + "" + '\t' + "EWorldEditor.convertSelectionToPolyhedralObjects( \\\"SFXSpace\\\" );";

                        popup = popCreator.Create();
                        }
                    }
      
                    // Specialized version for polyhedral objects.
                else if (obj.isMemberOfClass("Zone") || obj.isMemberOfClass("Portal") || obj.isMemberOfClass("OcclusionVolume") || obj.isMemberOfClass("SFXSpace"))
                    {
                    popup = "ETPolyObjectContextPopup";
                    if (!popup.isObject())
                        {
                        ObjectCreator popCreator = new ObjectCreator("PopupMenu", "ETPolyObjectContextPopup", typeof (MenuBuilder));
                        popCreator["isPopup"] = true.AsString();

                        popCreator["item[8]"] = "-";
                        popCreator["item[9]"] = "Convert to ConvexShape" + '\t' + "" + '\t' + "EWorldEditor.convertSelectionToConvexShape();";

                        popup = popCreator.Create();
                        }
                    }

                popup["object"] = obj;
                haveObjectEntries = true;
                }

            if (haveObjectEntries)
                {
                popup.enableItem(0, (obj.isNameChangeAllowed() && obj.getName() != "MissionGroup"));
                popup.enableItem(1, (obj.getName() != "MissionGroup"));
                if (haveLockAndHideEntries)
                    {
                    popup.checkItem(4, obj["locked"].AsBool());
                    popup.checkItem(5, obj.hidden);
                    }
                popup.enableItem(7, this.isItemSelected(itemId));
                }

            popup.showPopup(Canvas);
        }
            public void inspect(SimObject obj)
            {
                string name = "";
                if (obj.isObject())
                    name = obj.getName();
                else
                    ((GuiMLTextCtrl) "RoadFieldInfoControl").setText("");

                //RoadInspectorNameEdit.setValue( %name );
                base.inspect(obj);
            }
        public static void Inspect(SimObject obj)
        {
            GuiInspector InspectFields = "InspectFields";
            GuiTextEditCtrl InspectObjectName = "InspectObjectName";
            GuiTextEditCtrl InspectObjectInternalName = "InspectObjectInternalName";
            GuiTextCtrl InspectObjectSimID = "InspectObjectSimID";

            // Don't inspect the root group.
            if (obj == -1)
                return;

            InspectFields.inspect(obj);

            // Update selected object properties
            InspectObjectName.setValue(obj.getName());
            InspectObjectInternalName.setValue(obj.getInternalName());
            InspectObjectSimID.setValue(obj.getId().AsString());

            // Store Object Reference
            InspectObjectName["refObj"] = obj;
        }
            public override bool handleRenameObject(string name, SimObject obj)
            {
                SimGroup ForestBrushGroup = "ForestBrushGroup";
                EWorldEditor EWorldEditor = "EWorldEditor";
                editor Editor = "Editor";

                if (name != "")
                    {
                    string found = ForestBrushGroup.findObjectByInternalName(name, false);
                    if (found.isObject() && found.getID() != obj.getId())
                        {
                        messageBox.MessageBoxOK("Error", "Brush or Element with that name already exists.", "");

                        // true as in, we handled it, don't rename the object.      
                        return true;
                        }
                    }
                // Since we aren't showing any groups whens inspecting a ForestBrushGroup
                // we can't push this event off to the inspector to handle.

                //return GuiTreeViewCtrl::handleRenameObject( this, name, obj );      

                // The instant group will try to add our
                // UndoAction if we don't disable it.   
                Util.pushInstantGroup();

                string nameOrClass = obj.getName();
                if (nameOrClass == "")
                    nameOrClass = obj.getClassName();

                ObjectCreator actionCreator = new ObjectCreator("InspectorFieldUndoAction");
                actionCreator["actionName"] = nameOrClass + "." + "internalName" + " Change";
                actionCreator["objectId"] = obj.getId().AsString();
                actionCreator["fieldName"] = "internalName";
                actionCreator["fieldValue"] = obj["internalName"];
                actionCreator["arrayIndex"] = "0";

                actionCreator["inspectorGui"] = "";

                InspectorFieldUndoAction action = actionCreator.Create();

                // Restore the instant group.
                Util.popInstantGroup();

                action.addToManager(Editor.getUndoManager());
                EWorldEditor.isDirty = true;

                return false;
            }
            public void saveParticle(SimObject particle)
            {
                GuiPopUpMenuCtrl PEP_ParticleSelector = "PEP_ParticleSelector";
                ParticleData PE_ParticleEditor_NotDirtyParticle = "PE_ParticleEditor_NotDirtyParticle";
                PersistenceManager PE_ParticleSaver = "PE_ParticleSaver";
                ParticleEditor ParticleEditor = "ParticleEditor";

                particle.setName(PEP_ParticleSelector.getText());

                PE_ParticleEditor_NotDirtyParticle.assignFieldsFrom(particle);
                PE_ParticleEditor_NotDirtyParticle["originalName"] = particle.getName();

                PE_ParticleSaver.saveDirty();
                this.setParticleNotDirty();

                ParticleEditor.createParticleList();
            }
            public void loadNewParticle(SimObject particle)
            {
                GuiPopUpMenuCtrl PEP_ParticleSelector = "PEP_ParticleSelector";
                ParticleData PE_ParticleEditor_NotDirtyParticle = "PE_ParticleEditor_NotDirtyParticle";

                if (particle.isObject())
                    particle = particle.getId().AsString();
                else
                    particle = PEP_ParticleSelector.getSelected().AsString();

                this.currParticle = particle;

                particle.call("reload");

                PE_ParticleEditor_NotDirtyParticle.assignFieldsFrom(particle);
                PE_ParticleEditor_NotDirtyParticle["originalName"] = particle.getName();

                this.guiSync();
                this.setParticleNotDirty();
            }
        public virtual bool objectMatchesCriteria(SimObject obj)
        {
            if (this["namePattern"] != "" && !Util.strIsMatchExpr(this["NamePattern"], obj.getName(), false))
                return false;
            // Check class.

            if (!isClassEnabled(obj.getClassName()))
                return false;

            return true;
        }
            public void openForEditing(SimObject content)
            {
                GuiCanvas Canvas = "Canvas";
                GuiEditorGui GuiEditorGui = "GuiEditorGui";
                GuiControl GuiEditorContent = "GuiEditorContent";
                GuiEditorContentList GuiEditorContentList = "GuiEditorContentList";
                GuiEditorResList GuiEditorResList = "GuiEditorResList";
                GuiScrollCtrl GuiEditorScroll = "GuiEditorScroll";
                GuiEditorTreeView GuiEditorTreeView = "GuiEditorTreeView";
                GuiEditorProfiles.GuiEditorProfilesTree GuiEditorProfilesTree = "GuiEditorProfilesTree";
                GuiEditorProfiles.GuiEditorProfileChangeManager GuiEditorProfileChangeManager = "GuiEditorProfileChangeManager";

                Canvas.setContent(GuiEditorGui);
                while (GuiEditorContent.getCount() != 0)
                    "GuiGroup".call("add", new string[] {GuiEditorContent.getObject(0)});
                // get rid of anything being edited

                // Clear the current guide set and add the guides
                // from the control.

                this.clearGuides();
                this.readGuides(content);

                // Enumerate GUIs and put them into the content list.

                GuiEditorContentList.init();

                GuiEditorScroll.scrollToTop();
                Util.activatePackage("GuiEditor_BlockDialogs");
                Extendable.GuiCanvas.blockDialogs = true;
                GuiEditorContent.add(content);
                Util.deactivatePackage("GuiEditor_BlockDialogs");
                Extendable.GuiCanvas.blockDialogs = false;
                GuiEditorContentList.sort();

                string name = "";
                if (content.getName() == "")
                    name = "(unnamed) - " + content;
                else
                    name = content.getName() + " - " + content;

                GuiEditorContentList.setText(name);

                this.setContentControl(content);

                // Initialize the preview resolution list and select the current
                // preview resolution.

                GuiEditorResList.init();

                string res = this["previewResolution"];
                if (res == "")
                    res = "1024 768";
                GuiEditorResList.selectFormat(res);

                // Initialize the treeview and expand the first level.

                GuiEditorTreeView.init();
                GuiEditorTreeView.open(content);
                GuiEditorTreeView.expandItem(1);

                // Initialize profiles tree.

                if (!GuiEditorProfilesTree["isInitialized"].AsBool())
                    {
                    GuiEditorProfilesTree.init();
                    GuiEditorProfilesTree["isInitialized"] = true.AsString();
                    }

                // Create profile change manager if we haven't already.

                if (!GuiEditorProfileChangeManager.isObject())
                    new ObjectCreator("SimGroup", "GuiEditorProfileChangeManager", typeof (GuiEditorProfiles.GuiEditorProfileChangeManager)).Create();

                // clear the undo manager if we're switching controls.
                if (this["lastContent"] != content)
                    this.getUndoManager().clearAll();

                this.setFirstResponderX();

                this.updateUndoMenu();
                this["lastContent"] = content;
            }
        public void gotMaterialName(SimObject name)
        {
            int index = this["currentControl"].AsInt();

            this["field[" + index + ",value]"] = name.getName();

            ((GuiControl) this["controls[" + index + "]"]).findObjectByInternalName("MatText", true).call("setText", new string[] {name.getName()});
        }
            public void saveEmitter(SimObject emitter)
            {
                PEE_EmitterSelector_Control PEE_EmitterSelector_Control = "PEE_EmitterSelector_Control";
                ParticleEmitterData PE_EmitterEditor_NotDirtyEmitter = "PE_EmitterEditor_NotDirtyEmitter";
                PersistenceManager PE_EmitterSaver = "PE_EmitterSaver";
                ParticleEditor ParticleEditor = "ParticleEditor";

                GuiTextEditCtrl TextEdit = PEE_EmitterSelector_Control.FOT("TextEdit");

                string newName;
                if (emitter == "")
                    newName = TextEdit.getText();
                else
                    newName = emitter.getName();

                this.currEmitter.setName(newName);
                PE_EmitterEditor_NotDirtyEmitter.assignFieldsFrom(emitter);
                PE_EmitterEditor_NotDirtyEmitter["originalName"] = newName;

                PE_EmitterSaver.saveDirty();

                this.currEmitter = newName.getID();
                this.setEmitterNotDirty();

                ParticleEditor.createParticleList();
            }
            public void addShapeIcon(SimObject datablock)
            {
                GuiIconButtonCtrl ctrl = this.createIcon();

                string name = datablock.getName();
                string className = datablock.getClassName();
                string cmd = className + "::create(" + name + ");";

                string shapePath = (datablock["shapeFile"] != "") ? datablock["shapeFile"] : datablock["shapeName"];

                string createCmd = "EWCreatorWindow.createObject( \\\"" + cmd + "\\\" );";
                ctrl.altCommand = "ColladaImportDlg.showDialog( \"" + shapePath + "\", \"" + createCmd + "\" );";

                ctrl.iconBitmap = console.Call_Classname("EditorIconRegistry", "findIconByClassName", new string[] {className});
                ctrl.text = name;
                //ctrl["class"] = "CreatorShapeIconBtn";
                ctrl.tooltip = name;

                ctrl.buttonType = "RadioButton";
                ctrl.groupNum = -1;

                this.contentCtrl.addGuiControl(ctrl);
            }