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. 168
      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. 19
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/ExportColumns/ExportRectangle.cs
  5. 27
      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,

168
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)) {
serviceContainer.AddService(serviceType, serviceInstance);
services.Add(serviceType, serviceInstance);
}
}
public void AddService(Type serviceType, object serviceInstance, bool promote)
{ {
throw new NotImplementedException(); IServiceContainer serviceContainer;
} Hashtable services = new Hashtable();
public void AddService(Type serviceType, ServiceCreatorCallback callback) bool inDispose;
{
throw new NotImplementedException();
}
public void AddService(Type serviceType, ServiceCreatorCallback callback, bool promote) public DefaultServiceContainer () {
{ serviceContainer = new ServiceContainer();
throw new NotImplementedException(); LoggingService.Info("Init ServiceContaier");
} }
#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 RemoveService(System.Type serviceType, bool promote) public void AddService(Type serviceType, ServiceCreatorCallback callback, bool promote)
{ {
if (inDispose) throw new NotImplementedException();
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
#region IServiceProvider implementation public void RemoveService(System.Type serviceType, bool promote)
public object GetService(Type serviceType) {
{ if (inDispose)
// System.Console.WriteLine("calling <{0}>",serviceType.ToString()); return;
if (LoggingService.IsInfoEnabled && IsServiceMissing(serviceType)) { serviceContainer.RemoveService(serviceType, promote);
// LoggingService.InfoFormatted("request missing service : {0} from Assembly {1} is not aviable.", serviceType, serviceType.Assembly.FullName); if (services.Contains(serviceType))
// System.Console.WriteLine("Missing <{0}>",serviceType); services.Remove(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);
}
#endregion
bool IsServiceMissing(Type serviceType) public void RemoveService(System.Type serviceType)
{ {
return serviceContainer.GetService(serviceType) == null; if (inDispose == true)
} return;
serviceContainer.RemoveService(serviceType);
if (services.Contains(serviceType))
services.Remove(serviceType);
}
#endregion
#region IDisposable implementation #region IServiceProvider implementation
public void Dispose() public object GetService(Type serviceType)
{ {
inDispose = true; // System.Console.WriteLine("calling <{0}>",serviceType.ToString());
foreach (DictionaryEntry o in services) { if (LoggingService.IsInfoEnabled && IsServiceMissing(serviceType)) {
if (o.Value == this) { // LoggingService.InfoFormatted("request missing service : {0} from Assembly {1} is not aviable.", serviceType, serviceType.Assembly.FullName);
continue; // 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);
} }
// || o.GetType().Assembly != Assembly.GetCallingAssembly() return serviceContainer.GetService(serviceType);
IDisposable disposeMe = o.Value as IDisposable; }
if (disposeMe != null) { #endregion
try {
disposeMe.Dispose(); bool IsServiceMissing(Type serviceType)
} catch (Exception e) { {
ICSharpCode.Core.MessageService.ShowException(e, "Exception while disposing " + disposeMe); 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);
}
} }
} }
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;}
} }
} }

19
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 ICSharpCode.Reporting.Arrange.IMeasurementStrategy MeasurementStrategy()
{ // public override IMeasurementStrategy MeasurementStrategy()
throw new NotImplementedException(); // {
} // throw new NotImplementedException();
// }
public int Thickness {get;set;} public int Thickness {get;set;}

27
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);
@ -76,13 +85,15 @@ 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