public ProjectNodeSource(string name, IDocumentManager documentManager, ProjectManager projectManager, DefaultState defaultState) : base(name) { this.projectManager = projectManager; this.documentManager = documentManager; this.documentManager.DocumentRenamed += documentManager_DocumentRenamed; game = Core.Prometheus.Instance.GetGameDefinitionByGameID(projectManager.GameID); // Combined tag source - Project References and TemplateTags that exist in the project. projectReferences = new ProjectReferencesLibrary( "projectrefs", projectManager.Project, projectManager.Project.Templates); projectReferences.FileAdded += FileAdded; projectReferences.FileRemoved += FileRemoved; projectFolder = projectManager.ProjectFolder; projectFolder.FileAdded += FileAdded; projectFolder.FileRemoved += FileRemoved; projectFolder.FolderAdded += FolderAdded; projectFolder.FolderRemoved += FolderRemoved; projectManager.Project.Templates.FileAdded += Templates_FileAdded; projectManager.Project.Templates.FileRemoved += Templates_FileRemoved; AddNodeType(CreateNodeType <RootNodeType>(defaultState)); UnreferencedState unreferenced = new UnreferencedState(this, "unreferenced", Resources.document_plain16, Resources.document_plain16, Color.Gray, Color.White); MissingReferencedState missing = new MissingReferencedState(this, "missing_reference", Resources.document_error16, Resources.document_error16, Color.Red, Color.White); NodeType folder = CreateNodeType <FolderNodeType>(Resources.folder16, Resources.folder_closed16); AddNodeType(folder); folder.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(folder_NodeRenamed); NodeType tagNode = CreateNodeType <TagNode>(Resources.document16); tagNode.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.document16, Resources.document16, Color.Black, Color.White)); tagNode.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.document_view16, Resources.document_view16, Color.Blue, Color.White)); tagNode.AddNodeState(unreferenced); tagNode.AddNodeState(missing); AddNodeType(tagNode); tagNode.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); ObjectTag objectFile = CreateNodeType <ObjectTag>(Resources.data16); objectFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.data_view16, Resources.data_view16, Color.Blue, Color.White)); objectFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.data16, Resources.data16, Color.Black, Color.White)); objectFile.AddNodeState(unreferenced); objectFile.AddNodeState(missing); AddNodeType(objectFile); objectFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType modelFile = CreateNodeType <ModelTag>(Resources.cube_molecule16); modelFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.cube_molecule_view16, Resources.cube_molecule_view16, Color.Blue, Color.White)); modelFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.cube_molecule16, Resources.cube_molecule16, Color.Black, Color.White)); modelFile.AddNodeState(unreferenced); modelFile.AddNodeState(missing); AddNodeType(modelFile); modelFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType sbspFile = CreateNodeType <SbspTag>(Resources.environment16); sbspFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.environment_view16, Resources.environment_view16, Color.Blue, Color.White)); sbspFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.environment16, Resources.environment16, Color.Black, Color.White)); sbspFile.AddNodeState(unreferenced); sbspFile.AddNodeState(missing); AddNodeType(sbspFile); sbspFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType scenarioFile = CreateNodeType <ScenarioTag>(Resources.earth16); scenarioFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.earth_view16, Resources.earth_view16, Color.Blue, Color.White)); scenarioFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.earth16, Resources.earth16, Color.Black, Color.White)); scenarioFile.AddNodeState(unreferenced); scenarioFile.AddNodeState(missing); AddNodeType(scenarioFile); scenarioFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType propertiesNode = CreateNodeType <PropertiesRootNodeType>(Resources.preferences16); AddNodeType(propertiesNode); NodeType essentialTagsNode = CreateNodeType <EssentialTagsRoot>(Resources.components16); AddNodeType(essentialTagsNode); NodeType projectTemplateTagNode = CreateNodeType <ProjectTemplateTagNodeType>(Resources.application16); AddNodeType(projectTemplateTagNode); NodeType globalTemplateTagNode = CreateNodeType <GlobalTemplateTagNodeType>(Resources.joystick16); AddNodeType(globalTemplateTagNode); NodeType recycleBinNode = CreateNodeType <RecycleBinRootNodeType>(Resources.garbage_empty16); recycleBinNode.AddNodeState(new RecycleBinContainsFilesState(projectManager.Project.RecycleBin, "recyclebin_not_empty", Resources.garbage_full16, Resources.garbage_full16, Color.Black, Color.White)); //TODO: Need to create a state for when the recycle bin is completely full (though, I'm not sure how this //would work, because you can't say that it's "full" because you don't know how big the file is that they //are going to try to add - it may fit or it may not, and the recycle bin is very unlikely to contain //the exact number of bytes that it can hold before it is considered "full".) AddNodeType(recycleBinNode); }