-
Notifications
You must be signed in to change notification settings - Fork 620
/
Copy pathSourcePages.cs
151 lines (133 loc) · 4.16 KB
/
SourcePages.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
using System;
using System.Collections.Generic;
using System.Text;
using FastReport.Utils;
namespace FastReport.Preview
{
internal partial class SourcePages : IDisposable
{
#region Fields
private readonly List<ReportPage> pages;
private readonly PreparedPages preparedPages;
#endregion
#region Properties
public int Count
{
get { return pages.Count; }
}
public ReportPage this[int index]
{
get { return pages[index]; }
}
#endregion
#region Private Methods
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;
}
#endregion
#region Public Methods
public void Add(ReportPage page)
{
pages.Add(CloneObjects(page, null) as ReportPage);
}
public void RemoveLast()
{
pages.RemoveAt(pages.Count - 1);
}
public void Clear()
{
while (pages.Count > 0)
{
pages[0].Dispose();
pages.RemoveAt(0);
}
}
public int IndexOf(ReportPage page)
{
return pages.IndexOf(page);
}
public void ApplyWatermark(Watermark watermark)
{
foreach (ReportPage page in pages)
{
page.Watermark = watermark.Clone();
}
}
public void ApplyPageSize()
{
}
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);
}
}
}
public void Save(XmlItem rootItem)
{
rootItem.Clear();
for (int i = 0; i < pages.Count; i++)
{
using (FRWriter writer = new FRWriter(rootItem.Add()))
{
writer.Write(pages[i]);
}
}
}
public void Dispose()
{
Clear();
}
#endregion
public SourcePages(PreparedPages preparedPages)
{
this.preparedPages = preparedPages;
pages = new List<ReportPage>();
}
}
}