/// <summary> /// Saves the given file. /// </summary> protected override void Save(string fileName) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::Microsoft.Gadgeteer.Designer.GadgeteerModel modelRoot = (global::Microsoft.Gadgeteer.Designer.GadgeteerModel) this.RootElement; // Only save the diagrams if // a) There are any to save // b) This is NOT a SaveAs operation. SaveAs should allow the subordinate document to control the save of its data as it is writing a new file. // Except DO save the diagram on SaveAs if there isn't currently a diagram as there won't be a subordinate document yet to save it. bool saveAs = global::System.StringComparer.OrdinalIgnoreCase.Compare(fileName, this.FileName) != 0; global::System.Collections.Generic.IList <DslDiagrams::PresentationElement> diagrams = DslDiagrams::PresentationViewsSubject.GetPresentation(this.RootElement); if (diagrams.Count > 0 && (!saveAs || this.diagramDocumentLockHolder == null)) { global::Microsoft.Gadgeteer.Designer.GadgeteerDSLDiagram diagram = diagrams[0] as global::Microsoft.Gadgeteer.Designer.GadgeteerDSLDiagram; if (diagram != null) { string diagramFileName = fileName + this.DiagramExtension; try { this.SuspendFileChangeNotification(diagramFileName); global::Microsoft.Gadgeteer.Designer.GadgeteerDSLSerializationHelper.Instance.SaveModelAndDiagram(serializationResult, modelRoot, fileName, diagram, diagramFileName, this.Encoding, false); } finally { this.ResumeFileChangeNotification(diagramFileName); } } } else { global::Microsoft.Gadgeteer.Designer.GadgeteerDSLSerializationHelper.Instance.SaveModel(serializationResult, modelRoot, fileName, this.Encoding, false); } // Report serialization messages. this.SuspendErrorListRefresh(); try { foreach (DslModeling::SerializationMessage serializationMessage in serializationResult) { this.AddErrorListItem(new DslShell::SerializationErrorListItem(this.ServiceProvider, serializationMessage)); } } finally { this.ResumeErrorListRefresh(); } if (serializationResult.Failed) { // Save failed. throw new global::System.InvalidOperationException(global::Microsoft.Gadgeteer.Designer.GadgeteerDSLDomainModel.SingletonResourceManager.GetString("CannotSaveDocument")); } }
public static global::Microsoft.Gadgeteer.Designer.GadgeteerModel GetParentForComment(global::Microsoft.Gadgeteer.Designer.Comment root) { // Segments 0 and 1 global::Microsoft.Gadgeteer.Designer.GadgeteerModel result = root.GadgeteerModel; if (result == null) { return(null); } return(result); }
/// <summary> /// Loads the given file. /// </summary> protected override void Load(string fileName, bool isReload) { DslModeling::SerializationResult serializationResult = new DslModeling::SerializationResult(); global::Microsoft.Gadgeteer.Designer.GadgeteerModel modelRoot = null; DslModeling::ISchemaResolver schemaResolver = new DslShell::ModelingSchemaResolver(this.ServiceProvider); //clear the current root element this.SetRootElement(null); // Enable diagram fixup rules in our store, because we will load diagram data. global::Microsoft.Gadgeteer.Designer.GadgeteerDSLDomainModel.EnableDiagramRules(this.Store); string diagramFileName = fileName + this.DiagramExtension; modelRoot = global::Microsoft.Gadgeteer.Designer.GadgeteerDSLSerializationHelper.Instance.LoadModelAndDiagram(serializationResult, this.GetModelPartition(), fileName, this.GetDiagramPartition(), diagramFileName, schemaResolver, null /* no load-time validation */, this.SerializerLocator); // Report serialization messages. this.SuspendErrorListRefresh(); try { foreach (DslModeling::SerializationMessage serializationMessage in serializationResult) { this.AddErrorListItem(new DslShell::SerializationErrorListItem(this.ServiceProvider, serializationMessage)); } } finally { this.ResumeErrorListRefresh(); } if (serializationResult.Failed) { // Load failed, can't open the file. throw new global::System.InvalidOperationException(global::Microsoft.Gadgeteer.Designer.GadgeteerDSLDomainModel.SingletonResourceManager.GetString("CannotOpenDocument")); } else { this.SetRootElement(modelRoot); // Attempt to set the encoding if (serializationResult.Encoding != null) { this.ModelingDocStore.SetEncoding(serializationResult.Encoding); global::Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(this.SetDocDataDirty(0)); // Setting the encoding will mark the document as dirty, so clear the dirty flag. } if (this.Hierarchy != null && global::System.IO.File.Exists(diagramFileName)) { // Add a lock to the subordinate diagram file. if (this.diagramDocumentLockHolder == null) { uint itemId = DslShell::SubordinateFileHelper.GetChildProjectItemId(this.Hierarchy, this.ItemId, this.DiagramExtension); if (itemId != global::Microsoft.VisualStudio.VSConstants.VSITEMID_NIL) { this.diagramDocumentLockHolder = DslShell::SubordinateFileHelper.LockSubordinateDocument(this.ServiceProvider, this, diagramFileName, itemId); if (this.diagramDocumentLockHolder == null) { throw new global::System.InvalidOperationException(string.Format(global::System.Globalization.CultureInfo.CurrentCulture, global::Microsoft.Gadgeteer.Designer.GadgeteerDSLDomainModel.SingletonResourceManager.GetString("CannotCloseExistingDiagramDocument"), diagramFileName)); } } } } } }