private Base CloneObjects(Base source, Base parent) { if (source is ReportComponentBase && !(source as ReportComponentBase).FlagPreviewVisible) { return(null); } // create clone object and assign all properties from source string baseName = ""; string objName; Base clone = Activator.CreateInstance(source.GetType()) as Base; using (XmlItem xml = new XmlItem()) using (FRWriter writer = new FRWriter(xml)) using (FRReader reader = new FRReader(null, xml)) { reader.DeserializeFrom = SerializeTo.SourcePages; writer.SaveChildren = false; writer.SerializeTo = SerializeTo.SourcePages; writer.Write(source, clone); reader.Read(clone); } clone.Name = source.Name; clone.OriginalComponent = source; source.OriginalComponent = clone; if (clone is ReportComponentBase) { (clone as ReportComponentBase).AssignPreviewEvents(source); } // create alias objName = "Page" + pages.Count.ToString() + "." + clone.Name; if (clone is BandBase) { baseName = "b"; } else if (clone is PageBase) { baseName = "page"; objName = "Page" + pages.Count.ToString(); } else { baseName = clone.BaseName[0].ToString().ToLower(); } clone.Alias = preparedPages.Dictionary.AddUnique(baseName, objName, clone); source.Alias = clone.Alias; ObjectCollection childObjects = source.ChildObjects; foreach (Base c in childObjects) { CloneObjects(c, clone); } clone.Parent = parent; return(clone); }
/// <summary> /// Clone table. /// For internal use only. /// </summary> public virtual void Clone() { XmlItem item = new XmlItem(); using (FRWriter writer = new FRWriter(item)) { writer.SerializeTo = SerializeTo.Clipboard; writer.BlobStore = new BlobStore(false); writer.Write(this); } using (FRReader reader = new FRReader(Report, item)) { reader.DeserializeFrom = SerializeTo.Clipboard; reader.BlobStore = new BlobStore(false); var connection = Activator.CreateInstance(this.GetType()) as DataConnectionBase; connection.Parent = this.Parent; connection.SetReport(Report); reader.Read(connection); connection.CreateUniqueName(); foreach (TableDataSource table in connection.Tables) { table.CreateUniqueName(); } Report.Dictionary.AddChild(connection); } }
//static int i = 0; /// <summary> /// Assigns values from another source. /// </summary> /// <remarks> /// <b>Note:</b> this method is relatively slow because it serializes /// an object to the xml and then deserializes it. /// </remarks> /// <param name="source">Source to assign from.</param> public void BaseAssign(Base source) { bool saveAncestor = source.IsAncestor; source.SetAncestor(false); try { using (XmlItem xml = new XmlItem()) using (FRWriter writer = new FRWriter(xml)) using (FRReader reader = new FRReader(Report, xml)) { writer.SaveChildren = false; writer.Write(source, this); reader.Read(this); } Alias = source.Alias; OriginalComponent = source.OriginalComponent; } finally { source.SetAncestor(saveAncestor); } }
/// <summary> /// Loads the collection from a stream. /// </summary> /// <param name="stream">Stream to load from.</param> public void Load(Stream stream) { using (FRReader reader = new FRReader(null)) { reader.Load(stream); reader.Read(this); } }
/// <summary> /// Loads the dictionary from a stream. /// </summary> /// <param name="stream">The stream to load from.</param> public void Load(Stream stream) { Clear(); using (FRReader reader = new FRReader(Report)) { reader.Load(stream); reader.Read(this); } }
/// <summary> /// Deserializes the collection. /// </summary> /// <param name="reader">Reader object.</param> /// <remarks> /// This method is for internal use only. /// </remarks> public void Deserialize(FRReader reader) { while (reader.NextItem()) { StyleCollection s = new StyleCollection(); reader.Read(s); Add(s); } }
/// <inheritdoc/> public void Deserialize(FRReader reader) { Clear(); while (reader.NextItem()) { FormatBase format = reader.Read() as FormatBase; Add(format); } }
private void RestoreSettings() { XmlItem root = Config.Root.FindItem("Preview").FindItem("Exports").FindItem(ClassName); using (FRReader reader = new FRReader(null, root)) { reader.Read(this); } }
/// <inheritdoc/> public void Deserialize(FRReader reader) { Clear(); while (reader.NextItem()) { CrossViewCellDescriptor d = new CrossViewCellDescriptor(); reader.Read(d); Add(d); } }
/// <inheritdoc/> protected override void DeserializeSubItems(FRReader reader) { if (String.Compare(reader.ItemName, "CrossViewColumns", true) == 0) { reader.Read(Data.Columns); } else if (String.Compare(reader.ItemName, "CrossViewRows", true) == 0) { reader.Read(Data.Rows); } else if (String.Compare(reader.ItemName, "CrossViewCells", true) == 0) { reader.Read(Data.Cells); } else { base.DeserializeSubItems(reader); } }
/// <inheritdoc/> public void Deserialize(FRReader reader) { Clear(); while (reader.NextItem()) { Sort s = new Sort(); reader.Read(s); Add(s); } }
/// <inheritdoc/> public void Deserialize(FRReader reader) { Clear(); while (reader.NextItem()) { HighlightCondition c = new HighlightCondition(); reader.Read(c); Add(c); } }
/// <summary> /// Deserializes the collection. /// </summary> /// <param name="reader">Reader object.</param> /// <remarks> /// This method is for internal use only. /// </remarks> public void Deserialize(FRReader reader) { Clear(); while (reader.NextItem()) { GridControlColumn c = new GridControlColumn(); reader.Read(c); Add(c); } }
/// <inheritdoc/> public void Deserialize(FRReader reader) { Clear(); while (reader.NextItem()) { MatrixHeaderDescriptor d = new MatrixHeaderDescriptor(); reader.Read(d); Add(d); } }
public void Load(XmlItem rootItem) { Clear(); for (int i = 0; i < rootItem.Count; i++) { using (FRReader reader = new FRReader(null, rootItem[i])) { pages.Add(reader.Read() as ReportPage); } } }
private void LoadReport(Stream stream) { Report.Clear(); using (FRReader reader = new FRReader(Report)) { stream.Position = 0; reader.BlobStore = BlobStore; reader.Load(stream); reader.Read(Report); } }
/// <inheritdoc/> protected override void DeserializeSubItems(FRReader reader) { if (String.Compare(reader.ItemName, "Formats", true) == 0) { reader.Read(Formats); } else { base.DeserializeSubItems(reader); } }
/// <inheritdoc/> public void Deserialize(FRReader reader) { Clear(); Name = ""; reader.ReadProperties(this); while (reader.NextItem()) { Style s = new Style(); reader.Read(s); Add(s); } }
public override void Deserialize(FRReader reader) { FPageType = RegisteredObjects.FindType(reader.ReadStr("PageType")); while (reader.NextItem()) { Base c = reader.Read() as Base; if (c != null) { FObjects.Add(c); } } }
/// <summary> /// Deserializes nested object properties. /// </summary> /// <param name="reader">Reader object.</param> /// <remarks> /// <para>Typically the object serializes all properties to the single xml item:</para> /// <code> /// <TextObject Name="Text2" Left="18.9" Top="37.8" Width="283.5" Height="28.35"/> /// </code> /// <para>Some objects like <see cref="DataBand"/> have child objects that serialized in subitems:</para> /// <code> /// <DataBand Name="Data1" Top="163" Width="718.2" Height="18.9"> /// <TextObject Name="Text3" Left="18.9" Top="37.8" Width="283.5" Height="28.35"/> /// </DataBand> /// </code> /// <para>To read such subitems, the <c>DeserializeSubItems</c> method is used. Base /// implementation reads the child objects. You may override it to read some specific subitems.</para> /// </remarks> /// <example>The following code is used to read report's styles: /// <code> /// protected override void DeserializeSubItems(FRReader reader) /// { /// if (String.Compare(reader.ItemName, "Styles", true) == 0) /// reader.Read(Styles); /// else /// base.DeserializeSubItems(reader); /// } /// </code> /// </example> protected virtual void DeserializeSubItems(FRReader reader) { if (reader.ReadChildren) { Base obj = reader.Read() as Base; if (obj != null) { obj.Parent = this; if (IsAncestor && !obj.IsAncestor) { obj.ZOrder = obj.zOrder; } } } }
private Base ReadObject(Base parent, XmlItem item, bool readChildren) { string objName = item.Name; // try to find the object in the dictionary Base obj = FPreparedPages.Dictionary.GetObject(objName); // object not found, objName is type name if (obj == null) { Type type = RegisteredObjects.FindType(objName); if (type == null) { return(null); } obj = Activator.CreateInstance(type) as Base; } obj.SetRunning(true); // read object's properties if (!String.IsNullOrEmpty(item.Text)) { using (FRReader reader = new FRReader(null, item)) { reader.ReadChildren = false; reader.BlobStore = FPreparedPages.BlobStore; // since the BlobStore is shared resource, lock it to avoid problems with multi-thread access. // this may happen in the html export that uses several threads to export one report. lock (reader.BlobStore) { reader.Read(obj); } } } if (readChildren) { for (int i = 0; i < item.Count; i++) { ReadObject(obj, item[i], true); } } obj.Parent = parent; return(obj); }
public void Deserialize(FRReader reader) { while (reader.NextItem()) { try { DataConnectionBase connection = reader.Read() as DataConnectionBase; if (connection != null) { FConnections.Add(connection); } } catch { } } }
private void ReadConnections() { if (Config.DesignerSettings.CustomConnections.Count > 0) { FConnections.Deserialize(Config.DesignerSettings.CustomConnections); } else { XmlItem root = Config.Root.FindItem("Designer").FindItem("LastConnections"); using (FRReader reader = new FRReader(null, root)) { reader.Read(FConnections); } } if (FConnections.Count > 0) { Connection = FConnections[0]; } }
private Base CloneObjects(Base source, Base parent) { if (source is ReportComponentBase && !(source as ReportComponentBase).FlagPreviewVisible) { return(null); } // create clone object and assign all properties from source string baseName = ""; string objName; #if MONO if (source is RichObject #if !FRCORE && (source as RichObject).ConvertRichText == true #endif ) { RichObject rich = source as RichObject; float h; List <ComponentBase> clone_list = rich.Convert2ReportObjects(out h); int i = 1; foreach (Base clone_item in clone_list) { baseName = clone_item.BaseName[0].ToString().ToLower(); clone_item.Name = rich.Name + "_" + i; objName = "Page" + pages.Count.ToString() + "." + clone_item.Name; clone_item.Alias = preparedPages.Dictionary.AddUnique(baseName, objName, clone_item); source.Alias = clone_item.Alias; clone_item.Parent = parent; i++; } return(null); } #endif Base clone = Activator.CreateInstance(source.GetType()) as Base; using (XmlItem xml = new XmlItem()) using (FRWriter writer = new FRWriter(xml)) using (FRReader reader = new FRReader(null, xml)) { reader.DeserializeFrom = SerializeTo.SourcePages; writer.SaveChildren = false; writer.SerializeTo = SerializeTo.SourcePages; writer.Write(source, clone); reader.Read(clone); } clone.Name = source.Name; clone.OriginalComponent = source; source.OriginalComponent = clone; if (clone is ReportComponentBase) { (clone as ReportComponentBase).AssignPreviewEvents(source); } // create alias objName = "Page" + pages.Count.ToString() + "." + clone.Name; if (clone is BandBase) { baseName = "b"; } else if (clone is PageBase) { baseName = "page"; objName = "Page" + pages.Count.ToString(); } else { baseName = clone.BaseName[0].ToString().ToLower(); } clone.Alias = preparedPages.Dictionary.AddUnique(baseName, objName, clone); source.Alias = clone.Alias; ObjectCollection childObjects = source.ChildObjects; foreach (Base c in childObjects) { CloneObjects(c, clone); } clone.Parent = parent; return(clone); }
public void Paste() { if (!CanPaste) { return; } using (ClipboardParent parent = new ClipboardParent()) using (MemoryStream stream = Clipboard.GetData("FastReport") as MemoryStream) using (FRReader reader = new FRReader(null)) { reader.Load(stream); reader.Read(parent); PageBase page = FDesigner.ActiveReportTab.ActivePage; if (page.GetType() == parent.PageType) { // prepare to create unique name ObjectCollection allObjects = page.Report.AllNamedObjects; // prepare a list of existing names Hashtable names = new Hashtable(); foreach (Base c in allObjects) { names[c.Name] = 0; } // since we are trying to preserve pasted object's name, add all names to the // allObjects list to guarantee that FastNameCreator will work correctly foreach (Base c in parent.AllObjects) { allObjects.Add(c); // there is an existing object with the same name. Clear the name to indicate // that we should create an unique name for this object if (names.ContainsKey(c.Name)) { c.Name = ""; } } FastNameCreator nameCreator = new FastNameCreator(allObjects); FDesigner.SelectedObjects.Clear(); foreach (Base c in parent.Objects) { c.Parent = FDesigner.ActiveReportTab.ActivePageDesigner.GetParentForPastedObjects(); if (c.Name == "") { nameCreator.CreateUniqueName(c); } // reset group index if (c is ComponentBase) { (c as ComponentBase).GroupIndex = 0; } FDesigner.Objects.Add(c); if (c is IParent) { foreach (Base c1 in c.AllObjects) { if (c1.Name == "") { nameCreator.CreateUniqueName(c1); } FDesigner.Objects.Add(c1); } } FDesigner.SelectedObjects.Add(c); } FDesigner.ActiveReportTab.ActivePageDesigner.Paste(parent.Objects, InsertFrom.Clipboard); } } }