Exemplo n.º 1
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;



            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);
        }
Exemplo n.º 2
0
        /// <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);
            }
        }
Exemplo n.º 3
0
        //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);
            }
        }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
 /// <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);
     }
 }
Exemplo n.º 6
0
 /// <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);
     }
 }
Exemplo n.º 7
0
 /// <inheritdoc/>
 public void Deserialize(FRReader reader)
 {
     Clear();
     while (reader.NextItem())
     {
         FormatBase format = reader.Read() as FormatBase;
         Add(format);
     }
 }
Exemplo n.º 8
0
        private void RestoreSettings()
        {
            XmlItem root = Config.Root.FindItem("Preview").FindItem("Exports").FindItem(ClassName);

            using (FRReader reader = new FRReader(null, root))
            {
                reader.Read(this);
            }
        }
Exemplo n.º 9
0
 /// <inheritdoc/>
 public void Deserialize(FRReader reader)
 {
     Clear();
     while (reader.NextItem())
     {
         CrossViewCellDescriptor d = new CrossViewCellDescriptor();
         reader.Read(d);
         Add(d);
     }
 }
Exemplo n.º 10
0
 /// <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);
     }
 }
Exemplo n.º 11
0
 /// <inheritdoc/>
 public void Deserialize(FRReader reader)
 {
     Clear();
     while (reader.NextItem())
     {
         Sort s = new Sort();
         reader.Read(s);
         Add(s);
     }
 }
Exemplo n.º 12
0
 /// <inheritdoc/>
 public void Deserialize(FRReader reader)
 {
     Clear();
     while (reader.NextItem())
     {
         HighlightCondition c = new HighlightCondition();
         reader.Read(c);
         Add(c);
     }
 }
Exemplo n.º 13
0
 /// <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);
     }
 }
Exemplo n.º 14
0
 /// <inheritdoc/>
 public void Deserialize(FRReader reader)
 {
     Clear();
     while (reader.NextItem())
     {
         MatrixHeaderDescriptor d = new MatrixHeaderDescriptor();
         reader.Read(d);
         Add(d);
     }
 }
Exemplo n.º 15
0
 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);
         }
     }
 }
Exemplo n.º 16
0
 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);
     }
 }
Exemplo n.º 17
0
 /// <inheritdoc/>
 protected override void DeserializeSubItems(FRReader reader)
 {
     if (String.Compare(reader.ItemName, "Formats", true) == 0)
     {
         reader.Read(Formats);
     }
     else
     {
         base.DeserializeSubItems(reader);
     }
 }
Exemplo n.º 18
0
 /// <inheritdoc/>
 public void Deserialize(FRReader reader)
 {
     Clear();
     Name = "";
     reader.ReadProperties(this);
     while (reader.NextItem())
     {
         Style s = new Style();
         reader.Read(s);
         Add(s);
     }
 }
Exemplo n.º 19
0
 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);
         }
     }
 }
Exemplo n.º 20
0
 /// <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>
 /// &lt;TextObject Name="Text2" Left="18.9" Top="37.8" Width="283.5" Height="28.35"/&gt;
 /// </code>
 /// <para>Some objects like <see cref="DataBand"/> have child objects that serialized in subitems:</para>
 /// <code>
 /// &lt;DataBand Name="Data1" Top="163" Width="718.2" Height="18.9"&gt;
 ///   &lt;TextObject Name="Text3" Left="18.9" Top="37.8" Width="283.5" Height="28.35"/&gt;
 /// &lt;/DataBand&gt;
 /// </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;
             }
         }
     }
 }
Exemplo n.º 21
0
        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);
        }
Exemplo n.º 22
0
 public void Deserialize(FRReader reader)
 {
     while (reader.NextItem())
     {
         try
         {
             DataConnectionBase connection = reader.Read() as DataConnectionBase;
             if (connection != null)
             {
                 FConnections.Add(connection);
             }
         }
         catch
         {
         }
     }
 }
Exemplo n.º 23
0
        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];
            }
        }
Exemplo n.º 24
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);
        }
Exemplo n.º 25
0
        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);
                        }
                    }
        }