internal bool IsNodeExpanded(ProjectElement Element) { string key = "Element*" + Element.DocumentInfo.Project.Settings.Name + "*" + Element.Name; return(ExpandedNodes.Contains(key)); }
public bool NeedsRebuild(DocumentInfo DocInfo, string ConfigSetting) { if (DocInfo == null) { return(false); } lock (DocInfo.DeducedDependency) { // actual parsing and deducing dependencies if a rebuild is necessary! foreach (IDockContent dockContent in Core.MainForm.panelMain.Documents) { BaseDocument baseDoc = (BaseDocument)dockContent; if (baseDoc.Modified) { Core.AddToOutput("Component '" + baseDoc.DocumentInfo.DocumentFilename + "' needs rebuilding." + System.Environment.NewLine); return(true); } } if (DocInfo.Element != null) { foreach (var dependency in DocInfo.Element.ForcedDependency.DependentOnFile) { var project = Core.Navigating.Solution.GetProjectByName(dependency.Project); if (project == null) { Core.AddToOutput("Could not find dependency project " + dependency.Project + " for " + dependency + System.Environment.NewLine); return(true); } ProjectElement elementDependency = project.GetElementByFilename(dependency.Filename); if (elementDependency == null) { Core.AddToOutput("Could not find dependency " + dependency.Filename + " in project " + dependency.Project + " for " + dependency + System.Environment.NewLine); return(true); } if (NeedsRebuild(elementDependency.DocumentInfo, ConfigSetting)) { Core.AddToOutput("Dependency '" + elementDependency.DocumentInfo.DocumentFilename + "' needs rebuilding." + System.Environment.NewLine); return(true); } foreach (var rebuildFile in m_RebuiltFiles) { if (GR.Path.IsPathEqual(elementDependency.DocumentInfo.DocumentFilename, rebuildFile)) { Core.AddToOutput("Dependency " + elementDependency.DocumentInfo.DocumentFilename + " was rebuilt in this cycle, need to rebuild dependent element " + DocInfo.DocumentFilename + System.Environment.NewLine); return(true); } } } if (DocInfo.DeducedDependency[ConfigSetting] != null) { // custom build overrides output file -> always rebuild if ((DocInfo.Element.Settings.ContainsKey(ConfigSetting)) && (!string.IsNullOrEmpty(DocInfo.Element.Settings[ConfigSetting].CustomBuild)) && (!string.IsNullOrEmpty(DocInfo.Element.TargetFilename))) { Core.AddToOutput("Custom build always requires a rebuild" + System.Environment.NewLine); return(true); } foreach (var dependency in DocInfo.Element.ExternalDependencies.DependentOnFile) { string fullPath = BuildFullPath(DocInfo.Project.Settings.BasePath, dependency.Filename); var dependencyBuildInfo = DocInfo.LastBuildInfo;// DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath]; if ((dependencyBuildInfo != null) && (!string.IsNullOrEmpty(dependencyBuildInfo.TargetFile)) && (!System.IO.File.Exists(dependencyBuildInfo.TargetFile))) { Core.AddToOutput($"Dependency target {dependencyBuildInfo.TargetFile} is missing, need to rebuild dependent element " + DocInfo.DocumentFilename + System.Environment.NewLine); return(true); } var fileTime = FileLastWriteTime(fullPath); if (fileTime != DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath].TimeStampOfTargetFile) { Core.AddToOutput("External Dependency " + fullPath + " was modified, need to rebuild dependent element " + DocInfo.DocumentFilename + System.Environment.NewLine); return(true); } } } else { // no build time stored yet, needs rebuild DocInfo.DeducedDependency[ConfigSetting] = new DependencyBuildState(); Core.AddToOutput("No last build time found for configuration '" + ConfigSetting + "', need rebuilding." + System.Environment.NewLine); return(true); } // check indirect dependencies from pre build chains if (!DocInfo.Element.Settings.ContainsKey(ConfigSetting)) { DocInfo.Element.Settings.Add(ConfigSetting, new ProjectElement.PerConfigSettings()); } var configSettingInner = DocInfo.Element.Settings[ConfigSetting]; if (configSettingInner.PreBuildChain.Active) { foreach (var chainEntry in configSettingInner.PreBuildChain.Entries) { var chainProject = Core.Navigating.Solution.GetProjectByName(chainEntry.ProjectName); if (chainProject != null) { string fullPath = BuildFullPath(chainProject.Settings.BasePath, chainEntry.DocumentFilename); var prebuildDoc = chainProject.GetElementByFilename(fullPath); if (prebuildDoc != null) { if (NeedsRebuild(prebuildDoc.DocumentInfo)) { return(true); } } var fileTime = FileLastWriteTime(fullPath); if (fileTime != DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath].TimeStampOfSourceFile) { if (DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath].TimeStampOfSourceFile == default(DateTime)) { Core.AddToOutput($"PreBuild chain entry {fullPath} was modified {fileTime} , need to rebuild dependent element {DocInfo.DocumentFilename}" + System.Environment.NewLine); } else { Core.AddToOutput($"PreBuild chain entry {fullPath} was modified {fileTime} != {DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath]}, need to rebuild dependent element {DocInfo.DocumentFilename}" + System.Environment.NewLine); } return(true); } } } } if (configSettingInner.PostBuildChain.Active) { foreach (var chainEntry in configSettingInner.PostBuildChain.Entries) { var chainProject = Core.Navigating.Solution.GetProjectByName(chainEntry.ProjectName); if (chainProject != null) { string fullPath = BuildFullPath(chainProject.Settings.BasePath, chainEntry.DocumentFilename); var fileTime = FileLastWriteTime(fullPath); if (fileTime != DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath].TimeStampOfSourceFile) { if (DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath].TimeStampOfSourceFile == default(DateTime)) { Core.AddToOutput($"PostBuild chain entry {fullPath} was modified {fileTime} , need to rebuild dependent element {DocInfo.DocumentFilename}" + System.Environment.NewLine); } else { Core.AddToOutput($"PostBuild chain entry {fullPath} was modified {fileTime} != {DocInfo.DeducedDependency[ConfigSetting].BuildState[fullPath]}, need to rebuild dependent element {DocInfo.DocumentFilename}" + System.Environment.NewLine); } return(true); } } } } } if (DocInfo.Compilable) { if (!DocInfo.HasBeenSuccessfullyBuilt) { Core.AddToOutput("Element '" + DocInfo.DocumentFilename + "' was not built successfully last time." + System.Environment.NewLine); return(true); } } if (DocInfo.Project == null) { Core.AddToOutput("Element '" + DocInfo.DocumentFilename + "' has no project, therefor needs rebuilding." + System.Environment.NewLine); return(true); } if (DocInfo.DeducedDependency[ConfigSetting] == null) { // no build time stored yet, needs rebuild DocInfo.DeducedDependency[ConfigSetting] = new DependencyBuildState(); Core.AddToOutput("No build time stored for '" + ConfigSetting + "' yet, therefor needs rebuilding." + System.Environment.NewLine); return(true); } foreach (var dependency in DocInfo.DeducedDependency[ConfigSetting].BuildState) { var fileTime = FileLastWriteTime(dependency.Key); if (fileTime != dependency.Value.TimeStampOfSourceFile) { //Debug.Log( "File time differs for " + dependency.Key ); Core.AddToOutput("File '" + dependency.Key + "' was modified, therefor needs rebuilding." + System.Environment.NewLine); return(true); } } var buildInfo = DocInfo.LastBuildInfo; if ((buildInfo != null) && (!string.IsNullOrEmpty(buildInfo.TargetFile)) && (!System.IO.File.Exists(buildInfo.TargetFile))) { Core.AddToOutput($"Dependency target {buildInfo.TargetFile} is missing, need to rebuild dependent element " + DocInfo.DocumentFilename + System.Environment.NewLine); return(true); } } return(false); }
GR.Memory.ByteBuffer ElementToBuffer(ProjectElement Element) { GR.Memory.ByteBuffer buffer = new GR.Memory.ByteBuffer(); GR.IO.FileChunk chunkElement = new GR.IO.FileChunk(FileChunkConstants.PROJECT_ELEMENT); chunkElement.AppendU32(1); chunkElement.AppendU32((uint)Element.DocumentInfo.Type); chunkElement.AppendString(Element.Name); chunkElement.AppendString(Element.Filename); GR.IO.FileChunk chunkElementData = new GR.IO.FileChunk(FileChunkConstants.PROJECT_ELEMENT_DATA); if (Element.Document != null) { Element.Document.SaveToChunk(chunkElementData); } chunkElement.Append(chunkElementData.ToBuffer()); chunkElement.AppendString(Element.TargetFilename); chunkElement.AppendU32((uint)Element.TargetType); chunkElement.AppendI32(Element.ForcedDependency.DependentOnFile.Count); foreach (var dependency in Element.ForcedDependency.DependentOnFile) { chunkElement.AppendString(dependency.Filename); } chunkElement.AppendString(Element.StartAddress); // 2 free strings chunkElement.AppendString(""); chunkElement.AppendString(""); chunkElement.AppendI32(Element.Settings.Count); foreach (KeyValuePair <string, ProjectElement.PerConfigSettings> configSetting in Element.Settings) { GR.IO.FileChunk chunkElementPerConfigSetting = new GR.IO.FileChunk(FileChunkConstants.PROJECT_ELEMENT_PER_CONFIG_SETTING); chunkElementPerConfigSetting.AppendString(configSetting.Key); chunkElementPerConfigSetting.AppendString(configSetting.Value.PreBuild); chunkElementPerConfigSetting.AppendString(configSetting.Value.CustomBuild); chunkElementPerConfigSetting.AppendString(configSetting.Value.PostBuild); chunkElementPerConfigSetting.AppendString(configSetting.Value.DebugFile); chunkElementPerConfigSetting.AppendI32((int)configSetting.Value.DebugFileType); chunkElementPerConfigSetting.AppendI32(configSetting.Value.PreBuildChain.Active ? 1 : 0); chunkElementPerConfigSetting.AppendI32(configSetting.Value.PreBuildChain.Entries.Count); foreach (var buildChainEntry in configSetting.Value.PreBuildChain.Entries) { chunkElementPerConfigSetting.AppendString(buildChainEntry.ProjectName); chunkElementPerConfigSetting.AppendString(buildChainEntry.Config); chunkElementPerConfigSetting.AppendString(buildChainEntry.DocumentFilename); chunkElementPerConfigSetting.AppendString(buildChainEntry.PreDefines); } chunkElementPerConfigSetting.AppendI32(configSetting.Value.PostBuildChain.Active ? 1 : 0); chunkElementPerConfigSetting.AppendI32(configSetting.Value.PostBuildChain.Entries.Count); foreach (var buildChainEntry in configSetting.Value.PostBuildChain.Entries) { chunkElementPerConfigSetting.AppendString(buildChainEntry.ProjectName); chunkElementPerConfigSetting.AppendString(buildChainEntry.Config); chunkElementPerConfigSetting.AppendString(buildChainEntry.DocumentFilename); chunkElementPerConfigSetting.AppendString(buildChainEntry.PreDefines); } chunkElement.Append(chunkElementPerConfigSetting.ToBuffer()); } uint flags = 0; if (Element.IsShown) { flags |= 1; } chunkElement.AppendU32(flags); chunkElement.AppendU32((uint)Element.AssemblerType); chunkElement.AppendI32(Element.ProjectHierarchy.Count); foreach (string hierarchyPart in Element.ProjectHierarchy) { chunkElement.AppendString(hierarchyPart); } // dependency - include symbols chunkElement.AppendI32(Element.ForcedDependency.DependentOnFile.Count); foreach (var dependency in Element.ForcedDependency.DependentOnFile) { chunkElement.AppendI32(dependency.IncludeSymbols ? 1 : 0); } // collapsed folding blocks chunkElement.AppendI32(Element.DocumentInfo.CollapsedFoldingBlocks.Count); foreach (int foldStartLine in Element.DocumentInfo.CollapsedFoldingBlocks) { chunkElement.AppendI32(foldStartLine); //Debug.Log( "Save folded block for line " + foldStartLine ); } // external dependencies chunkElement.AppendI32(Element.ExternalDependencies.DependentOnFile.Count); foreach (var dependency in Element.ExternalDependencies.DependentOnFile) { chunkElement.AppendString(dependency.Filename); } // BASIC (that is sooo ugly) chunkElement.AppendU32(0);// (uint)Element.BasicVersion ); // dependency - project chunkElement.AppendI32(Element.ForcedDependency.DependentOnFile.Count); foreach (var dependency in Element.ForcedDependency.DependentOnFile) { chunkElement.AppendString(dependency.Project); } // replaces basicversion! chunkElement.AppendString(Element.BASICDialect); buffer.Append(chunkElement.ToBuffer()); if (Element.Document != null) { GR.Memory.ByteBuffer displayDetails = Element.Document.DisplayDetails(); if (displayDetails != null) { GR.IO.FileChunk chunkElementDisplayData = new GR.IO.FileChunk(FileChunkConstants.PROJECT_ELEMENT_DISPLAY_DATA); chunkElementDisplayData.AppendString(Element.Filename); chunkElementDisplayData.AppendU32(displayDetails.Length); chunkElementDisplayData.Append(displayDetails); buffer.Append(chunkElementDisplayData.ToBuffer()); } } // child elements foreach (System.Windows.Forms.TreeNode node in Element.Node.Nodes) { ProjectElement subElement = (ProjectElement)node.Tag; buffer.Append(ElementToBuffer(subElement)); } return(buffer); }
public BaseDocument ShowDocument(ProjectElement Element) { if (Element.DocumentInfo.Type == ProjectElement.ElementType.FOLDER) { return(null); } if (Element.Document == null) { BaseDocument document = Core.MainForm.CreateNewDocument(Element.DocumentInfo.Type, Element.DocumentInfo.Project); if (document == null) { System.Windows.Forms.MessageBox.Show("Could not create document for " + Element.DocumentInfo.Type.ToString(), "Error creating document"); return(null); } Element.DocumentInfo.BaseDoc = document; Element.Document = document; Element.Document.ShowHint = DockState.Document; Element.Document.Icon = Core.MainForm.IconFromType(Element.DocumentInfo); document.SetProjectElement(Element); document.Core = Core; document.SetDocumentFilename(Element.Filename); if (Element.DocumentInfo.Project == null) { // icon for non project documents document.Icon = System.Drawing.SystemIcons.Asterisk; } document.ToolTipText = ""; if (document.DocumentFilename == null) { // a new file Element.Name = Element.Name; Element.Document.Show(Core.MainForm.panelMain); } else if (document.Load()) { document.ToolTipText = document.DocumentInfo.FullPath; Element.Name = document.Text; //Element.Name; Element.Document.Show(Core.MainForm.panelMain); } else if (!string.IsNullOrEmpty(Element.Filename)) { Element.Document = null; return(null); } if (Element.Document != null) { Element.Document.DocumentInfo = Element.DocumentInfo; Element.DocumentInfo.BaseDoc = Element.Document; } if ((Element.Document != null) && (Element.Document is SourceASMEx)) { Element.Document.DocumentEvent += new BaseDocument.DocumentEventHandler(Core.MainForm.Document_DocumentEvent); } // set known tokens if we have any bool setFromMainDoc = false; if (!string.IsNullOrEmpty(Settings.MainDocument)) { var element = GetElementByFilename(Settings.MainDocument); if ((element != null) && (element.DocumentInfo.Type == ProjectElement.ElementType.ASM_SOURCE) && (element.DocumentInfo.ASMFileInfo != null)) { if (element.DocumentInfo.ASMFileInfo.ContainsFile(Element.DocumentInfo.FullPath)) { if (!Core.Compiling.IsCurrentlyBuilding()) { Element.DocumentInfo.SetASMFileInfo(element.DocumentInfo.ASMFileInfo, element.DocumentInfo.KnownKeywords, element.DocumentInfo.KnownTokens); } setFromMainDoc = true; } } } if ((!setFromMainDoc) && (Core.Compiling.ParserASM.ASMFileInfo.ContainsFile(Element.DocumentInfo.FullPath))) { if (!Core.Compiling.IsCurrentlyBuilding()) { Element.DocumentInfo.SetASMFileInfo(Core.Compiling.ParserASM.ASMFileInfo, Core.Compiling.ParserASM.KnownTokens(), Core.Compiling.ParserASM.KnownTokenInfo()); } } Core.MainForm.m_Outline.RefreshFromDocument(Element.DocumentInfo.BaseDoc); } Element.Document.Select(); Element.IsShown = true; Core.MainForm.RaiseApplicationEvent(new RetroDevStudio.Types.ApplicationEvent(RetroDevStudio.Types.ApplicationEvent.Type.DOCUMENT_OPENED, Element.DocumentInfo)); Core.MainForm.RaiseApplicationEvent(new RetroDevStudio.Types.ApplicationEvent(RetroDevStudio.Types.ApplicationEvent.Type.ELEMENT_OPENED, Element)); return(Element.Document); }
public bool Load(byte[] ProjectData, bool AutoCreateGUIItems) { string currentConfig = "Default"; string activeElement = ""; Node = new System.Windows.Forms.TreeNode(); Node.Tag = this; Node.Collapse(); GR.IO.MemoryReader memIn = new GR.IO.MemoryReader(ProjectData); GR.IO.FileChunk chunk = new GR.IO.FileChunk(); ushort origDebugStartAddress = 0; while (chunk.ReadFromStream(memIn)) { GR.IO.MemoryReader memChunk = chunk.MemoryReader(); switch (chunk.Type) { case FileChunkConstants.PROJECT: // Project Info // Version uint projectVersion = memChunk.ReadUInt32(); Settings.Name = memChunk.ReadString(); Settings.Filename = memChunk.ReadString(); Settings.DebugPort = memChunk.ReadUInt16(); origDebugStartAddress = memChunk.ReadUInt16(); Settings.BuildTool = memChunk.ReadString(); Settings.RunTool = memChunk.ReadString(); Settings.MainDocument = memChunk.ReadString(); currentConfig = memChunk.ReadString(); activeElement = memChunk.ReadString(); memChunk.ReadUInt32(); // flags (all free) if (projectVersion == 1) { if (origDebugStartAddress == 2049) { origDebugStartAddress = 0; } } Node.Text = Settings.Name; break; case FileChunkConstants.PROJECT_ELEMENT: // Element Info { // Version int elementVersion = (int)memChunk.ReadUInt32(); ProjectElement.ElementType type = (ProjectElement.ElementType)memChunk.ReadUInt32(); ProjectElement element = CreateElement(type, Node); element.Name = memChunk.ReadString(); element.Filename = memChunk.ReadString(); if (element.DocumentInfo.Type == ProjectElement.ElementType.FOLDER) { element.Node.Text = element.Name; } else { element.Node.Text = System.IO.Path.GetFileName(element.Filename); } if (Core.Navigating.Solution.IsNodeExpanded(element)) { element.Node.Expand(); } else { element.Node.Collapse(); } GR.IO.FileChunk subChunk = new GR.IO.FileChunk(); if (!subChunk.ReadFromStream(memChunk)) { return(false); } if (subChunk.Type != FileChunkConstants.PROJECT_ELEMENT_DATA) { return(false); } // Element Data element.DocumentInfo.DocumentFilename = element.Filename; if (element.Document != null) { if (!element.Document.ReadFromReader(subChunk.MemoryReader())) { Elements.Remove(element); element.Document.Dispose(); element = null; } else { element.Document.SetDocumentFilename(element.Filename); } } element.TargetFilename = memChunk.ReadString(); element.TargetType = (Types.CompileTargetType)memChunk.ReadUInt32(); int dependencyCount = memChunk.ReadInt32(); for (int i = 0; i < dependencyCount; ++i) { string dependency = memChunk.ReadString(); element.ForcedDependency.DependentOnFile.Add(new FileDependency.DependencyInfo(Settings.Name, dependency, true, false)); } element.StartAddress = memChunk.ReadString(); // 2 free strings memChunk.ReadString(); memChunk.ReadString(); int perConfigSettingCount = memChunk.ReadInt32(); for (int i = 0; i < perConfigSettingCount; ++i) { GR.IO.FileChunk chunkElementPerConfigSetting = new GR.IO.FileChunk(); chunkElementPerConfigSetting.ReadFromStream(memChunk); if (chunkElementPerConfigSetting.Type == FileChunkConstants.PROJECT_ELEMENT_PER_CONFIG_SETTING) { ProjectElement.PerConfigSettings perConfigSetting = new ProjectElement.PerConfigSettings(); GR.IO.MemoryReader memSubChunk = chunkElementPerConfigSetting.MemoryReader(); string config = memSubChunk.ReadString(); perConfigSetting.PreBuild = memSubChunk.ReadString(); perConfigSetting.CustomBuild = memSubChunk.ReadString(); perConfigSetting.PostBuild = memSubChunk.ReadString(); perConfigSetting.DebugFile = memSubChunk.ReadString(); perConfigSetting.DebugFileType = (RetroDevStudio.Types.CompileTargetType)memSubChunk.ReadInt32(); perConfigSetting.PreBuildChain.Active = (memSubChunk.ReadInt32() == 1); int numEntries = memSubChunk.ReadInt32(); for (int j = 0; j < numEntries; ++j) { var entry = new BuildChainEntry(); entry.ProjectName = memSubChunk.ReadString(); entry.Config = memSubChunk.ReadString(); entry.DocumentFilename = memSubChunk.ReadString(); entry.PreDefines = memSubChunk.ReadString(); perConfigSetting.PreBuildChain.Entries.Add(entry); } perConfigSetting.PostBuildChain.Active = (memSubChunk.ReadInt32() == 1); numEntries = memSubChunk.ReadInt32(); for (int j = 0; j < numEntries; ++j) { var entry = new BuildChainEntry(); entry.ProjectName = memSubChunk.ReadString(); entry.Config = memSubChunk.ReadString(); entry.DocumentFilename = memSubChunk.ReadString(); entry.PreDefines = memSubChunk.ReadString(); perConfigSetting.PostBuildChain.Entries.Add(entry); } element.Settings[config] = perConfigSetting; } } uint flags = memChunk.ReadUInt32(); element.IsShown = ((flags & 1) != 0); element.AssemblerType = (RetroDevStudio.Types.AssemblerType)memChunk.ReadUInt32(); int hierarchyPartCount = memChunk.ReadInt32(); for (int i = 0; i < hierarchyPartCount; ++i) { string part = memChunk.ReadString(); element.ProjectHierarchy.Add(part); } if (element.ProjectHierarchy.Count > 0) { // node is sub-node, move accordingly System.Windows.Forms.TreeNode parentNode = NodeFromHierarchy(element.ProjectHierarchy); if ((parentNode != null) && (parentNode != element.Node.Parent)) { element.Node.Remove(); parentNode.Nodes.Add(element.Node); } } // dependency - include symbols dependencyCount = memChunk.ReadInt32(); for (int i = 0; i < dependencyCount; ++i) { element.ForcedDependency.DependentOnFile[i].IncludeSymbols = (memChunk.ReadInt32() != 0); } // code folding entries int numFoldingEntries = memChunk.ReadInt32(); element.DocumentInfo.CollapsedFoldingBlocks = new GR.Collections.Set <int>(); for (int i = 0; i < numFoldingEntries; ++i) { int collapsedBlockLine = memChunk.ReadInt32(); element.DocumentInfo.CollapsedFoldingBlocks.Add(collapsedBlockLine); } // external dependencies int externalDependencyCount = memChunk.ReadInt32(); for (int i = 0; i < externalDependencyCount; ++i) { string dependency = memChunk.ReadString(); element.ExternalDependencies.DependentOnFile.Add(new FileDependency.DependencyInfo("", dependency, true, false)); } var obsoleteBasicVersion = (BasicVersion)memChunk.ReadUInt32(); // dependency - project dependencyCount = memChunk.ReadInt32(); for (int i = 0; i < dependencyCount; ++i) { element.ForcedDependency.DependentOnFile[i].Project = memChunk.ReadString(); } element.BASICDialect = memChunk.ReadString(); if (string.IsNullOrEmpty(element.BASICDialect)) { // old version, find dialect from obsoleteBasicVersion string dialectKey = "BASIC V2"; switch (obsoleteBasicVersion) { case BasicVersion.C64_BASIC_V2: break; case BasicVersion.BASIC_LIGHTNING: dialectKey = "BASIC Lightning"; break; case BasicVersion.LASER_BASIC: dialectKey = "Laser BASIC"; break; case BasicVersion.SIMONS_BASIC: dialectKey = "Simon's BASIC"; break; case BasicVersion.V3_5: dialectKey = "BASIC V3.5"; break; case BasicVersion.V7_0: dialectKey = "BASIC V7.0"; break; } if (Core.Compiling.BASICDialects.ContainsKey(dialectKey)) { element.BASICDialect = dialectKey; } } // TODO - load other stuff if ((element != null) && (element.IsShown) && (AutoCreateGUIItems)) { ShowDocument(element); if (element.Document != null) { element.Document.ShowHint = DockState.Document; } } if (element.Document != null) { element.Document.RefreshDisplayOptions(); } } break; case FileChunkConstants.PROJECT_ELEMENT_DISPLAY_DATA: { string elementFilename = memChunk.ReadString(); ProjectElement element = GetElementByFilename(elementFilename); if (element != null) { UInt32 numBytes = memChunk.ReadUInt32(); GR.Memory.ByteBuffer displayData = new GR.Memory.ByteBuffer(); memChunk.ReadBlock(displayData, numBytes); if (element.Document != null) { element.Document.ApplyDisplayDetails(displayData); } } } break; case FileChunkConstants.PROJECT_CONFIG: { ProjectConfig config = new ProjectConfig(); config.Load(memChunk); if (string.IsNullOrEmpty(config.DebugStartAddressLabel)) { config.DebugStartAddressLabel = origDebugStartAddress.ToString(); } Settings.Configuration(config.Name, config); } break; case FileChunkConstants.PROJECT_WATCH_ENTRY: { WatchEntry watch = new WatchEntry(); watch.Load(memChunk); Settings.WatchEntries.Add(watch); } break; } } if (Settings.GetConfigurationCount() == 0) { // there must be one config ProjectConfig config = new ProjectConfig(); config.Name = "Default"; Settings.Configuration(config.Name, config); Settings.CurrentConfig = config; } else { Settings.CurrentConfig = Settings.Configuration(currentConfig); if (Settings.CurrentConfig == null) { Settings.CurrentConfig = Settings.GetConfigurations().First(); } } foreach (ProjectElement element in Elements) { if (element.Settings.Count == 0) { foreach (var configName in Settings.GetConfigurationNames()) { // needs a default setting! element.Settings[configName] = new ProjectElement.PerConfigSettings(); } } if (AutoCreateGUIItems) { if ((!string.IsNullOrEmpty(element.Filename)) && (GR.Path.IsPathEqual(element.Filename, Settings.MainDocument))) { Core.MainForm.m_SolutionExplorer.HighlightNode(element.Node); } Core.MainForm.RaiseApplicationEvent(new RetroDevStudio.Types.ApplicationEvent(RetroDevStudio.Types.ApplicationEvent.Type.DOCUMENT_INFO_CREATED, element.DocumentInfo)); Core.MainForm.RaiseApplicationEvent(new RetroDevStudio.Types.ApplicationEvent(RetroDevStudio.Types.ApplicationEvent.Type.ELEMENT_CREATED, element)); } } if (!String.IsNullOrEmpty(activeElement)) { ProjectElement element = GetElementByFilename(activeElement); if ((element != null) && (element.Document != null)) { element.Document.Show(); } } m_Modified = false; return(true); }