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);
        }
Beispiel #2
0
        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;
                    }
                }
            }
        }
Beispiel #3
0
        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");
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        public override void onSleep()
        {
            if ("TerrainMaterialDlgSnapshot".isObject())
            {
                "TerrainMaterialDlgSnapshot".delete();
            }
            GuiTreeViewCtrl matLibTree = this.findObjectByInternalName("matLibTree", true);

            matLibTree.clear();
        }
Beispiel #9
0
        public void setTerrainFolder(string terrainFolder)
        {
            TerrainMaterial mat        = this["activeMat"];
            GuiTreeViewCtrl matLibTree = FOT("matLibTree");

            if (mat.isObject())
            {
                mat["terrainFolder"] = terrainFolder;
                matLibTree.buildVisibleTree(false);
            }
        }
Beispiel #10
0
        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();
        }
Beispiel #12
0
        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("");
        }
Beispiel #14
0
        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);
        }
Beispiel #16
0
        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();
            }
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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);
                }
            }
        }
Beispiel #19
0
        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));
        }
Beispiel #22
0
        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);
        }