Browse Source

Rectangle as Container for other Items

pull/478/head
Peter Forstmeier 11 years ago
parent
commit
0a0c588a8c
  1. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/RootReportModel.cs
  2. 170
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/DefaultServiceContainer.cs
  3. 9
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/Graphics/BaseRectangleItem.cs
  4. 21
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs
  5. 29
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/RootReportModel.cs

@ -45,8 +45,8 @@ namespace ICSharpCode.Reporting.Addin.Designer @@ -45,8 +45,8 @@ namespace ICSharpCode.Reporting.Addin.Designer
void PrintMargin( Graphics graphics)
{
string header = String.Format(System.Globalization.CultureInfo.CurrentCulture,
"[Size : {0}] [Landscape : {1}] [Bounds : {2}]",
Page.Size, Landscape, PageMargin);
"[Size : {0}] [Landscape : {1}] [Bounds : {2}]",
Page.Size, Landscape, PageMargin);
using (var font = DesignerGlobals.DesignerFont){
SizeF size = graphics.MeasureString(header,font);
graphics.DrawString(header,font,

170
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Services/DefaultServiceContainer.cs

@ -11,102 +11,106 @@ using System.Collections; @@ -11,102 +11,106 @@ using System.Collections;
using System.ComponentModel.Design;
using ICSharpCode.Core;
internal class DefaultServiceContainer : IServiceContainer, IDisposable
{
IServiceContainer serviceContainer;
Hashtable services = new Hashtable();
bool inDispose;
namespace ICSharpCode.Reporting.Addin.Services{
public DefaultServiceContainer () {
serviceContainer = new ServiceContainer();
LoggingService.Info("Init ServiceContaier");
}
#region IServiceContainer implementation
public void AddService(Type serviceType, object serviceInstance)
class DefaultServiceContainer : IServiceContainer, IDisposable
{
if (IsServiceMissing(serviceType)) {
serviceContainer.AddService(serviceType, serviceInstance);
services.Add(serviceType, serviceInstance);
IServiceContainer serviceContainer;
Hashtable services = new Hashtable();
bool inDispose;
public DefaultServiceContainer () {
serviceContainer = new ServiceContainer();
LoggingService.Info("Init ServiceContaier");
}
}
public void AddService(Type serviceType, object serviceInstance, bool promote)
{
throw new NotImplementedException();
}
public void AddService(Type serviceType, ServiceCreatorCallback callback)
{
throw new NotImplementedException();
}
public void AddService(Type serviceType, ServiceCreatorCallback callback, bool promote)
{
throw new NotImplementedException();
}
#region IServiceContainer implementation
public void AddService(Type serviceType, object serviceInstance)
{
if (IsServiceMissing(serviceType)) {
serviceContainer.AddService(serviceType, serviceInstance);
services.Add(serviceType, serviceInstance);
}
}
public void AddService(Type serviceType, object serviceInstance, bool promote)
{
throw new NotImplementedException();
}
public void AddService(Type serviceType, ServiceCreatorCallback callback)
{
throw new NotImplementedException();
}
public void AddService(Type serviceType, ServiceCreatorCallback callback, bool promote)
{
throw new NotImplementedException();
}
public void RemoveService(System.Type serviceType, bool promote)
{
if (inDispose)
return;
serviceContainer.RemoveService(serviceType, promote);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
public void RemoveService(System.Type serviceType, bool promote)
{
if (inDispose)
return;
serviceContainer.RemoveService(serviceType, promote);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
public void RemoveService(System.Type serviceType)
{
if (inDispose == true)
return;
serviceContainer.RemoveService(serviceType);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
#endregion
public void RemoveService(System.Type serviceType)
{
if (inDispose == true)
return;
serviceContainer.RemoveService(serviceType);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
#endregion
#region IServiceProvider implementation
public object GetService(Type serviceType)
{
// System.Console.WriteLine("calling <{0}>",serviceType.ToString());
if (LoggingService.IsInfoEnabled && IsServiceMissing(serviceType)) {
// LoggingService.InfoFormatted("request missing service : {0} from Assembly {1} is not aviable.", serviceType, serviceType.Assembly.FullName);
// System.Console.WriteLine("Missing <{0}>",serviceType);
// System.Console.WriteLine("\t found");
} else {
// System.Console.WriteLine("\tmissing");
// LoggingService.DebugFormatted("get service : {0} from Assembly {1}.", serviceType, serviceType.Assembly.FullName);
// System.Console.WriteLine("Missing <{0}>",serviceType);
#region IServiceProvider implementation
public object GetService(Type serviceType)
{
// System.Console.WriteLine("calling <{0}>",serviceType.ToString());
if (LoggingService.IsInfoEnabled && IsServiceMissing(serviceType)) {
// LoggingService.InfoFormatted("request missing service : {0} from Assembly {1} is not aviable.", serviceType, serviceType.Assembly.FullName);
// System.Console.WriteLine("Missing <{0}>",serviceType);
// System.Console.WriteLine("\t found");
} else {
// System.Console.WriteLine("\tmissing");
// LoggingService.DebugFormatted("get service : {0} from Assembly {1}.", serviceType, serviceType.Assembly.FullName);
// System.Console.WriteLine("Missing <{0}>",serviceType);
}
return serviceContainer.GetService(serviceType);
}
return serviceContainer.GetService(serviceType);
}
#endregion
#endregion
bool IsServiceMissing(Type serviceType)
{
return serviceContainer.GetService(serviceType) == null;
}
bool IsServiceMissing(Type serviceType)
{
return serviceContainer.GetService(serviceType) == null;
}
#region IDisposable implementation
public void Dispose()
{
inDispose = true;
foreach (DictionaryEntry o in services) {
if (o.Value == this) {
continue;
}
// || o.GetType().Assembly != Assembly.GetCallingAssembly()
IDisposable disposeMe = o.Value as IDisposable;
if (disposeMe != null) {
try {
disposeMe.Dispose();
} catch (Exception e) {
ICSharpCode.Core.MessageService.ShowException(e, "Exception while disposing " + disposeMe);
#region IDisposable implementation
public void Dispose()
{
inDispose = true;
foreach (DictionaryEntry o in services) {
if (o.Value == this) {
continue;
}
// || o.GetType().Assembly != Assembly.GetCallingAssembly()
IDisposable disposeMe = o.Value as IDisposable;
if (disposeMe != null) {
try {
disposeMe.Dispose();
} catch (Exception e) {
ICSharpCode.Core.MessageService.ShowException(e, "Exception while disposing " + disposeMe);
}
}
}
services.Clear();
services = null;
inDispose = false;
}
services.Clear();
services = null;
inDispose = false;
}
#endregion
#endregion
}
}

9
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/Graphics/BaseRectangleItem.cs

@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
using System.Collections.Generic;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -24,10 +26,11 @@ namespace ICSharpCode.Reporting.Items @@ -24,10 +26,11 @@ namespace ICSharpCode.Reporting.Items
/// <summary>
/// Description of BaseRectangleItem.
/// </summary>
public class BaseRectangleItem:BaseGraphics
public class BaseRectangleItem:BaseGraphics,IReportContainer
{
public BaseRectangleItem()
{
Items = new List<IPrintableObject>();
}
@ -45,5 +48,9 @@ namespace ICSharpCode.Reporting.Items @@ -45,5 +48,9 @@ namespace ICSharpCode.Reporting.Items
ex.EndLineCap = EndLineCap;
return ex;
}
public List<IPrintableObject> Items {get;private set;}
}
}

21
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs

@ -17,7 +17,9 @@ @@ -17,7 +17,9 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using ICSharpCode.Reporting.Arrange;
using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export;
@ -26,23 +28,24 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns @@ -26,23 +28,24 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
/// <summary>
/// Description of ExportRectangle.
/// </summary>
public class ExportRectangle:ExportColumn,IExportGraphics,IAcceptor
public class ExportRectangle:ExportContainer,IExportGraphics,IAcceptor
{
public ExportRectangle()
{
public ExportRectangle() {
ExportedItems = new List<IExportColumn>();
}
public void Accept(IVisitor visitor)
{
visitor.Visit(this);
}
public List<IExportColumn> ExportedItems {get;private set;}
public override ICSharpCode.Reporting.Arrange.IMeasurementStrategy MeasurementStrategy()
{
throw new NotImplementedException();
}
// public override IMeasurementStrategy MeasurementStrategy()
// {
// throw new NotImplementedException();
// }
public int Thickness {get;set;}

29
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
@ -59,15 +60,23 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor @@ -59,15 +60,23 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
}
void PerformList(Canvas myCanvas, System.Collections.Generic.List<IExportColumn> exportedItems)
void PerformList(Canvas myCanvas, List<IExportColumn> exportedItems)
{
foreach (var element in exportedItems) {
var container = element as ExportContainer;
if (container != null) {
var containerCanvas = FixedDocumentCreator.CreateContainer(container);
CanvasHelper.SetPosition(containerCanvas,new Point(container.Location.X,container.Location.Y));
myCanvas.Children.Add(containerCanvas);
PerformList(containerCanvas,container.ExportedItems);
if (container is ExportRectangle) {
DrawRectangleAsContainer(container);
containerCanvas.Children.Add(UIElement);
myCanvas.Children.Add(containerCanvas);
} else {
// var containerCanvas = FixedDocumentCreator.CreateContainer(container);
// CanvasHelper.SetPosition(containerCanvas,new Point(container.Location.X,container.Location.Y));
myCanvas.Children.Add(containerCanvas);
PerformList(containerCanvas,container.ExportedItems);
}
} else {
var acceptor = element as IAcceptor;
acceptor.Accept(this);
@ -75,14 +84,16 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor @@ -75,14 +84,16 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
}
}
}
void DrawRectangleAsContainer(ExportContainer container)
{
var rect = container as ExportRectangle;
if (rect != null) {
Visit(rect);
}
}
public override void Visit(ExportText exportColumn){
/*
var textBlock = FixedDocumentCreator.CreateTextBlock((ExportText)exportColumn,ShouldSetBackcolor(exportColumn));
CanvasHelper.SetPosition(textBlock,new Point(exportColumn.Location.X,exportColumn.Location.Y));
UIElement = textBlock;
*/
var ft = FixedDocumentCreator.CreateFormattedText((ExportText)exportColumn);
var visual = new DrawingVisual();

Loading…
Cancel
Save