Browse Source

Rectangle as Container for other Items

pull/478/head
Peter Forstmeier 12 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
void PrintMargin( Graphics graphics) void PrintMargin( Graphics graphics)
{ {
string header = String.Format(System.Globalization.CultureInfo.CurrentCulture, string header = String.Format(System.Globalization.CultureInfo.CurrentCulture,
"[Size : {0}] [Landscape : {1}] [Bounds : {2}]", "[Size : {0}] [Landscape : {1}] [Bounds : {2}]",
Page.Size, Landscape, PageMargin); Page.Size, Landscape, PageMargin);
using (var font = DesignerGlobals.DesignerFont){ using (var font = DesignerGlobals.DesignerFont){
SizeF size = graphics.MeasureString(header,font); SizeF size = graphics.MeasureString(header,font);
graphics.DrawString(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;
using System.ComponentModel.Design; using System.ComponentModel.Design;
using ICSharpCode.Core; using ICSharpCode.Core;
internal class DefaultServiceContainer : IServiceContainer, IDisposable namespace ICSharpCode.Reporting.Addin.Services{
{
IServiceContainer serviceContainer;
Hashtable services = new Hashtable();
bool inDispose;
public DefaultServiceContainer () {
serviceContainer = new ServiceContainer();
LoggingService.Info("Init ServiceContaier");
}
#region IServiceContainer implementation class DefaultServiceContainer : IServiceContainer, IDisposable
public void AddService(Type serviceType, object serviceInstance)
{ {
if (IsServiceMissing(serviceType)) { IServiceContainer serviceContainer;
serviceContainer.AddService(serviceType, serviceInstance); Hashtable services = new Hashtable();
services.Add(serviceType, serviceInstance); 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) #region IServiceContainer implementation
{ public void AddService(Type serviceType, object serviceInstance)
throw new NotImplementedException(); {
} 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)
{ public void RemoveService(System.Type serviceType, bool promote)
if (inDispose) {
return; if (inDispose)
serviceContainer.RemoveService(serviceType, promote); return;
if (services.Contains(serviceType)) serviceContainer.RemoveService(serviceType, promote);
services.Remove(serviceType); if (services.Contains(serviceType))
} services.Remove(serviceType);
}
public void RemoveService(System.Type serviceType) public void RemoveService(System.Type serviceType)
{ {
if (inDispose == true) if (inDispose == true)
return; return;
serviceContainer.RemoveService(serviceType); serviceContainer.RemoveService(serviceType);
if (services.Contains(serviceType)) if (services.Contains(serviceType))
services.Remove(serviceType); services.Remove(serviceType);
} }
#endregion #endregion
#region IServiceProvider implementation #region IServiceProvider implementation
public object GetService(Type serviceType) public object GetService(Type serviceType)
{ {
// System.Console.WriteLine("calling <{0}>",serviceType.ToString()); // System.Console.WriteLine("calling <{0}>",serviceType.ToString());
if (LoggingService.IsInfoEnabled && IsServiceMissing(serviceType)) { if (LoggingService.IsInfoEnabled && IsServiceMissing(serviceType)) {
// LoggingService.InfoFormatted("request missing service : {0} from Assembly {1} is not aviable.", serviceType, serviceType.Assembly.FullName); // 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("Missing <{0}>",serviceType);
// System.Console.WriteLine("\t found"); // System.Console.WriteLine("\t found");
} else { } else {
// System.Console.WriteLine("\tmissing"); // System.Console.WriteLine("\tmissing");
// LoggingService.DebugFormatted("get service : {0} from Assembly {1}.", serviceType, serviceType.Assembly.FullName); // LoggingService.DebugFormatted("get service : {0} from Assembly {1}.", serviceType, serviceType.Assembly.FullName);
// System.Console.WriteLine("Missing <{0}>",serviceType); // System.Console.WriteLine("Missing <{0}>",serviceType);
}
return serviceContainer.GetService(serviceType);
} }
return serviceContainer.GetService(serviceType); #endregion
}
#endregion
bool IsServiceMissing(Type serviceType) bool IsServiceMissing(Type serviceType)
{ {
return serviceContainer.GetService(serviceType) == null; return serviceContainer.GetService(serviceType) == null;
} }
#region IDisposable implementation #region IDisposable implementation
public void Dispose() public void Dispose()
{ {
inDispose = true; inDispose = true;
foreach (DictionaryEntry o in services) { foreach (DictionaryEntry o in services) {
if (o.Value == this) { if (o.Value == this) {
continue; continue;
} }
// || o.GetType().Assembly != Assembly.GetCallingAssembly() // || o.GetType().Assembly != Assembly.GetCallingAssembly()
IDisposable disposeMe = o.Value as IDisposable; IDisposable disposeMe = o.Value as IDisposable;
if (disposeMe != null) { if (disposeMe != null) {
try { try {
disposeMe.Dispose(); disposeMe.Dispose();
} catch (Exception e) { } catch (Exception e) {
ICSharpCode.Core.MessageService.ShowException(e, "Exception while disposing " + disposeMe); ICSharpCode.Core.MessageService.ShowException(e, "Exception while disposing " + disposeMe);
}
} }
} }
services.Clear();
services = null;
inDispose = false;
} }
services.Clear(); #endregion
services = null; }
inDispose = false;
}
#endregion
} }

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

@ -16,6 +16,8 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System.Collections.Generic;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -24,10 +26,11 @@ namespace ICSharpCode.Reporting.Items
/// <summary> /// <summary>
/// Description of BaseRectangleItem. /// Description of BaseRectangleItem.
/// </summary> /// </summary>
public class BaseRectangleItem:BaseGraphics public class BaseRectangleItem:BaseGraphics,IReportContainer
{ {
public BaseRectangleItem() public BaseRectangleItem()
{ {
Items = new List<IPrintableObject>();
} }
@ -45,5 +48,9 @@ namespace ICSharpCode.Reporting.Items
ex.EndLineCap = EndLineCap; ex.EndLineCap = EndLineCap;
return ex; 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 @@
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System; using System;
using System.Collections.Generic;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using ICSharpCode.Reporting.Arrange;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
@ -26,23 +28,24 @@ namespace ICSharpCode.Reporting.PageBuilder.ExportColumns
/// <summary> /// <summary>
/// Description of ExportRectangle. /// Description of ExportRectangle.
/// </summary> /// </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) public void Accept(IVisitor visitor)
{ {
visitor.Visit(this); visitor.Visit(this);
} }
public List<IExportColumn> ExportedItems {get;private set;}
// public override IMeasurementStrategy MeasurementStrategy()
public override ICSharpCode.Reporting.Arrange.IMeasurementStrategy MeasurementStrategy() // {
{ // throw new NotImplementedException();
throw new NotImplementedException(); // }
}
public int Thickness {get;set;} public int Thickness {get;set;}

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

@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE. // DEALINGS IN THE SOFTWARE.
using System; using System;
using System.Collections.Generic;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Documents; using System.Windows.Documents;
@ -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) { foreach (var element in exportedItems) {
var container = element as ExportContainer; var container = element as ExportContainer;
if (container != null) { if (container != null) {
var containerCanvas = FixedDocumentCreator.CreateContainer(container); var containerCanvas = FixedDocumentCreator.CreateContainer(container);
CanvasHelper.SetPosition(containerCanvas,new Point(container.Location.X,container.Location.Y)); CanvasHelper.SetPosition(containerCanvas,new Point(container.Location.X,container.Location.Y));
myCanvas.Children.Add(containerCanvas); if (container is ExportRectangle) {
PerformList(containerCanvas,container.ExportedItems); 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 { } else {
var acceptor = element as IAcceptor; var acceptor = element as IAcceptor;
acceptor.Accept(this); acceptor.Accept(this);
@ -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){ 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 ft = FixedDocumentCreator.CreateFormattedText((ExportText)exportColumn);
var visual = new DrawingVisual(); var visual = new DrawingVisual();

Loading…
Cancel
Save