Beispiel #1
0
        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);
        }