public void syncDirtyState() { GuiTreeViewCtrl tree = "DatablockEditorTree"; int count = tree.getSelectedItemsCount(); string selected = tree.getSelectedItemList(); bool haveDirty = false; foreach (string id in selected.Split(' ')) { if (id.Trim() == "") { continue; } string db = tree.getItemValue(id.AsInt()); if (this.PM.isDirty(db)) { this.flagDatablockAsDirty(db, true); haveDirty = true; } else { this.flagDatablockAsDirty(db, false); } } this.flagInspectorAsDirty(haveDirty); }
public void show(int matIndex, string terrMat, string onApplyCallback) { ((GuiCanvas)"Canvas").pushDialog(this); this.matIndex = matIndex; this.onApplyCallback = onApplyCallback; GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); int item = matLibTree.findItemByObjectId(terrMat.AsInt()); if (item != -1) { matLibTree.selectItem(item); matLibTree.scrollVisible(item); } else { for (int i = 1; i < matLibTree.getItemCount(); i++) { SimObject oterrMat = matLibTree.getItemValue(i); if (oterrMat.getClassName() == "TerrainMaterial") { matLibTree.selectItem(i, true); matLibTree.scrollVisible(i); break; } } } }
public override void onWake() { if (!"ETerrainMaterialPersistMan".isObject()) { new ObjectCreator("PersistenceManager", "ETerrainMaterialPersistMan").Create(); } if (!"TerrainMaterialDlgNewGroup".isObject()) { new ObjectCreator("SimGroup", "TerrainMaterialDlgNewGroup").Create(); } if (!"TerrainMaterialDlgDeleteGroup".isObject()) { new ObjectCreator("SimGroup", "TerrainMaterialDlgDeleteGroup").Create(); } // Snapshot the materials. this.snapshotMaterials(); this.buildTree(); GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); //matLibTree.clear(); //matLibTree.open("TerrainMaterialSet", false); matLibTree.buildVisibleTree(true); //int item = matLibTree.getFirstRootItem(); matLibTree.expandItem(2); //matLibTree.selectItem(1); //activateMaterialCtrls(true); }
public void flagDatablockAsDirty(SimObject datablock, bool dirty) { GuiTreeViewCtrl tree = "DatablockEditorTree"; int id = tree.findItemByValue(datablock.getId().AsString()); if (id == 0) { return; } // Tag the item caption and sync the persistence manager. if (dirty) { tree.editItem(id, datablock.getName() + " *", datablock.getId().AsString()); this.PM.setDirty(datablock); } else { tree.editItem(id, datablock.getName(), datablock.getId().AsString()); this.PM.removeDirty(datablock); } // Sync the inspector dirty state. this.flagInspectorAsDirty(this.PM.hasDirty()); }
public void unselectDatablock(string datablock, bool dontSyncTree) { GuiTreeViewCtrl DatablockEditorTree = "DatablockEditorTree"; GuiInspector DatablockEditorInspector = "DatablockEditorInspector"; GuiWindowCollapseCtrl DatablockEditorInspectorWindow = "DatablockEditorInspectorWindow"; EditorGui.EditorGuiStatusBar EditorGuiStatusBar = "EditorGuiStatusBar"; DatablockEditorInspector.removeInspect(datablock); if (!dontSyncTree) { int id = DatablockEditorTree.findItemByValue(datablock.getID().AsString()); DatablockEditorTree.selectItem(id, false); } this.syncDirtyState(); // If we have exactly one selected datablock remaining, re-enable // the save-as button. int numSelected = this.getNumSelectedDatablocks(); if (numSelected == 1) { ((GuiBitmapButtonCtrl)DatablockEditorInspectorWindow.findObjectByInternalName("saveAsButton", true)).setActive(true); GuiTextEditCtrl fileNameField = DatablockEditorInspectorWindow.findObjectByInternalName("DatablockFile", true); fileNameField.setText(((SimObject)this.getSelectedDatablock()).getFilename()); fileNameField.setActive(true); } EditorGuiStatusBar.setSelection(this.getNumSelectedDatablocks() + " Datablocks Selected"); }
public void newMat() { // Create a unique material name. string matName = Util.getUniqueInternalName("newMaterial", "TerrainMaterialSet", true); // Create the new material. ObjectCreator oc = new ObjectCreator("TerrainMaterial"); oc["internalName"] = matName; oc["parentGroup"] = "TerrainMaterialDlgNewGroup"; TerrainMaterial newMat = oc.Create(); newMat.setFilename("art/terrains/materials.cs"); // Mark it as dirty and to be saved in the default location. PersistenceManager ETerrainMaterialPersistMan = "ETerrainMaterialPersistMan"; ETerrainMaterialPersistMan.setDirty(newMat, "art/terrains/materials.cs"); GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); //TerrainPainterAddition int root = matLibTree.findItemByName("RootMaterial"); int folder = matLibTree.findItemByName("Unused"); if (folder == 0) { folder = matLibTree.insertItem(root, "Unused", "Unused", ""); } matLibTree.insertObject(folder, newMat, true); matLibTree.buildVisibleTree(true); SimObject item = matLibTree.findItemByObjectId(newMat); matLibTree.selectItem(item); }
public void deleteMat() { SimSet TerrainMaterialSet = "TerrainMaterialSet"; SimGroup TerrainMaterialDlgDeleteGroup = "TerrainMaterialDlgDeleteGroup"; TerrainEditor ETerrainEditor = "ETerrainEditor"; if (!this["activeMat"].isObject()) { return; } // Cannot delete this material if it is the only one left on the Terrain if ((ETerrainEditor.getMaterialCount() == 1) && ETerrainEditor.getMaterialIndex(((SimObject)this["activeMat"]).internalName) != -1) { messageBox.MessageBoxOK("Error", "Cannot delete this Material, it is the only Material still in use by the active Terrain."); return; } TerrainMaterialSet.remove(this["activeMat"]); TerrainMaterialDlgDeleteGroup.add(this["activeMat"]); GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); buildTree(); //matLibTree.open("TerrainMaterialSet", false); //matLibTree.selectItem(1); }
public override void onSleep() { if ("TerrainMaterialDlgSnapshot".isObject()) { "TerrainMaterialDlgSnapshot".delete(); } GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); matLibTree.clear(); }
public void setTerrainFolder(string terrainFolder) { TerrainMaterial mat = this["activeMat"]; GuiTreeViewCtrl matLibTree = FOT("matLibTree"); if (mat.isObject()) { mat["terrainFolder"] = terrainFolder; matLibTree.buildVisibleTree(false); } }
public void createDatablock() { GuiTreeViewCtrl DatablockEditorTypeTree = "DatablockEditorTypeTree"; GuiControl DatablockEditorCreatePrompt = "DatablockEditorCreatePrompt"; string className = DatablockEditorTypeTree.getItemText(DatablockEditorTypeTree.getSelectedItem()); if (className != "") { // Need to prompt for a name. ((GuiTextEditCtrl)DatablockEditorCreatePrompt.findObjectByInternalName("CreateDatablockName", true)) .setText("Name"); ((GuiTextEditCtrl)DatablockEditorCreatePrompt.findObjectByInternalName("CreateDatablockName", true)) .selectAllText(); // Populate the copy source dropdown. GuiPopUpMenuCtrl list = DatablockEditorCreatePrompt.findObjectByInternalName("CopySourceDropdown", true); list.clear(); list.add("", 0); SimSet set = "DataBlockSet"; int count = set.getCount(); for (uint i = 0; i < count; i++) { SimObject datablock = set.getObject(i); string datablockClass = datablock.getClassName(); if (!Util.isMemberOfClass(datablockClass, className)) { continue; } list.add(datablock.getName(), ((int)i + 1)); } // Set up state of client-side checkbox. GuiCheckBoxCtrl clientSideCheckBox = DatablockEditorCreatePrompt.findObjectByInternalName("ClientSideCheckBox", true); bool canBeClientSide = this.canBeClientSideDatablock(className); clientSideCheckBox.setStateOn(canBeClientSide); clientSideCheckBox.setActive(canBeClientSide); // Show the dialog. ((GuiCanvas)"canvas").pushDialog(DatablockEditorCreatePrompt, 0, true); } }
public override void onActivated() { RiverEditorGui RiverEditorGui = "RiverEditorGui"; GuiControl RiverEditorToolbar = "RiverEditorToolbar"; GuiWindowCollapseCtrl RiverEditorOptionsWindow = "RiverEditorOptionsWindow"; GuiWindowCollapseCtrl RiverEditorTreeWindow = "RiverEditorTreeWindow"; GuiTreeViewCtrl RiverTreeView = "RiverTreeView"; EditorGui.EditorGuiStatusBar EditorGuiStatusBar = "EditorGuiStatusBar"; GizmoProfile GlobalGizmoProfile = "GlobalGizmoProfile"; EditorGui EditorGui = "EditorGui"; //Copyright Winterleaf Entertainment L.L.C. 2013 this["isActive"] = true.AsString(); //Copyright Winterleaf Entertainment L.L.C. 2013 this.readSettings(); omni.bGlobal["$River::EditorOpen"] = true; ((GuiBitmapButtonCtrl) ((GuiDynamicCtrlArrayControl)"ToolsPaletteArray").findObjectByInternalName( "RiverEditorAddRiverMode", false)).performClick(); EditorGui.bringToFront("RiverEditorGui"); RiverEditorGui.setVisible(true); RiverEditorGui.makeFirstResponder(true); RiverEditorToolbar.setVisible(true); RiverEditorOptionsWindow.setVisible(true); RiverEditorTreeWindow.setVisible(true); RiverTreeView.open("ServerRiverSet", true); this.map.push(); // Store this on a dynamic field // in order to restore whatever setting // the user had before. this["prevGizmoAlignment"] = GlobalGizmoProfile["alignment"]; // The DecalEditor always uses Object alignment. GlobalGizmoProfile["alignment"] = "Object"; // Set the status bar here until all tool have been hooked up EditorGuiStatusBar.setInfo("River editor."); EditorGuiStatusBar.setSelection(""); // Allow the Gui to setup. RiverEditorGui.onEditorActivated(); base.onActivated(); }
public void selectDatablock(SimObject datablock, bool add = false, bool dontSyncTree = false) { GuiTreeViewCtrl DatablockEditorTree = "DatablockEditorTree"; GuiInspector DatablockEditorInspector = "DatablockEditorInspector"; GuiWindowCollapseCtrl DatablockEditorInspectorWindow = "DatablockEditorInspectorWindow"; EditorGui.EditorGuiStatusBar EditorGuiStatusBar = "EditorGuiStatusBar"; if (add) { DatablockEditorInspector.addInspect(datablock); } else { DatablockEditorInspector.inspect(datablock); } if (!dontSyncTree) { int id = DatablockEditorTree.findItemByValue(datablock); if (!add) { DatablockEditorTree.clearSelection(); } DatablockEditorTree.selectItem(id, true); DatablockEditorTree.scrollVisible(id); } this.syncDirtyState(); // Update the filename text field. int numSelected = this.getNumSelectedDatablocks(); GuiTextEditCtrl fileNameField = DatablockEditorInspectorWindow.findObjectByInternalName("DatablockFile", true); if (numSelected == 1) { string fileName = datablock.getFilename(); fileNameField.setText(fileName != "" ? fileName : omni.sGlobal["$DATABLOCK_EDITOR_DEFAULT_FILENAME"]); } else { fileNameField.setText(""); } EditorGuiStatusBar.setSelection(this.getNumSelectedDatablocks() + " Datablocks Selected"); }
public void resetSelectedDatablock() { GuiTreeViewCtrl DatablockEditorTree = "DatablockEditorTree"; DatablockEditor.DatablockEditorInspector DatablockEditorInspector = "DatablockEditorInspector"; GuiWindowCollapseCtrl DatablockEditorInspectorWindow = "DatablockEditorInspectorWindow"; EditorGui.EditorGuiStatusBar EditorGuiStatusBar = "EditorGuiStatusBar"; DatablockEditorTree.clearSelection(); DatablockEditorInspector.inspect("0"); ((GuiTextEditCtrl)DatablockEditorInspectorWindow.findObjectByInternalName("DatablockFile", true)).setText(""); EditorGuiStatusBar.setSelection(""); }
public void showByObjectID(string matObjectID, string onApplyCallback) { ((GuiCanvas)"canvas").pushDialog(this); matIndex = -1; this.onApplyCallback = onApplyCallback; GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); matLibTree.clearSelection(); int item = matLibTree.findItemByObjectId(matObjectID.AsInt()); if (item == -1) { matLibTree.selectItem(item); matLibTree.scrollVisible(item); } }
public bool selectedDatablockIsDirty() { GuiTreeViewCtrl tree = "DatablockEditorTree"; int count = tree.getSelectedItemsCount(); string selected = tree.getSelectedItemList(); foreach (string id in selected.Split(' ')) { string db = tree.getItemValue(id.AsInt()); if (this.PM.isDirty(db)) { return(true); } } return(false); }
public void createDatablockFinish(string name, string copySource) { GuiTreeViewCtrl DatablockEditorTypeTree = "DatablockEditorTypeTree"; GuiControl DatablockEditorCreatePrompt = "DatablockEditorCreatePrompt"; string className = DatablockEditorTypeTree.getItemText(DatablockEditorTypeTree.getSelectedItem()); if (className != "") { UndoScriptAction action = this.createUndo <DatablockEditorUndo.ActionCreateDatablock>("Create New Datablock"); string dbType; if ( ((GuiCheckBoxCtrl) DatablockEditorCreatePrompt.findObjectByInternalName("ClientSideCheckBox", true)).isStateOn()) { dbType = "singleton "; } else { dbType = "datablock "; } string eval; if (copySource != "") { eval = dbType + className + "(" + name + " : " + copySource + ") { canSaveDynamicFields = \"1\"; };"; } else { eval = dbType + className + "(" + name + ") { canSaveDynamicFields = \"1\"; };"; } string res = omni.Util.eval(eval); action["db"] = name.getID().AsString(); action["dbName"] = name; action["fname"] = omni.sGlobal["$DATABLOCK_EDITOR_DEFAULT_FILENAME"]; this.submitUndo(action); action.redo(); } }
public void saveNewFileFinish(string newFileName) { GuiWindowCollapseCtrl DatablockEditorInspectorWindow = "DatablockEditorInspectorWindow"; // Clear the first responder to capture any inspector changes GuiControl ctrl = ((GuiCanvas)"canvas").getFirstResponder(); if (ctrl.isObject()) { ctrl.clearFirstResponder(false); } GuiTreeViewCtrl tree = "DatablockEditorTree"; int count = tree.getSelectedItemsCount(); string selected = tree.getSelectedItemList(); foreach (string id in selected.Split(' ')) { //TODO SimObject db = tree.getItemValue(id.AsInt()); //db = this.getSelectedDatablock(); // Remove from current file. string oldFileName = db.getFilename(); if (oldFileName != "") { this.PM.removeObjectFromFile(db, oldFileName); } // Save to new file. this.PM.setDirty(db, newFileName); if (this.PM.saveDirtyObject(db)) { // Clear dirty state. this.flagDatablockAsDirty(db, false); } } ((GuiTextEditCtrl)DatablockEditorInspectorWindow.findObjectByInternalName("DatablockFile", true)).setText (newFileName); }
public void setMaterialName(string newName) { GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true); SimObject mat = this["activeMat"]; if (mat.internalName != newName) { SimObject existingMat = ((SimSet)"TerrainMaterialSet").findObjectByInternalName(newName, true); if (existingMat.isObject()) { messageBox.MessageBoxOK("Error", "There already is a terrain material called '" + newName + "'."); } else { mat.setInternalName(newName); matLibTree.buildVisibleTree(false); } } }
public override void onActivated() { RoadEditorGui RoadEditorGui = "RoadEditorGui"; GuiControl RoadEditorToolbar = "RoadEditorToolbar"; GuiWindowCollapseCtrl RoadEditorOptionsWindow = "RoadEditorOptionsWindow"; GuiWindowCollapseCtrl RoadEditorTreeWindow = "RoadEditorTreeWindow"; GuiTreeViewCtrl RoadTreeView = "RoadTreeView"; EditorGui.EditorGuiStatusBar EditorGuiStatusBar = "EditorGuiStatusBar"; EditorGui EditorGui = "EditorGui"; //Copyright Winterleaf Entertainment L.L.C. 2013 this["isActive"] = true.AsString(); //Copyright Winterleaf Entertainment L.L.C. 2013 this.readSettings(); ((GuiBitmapButtonCtrl) ((GuiDynamicCtrlArrayControl)"ToolsPaletteArray").findObjectByInternalName("RoadEditorAddRoadMode", false)).performClick(); EditorGui.bringToFront(RoadEditorGui); RoadEditorGui.setVisible(true); RoadEditorGui.makeFirstResponder(true); RoadEditorToolbar.setVisible(true); RoadEditorOptionsWindow.setVisible(true); RoadEditorTreeWindow.setVisible(true); RoadTreeView.open("ServerDecalRoadSet", true); this.map.push(); // Set the status bar here until all tool have been hooked up EditorGuiStatusBar.setInfo("Road editor."); EditorGuiStatusBar.setSelection(""); base.onActivated(); }
public int addExistingItem(SimObject datablock, bool dontSort) { GuiTreeViewCtrl tree = "DatablockEditorTree"; // Look up class at root level. Create if needed. string className = datablock.getClassName(); int parentID = tree.findItemByName(className); if (parentID == 0) { parentID = tree.insertItem(0, className, "", "", 0, 0); } // If the datablock is already there, don't // do anything. if (tree.findItemByValue(datablock.getId().AsString()).AsBool()) { return(0); } // It doesn't exist so add it. string name = datablock.getName(); if (this.PM.isDirty(datablock)) { name = name + " *"; } int id = tree.insertItem(parentID, name, datablock.getId().AsString(), "", 0, 0); if (!dontSort) { tree.sort(parentID, false, false, false); } return(id); }
public string getSelectedDatablock(string index = "") { GuiTreeViewCtrl tree = "DatablockEditorTree"; if (tree.getSelectedItemsCount() == 0) { return("0"); } int id; if (index == "") { id = tree.getSelectedItem(); } else { id = (int)(tree.getSelectedItemList().Split(' ')).GetValue(index.AsInt()); } return(tree.getItemValue(id)); }
public void buildTree() { // Refresh the material list. GuiTreeViewCtrl matLibTree = FOT("matLibTree"); matLibTree.clear(); int root = matLibTree.insertItem(0, "RootMaterial", "RootMaterial", ""); //TerrainPainterAddition SimSet TerrainMaterialSet = "TerrainMaterialSet"; for (uint i = 0; i < TerrainMaterialSet.getCount(); i++) { TerrainMaterial mat = TerrainMaterialSet.getObject(i); if (!mat.isObject()) { continue; } string terrainFolderName = mat["terrainFolder"]; if (terrainFolderName == "") { terrainFolderName = "Unused"; } int folder = matLibTree.findItemByName(terrainFolderName); if (folder == 0) { folder = matLibTree.insertItem(root, terrainFolderName, terrainFolderName, ""); } if (matLibTree.getParentItem(folder) == root) { matLibTree.insertObject(folder, mat, true); } } }
public void save() { // Clear the first responder to capture any inspector changes GuiControl ctrl = ((GuiCanvas)"canvas").getFirstResponder(); if (ctrl.isObject()) { ctrl.clearFirstResponder(false); } GuiTreeViewCtrl tree = "DatablockEditorTree"; string selected = tree.getSelectedItemList(); foreach (string id in selected.Split(' ')) { string db = tree.getItemValue(id.AsInt()); if (this.PM.isDirty(db)) { this.PM.saveDirtyObject(db); this.flagDatablockAsDirty(db, false); } } }
public void deleteDatablock() { GuiTreeViewCtrl tree = "DatablockEditorTree"; editor Editor = "Editor"; // If we have more than single datablock selected, // turn our undos into a compound undo. int numSelected = tree.getSelectedItemsCount(); if (numSelected > 1) { Editor.getUndoManager().pushCompound("Delete Multiple Datablocks"); } for (int i = 0; i < numSelected; i++) { int id = tree.getSelectedItem(i); SimObject db = tree.getItemValue(id); string fileName = db.getFilename(); // Remove the datablock from the tree. tree.removeItem(id); // Create undo. UndoScriptAction action = this.createUndo <DatablockEditorUndo.ActionDeleteDatablock>("Delete Datablock"); action["db"] = db; action["dbName"] = db.getName(); action["fname"] = fileName; this.submitUndo(action); // Kill the datablock in the file. if (fileName != "") { this.PM.removeObjectFromFile(db); } ((SimSet)"UnlistedDatablocks").add(db); // Show some confirmation. if (numSelected == 1) { messageBox.MessageBoxOK("Datablock Deleted", "The datablock (" + db.getName() + ") has been removed from " + "it's file (" + db.getFilename() + ") and upon restart will cease to exist"); } } // Close compound, if we were deleting multiple datablocks. if (numSelected > 1) { Editor.getUndoManager().popCompound(); } // Show confirmation for multiple datablocks. if (numSelected > 1) { messageBox.MessageBoxOK("Datablocks Deleted", "The datablocks have been deleted and upon restart will cease to exist."); } // Clear selection. this.resetSelectedDatablock(); }
public void populateTrees() { GuiTreeViewCtrl DatablockEditorTree = "DatablockEditorTree"; GuiTreeViewCtrl DatablockEditorTypeTree = "DatablockEditorTypeTree"; SimSet set; // Populate datablock tree. if (this["excludeClientOnlyDatablocks"].AsBool()) { set = "DataBlockGroup"; } else { set = "DataBlockSet"; } DatablockEditorTree.clear(); int count = set.getCount(); for (uint i = 0; i < count; i++) { bool unlistedFound = false; string datablock = set.getObject(i); int id = datablock.getID(); int anotherCount = ((SimSet)"UnlistedDatablocks").getCount(); for (uint j = 0; j < anotherCount; j++) { if (((SimSet)"UnlistedDatablocks").getObject(j) == datablock) { unlistedFound = true; break; } } if (unlistedFound) { continue; } this.addExistingItem(datablock, true); } DatablockEditorTree.sort(0, true, false, false); // Populate datablock type tree. string classList = omni.Util.enumerateConsoleClasses("SimDatablock"); DatablockEditorTypeTree.clear(); foreach (string datablockClass in classList.Split('\t')) { if (!this.isExcludedDatablockType(datablockClass) && DatablockEditorTypeTree.findItemByName(datablockClass) == 0) { DatablockEditorTypeTree.insertItem(0, datablockClass, "", "", 0, 0); } } DatablockEditorTypeTree.sort(0, false, false, false); }