/// <summary> /// Carga el documento pasado durante la creación del control. /// </summary> public void LoadDocument(BsonValue document) { if (document is BsonDocument) { var doc = document as BsonDocument; //Insertar la línea de comienzo var start = new DocumentViewerLine(LineType.Opening, ++LineCounter); stpLinesContainer.Children.Add(start); foreach (var line in doc) { if (line.Value is BsonDocument) { var childDoc = new DocumentViewerLineGroup(line, DocumentNestingLevel + 1, ++LineCounter); LineCounter = childDoc.LoadDocument(); childDoc.LinesAdded += ChildDoc_LinesAdded; stpLinesContainer.Children.Add(childDoc); } else { //Insertar las líneas de datos var docline = new DocumentViewerLine(line, ++LineCounter); docline.AddNewLine += Children_AddNewLine; docline.UpdatedLineType += Children_UpdatedLineType; stpLinesContainer.Children.Add(docline); } } //Insertar la línea de cierre DocumentViewerLine dvl = new DocumentViewerLine(LineType.Closing, ++LineCounter); stpLinesContainer.Children.Add(dvl); } }
public int LoadDocument() { if (ChildDocument.Value is BsonDocument) { var doc = ChildDocument.Value as BsonDocument; var tabLength = DocumentViewerLine.DEFAULT_TAB_LENGTH; int bracketsTab = (DocumentNestingLevel - 1 > 0) ? (DocumentNestingLevel - 1) * tabLength : tabLength; isGroupFold = true; //Insertar la línea de comienzo var startLine = new DocumentViewerLine(ChildDocument, LineCounter, LineType.NestedObjectOpening, bracketsTab); startLine.IsGroupCollapsed = true; startLine.FoldActionRequest += FoldableStartLine_FoldActionRequest; startLine.InnerDocumentDelete += StartLine_InnerDocumentDelete; startLine.AddNewLine += Children_AddNewLine; startLine.UpdatedLineType += Children_UpdatedLineType; stpLinesContainer.Children.Add(startLine); foreach (var line in doc) { if (line.Value is BsonDocument) { var childDoc = new DocumentViewerLineGroup(line, DocumentNestingLevel + 1, ++LineCounter); LineCounter = childDoc.LoadDocument(); childDoc.LinesAdded += ChildDoc_LinesAdded; stpLinesContainer.Children.Add(childDoc); } else { //Insertar las líneas de datos var docline = new DocumentViewerLine(line, ++LineCounter, DocumentNestingLevel * tabLength); docline.AddNewLine += Children_AddNewLine; docline.UpdatedLineType += Children_UpdatedLineType; docline.Visibility = (DocumentNestingLevel > 1) ? Visibility.Collapsed : Visibility.Visible; docline.IsGroupCollapsed = true; stpLinesContainer.Children.Add(docline); } } //Insertar la línea de cierre DocumentViewerLine dvl = new DocumentViewerLine(LineType.Closing, ++LineCounter, bracketsTab); dvl.Visibility = (DocumentNestingLevel > 1) ? Visibility.Collapsed : Visibility.Visible; dvl.IsGroupCollapsed = true; stpLinesContainer.Children.Add(dvl); } return(LineCounter); }
private void Children_UpdatedLineType(object sender, LineEventArgs e) { var index = stpLinesContainer.Children.IndexOf(sender as UIElement); if (index > -1) { var newDoc = new BsonDocument(); var value = new BsonValue(""); newDoc.Add("newValue", value); var newLine = new KeyValuePair <string, BsonValue>("newDocument", newDoc); var childDoc = new DocumentViewerLineGroup(newLine, DocumentNestingLevel + 1, ++LineCounter); LineCounter = childDoc.LoadDocument(); childDoc.LinesAdded += ChildDoc_LinesAdded; ((DocumentEditorComponent)childDoc).ActivateEdition(); stpLinesContainer.Children.Remove(sender as UIElement); stpLinesContainer.Children.Insert(index, childDoc); UpdateLineNumbers(); } }