From ba82d9dea2d792bb0176c016ee4ba23384a7ef65 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Sun, 24 May 2015 19:18:50 +0200 Subject: [PATCH 01/13] ReportWizard can select a Project in Solution --- .../ReportWizard/Dialog/PushDataReport.xaml | 25 ++++--- .../Dialog/PushDataReport.xaml.cs | 65 ++++++++++++++----- 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml index 27cc0b7627..dd21344019 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml @@ -1,4 +1,4 @@ - - + @@ -20,21 +20,30 @@ - - + + + + + - + + + + + + + - + - + AutoGenerateColumns="False" Grid.Row="1" Grid.RowSpan="5" Margin="5,10,30,5" Width="400" Grid.Column="1"> diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs index bceb85fbb6..e4faee1662 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs @@ -12,6 +12,8 @@ using System.Linq; using ICSharpCode.Core; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.Reporting.BaseClasses; +using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.SharpDevelop.Project; using Xceed.Wpf.Toolkit; using ICSharpCode.Reporting.Addin.Globals; using ICSharpCode.Reporting.Addin.ReportWizard.ViewModels; @@ -34,32 +36,58 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog this.context = new PushModelContext(); cboType.ItemsSource = GlobalLists.DataTypeList(); - var definitions = GetTypeDefinitions(); - if (definitions.Any()) { - _cboTypes.Visibility = System.Windows.Visibility.Visible; - _availTxt.Visibility = System.Windows.Visibility.Visible; - _cboTypes.ItemsSource = definitions; - _cboTypes.SelectedIndex = 0; + Projects = GetProjects(); + _projectsCbo.ItemsSource = Projects; + } + + IProject SelectedProject {get;set;} + + + IModelCollection GetProjects(){ + var solution = SharpDevelop.SD.ProjectService.CurrentSolution; + return solution.Projects; + } + + + IEnumerable GetTypeDefinitions(){ + + if (SelectedProject != null) { + var compilation = SharpDevelop.SD.ParserService.GetCompilation(SelectedProject); + var definitions = compilation.MainAssembly.TopLevelTypeDefinitions.Where(x => x.Properties.Any()); + return definitions; } else { - var data = new AbstractColumn("MyColumn", typeof(string)); - items.Add(data); - _projTxt.Text = ResourceService.GetString("SharpReport.Wizard.PushModel.NoProject"); + return null; } } - - static IEnumerable GetTypeDefinitions() - { - var currentProject = SharpDevelop.SD.ProjectService.CurrentProject; - var compilation = SharpDevelop.SD.ParserService.GetCompilation(currentProject); - var definitions = compilation.MainAssembly.TopLevelTypeDefinitions.Where(x => x.Properties.Any()); - return definitions; + + public IModelCollection Projects {get; private set;} + + #region SolutionCombo + + void _pro_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){ + SelectedProject = (IProject)e.AddedItems[0]; + var definitions = GetTypeDefinitions(); +// if (definitions != null) { + if (definitions.Any()) { + _cboTypes.Visibility = System.Windows.Visibility.Visible; + _availTxt.Visibility = System.Windows.Visibility.Visible; + _projTxt.Visibility = System.Windows.Visibility.Visible; + _cboTypes.ItemsSource = definitions; + _cboTypes.SelectedIndex = 0; + + } else { + var data = new AbstractColumn("MyColumn", typeof(string)); + items.Add(data); + _projTxt.Text = ResourceService.GetString("SharpReport.Wizard.PushModel.NoProject"); + } +// } } + #endregion - #region Combo + #region Classes Combo void _cboTypes_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){ - var typeDefinition = (ITypeDefinition)e.AddedItems[0]; var itemsList = CreateItemsSource(typeDefinition); if (itemsList.Count > 0) { @@ -93,6 +121,7 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog public WizardPageType ReportPageType { get {return WizardPageType.PushModelPage;} } + #endregion } From c507ba9cec252f80bb400244aa1a776685517f8e Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Mon, 25 May 2015 13:04:13 +0200 Subject: [PATCH 02/13] PushDataReport.xaml.cs --- .../Dialog/PushDataReport.xaml.cs | 47 ++++++++++--------- .../Src/Arrange/ArrangeStrategy.cs | 30 +++++++++++- .../Src/PageBuilder/BasePageBuilder.cs | 19 ++++---- .../Converter/ContainerConverter.cs | 7 ++- 4 files changed, 66 insertions(+), 37 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs index e4faee1662..2c6dad31e3 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs @@ -49,38 +49,36 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog } - IEnumerable GetTypeDefinitions(){ - + IEnumerable GetTypeDefinitions() + { if (SelectedProject != null) { var compilation = SharpDevelop.SD.ParserService.GetCompilation(SelectedProject); var definitions = compilation.MainAssembly.TopLevelTypeDefinitions.Where(x => x.Properties.Any()); return definitions; - } else { - return null; } + return null; } public IModelCollection Projects {get; private set;} + #region SolutionCombo void _pro_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){ SelectedProject = (IProject)e.AddedItems[0]; var definitions = GetTypeDefinitions(); -// if (definitions != null) { - if (definitions.Any()) { - _cboTypes.Visibility = System.Windows.Visibility.Visible; - _availTxt.Visibility = System.Windows.Visibility.Visible; - _projTxt.Visibility = System.Windows.Visibility.Visible; - _cboTypes.ItemsSource = definitions; - _cboTypes.SelectedIndex = 0; - - } else { - var data = new AbstractColumn("MyColumn", typeof(string)); - items.Add(data); - _projTxt.Text = ResourceService.GetString("SharpReport.Wizard.PushModel.NoProject"); - } -// } + if (definitions.Any()) { + _cboTypes.Visibility = System.Windows.Visibility.Visible; + _availTxt.Visibility = System.Windows.Visibility.Visible; + _projTxt.Visibility = System.Windows.Visibility.Visible; + _cboTypes.ItemsSource = definitions; + _cboTypes.SelectedIndex = 0; + + } else { + var data = new AbstractColumn("MyColumn", typeof(string)); + items.Add(data); + _projTxt.Text = ResourceService.GetString("SharpReport.Wizard.PushModel.NoProject"); + } } #endregion @@ -88,13 +86,16 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog #region Classes Combo void _cboTypes_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){ - var typeDefinition = (ITypeDefinition)e.AddedItems[0]; - var itemsList = CreateItemsSource(typeDefinition); - if (itemsList.Count > 0) { - _DataGrid.ItemsSource = itemsList; + if (e.AddedItems.Count > 0) { + var typeDefinition = (ITypeDefinition)e.AddedItems[0]; + var itemsList = CreateItemsSource(typeDefinition); + if (itemsList.Count > 0) { + _DataGrid.ItemsSource = itemsList; + } } } + #endregion static List CreateItemsSource(ITypeDefinition typeDefinitions){ return typeDefinitions.Properties.Select(p => new AbstractColumn(){ @@ -102,7 +103,7 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog DataTypeName = p.ReturnType.ReflectionName }).ToList(); } - #endregion + void UpdateContext(){ context.Items = (List)_DataGrid.ItemsSource; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs index afee05d1c4..fdeae2d126 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs @@ -36,20 +36,46 @@ namespace ICSharpCode.Reporting.Arrange class ContainerArrangeStrategy:IArrangeStrategy{ public void Arrange(IExportColumn exportColumn){ + Console.WriteLine("------------------------"); + Console.WriteLine(); if (exportColumn == null) throw new ArgumentNullException("exportColumn"); var container = exportColumn as IExportContainer; - if ((container != null) && (container.ExportedItems.Count > 0)) { + if ((container != null) && (container.ExportedItems.Any())) { List canGrowItems = CreateCanGrowList(container); - if (canGrowItems.Count > 0) { + if (canGrowItems.Any()) { var containerSize = ArrangeInternal(container); if (containerSize.Height > container.DesiredSize.Height) { container.DesiredSize = new Size(containerSize.Width,containerSize.Height); } } } + + foreach (var element in container.ExportedItems) { + Console.WriteLine("{0} - {1} - {2}",element.Name,element.Location,element.DesiredSize); + } + var xx = container.ExportedItems.Where(x => x.CanGrow == false); + var growables = container.ExportedItems.Where(x => x.CanGrow == true); + foreach (var e in growables) { + var r = new Rectangle(e.Location,e.DesiredSize); + foreach (var x in xx) { + +// if ((x.Location.Y > r.Location.Y) && (x.Location.Y < r.Bottom)) { + if (ElementIntersect(x,e)) { + x.Location = new Point(x.Location.X,r.Bottom + 5); + } + } + } } + bool ElementIntersect(IExportColumn fixedElement, IExportColumn growable) { + var r = new Rectangle(growable.Location,growable.DesiredSize); + if ((fixedElement.Location.Y > growable.Location.Y) && (fixedElement.Location.Y < r.Bottom)){ + return true; + } + return false; + } + static Size ArrangeInternal(IExportContainer container){ diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 4c9a5ee8b0..9e52199022 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -90,14 +90,6 @@ namespace ICSharpCode.Reporting.PageBuilder } - void AddSectionToPage(IExportContainer header){ - header.Parent = CurrentPage; - CurrentPage.ExportedItems.Add(header); - } - - - - protected void BuildReportFooter(){ var lastSection = CurrentPage.ExportedItems.Last(); CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, @@ -115,6 +107,11 @@ namespace ICSharpCode.Reporting.PageBuilder BuildPageFooter(); } + void AddSectionToPage(IExportContainer header){ + header.Parent = CurrentPage; + CurrentPage.ExportedItems.Add(header); + } + protected bool PageFull(IExportContainer container) { return container.DisplayRectangle.Bottom > DetailEnds.Y; @@ -134,9 +131,7 @@ namespace ICSharpCode.Reporting.PageBuilder convertedContainer.ExportedItems.AddRange(list); //Run ExpressionEvaluator for every section, otherwise measure don't work ExpressionRunner.Visitor.Visit(convertedContainer as ExportContainer); - Console.WriteLine("{0} - {1}",convertedContainer.DesiredSize,convertedContainer.DisplayRectangle); convertedContainer.DesiredSize = MeasureElement(convertedContainer); - Console.WriteLine("{0} - {1}",convertedContainer.DesiredSize,convertedContainer.DisplayRectangle); ArrangeContainer(convertedContainer); return convertedContainer; } @@ -193,7 +188,9 @@ namespace ICSharpCode.Reporting.PageBuilder CurrentLocation = DetailStart; } - + protected void SortIstByLocationY () { + + } protected void UpdatePageInfo() { foreach (var page in Pages) { page.PageInfo.TotalPages = Pages.Count; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs index 42341e0ffa..27c203c6b8 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs @@ -19,7 +19,7 @@ using System; using System.Collections.Generic; using System.Drawing; - +using System.Linq; using ICSharpCode.Reporting.Factories; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; @@ -48,6 +48,11 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter public List CreateConvertedList(List items){ var itemsList = new List(); +// var aa = items.OrderBy(x => x.Location.Y); +// foreach (var el in aa) { +// Console.WriteLine("{0} - {1}",el.Name,el.Location); +// } +// foreach (var element in aa) { foreach (var element in items) { var exportColumn = ExportColumnFactory.CreateItem(element); var ec = element as IReportContainer; From e2112ab197c71503bdb76431795b4e2e792f7a2b Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Mon, 25 May 2015 16:55:31 +0200 Subject: [PATCH 03/13] Arrange if Items CanGrow --- .../Src/Arrange/ArrangeStrategy.cs | 36 +++++++------------ .../Src/Wpf/Visitor/WpfVisitor.cs | 18 ++++------ 2 files changed, 19 insertions(+), 35 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs index fdeae2d126..c3392ecb23 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs @@ -36,8 +36,6 @@ namespace ICSharpCode.Reporting.Arrange class ContainerArrangeStrategy:IArrangeStrategy{ public void Arrange(IExportColumn exportColumn){ - Console.WriteLine("------------------------"); - Console.WriteLine(); if (exportColumn == null) throw new ArgumentNullException("exportColumn"); var container = exportColumn as IExportContainer; @@ -46,37 +44,27 @@ namespace ICSharpCode.Reporting.Arrange if (canGrowItems.Any()) { var containerSize = ArrangeInternal(container); if (containerSize.Height > container.DesiredSize.Height) { - container.DesiredSize = new Size(containerSize.Width,containerSize.Height); + container.DesiredSize = new Size(containerSize.Width,containerSize.Height + 15); } } } - foreach (var element in container.ExportedItems) { - Console.WriteLine("{0} - {1} - {2}",element.Name,element.Location,element.DesiredSize); - } - var xx = container.ExportedItems.Where(x => x.CanGrow == false); - var growables = container.ExportedItems.Where(x => x.CanGrow == true); - foreach (var e in growables) { - var r = new Rectangle(e.Location,e.DesiredSize); - foreach (var x in xx) { - -// if ((x.Location.Y > r.Location.Y) && (x.Location.Y < r.Bottom)) { - if (ElementIntersect(x,e)) { - x.Location = new Point(x.Location.X,r.Bottom + 5); + + var fixedElements = container.ExportedItems.Where(x => !x.CanGrow); + var growables = container.ExportedItems.Where(x => x.CanGrow); + + foreach (var growable in growables) { + var r = new Rectangle(growable.Location,growable.DesiredSize); + foreach (var x in fixedElements) { + var xr = new Rectangle(x.Location,x.DesiredSize); + if (r.IntersectsWith(xr)) { + x.Location = new Point(x.Location.X, r.Bottom + 5); } } } } - bool ElementIntersect(IExportColumn fixedElement, IExportColumn growable) { - var r = new Rectangle(growable.Location,growable.DesiredSize); - if ((fixedElement.Location.Y > growable.Location.Y) && (fixedElement.Location.Y < r.Bottom)){ - return true; - } - return false; - } - - + static Size ArrangeInternal(IExportContainer container){ var containerRectangle = container.DisplayRectangle; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs index a182c6a785..9bff455041 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs @@ -110,7 +110,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor if (circle != null) { Visit(circle); } - graphCanvas.Children.Add(UIElement); } return graphCanvas; @@ -126,23 +125,20 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor var visual = new DrawingVisual(); using (var drawingContext = visual.RenderOpen()){ - - var desiredRect = new Rect(location,new Size(exportColumn.DesiredSize.Width,exportColumn.DesiredSize.Height)); - + var bachgroundRect = new Rect(location,new Size(exportColumn.DesiredSize.Width,formattedText.MaxTextHeight)); if (ShouldSetBackcolor(exportColumn)) { - drawingContext.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), - null, - desiredRect); + drawingContext.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), null,bachgroundRect); } drawingContext.DrawText(formattedText,location); + if (HasFrame(exportColumn)) { - desiredRect.Inflate(2,2); + var frameRect = new Rect(location,new Size(exportColumn.DesiredSize.Width,formattedText.Height)); var pen = FixedDocumentCreator.CreateWpfPen(exportColumn); - pen.Thickness = 2; - drawingContext.DrawRectangle(null, pen,desiredRect); + pen.Thickness = 1; + drawingContext.DrawRectangle(null, pen, + frameRect); } - } var drawingElement = new DrawingElement(visual); From 76201abfbb42ae5ef094dc8cefd62a0391abf91a Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 27 May 2015 20:38:46 +0200 Subject: [PATCH 04/13] IReportSettings --- .../src/DesignableItems/ReportSettings.cs | 15 +++++++- .../ReportDefinitionDeserializer.cs | 8 ++++- .../ICSharpCode.Reporting.csproj | 1 + .../Src/Interfaces/IReportSettings.cs | 36 +++++++++++++++++++ .../Src/Items/ReportSettings.cs | 3 +- 5 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportSettings.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs index 5901018a50..7b28c5ad8b 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs @@ -8,16 +8,29 @@ */ using System; using System.ComponentModel; +using System.ComponentModel.Design; using System.Drawing; using System.IO; using ICSharpCode.Reporting.Globals; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Addin.Designer; namespace ICSharpCode.Reporting.Addin.DesignableItems { + public class ReportSettingsDesigner:ComponentDesigner + { + const string settingsName = "ReportSettings"; + + public override void Initialize(IComponent component) + { + base.Initialize(component); + component.Site.Name = ReportSettingsDesigner.settingsName; + } + } + [Designer(typeof(ReportSettingsDesigner))] - public class ReportSettings:Component + public class ReportSettings:Component,IReportSettings { public ReportSettings() diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs index 13ec54300a..2702a2f922 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs @@ -24,6 +24,7 @@ using System.Xml; using ICSharpCode.Core; using ICSharpCode.Reporting.Factories; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Xml; using ICSharpCode.Reporting.Addin.XML; @@ -53,6 +54,8 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding var reportModel = ReportModelFactory.Create(); reportModel.ReportSettings = reportSettings; +// var x = new ICSharpCode.Reporting.Addin.DesignableItems.ReportSettings(); +// host.Container.Add(x); host.Container.Add(reportSettings); //Move to SectionCollection @@ -71,12 +74,15 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding } - static ReportSettings CreateReportSettings(XmlElement elem) + ReportSettings CreateReportSettings(XmlElement elem) { XmlNodeList nodes = elem.FirstChild.ChildNodes; var reportSettingsNode = (XmlElement)nodes[0]; var modelLoader = new ModelLoader(); +// var x = (IReportSettings)this.Load(reportSettingsNode,null); + return modelLoader.Load(reportSettingsNode) as ReportSettings; +// return x; } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj index 707962a862..1bc4c69e47 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj @@ -138,6 +138,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportSettings.cs new file mode 100644 index 0000000000..53207b0a52 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportSettings.cs @@ -0,0 +1,36 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 27.05.2015 + * Time: 20:15 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.ComponentModel; +using System.Drawing; +using ICSharpCode.Reporting.Globals; + +namespace ICSharpCode.Reporting.Interfaces +{ + /// + /// Description of IReportSettings. + /// + public interface IReportSettings:IComponent{ + + string ReportName {get;set;} + string FileName {get;set;} + int BottomMargin {get;set;} + int TopMargin {get;set;} + int LeftMargin {get;set;} + int RightMargin {get;set;} + Size PageSize {get;} + bool Landscape {get;set;} + PushPullModel DataModel {get;set;} + ParameterCollection ParameterCollection {get;} + + SortColumnCollection SortColumnsCollection {get;} + + GroupColumnCollection GroupColumnsCollection {get;} + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs index d62ca39e40..f3ab6b3b34 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs @@ -24,6 +24,7 @@ using System.IO; using System.Xml.Serialization; using ICSharpCode.Reporting.Globals; +using ICSharpCode.Reporting.Interfaces; @@ -48,7 +49,7 @@ namespace ICSharpCode.Reporting.Items [Designer(typeof(ReportSettingsDesigner))] - public class ReportSettings:Component + public class ReportSettings:Component,IReportSettings { public ReportSettings() From 46dbd6a7ae3a01b7cd1898ec0b8fea5d802a739f Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Thu, 28 May 2015 19:30:03 +0200 Subject: [PATCH 05/13] Fix Build --- .../MeasureArrange/ContainerArrangeStrategyFixture.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs index e9f8c25343..fa82dbe716 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs @@ -73,7 +73,7 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange public void ContainerResizeIfItemCanGrow () { var container = CreateContainer(); - MakeCangGrow(container); + SetCanGrowToTrue(container); Measure(container); strategy.Arrange(container); @@ -85,9 +85,9 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange [Test] - public void ResizedContainerExeed5Points() { + public void ResizedContainerExeed20Points() { var container = CreateContainer(); - MakeCangGrow(container); + SetCanGrowToTrue(container); Measure(container); strategy.Arrange(container); var containerRect = new Rectangle(container.Location,container.DesiredSize); @@ -95,7 +95,7 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange var arrangedRect = CreateItemRectangle(container); - Assert.That(containerRect.Bottom,Is.EqualTo(arrangedRect.Bottom + 5)); + Assert.That(containerRect.Bottom,Is.EqualTo(arrangedRect.Bottom + 20)); } @@ -134,7 +134,7 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange } - static void MakeCangGrow(IExportContainer container) + static void SetCanGrowToTrue(IExportContainer container) { container.ExportedItems[0].Location = new Point(80, 10); container.ExportedItems[0].Size = new Size(20, 70); From 51481d9230e15b99fe0a73bbd35001a15c96e007 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 29 May 2015 14:27:05 +0200 Subject: [PATCH 06/13] fix some bugs in the ILSpy debugger integration --- .../Debugger/Debugger.Core/PdbSymbolSource.cs | 2 +- .../ILSpyAddIn/DecompiledViewContent.cs | 38 ++++++++++++++++++- .../DisplayBindings/ILSpyAddIn/ILSpyParser.cs | 3 +- .../ILSpyAddIn/ILSpySymbolSource.cs | 3 +- 4 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/AddIns/Debugger/Debugger.Core/PdbSymbolSource.cs b/src/AddIns/Debugger/Debugger.Core/PdbSymbolSource.cs index 945242fbe3..56c1f78431 100644 --- a/src/AddIns/Debugger/Debugger.Core/PdbSymbolSource.cs +++ b/src/AddIns/Debugger/Debugger.Core/PdbSymbolSource.cs @@ -256,7 +256,7 @@ namespace Debugger var s = seqPoints[i]; if (s.ContainsLocation(line, column)) return s; - if (s.StartLine > line) + if (s.StartLine > line || (s.StartLine == line && s.StartColumn > column)) return s; } return null; diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/DecompiledViewContent.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/DecompiledViewContent.cs index ad9818dcf3..e31cc7b045 100644 --- a/src/AddIns/DisplayBindings/ILSpyAddIn/DecompiledViewContent.cs +++ b/src/AddIns/DisplayBindings/ILSpyAddIn/DecompiledViewContent.cs @@ -27,6 +27,7 @@ using ICSharpCode.AvalonEdit.AddIn; using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.Core; using ICSharpCode.Decompiler; +using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.ILSpyAddIn; using ICSharpCode.NRefactory; using ICSharpCode.NRefactory.TypeSystem; @@ -39,12 +40,13 @@ namespace ICSharpCode.ILSpyAddIn /// /// Hosts a decompiled type. /// - class DecompiledViewContent : AbstractViewContentWithoutFile + class DecompiledViewContent : AbstractViewContentWithoutFile, IPositionable { /// /// Entity to jump to once decompilation has finished. /// string jumpToEntityIdStringWhenDecompilationFinished; + int jumpToLineWhenDecompilationFinished, jumpToColumnWhenDecompilationFinished; bool decompilationFinished; @@ -72,6 +74,9 @@ namespace ICSharpCode.ILSpyAddIn this.codeEditor.FileName = this.DecompiledTypeName.ToFileName(); this.codeEditor.ActiveTextEditor.IsReadOnly = true; this.codeEditor.ActiveTextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#"); + + this.Services.RemoveService(typeof(IPositionable)); + this.Services.AddService(typeof(IPositionable), this); } #endregion @@ -169,7 +174,10 @@ namespace ICSharpCode.ILSpyAddIn codeEditor.Document.UndoStack.ClearAll(); this.decompilationFinished = true; - JumpToEntity(this.jumpToEntityIdStringWhenDecompilationFinished); + if (!string.IsNullOrEmpty(jumpToEntityIdStringWhenDecompilationFinished)) + JumpToEntity(this.jumpToEntityIdStringWhenDecompilationFinished); + else + JumpTo(jumpToLineWhenDecompilationFinished, jumpToColumnWhenDecompilationFinished); // update UI //UpdateIconMargin(); @@ -228,5 +236,31 @@ namespace ICSharpCode.ILSpyAddIn } #endregion + + #region IPositionable implementation + + public void JumpTo(int line, int column) + { + if (decompilationFinished) { + codeEditor.ActiveTextEditorAdapter.JumpTo(line, column); + } else { + jumpToLineWhenDecompilationFinished = line; + jumpToColumnWhenDecompilationFinished = column; + } + } + + public int Line { + get { + return codeEditor.ActiveTextEditor.TextArea.Caret.Line; + } + } + + public int Column { + get { + return codeEditor.ActiveTextEditor.TextArea.Caret.Column; + } + } + + #endregion } } diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs index de246b0a27..525186f71e 100644 --- a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs +++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs @@ -31,6 +31,7 @@ using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Dom.ClassBrowser; +using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor.Search; using ICSharpCode.SharpDevelop.Parser; using ICSharpCode.SharpDevelop.Project; @@ -48,7 +49,7 @@ namespace ICSharpCode.ILSpyAddIn return fileName != null && fileName.StartsWith("ilspy://", StringComparison.OrdinalIgnoreCase); } - readonly static ITextSource EmptyFileContent = new StringTextSource(""); + readonly ITextSource EmptyFileContent = new StringTextSource("", new OnDiskTextSourceVersion(DateTime.MinValue)); public ITextSource GetFileContent(FileName fileName) { diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpySymbolSource.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpySymbolSource.cs index 24a89a5cb8..03133d7d5d 100644 --- a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpySymbolSource.cs +++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpySymbolSource.cs @@ -29,7 +29,8 @@ namespace ICSharpCode.ILSpyAddIn var typeName = DecompiledTypeReference.FromTypeDefinition(method.DeclaringTypeDefinition); if (typeName == null) return null; SD.Log.DebugFormatted("GetSymbols for: {0}", typeName.ToFileName()); - return SD.ParserService.ParseFile(typeName.ToFileName()) as ILSpyUnresolvedFile; + // full parse info required to make ParserService caching possible... + return SD.ParserService.Parse(typeName.ToFileName()).UnresolvedFile as ILSpyUnresolvedFile; } public Debugger.SequencePoint GetSequencePoint(IMethod method, int iloffset) From fa9668570445762ca733a08154b82fa2358c3f38 Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Fri, 29 May 2015 19:19:03 +0200 Subject: [PATCH 07/13] Create Interface IReportSettings, designer use ReportSettings from ICSharpCode.Reporting.Addin --- .../CodeQuality/Reporting/BaseReport.cs | 3 +- .../src/DesignableItems/ReportSettings.cs | 1 - .../src/Designer/ReportRootDesigner.cs | 75 +++++++------------ .../ReportDefinitionDeserializer.cs | 27 ++----- .../src/ReportWizard/ReportGenerator.cs | 2 +- .../Src/BaseClasses/ExtensionMethods.cs | 3 +- .../Listhandling/CollectionDataSource.cs | 4 +- .../Exporter/Visitors/ExpressionVisitor.cs | 3 +- .../Src/Expressions/ExpressionRunner.cs | 3 +- .../Expressions/Irony/Ast/AstExtensions.cs | 3 +- .../Src/Interfaces/IReportModel.cs | 2 +- .../Src/Items/ReportModel.cs | 2 +- .../Src/Items/ReportSettings.cs | 5 +- .../Src/PageBuilder/BasePageBuilder.cs | 2 +- .../Src/Wpf/PreviewViewModel.cs | 5 +- 15 files changed, 58 insertions(+), 82 deletions(-) diff --git a/src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs b/src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs index 00c55cadd0..c2799de1c2 100644 --- a/src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs +++ b/src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; @@ -41,6 +42,6 @@ namespace ICSharpCode.CodeQuality.Reporting protected List FileNames {get;private set;} - public ReportSettings ReportSettings {get;set;} + public IReportSettings ReportSettings {get;set;} } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs index 7b28c5ad8b..93fbd4606a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs @@ -13,7 +13,6 @@ using System.Drawing; using System.IO; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Interfaces; -using ICSharpCode.Reporting.Addin.Designer; namespace ICSharpCode.Reporting.Addin.DesignableItems { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs index d7da7e7886..8325066e58 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs @@ -38,8 +38,7 @@ namespace ICSharpCode.Reporting.Addin.Designer /// Description of ReportRootDesigner. /// - class ReportRootDesigner: DocumentDesigner - { + class ReportRootDesigner: DocumentDesigner{ ICollection currentSelection; IDesignerHost host; MenuCommandService menuCommandService; @@ -47,12 +46,11 @@ namespace ICSharpCode.Reporting.Addin.Designer ISelectionService selectionService; IComponentChangeService componentChangeService; List sections; - ICSharpCode.Reporting.Items.ReportSettings reportSettings; + ReportSettings reportSettings; RootReportModel rootReportModel; - void ShowMessage(Exception e) - { + void ShowMessage(Exception e){ DisplayError(e); var uiService = (IUIService)host.GetService(typeof(IUIService)); if (uiService != null) { @@ -61,15 +59,13 @@ namespace ICSharpCode.Reporting.Addin.Designer } - void InitializeGUI() - { - reportSettings = host.Container.Components[1] as ICSharpCode.Reporting.Items.ReportSettings; + void InitializeGUI(){ + reportSettings = host.Container.Components[1] as ReportSettings; InitializeRootReportModel(); } - void InitializeRootReportModel () - { + void InitializeRootReportModel (){ rootReportModel = host.Container.Components[0] as RootReportModel; rootReportModel.PageMargin = CalculateMargins(); rootReportModel.Page = new Rectangle(new Point(0,0), reportSettings.PageSize); @@ -78,16 +74,14 @@ namespace ICSharpCode.Reporting.Addin.Designer } - Margins CalculateMargins () - { + Margins CalculateMargins (){ return new Margins(reportSettings.LeftMargin,reportSettings.RightMargin, reportSettings.TopMargin,reportSettings.BottomMargin); } #region overrides - public override void Initialize(IComponent component) - { + public override void Initialize(IComponent component){ base.Initialize(component); sections = new List(); @@ -143,12 +137,12 @@ namespace ICSharpCode.Reporting.Addin.Designer this.selectionService.SelectionChanged += new EventHandler(OnSelectionChanged); } - this.host = (IDesignerHost)GetService(typeof(IDesignerHost)); + host = (IDesignerHost)GetService(typeof(IDesignerHost)); - this.menuCommandService = (MenuCommandService)host.GetService(typeof(MenuCommandService)); + menuCommandService = (MenuCommandService)host.GetService(typeof(MenuCommandService)); if (host != null) { - host.LoadComplete += new EventHandler(OnLoadComplete); + host.LoadComplete += OnLoadComplete; } //Dragdropp only allowed in Section this.Control.AllowDrop = false; @@ -162,9 +156,7 @@ namespace ICSharpCode.Reporting.Addin.Designer } - protected override void PostFilterProperties(IDictionary properties) - { - + protected override void PostFilterProperties(IDictionary properties){ TypeProviderHelper.RemoveProperties(properties); var s = new string[]{"Visible","BackColor", "Text","MaximumSize","MinimumSize", @@ -180,21 +172,19 @@ namespace ICSharpCode.Reporting.Addin.Designer #region Events - void OnSectionSizeChanged (object sender, EventArgs e) - { + void OnSectionSizeChanged (object sender, EventArgs e){ RecalculateSections(); } - void RecalculateSections() - { + void RecalculateSections(){ int locY = 50; + // disable once ConvertIfStatementToNullCoalescingExpression if (reportSettings == null) { - reportSettings = host.Container.Components[1] as ICSharpCode.Reporting.Items.ReportSettings; + reportSettings = host.Container.Components[1] as ReportSettings; } - foreach (BaseSection section in sections) - { + foreach (BaseSection section in sections){ section.Location = new Point(reportSettings.LeftMargin,locY); locY = locY + section.Size.Height + DesignerGlobals.GabBetweenSection; } @@ -203,21 +193,19 @@ namespace ICSharpCode.Reporting.Addin.Designer - void OnLoadComplete(object sender, EventArgs e) - { + void OnLoadComplete(object sender, EventArgs e){ var host = (IDesignerHost)sender; host.LoadComplete -= OnLoadComplete; InitializeGUI(); } - void OnComponentAdded(object sender, ComponentEventArgs ce) - { + void OnComponentAdded(object sender, ComponentEventArgs ce){ var section = ce.Component as BaseSection; if (section != null) { sections.Add(section); - section.SizeChanged += new EventHandler( OnSectionSizeChanged); + section.SizeChanged += OnSectionSizeChanged; foreach (Control ctrl in section.Controls) { AddToHost(ctrl); host.Container.Add(ctrl); @@ -228,8 +216,7 @@ namespace ICSharpCode.Reporting.Addin.Designer } - void AddToHost (Control ctrl) - { + void AddToHost (Control ctrl){ foreach (Control c1 in ctrl.Controls) { AddToHost (c1); } @@ -237,16 +224,15 @@ namespace ICSharpCode.Reporting.Addin.Designer } - private void OnComponentChanged(object sender, ComponentChangedEventArgs ce) - { + void OnComponentChanged(object sender, ComponentChangedEventArgs ce){ LoggingService.InfoFormatted("RootDesigner:OnComponentChanged"); var str = String.Format(CultureInfo.CurrentCulture,"RootDesigner:OnComponentChanged <{0}> from <{1}> to <{2}>",ce.Component.ToString(),ce.OldValue,ce.NewValue); LoggingService.InfoFormatted(str); var section = ce.Component as BaseSection; if (section != null) { - foreach (BaseSection s in sections) - { + foreach (BaseSection s in sections){ + if (s.Name == section.Name) { s.Size = section.Size; } @@ -256,22 +242,19 @@ namespace ICSharpCode.Reporting.Addin.Designer } - void OnComponentChanging(object sender, ComponentChangingEventArgs ce) - { + void OnComponentChanging(object sender, ComponentChangingEventArgs ce){ System.Console.WriteLine("RootDesigner:OnComponentChanging"); // Host.CreateTransaction(); } - void OnSelectionChanged(object sender, EventArgs e) - { + void OnSelectionChanged(object sender, EventArgs e){ currentSelection = ((ISelectionService)sender).GetSelectedComponents(); } #endregion - public IDesignerHost Host { get { if (this.host == null) { @@ -281,8 +264,7 @@ namespace ICSharpCode.Reporting.Addin.Designer } - public IToolboxService ToolboxService - { + public IToolboxService ToolboxService{ get { if (toolboxService == null) @@ -327,8 +309,7 @@ namespace ICSharpCode.Reporting.Addin.Designer #region Dispose - protected override void Dispose(bool disposing) - { + protected override void Dispose(bool disposing){ if (disposing) { var componentService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs index 2702a2f922..29f26dd720 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs @@ -26,7 +26,6 @@ using ICSharpCode.Core; using ICSharpCode.Reporting.Factories; using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; -using ICSharpCode.Reporting.Xml; using ICSharpCode.Reporting.Addin.XML; namespace ICSharpCode.Reporting.Addin.DesignerBinding @@ -34,8 +33,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding class ReportDefinitionDeserializer : ReportDefinitionParser { - public static XmlDocument LoadXmlFromStream(Stream stream) - { + public static XmlDocument LoadXmlFromStream(Stream stream){ if (stream == null) throw new ArgumentNullException("stream"); var xmlDocument = new XmlDocument(); @@ -48,14 +46,11 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding } - public ReportModel CreateModelFromXml(XmlElement elem,IDesignerHost host) - { + public ReportModel CreateModelFromXml(XmlElement elem,IDesignerHost host){ var reportSettings = CreateReportSettings(elem); var reportModel = ReportModelFactory.Create(); reportModel.ReportSettings = reportSettings; -// var x = new ICSharpCode.Reporting.Addin.DesignableItems.ReportSettings(); -// host.Container.Add(x); host.Container.Add(reportSettings); //Move to SectionCollection @@ -74,23 +69,17 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding } - ReportSettings CreateReportSettings(XmlElement elem) - { + IReportSettings CreateReportSettings(XmlElement elem){ XmlNodeList nodes = elem.FirstChild.ChildNodes; var reportSettingsNode = (XmlElement)nodes[0]; - var modelLoader = new ModelLoader(); -// var x = (IReportSettings)this.Load(reportSettingsNode,null); - - return modelLoader.Load(reportSettingsNode) as ReportSettings; -// return x; + return Load(reportSettingsNode,null) as IReportSettings; } - protected override Type GetTypeByName(string ns, string name) - { - var a = Assembly.GetExecutingAssembly(); - Type t = a.GetType("ICSharpCode.Reporting.Addin.DesignableItems" + "." + name); - return t; + protected override Type GetTypeByName(string ns, string name){ + var assembly = Assembly.GetExecutingAssembly(); + Type type = assembly.GetType("ICSharpCode.Reporting.Addin.DesignableItems" + "." + name); + return type; } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/ReportGenerator.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/ReportGenerator.cs index 7c69893561..0fda95f126 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/ReportGenerator.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/ReportGenerator.cs @@ -64,7 +64,7 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard } - ReportSettings GenerateBaseSettings (ReportWizardContext context) { + IReportSettings GenerateBaseSettings (ReportWizardContext context) { var pageOneContext = (PageOneContext)context.PageOneContext; var reportSettings = ReportModel.ReportSettings; reportSettings.DataModel = pageOneContext.DataModel; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs index e47c5d5f2e..aa8e1cea4c 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs @@ -20,6 +20,7 @@ using System; using System.Collections.Generic; using System.Windows; using System.Windows.Media; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; namespace ICSharpCode.Reporting.BaseClasses @@ -121,7 +122,7 @@ namespace ICSharpCode.Reporting.BaseClasses #region ReportSettings - public static int PrintableWidth (this ReportSettings reportSettings) { + public static int PrintableWidth (this IReportSettings reportSettings) { return reportSettings.PageSize.Width - reportSettings.LeftMargin - reportSettings.RightMargin; } #endregion diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs index 00feb39976..9d92a6f067 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs @@ -43,11 +43,11 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling public class CollectionDataSource:IDataSource { readonly DataCollection baseList; - readonly ReportSettings reportSettings; + readonly IReportSettings reportSettings; readonly PropertyDescriptorCollection listProperties; - public CollectionDataSource(IEnumerable list, ReportSettings reportSettings) + public CollectionDataSource(IEnumerable list, IReportSettings reportSettings) { if (list == null) throw new ArgumentNullException("list"); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs index f1dbfe3d9f..5ccae522d4 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs @@ -22,6 +22,7 @@ using System.Globalization; using ICSharpCode.Reporting.Expressions; using ICSharpCode.Reporting.Expressions.Irony; using ICSharpCode.Reporting.Expressions.Irony.Ast; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; @@ -35,7 +36,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors readonly ReportingLanguageGrammer grammar; readonly ReportingExpressionEvaluator evaluator; - public ExpressionVisitor(ReportSettings reportSettings) { + public ExpressionVisitor(IReportSettings reportSettings) { grammar = new ReportingLanguageGrammer(); evaluator = new ReportingExpressionEvaluator(grammar); evaluator.AddReportSettings(reportSettings); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs index 6d1c637aed..01c8ddfac7 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs @@ -19,6 +19,7 @@ using System.Collections.ObjectModel; using ICSharpCode.Reporting.DataManager.Listhandling; using ICSharpCode.Reporting.Exporter.Visitors; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; @@ -36,7 +37,7 @@ namespace ICSharpCode.Reporting.Expressions readonly Collection pages; readonly CollectionDataSource dataSource; - public ExpressionRunner(Collection pages,ReportSettings reportSettings,CollectionDataSource dataSource){ + public ExpressionRunner(Collection pages,IReportSettings reportSettings,CollectionDataSource dataSource){ this.pages = pages; this.dataSource = dataSource; Visitor = new ExpressionVisitor(reportSettings); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs index b18b5111e6..14c4b60a6b 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs @@ -19,6 +19,7 @@ using System; using System.Collections.Generic; using ICSharpCode.Reporting.DataManager.Listhandling; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; @@ -59,7 +60,7 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Ast } - public static void AddReportSettings (this ReportingExpressionEvaluator app,ReportSettings reportSettings) { + public static void AddReportSettings (this ReportingExpressionEvaluator app,IReportSettings reportSettings) { if (reportSettings == null) throw new ArgumentNullException("reportSettings"); app.Globals.Add("ReportSettings",reportSettings); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportModel.cs index 1160579132..ca8294b162 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportModel.cs @@ -28,7 +28,7 @@ namespace ICSharpCode.Reporting.Interfaces /// public interface IReportModel { - ReportSettings ReportSettings {get;set;} + IReportSettings ReportSettings {get;set;} Collection SectionCollection {get;} IReportContainer ReportHeader {get;} IReportContainer PageHeader {get;} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportModel.cs index ee995e3aac..a085a15853 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportModel.cs @@ -62,7 +62,7 @@ namespace ICSharpCode.Reporting.Items #endregion - public ReportSettings ReportSettings{get;set;} + public IReportSettings ReportSettings{get;set;} public Collection SectionCollection {get; private set;} } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs index f3ab6b3b34..729580347f 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs @@ -33,6 +33,7 @@ namespace ICSharpCode.Reporting.Items /// /// Description of ReportSettings. /// + /* public class ReportSettingsDesigner:ComponentDesigner { const string settingsName = "ReportSettings"; @@ -46,9 +47,9 @@ namespace ICSharpCode.Reporting.Items component.Site.Name = ReportSettingsDesigner.settingsName; } } + */ - - [Designer(typeof(ReportSettingsDesigner))] +// [Designer(typeof(ReportSettingsDesigner))] public class ReportSettings:Component,IReportSettings { diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 9e52199022..0df582b021 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -201,7 +201,7 @@ namespace ICSharpCode.Reporting.PageBuilder #region Visitors - protected void SetupExpressionRunner (ReportSettings reportsettings,CollectionDataSource dataSource){ + protected void SetupExpressionRunner (IReportSettings reportsettings,CollectionDataSource dataSource){ ExpressionRunner = new ExpressionRunner(Pages,reportsettings,dataSource); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs index d49f616d8a..5c0bc446f4 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs @@ -21,6 +21,7 @@ using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows.Documents; +using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.WpfReportViewer.Visitor; @@ -35,7 +36,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer FixedDocument document ; - public PreviewViewModel(ReportSettings reportSettings, Collection pages) + public PreviewViewModel(IReportSettings reportSettings, Collection pages) { if (pages == null) throw new ArgumentNullException("pages"); @@ -49,7 +50,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer this.Document = wpfExporter.Document; } - static FixedDocument CreateFixedDocument(ReportSettings reportSettings) + static FixedDocument CreateFixedDocument(IReportSettings reportSettings) { var document = new FixedDocument(); document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width, From 6c01997d84159d2ff961a41b02522d58247ef27b Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Fri, 29 May 2015 19:34:15 +0200 Subject: [PATCH 08/13] Add GroupColumnEditor --- .../ICSharpCode.Reporting.Addin.csproj | 1 + .../src/DesignableItems/ReportSettings.cs | 6 ++- .../src/Dialogs/GroupingCollectionEditor.cs | 47 +++++++++++++++++++ .../Src/Items/ReportSettings.cs | 34 ++++---------- 4 files changed, 60 insertions(+), 28 deletions(-) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Dialogs/GroupingCollectionEditor.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj index 286fea4f51..2e2528f3ee 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj @@ -140,6 +140,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs index 93fbd4606a..5f0c80a252 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs @@ -10,9 +10,11 @@ using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Drawing; +using System.Drawing.Design; using System.IO; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Interfaces; +using ICSharpCode.Reporting.Addin.Dialogs; namespace ICSharpCode.Reporting.Addin.DesignableItems { @@ -147,7 +149,6 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems public PushPullModel DataModel {get;set;} - // [Category("Parameters")] // [EditorAttribute ( typeof(ParameterCollectionEditor), // typeof(System.Drawing.Design.UITypeEditor) )] @@ -156,8 +157,9 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems public SortColumnCollection SortColumnsCollection {get;private set;} + [Category("Sorting/Grouping")] + [EditorAttribute ( typeof(GroupingCollectionEditor), typeof(UITypeEditor) )] public GroupColumnCollection GroupColumnsCollection {get;private set;} - } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Dialogs/GroupingCollectionEditor.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Dialogs/GroupingCollectionEditor.cs new file mode 100644 index 0000000000..648fb519f9 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Dialogs/GroupingCollectionEditor.cs @@ -0,0 +1,47 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 29.05.2015 + * Time: 19:24 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing.Design; +using ICSharpCode.Reporting.Items; + +namespace ICSharpCode.Reporting.Addin.Dialogs +{ + /// + /// Description of GroupingCollectionEditor. + /// + public class GroupingCollectionEditor:CollectionEditor + { + Type[] types; + + public GroupingCollectionEditor(Type type):base(type){ + types = new Type[] {typeof(GroupColumn)}; + } + + + protected override Type[] CreateNewItemTypes(){ + return types; + } + + + protected override object CreateInstance(Type itemType) + { +// if (itemType == typeof(SqlParameter)) { +// return new SqlParameter(); +// } + return base.CreateInstance(typeof(GroupColumn)); + } + + + public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context){ + return UITypeEditorEditStyle.Modal; + } + } +} diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs index 729580347f..4a9735d3e6 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs @@ -18,50 +18,32 @@ using System; using System.ComponentModel; -using System.ComponentModel.Design; using System.Drawing; using System.IO; - using System.Xml.Serialization; using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Interfaces; - - namespace ICSharpCode.Reporting.Items { /// /// Description of ReportSettings. /// - /* - public class ReportSettingsDesigner:ComponentDesigner - { - const string settingsName = "ReportSettings"; - public ReportSettingsDesigner() - { - } - - public override void Initialize(IComponent component) - { - base.Initialize(component); - component.Site.Name = ReportSettingsDesigner.settingsName; - } - } - */ -// [Designer(typeof(ReportSettingsDesigner))] public class ReportSettings:Component,IReportSettings { - public ReportSettings() - { + public ReportSettings(){ + this.pageSize = GlobalValues.DefaultPageSize; BaseValues(); var x = PdfSharp.PageSizeConverter.ToSize(PdfSharp.PageSize.A4); - //http://www.sizepaper.com/a-series/a4 -// http://www.sizepaper.com/american-loose - System.Drawing.Printing.PageSettings paperProp = new System.Drawing.Printing.PageSettings(); - var p = paperProp.PaperSize.PaperName.ToString(); + //http://www.sizepaper.com/a-series/a4 + //http://www.sizepaper.com/american-loose + + var paperProp = new System.Drawing.Printing.PageSettings(); + var p = paperProp.PaperSize.PaperName.ToString(); + Console.WriteLine("Set paperSize to {0}",p); } From 2d49d775e51665ec1c2f61df87f7658fa0f032bf Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Fri, 29 May 2015 20:14:28 +0200 Subject: [PATCH 09/13] Fix NullReferenceException in PushDataReport.xaml.cs --- .../src/ReportWizard/Dialog/PushDataReport.xaml.cs | 13 +++++-------- .../Src/Items/ReportSettings.cs | 5 +---- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs index 2c6dad31e3..b99024953d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs @@ -28,29 +28,28 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog List items; PushModelContext context; - public PushDataReport() - { + public PushDataReport(){ InitializeComponent(); items = new List(); _DataGrid.ItemsSource = items; this.context = new PushModelContext(); cboType.ItemsSource = GlobalLists.DataTypeList(); - Projects = GetProjects(); _projectsCbo.ItemsSource = Projects; } + IProject SelectedProject {get;set;} IModelCollection GetProjects(){ var solution = SharpDevelop.SD.ProjectService.CurrentSolution; - return solution.Projects; + return solution == null ? null : solution.Projects; } + public IModelCollection Projects {get; private set;} - IEnumerable GetTypeDefinitions() - { + IEnumerable GetTypeDefinitions(){ if (SelectedProject != null) { var compilation = SharpDevelop.SD.ParserService.GetCompilation(SelectedProject); var definitions = compilation.MainAssembly.TopLevelTypeDefinitions.Where(x => x.Properties.Any()); @@ -59,8 +58,6 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog return null; } - public IModelCollection Projects {get; private set;} - #region SolutionCombo diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs index 4a9735d3e6..6347d78e0b 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs @@ -149,10 +149,7 @@ namespace ICSharpCode.Reporting.Items [Category("Page Settings")] public Size PageSize { get { - if (!Landscape) { - return pageSize; - } - return new Size(pageSize.Height, pageSize.Width); + return !Landscape ? pageSize : new Size(pageSize.Height, pageSize.Width); } // set { pageSize = value; } } From 247d7507b5c9ccb7c458882bcec9d83aee37e6cb Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Fri, 29 May 2015 20:55:12 +0200 Subject: [PATCH 10/13] Sort and GroupColumn in Reporting.Addin --- .../ICSharpCode.Reporting.Addin.csproj | 1 + .../src/DesignableItems/Group_SortColumns.cs | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj index 2e2528f3ee..19e700f619 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj @@ -115,6 +115,7 @@ + diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs new file mode 100644 index 0000000000..2861081961 --- /dev/null +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs @@ -0,0 +1,27 @@ +/* + * Created by SharpDevelop. + * User: Peter Forstmeier + * Date: 29.05.2015 + * Time: 20:50 + * + * To change this template use Tools | Options | Coding | Edit Standard Headers. + */ +using System; +using ICSharpCode.Reporting.BaseClasses; + +namespace ICSharpCode.Reporting.Addin.DesignableItems +{ + /// + /// Description of Group_SortColumns. + /// + public class SortColumn:ICSharpCode.Reporting.Items.SortColumn + + { + + } + + public class GroupColumn:ICSharpCode.Reporting.Items.GroupColumn + { + + } +} From 85810a072b7c6aecce511a3ecda27402ae84d5ee Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Sat, 30 May 2015 17:51:59 +0200 Subject: [PATCH 11/13] Grouping, Test for DataItem.ColumnName is empty --- .../src/DesignableItems/Group_SortColumns.cs | 5 +- .../Listhandling/CollectionDataSource.cs | 3 + .../Src/Items/ReportSettings.cs | 1 - .../Src/PageBuilder/DataPageBuilder.cs | 21 ++++++- .../src/DataSource/DataSourceFixture.cs | 57 ++++++++++--------- 5 files changed, 54 insertions(+), 33 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs index 2861081961..4b0b23c3a1 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs @@ -15,13 +15,10 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems /// Description of Group_SortColumns. /// public class SortColumn:ICSharpCode.Reporting.Items.SortColumn - - { - + { } public class GroupColumn:ICSharpCode.Reporting.Items.GroupColumn { - } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs index 9d92a6f067..3e4cceafd6 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs @@ -190,6 +190,9 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling string ReadValueFromProperty (string columnName) { + if (String.IsNullOrEmpty(columnName)) { + return "Missing ColumnName"; + } var propertyPath = Current.ParsePropertyPath(columnName); try { var val = propertyPath.Evaluate(Current); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs index 6347d78e0b..b0b6c927a1 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs @@ -43,7 +43,6 @@ namespace ICSharpCode.Reporting.Items var paperProp = new System.Drawing.Printing.PageSettings(); var p = paperProp.PaperSize.PaperName.ToString(); - Console.WriteLine("Set paperSize to {0}",p); } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs index 460df6e7b9..8bcfb9f906 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -80,6 +80,7 @@ namespace ICSharpCode.Reporting.PageBuilder foreach (IGrouping grouping in DataSource.GroupedList) { var groupHeader = (BaseRowItem)CurrentSection.Items.Where(p => p.GetType() == typeof(GroupHeader)).FirstOrDefault(); + var sectionContainer = CreateContainerForSection(CurrentPage, pagePosition); DataSource.Fill(groupHeader.Items,grouping.FirstOrDefault()); @@ -105,7 +106,8 @@ namespace ICSharpCode.Reporting.PageBuilder //Childs foreach (var child in grouping) { - var dataItems = CurrentSection.Items.Where(p => p.GetType() == typeof(BaseDataItem)).ToList(); +// var dataItems = CurrentSection.Items.Where(p => p.GetType() == typeof(BaseDataItem)).ToList(); + var dataItems = ExtractDataItems(CurrentSection.Items); List convertedItems = FillAndConvert(sectionContainer, child, dataItems, converter); AdjustLocationInSection(sectionPosition, convertedItems); @@ -130,6 +132,23 @@ namespace ICSharpCode.Reporting.PageBuilder } + List ExtractDataItems (List list) { + List items = null; + foreach (var element in list) { + var gh = element as GroupHeader; + if (gh == null) { + var container = element as ReportContainer; + if (container == null) { + items = list.Where(p => p.GetType() == typeof(BaseDataItem)).ToList(); + } else { + items = container.Items.Where(p => p.GetType() == typeof(BaseDataItem)).ToList(); + } + } + } + return items; + } + + void EvaluateExpressionsInGroups(ExportContainer sectionContainer, IGrouping grouping){ ExpressionRunner.Visitor.SetCurrentDataSource(grouping); ExpressionRunner.Visitor.Visit(sectionContainer); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs index fbfaef24ea..8686fdeb19 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs @@ -130,7 +130,7 @@ namespace ICSharpCode.Reporting.Test.DataSource int i = 0; foreach (var element in collectionSource.SortedList) { collectionSource.Fill(ric,element); - Console.WriteLine("first : <{0}> Last <{1}> ",((BaseDataItem)ric[0]).DBValue,((BaseDataItem)ric[1]).DBValue); +// Console.WriteLine("first : <{0}> Last <{1}> ",((BaseDataItem)ric[0]).DBValue,((BaseDataItem)ric[1]).DBValue); Assert.That(((BaseDataItem)ric[0]).DBValue,Is.GreaterThanOrEqualTo(compare)); @@ -158,8 +158,7 @@ namespace ICSharpCode.Reporting.Test.DataSource var dataItemsCollection = CreateDataItems(); var reportsettings = new ReportSettings(); reportsettings.GroupColumnsCollection.Add( new GroupColumn("GroupItem",1,ListSortDirection.Ascending)); - //repiortsettings.GroupColumnsCollection.Add( new GroupColumn("RandomInt",1,ListSortDirection.Ascending)); - + var collectionSource = new CollectionDataSource (list,reportsettings); collectionSource.Bind(); int i = 0; @@ -168,10 +167,10 @@ namespace ICSharpCode.Reporting.Test.DataSource Console.WriteLine("Key {0} ",element.Key); foreach (var l in element) { collectionSource.Fill(dataItemsCollection,l); - Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue, - ((BaseDataItem)dataItemsCollection[1]).DBValue, - ((BaseDataItem)dataItemsCollection[2]).DBValue, - ((BaseDataItem)dataItemsCollection[3]).DBValue); +// Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue, +// ((BaseDataItem)dataItemsCollection[1]).DBValue, +// ((BaseDataItem)dataItemsCollection[2]).DBValue, +// ((BaseDataItem)dataItemsCollection[3]).DBValue); i++; } } @@ -188,7 +187,30 @@ namespace ICSharpCode.Reporting.Test.DataSource Assert.That(i,Is.EqualTo(collectionSource.Count)); } - + [Test] + public void DataItemWithNoColumnNameHasErrorMessageInDbValue() { + var baseRow = new BaseRowItem(); + var dataItem = new BaseDataItem() { + + }; + + baseRow.Items.Add(dataItem); + + var row = new System.Collections.Generic.List(); + row.Add(baseRow); + var reportSettings = new ReportSettings(); + var collectionSource = new CollectionDataSource (list,reportSettings); + collectionSource.Bind(); + foreach (var element in collectionSource.SortedList) { + collectionSource.Fill(row,element); + var r = (BaseRowItem)row[0]; + foreach (var result in r.Items) { + Assert.That(((BaseDataItem)result).DBValue.StartsWith("Missing"),Is.EqualTo(true)); + } + } + } + + [Test] public void FillDataIncludedInRow() { @@ -210,16 +232,6 @@ namespace ICSharpCode.Reporting.Test.DataSource } i ++; } - /* - do { - collectionSource.Fill(row); - var r = (BaseRowItem)row[0]; - foreach (var element in r.Items) { - Assert.That(((BaseDataItem)element).DBValue,Is.Not.Empty); - } - i ++; - }while (collectionSource.MoveNext()); - */ Assert.That(i,Is.EqualTo(collectionSource.Count)); } @@ -255,15 +267,6 @@ namespace ICSharpCode.Reporting.Test.DataSource Assert.That(res.DBValue,Is.Not.Empty); i ++; } - - /* - do { - collectionSource.Fill(row); - var res = (BaseDataItem)row.Find(c => ((BaseDataItem)c).ColumnName == "GroupItem"); - Assert.That(res.DBValue,Is.Not.Empty); - i ++; - }while (collectionSource.MoveNext()); - */ Assert.That(i,Is.EqualTo(collectionSource.Count)); } From 25a1fd9ccc5884549d7b6d81946ba48ca3def3d4 Mon Sep 17 00:00:00 2001 From: Linquize Date: Tue, 16 Jun 2015 21:20:35 +0800 Subject: [PATCH 12/13] Fix "Clear Console" not properly translated (regression of b30ac810661b056b74fda8d18375938581eb84cb) --- data/resources/StringResources.resx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx index 73c2214799..d9f7fd02b7 100644 --- a/data/resources/StringResources.resx +++ b/data/resources/StringResources.resx @@ -8276,7 +8276,7 @@ a line break Win - + Clear console From ab1b9d88ee104afdc7c4fb1c0a6fd93c2ced656c Mon Sep 17 00:00:00 2001 From: Peter Forstmeier Date: Wed, 17 Jun 2015 20:53:25 +0200 Subject: [PATCH 13/13] Expressions -> TimeSpan handling in grouped List's --- .../Irony/Imports/ImportAggregates.cs | 60 +++++++++++++------ .../Src/Globals/StandardFormatter.cs | 36 ++++++++++- .../Src/Globals/TypeHelper.cs | 4 +- .../Src/PageBuilder/BasePageBuilder.cs | 1 + .../Src/PageBuilder/DataPageBuilder.cs | 1 + .../AggregatesGroupesFixture.cs | 24 ++++---- .../src/ReportItems/TextItemFixture.cs | 32 +++++++++- 7 files changed, 121 insertions(+), 37 deletions(-) diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Imports/ImportAggregates.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Imports/ImportAggregates.cs index 9322ae4356..a5f27e4e1b 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Imports/ImportAggregates.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Imports/ImportAggregates.cs @@ -34,8 +34,6 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Imports public static IEnumerable GetDataSource (this ScriptThread thread){ return (IEnumerable)thread.App.Globals["DataSource"]; } - - } static class ImportAggregateHelper { @@ -62,35 +60,63 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Imports { public static object Sum(ScriptThread thread, AstNode[] childNodes) { double sum = 0; - var fieldName = childNodes[0].Evaluate(thread).ToString(); + object firstItem = null; + bool isTimeSpan; + var fieldName = childNodes[0].Evaluate(thread).ToString(); var dataSource = thread.GetDataSource(); - var grouped = ImportAggregateHelper.IsGrouped(dataSource); if (grouped != null) { - + var firstGroupElement = dataSource.FirstOrDefault() as IGrouping; + firstItem = firstGroupElement.FirstOrDefault(); + isTimeSpan = HandleTimeSpan(firstItem,fieldName); + double groupSum = 0; foreach (var element in grouped) { - var s = element.Sum(o => { - var v = ReadValueFromObject(fieldName, o); - return TypeNormalizer.EnsureType(v); - }); - sum = sum + s; + if (isTimeSpan) { + groupSum = element.Sum(o => {return TimeSpanSum(fieldName,o);}); + } else { + groupSum = element.Sum(o => {return SimpleSum(fieldName,o);}); + } + sum = sum + groupSum; } } else { + firstItem = dataSource.FirstOrDefault(); + isTimeSpan = HandleTimeSpan(firstItem,fieldName); + if (ImportAggregateHelper.FieldExist(dataSource.FirstOrDefault(),fieldName)) { - sum = dataSource.Sum(o => { - var v = ReadValueFromObject(fieldName, o); - return TypeNormalizer.EnsureType(v); - }); + if (isTimeSpan) { + sum = dataSource.Sum(o => {return TimeSpanSum(fieldName,o); }); + } else { + sum = dataSource.Sum(o => {return SimpleSum(fieldName,o); }); + } } } return sum.ToString(); } - - static object ReadValueFromObject(string fieldName, object currentObject) - { + + static double SimpleSum(string fromField,object current){ + var value = ReadValueFromObject(fromField, current); + return TypeNormalizer.EnsureType(value); + } + + + static double TimeSpanSum(string fromField,object current){ + var value = ReadValueFromObject(fromField, current); + var timeSpan = (TimeSpan)value; + return TypeNormalizer.EnsureType(timeSpan.Ticks); + } + + + static bool HandleTimeSpan(object firstItem,string fieldName){ + var t = ReadValueFromObject(fieldName, firstItem); + var timeSpan = t is TimeSpan; + return t is TimeSpan; + } + + + static object ReadValueFromObject(string fieldName, object currentObject){ var propertyPath = currentObject.ParsePropertyPath(fieldName); var evaluated = propertyPath.Evaluate(currentObject); return evaluated; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs index 24584d6e6c..63a391e239 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs @@ -25,19 +25,49 @@ namespace ICSharpCode.Reporting.Globals /// /// Description of StandardFormatter. /// - static class StandardFormatter + public static class StandardFormatter { public static void FormatOutput (IExportText textColumn) { if (String.IsNullOrWhiteSpace(textColumn.Text)) { return; } if (!String.IsNullOrEmpty(textColumn.FormatString)) { - TypeCode typeCode = TypeHelper.TypeCodeFromString(textColumn.DataType); - textColumn.Text = FormatItem(textColumn.Text,textColumn.FormatString,typeCode); + if (textColumn.DataType.ToLower().Contains("timespan")) { + textColumn.Text = HandleTimeSpan(textColumn.Text,textColumn.FormatString); + + } else { + TypeCode typeCode = TypeHelper.TypeCodeFromString(textColumn.DataType); + textColumn.Text = FormatItem(textColumn.Text,textColumn.FormatString,typeCode); + } } } + static string HandleTimeSpan (string valueToFormat,string toFormat) { + TimeSpan time; + + bool valid = TimeSpan.TryParseExact(valueToFormat, + "c", + CultureInfo.CurrentCulture, + out time); + if (! valid) { + var test = TimeSpan.FromTicks(Convert.ToInt64(valueToFormat)); + + if (test != null) { + valid = true; + time = test; + } else{ + var x = TimeSpan.Parse(valueToFormat.ToString(),CultureInfo.CurrentCulture); + } + } + + if (valid) { + return time.ToString("g",DateTimeFormatInfo.CurrentInfo); + } + return toFormat; + } + + static string FormatItem (string valueToFormat,string format,TypeCode typeCode) { string retValue = String.Empty; diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs index 7931164b3e..de32f50f08 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs @@ -76,9 +76,7 @@ namespace ICSharpCode.Reporting.Globals public static TypeCode TypeCodeFromString (string type) { if (type == null) type = "System.String"; - var x = Type.GetTypeCode( Type.GetType(type)); - - return x; + return Type.GetTypeCode( Type.GetType(type)); } } } diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs index 0df582b021..784c15996a 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs @@ -91,6 +91,7 @@ namespace ICSharpCode.Reporting.PageBuilder protected void BuildReportFooter(){ + var lastSection = CurrentPage.ExportedItems.Last(); CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, lastSection.Location.Y - ReportModel.ReportFooter.Size.Height - 2); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs index 8bcfb9f906..66eacf6fa5 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs @@ -48,6 +48,7 @@ namespace ICSharpCode.Reporting.PageBuilder SetupExpressionRunner(ReportModel.ReportSettings,DataSource); base.BuildExportList(); BuildDetail(); + ExpressionRunner.Visitor.SetCurrentDataSource(DataSource.CurrentList); BuildReportFooter(); AddPage(CurrentPage); UpdatePageInfo(); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests/AggregatesGroupesFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests/AggregatesGroupesFixture.cs index 247e6b43e0..f3e999156d 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests/AggregatesGroupesFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests/AggregatesGroupesFixture.cs @@ -33,7 +33,7 @@ namespace ICSharpCode.Reporting.Test.Expressions.IntegrationTests [TestFixture] public class AggregatesGroupesFixture { - Collection collection; + Collection reportItemCollection; CollectionDataSource dataSource; ContributorCollection list; ReportSettings reportSettings; @@ -44,10 +44,10 @@ namespace ICSharpCode.Reporting.Test.Expressions.IntegrationTests var visitor = new ExpressionVisitor (reportSettings); visitor.SetCurrentDataSource(dataSource.GroupedList); var script = "= sum('randomint')"; - collection[0].Text = script; - visitor.Visit(collection[0]); + reportItemCollection[0].Text = script; + visitor.Visit(reportItemCollection[0]); var result = list.Sum(x => x.RandomInt); - Assert.That(Convert.ToDouble(collection[0].Text),Is.EqualTo(result)); + Assert.That(Convert.ToDouble(reportItemCollection[0].Text),Is.EqualTo(result)); } @@ -57,8 +57,8 @@ namespace ICSharpCode.Reporting.Test.Expressions.IntegrationTests var container = new ExportContainer(); var script = "= sum('randomint')"; - collection[0].Text = script; - container.ExportedItems.AddRange(collection); + reportItemCollection[0].Text = script; + container.ExportedItems.AddRange(reportItemCollection); var visitor = new ExpressionVisitor (reportSettings); visitor.SetCurrentDataSource(dataSource.GroupedList); @@ -68,33 +68,33 @@ namespace ICSharpCode.Reporting.Test.Expressions.IntegrationTests visitor.Visit(container); var result = list.Where(k => k.GroupItem == group.Key.ToString()).Sum(x => x.RandomInt); - Assert.That(Convert.ToDouble(collection[0].Text),Is.EqualTo(result)); + Assert.That(Convert.ToDouble(reportItemCollection[0].Text),Is.EqualTo(result)); } [Test] public void SumAllGroups () { var container = new ExportContainer(); - container.ExportedItems.AddRange(collection); + container.ExportedItems.AddRange(reportItemCollection); var visitor = new ExpressionVisitor (reportSettings); visitor.SetCurrentDataSource(dataSource.GroupedList); foreach (var group in dataSource.GroupedList) { var script = "= sum('randomint')"; - collection[0].Text = script; + reportItemCollection[0].Text = script; visitor.SetCurrentDataSource(group); visitor.Visit(container); var result = list.Where(k => k.GroupItem == group.Key.ToString()).Sum(x => x.RandomInt); - Assert.That(Convert.ToDouble(collection[0].Text),Is.EqualTo(result)); + Assert.That(Convert.ToDouble(reportItemCollection[0].Text),Is.EqualTo(result)); } } [SetUp] public void CreateExportlist() { - collection = new Collection(); - collection.Add(new ExportText() + reportItemCollection = new Collection(); + reportItemCollection.Add(new ExportText() { Text = String.Empty }); diff --git a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/ReportItems/TextItemFixture.cs b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/ReportItems/TextItemFixture.cs index 3b0b1ab782..79b4279dff 100644 --- a/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/ReportItems/TextItemFixture.cs +++ b/src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/ReportItems/TextItemFixture.cs @@ -58,6 +58,34 @@ namespace ICSharpCode.Reporting.Test.ReportItems Assert.That(exportText.Size,Is.EqualTo(ti.Size)); Assert.That(exportText.Font , Is.EqualTo(GlobalValues.DefaultFont)); } - - } + + + [Test] + public void FormatTimeSpanfromTime() { + var ti = new BaseTextItem(); + ti.DataType = "System.TimeSpan"; + ti.FormatString = "hh:mm:ss"; + ti.Text = new TimeSpan(7,17,20).ToString(); + var exportColumn = (ExportText)ti.CreateExportColumn(); + StandardFormatter.FormatOutput(exportColumn); + Assert.That(ti.Text, Is.EqualTo("07:17:20")); + } + + /* + [Test] + public void FormatTimeSpanFromTicks() { + var ti = new BaseTextItem(); + ti.DataType = "System.TimeSpan"; + ti.FormatString = "hh:mm:ss"; + var x = new TimeSpan(7,17,20); + var y = x.Ticks; +// ti.Text = x.ToString(); +// TimeSpan myts = new TimeSpan(-555234423213113); +// ti.Text = myts.ToString(); + ti.Text = y.ToString(); + var exportColumn = (ExportText)ti.CreateExportColumn(); + StandardFormatter.FormatOutput(exportColumn); + } + */ + } }