Browse Source

Merge remote-tracking branch 'remotes/sd/master'

pull/690/head
jkuehner 10 years ago
parent
commit
2cdeb9dc3d
  1. 2
      data/resources/StringResources.resx
  2. 3
      src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs
  3. 2
      src/AddIns/Debugger/Debugger.Core/PdbSymbolSource.cs
  4. 38
      src/AddIns/DisplayBindings/ILSpyAddIn/DecompiledViewContent.cs
  5. 3
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs
  6. 3
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpySymbolSource.cs
  7. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj
  8. 24
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs
  9. 22
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs
  10. 75
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs
  11. 23
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs
  12. 47
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Dialogs/GroupingCollectionEditor.cs
  13. 25
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml
  14. 63
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml.cs
  15. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/ReportGenerator.cs
  16. 1
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj
  17. 22
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs
  18. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs
  19. 7
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs
  20. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Exporter/Visitors/ExpressionVisitor.cs
  21. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs
  22. 3
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs
  23. 60
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Imports/ImportAggregates.cs
  24. 36
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs
  25. 4
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs
  26. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportModel.cs
  27. 36
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportSettings.cs
  28. 2
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportModel.cs
  29. 40
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs
  30. 22
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs
  31. 7
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs
  32. 22
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs
  33. 5
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs
  34. 18
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/Visitor/WpfVisitor.cs
  35. 57
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/DataSource/DataSourceFixture.cs
  36. 24
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/Expressions/IntegrationTests/AggregatesGroupesFixture.cs
  37. 10
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/MeasureArrange/ContainerArrangeStrategyFixture.cs
  38. 32
      src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Test/ICSharpCode.Reporting.Test/src/ReportItems/TextItemFixture.cs

2
data/resources/StringResources.resx

@ -8276,7 +8276,7 @@ a line break</value>
<data name="Global.Shortcuts.Win" xml:space="preserve"> <data name="Global.Shortcuts.Win" xml:space="preserve">
<value>Win</value> <value>Win</value>
</data> </data>
<data name="AddIns.Debugger.Console.Clear" xml:space="preserve"> <data name="AddIns.Debugger.Console.ClearConsole" xml:space="preserve">
<value>Clear console</value> <value>Clear console</value>
</data> </data>
<data name="AddIns.Debugger.Console.DeleteHistory" xml:space="preserve"> <data name="AddIns.Debugger.Console.DeleteHistory" xml:space="preserve">

3
src/AddIns/Analysis/CodeQuality/Reporting/BaseReport.cs

@ -18,6 +18,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
@ -41,6 +42,6 @@ namespace ICSharpCode.CodeQuality.Reporting
protected List<string> FileNames {get;private set;} protected List<string> FileNames {get;private set;}
public ReportSettings ReportSettings {get;set;} public IReportSettings ReportSettings {get;set;}
} }
} }

2
src/AddIns/Debugger/Debugger.Core/PdbSymbolSource.cs

@ -256,7 +256,7 @@ namespace Debugger
var s = seqPoints[i]; var s = seqPoints[i];
if (s.ContainsLocation(line, column)) if (s.ContainsLocation(line, column))
return s; return s;
if (s.StartLine > line) if (s.StartLine > line || (s.StartLine == line && s.StartColumn > column))
return s; return s;
} }
return null; return null;

38
src/AddIns/DisplayBindings/ILSpyAddIn/DecompiledViewContent.cs

@ -27,6 +27,7 @@ using ICSharpCode.AvalonEdit.AddIn;
using ICSharpCode.AvalonEdit.Highlighting; using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Decompiler; using ICSharpCode.Decompiler;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.ILSpyAddIn; using ICSharpCode.ILSpyAddIn;
using ICSharpCode.NRefactory; using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
@ -39,12 +40,13 @@ namespace ICSharpCode.ILSpyAddIn
/// <summary> /// <summary>
/// Hosts a decompiled type. /// Hosts a decompiled type.
/// </summary> /// </summary>
class DecompiledViewContent : AbstractViewContentWithoutFile class DecompiledViewContent : AbstractViewContentWithoutFile, IPositionable
{ {
/// <summary> /// <summary>
/// Entity to jump to once decompilation has finished. /// Entity to jump to once decompilation has finished.
/// </summary> /// </summary>
string jumpToEntityIdStringWhenDecompilationFinished; string jumpToEntityIdStringWhenDecompilationFinished;
int jumpToLineWhenDecompilationFinished, jumpToColumnWhenDecompilationFinished;
bool decompilationFinished; bool decompilationFinished;
@ -72,6 +74,9 @@ namespace ICSharpCode.ILSpyAddIn
this.codeEditor.FileName = this.DecompiledTypeName.ToFileName(); this.codeEditor.FileName = this.DecompiledTypeName.ToFileName();
this.codeEditor.ActiveTextEditor.IsReadOnly = true; this.codeEditor.ActiveTextEditor.IsReadOnly = true;
this.codeEditor.ActiveTextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#"); this.codeEditor.ActiveTextEditor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
this.Services.RemoveService(typeof(IPositionable));
this.Services.AddService(typeof(IPositionable), this);
} }
#endregion #endregion
@ -169,7 +174,10 @@ namespace ICSharpCode.ILSpyAddIn
codeEditor.Document.UndoStack.ClearAll(); codeEditor.Document.UndoStack.ClearAll();
this.decompilationFinished = true; this.decompilationFinished = true;
JumpToEntity(this.jumpToEntityIdStringWhenDecompilationFinished); if (!string.IsNullOrEmpty(jumpToEntityIdStringWhenDecompilationFinished))
JumpToEntity(this.jumpToEntityIdStringWhenDecompilationFinished);
else
JumpTo(jumpToLineWhenDecompilationFinished, jumpToColumnWhenDecompilationFinished);
// update UI // update UI
//UpdateIconMargin(); //UpdateIconMargin();
@ -228,5 +236,31 @@ namespace ICSharpCode.ILSpyAddIn
} }
#endregion #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
} }
} }

3
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs

@ -31,6 +31,7 @@ using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom.ClassBrowser; using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.Search; using ICSharpCode.SharpDevelop.Editor.Search;
using ICSharpCode.SharpDevelop.Parser; using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
@ -48,7 +49,7 @@ namespace ICSharpCode.ILSpyAddIn
return fileName != null && fileName.StartsWith("ilspy://", StringComparison.OrdinalIgnoreCase); 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) public ITextSource GetFileContent(FileName fileName)
{ {

3
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpySymbolSource.cs

@ -29,7 +29,8 @@ namespace ICSharpCode.ILSpyAddIn
var typeName = DecompiledTypeReference.FromTypeDefinition(method.DeclaringTypeDefinition); var typeName = DecompiledTypeReference.FromTypeDefinition(method.DeclaringTypeDefinition);
if (typeName == null) return null; if (typeName == null) return null;
SD.Log.DebugFormatted("GetSymbols for: {0}", typeName.ToFileName()); 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) public Debugger.SequencePoint GetSequencePoint(IMethod method, int iloffset)

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/ICSharpCode.Reporting.Addin.csproj

@ -115,6 +115,7 @@
<Compile Include="src\DesignableItems\BaseSection.cs" /> <Compile Include="src\DesignableItems\BaseSection.cs" />
<Compile Include="src\DesignableItems\BaseTextItem.cs" /> <Compile Include="src\DesignableItems\BaseTextItem.cs" />
<Compile Include="src\DesignableItems\BaseDataItem.cs" /> <Compile Include="src\DesignableItems\BaseDataItem.cs" />
<Compile Include="src\DesignableItems\Group_SortColumns.cs" />
<Compile Include="src\DesignableItems\ReportSettings.cs" /> <Compile Include="src\DesignableItems\ReportSettings.cs" />
<Compile Include="src\DesignerBinding\DesignerBinding.cs" /> <Compile Include="src\DesignerBinding\DesignerBinding.cs" />
<Compile Include="src\DesignerBinding\DesignerGenerator.cs" /> <Compile Include="src\DesignerBinding\DesignerGenerator.cs" />
@ -140,6 +141,7 @@
</Compile> </Compile>
<Compile Include="src\Dialogs\ExpressionEditor.cs" /> <Compile Include="src\Dialogs\ExpressionEditor.cs" />
<Compile Include="src\Dialogs\FormatStringConverter.cs" /> <Compile Include="src\Dialogs\FormatStringConverter.cs" />
<Compile Include="src\Dialogs\GroupingCollectionEditor.cs" />
<Compile Include="src\Dialogs\IStringBasedEditorDialog.cs" /> <Compile Include="src\Dialogs\IStringBasedEditorDialog.cs" />
<Compile Include="src\Factory\CreateFormSheetFromModel.cs" /> <Compile Include="src\Factory\CreateFormSheetFromModel.cs" />
<Compile Include="src\Globals\DesignerGlobals.cs" /> <Compile Include="src\Globals\DesignerGlobals.cs" />

24
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/Group_SortColumns.cs

@ -0,0 +1,24 @@
/*
* 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
{
/// <summary>
/// Description of Group_SortColumns.
/// </summary>
public class SortColumn:ICSharpCode.Reporting.Items.SortColumn
{
}
public class GroupColumn:ICSharpCode.Reporting.Items.GroupColumn
{
}
}

22
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignableItems/ReportSettings.cs

@ -8,16 +8,30 @@
*/ */
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing; using System.Drawing;
using System.Drawing.Design;
using System.IO; using System.IO;
using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Globals;
using ICSharpCode.Reporting.Addin.Designer; using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Addin.Dialogs;
namespace ICSharpCode.Reporting.Addin.DesignableItems 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))] [Designer(typeof(ReportSettingsDesigner))]
public class ReportSettings:Component public class ReportSettings:Component,IReportSettings
{ {
public ReportSettings() public ReportSettings()
@ -135,7 +149,6 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems
public PushPullModel DataModel {get;set;} public PushPullModel DataModel {get;set;}
// [Category("Parameters")] // [Category("Parameters")]
// [EditorAttribute ( typeof(ParameterCollectionEditor), // [EditorAttribute ( typeof(ParameterCollectionEditor),
// typeof(System.Drawing.Design.UITypeEditor) )] // typeof(System.Drawing.Design.UITypeEditor) )]
@ -144,8 +157,9 @@ namespace ICSharpCode.Reporting.Addin.DesignableItems
public SortColumnCollection SortColumnsCollection {get;private set;} public SortColumnCollection SortColumnsCollection {get;private set;}
[Category("Sorting/Grouping")]
[EditorAttribute ( typeof(GroupingCollectionEditor), typeof(UITypeEditor) )]
public GroupColumnCollection GroupColumnsCollection {get;private set;} public GroupColumnCollection GroupColumnsCollection {get;private set;}
} }
} }

75
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/Designer/ReportRootDesigner.cs

@ -38,8 +38,7 @@ namespace ICSharpCode.Reporting.Addin.Designer
/// Description of ReportRootDesigner. /// Description of ReportRootDesigner.
/// </summary> /// </summary>
class ReportRootDesigner: DocumentDesigner class ReportRootDesigner: DocumentDesigner{
{
ICollection currentSelection; ICollection currentSelection;
IDesignerHost host; IDesignerHost host;
MenuCommandService menuCommandService; MenuCommandService menuCommandService;
@ -47,12 +46,11 @@ namespace ICSharpCode.Reporting.Addin.Designer
ISelectionService selectionService; ISelectionService selectionService;
IComponentChangeService componentChangeService; IComponentChangeService componentChangeService;
List<BaseSection> sections; List<BaseSection> sections;
ICSharpCode.Reporting.Items.ReportSettings reportSettings; ReportSettings reportSettings;
RootReportModel rootReportModel; RootReportModel rootReportModel;
void ShowMessage(Exception e) void ShowMessage(Exception e){
{
DisplayError(e); DisplayError(e);
var uiService = (IUIService)host.GetService(typeof(IUIService)); var uiService = (IUIService)host.GetService(typeof(IUIService));
if (uiService != null) { if (uiService != null) {
@ -61,15 +59,13 @@ namespace ICSharpCode.Reporting.Addin.Designer
} }
void InitializeGUI() void InitializeGUI(){
{ reportSettings = host.Container.Components[1] as ReportSettings;
reportSettings = host.Container.Components[1] as ICSharpCode.Reporting.Items.ReportSettings;
InitializeRootReportModel(); InitializeRootReportModel();
} }
void InitializeRootReportModel () void InitializeRootReportModel (){
{
rootReportModel = host.Container.Components[0] as RootReportModel; rootReportModel = host.Container.Components[0] as RootReportModel;
rootReportModel.PageMargin = CalculateMargins(); rootReportModel.PageMargin = CalculateMargins();
rootReportModel.Page = new Rectangle(new Point(0,0), reportSettings.PageSize); 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, return new Margins(reportSettings.LeftMargin,reportSettings.RightMargin,
reportSettings.TopMargin,reportSettings.BottomMargin); reportSettings.TopMargin,reportSettings.BottomMargin);
} }
#region overrides #region overrides
public override void Initialize(IComponent component) public override void Initialize(IComponent component){
{
base.Initialize(component); base.Initialize(component);
sections = new List<BaseSection>(); sections = new List<BaseSection>();
@ -143,12 +137,12 @@ namespace ICSharpCode.Reporting.Addin.Designer
this.selectionService.SelectionChanged += new EventHandler(OnSelectionChanged); 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) if (host != null)
{ {
host.LoadComplete += new EventHandler(OnLoadComplete); host.LoadComplete += OnLoadComplete;
} }
//Dragdropp only allowed in Section //Dragdropp only allowed in Section
this.Control.AllowDrop = false; 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); TypeProviderHelper.RemoveProperties(properties);
var s = new string[]{"Visible","BackColor", var s = new string[]{"Visible","BackColor",
"Text","MaximumSize","MinimumSize", "Text","MaximumSize","MinimumSize",
@ -180,21 +172,19 @@ namespace ICSharpCode.Reporting.Addin.Designer
#region Events #region Events
void OnSectionSizeChanged (object sender, EventArgs e) void OnSectionSizeChanged (object sender, EventArgs e){
{
RecalculateSections(); RecalculateSections();
} }
void RecalculateSections() void RecalculateSections(){
{
int locY = 50; int locY = 50;
// disable once ConvertIfStatementToNullCoalescingExpression
if (reportSettings == null) { 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); section.Location = new Point(reportSettings.LeftMargin,locY);
locY = locY + section.Size.Height + DesignerGlobals.GabBetweenSection; 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; var host = (IDesignerHost)sender;
host.LoadComplete -= OnLoadComplete; host.LoadComplete -= OnLoadComplete;
InitializeGUI(); InitializeGUI();
} }
void OnComponentAdded(object sender, ComponentEventArgs ce) void OnComponentAdded(object sender, ComponentEventArgs ce){
{
var section = ce.Component as BaseSection; var section = ce.Component as BaseSection;
if (section != null) { if (section != null) {
sections.Add(section); sections.Add(section);
section.SizeChanged += new EventHandler( OnSectionSizeChanged); section.SizeChanged += OnSectionSizeChanged;
foreach (Control ctrl in section.Controls) { foreach (Control ctrl in section.Controls) {
AddToHost(ctrl); AddToHost(ctrl);
host.Container.Add(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) { foreach (Control c1 in ctrl.Controls) {
AddToHost (c1); 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"); LoggingService.InfoFormatted("RootDesigner:OnComponentChanged");
var str = String.Format(CultureInfo.CurrentCulture,"RootDesigner:OnComponentChanged <{0}> from <{1}> to <{2}>",ce.Component.ToString(),ce.OldValue,ce.NewValue); var str = String.Format(CultureInfo.CurrentCulture,"RootDesigner:OnComponentChanged <{0}> from <{1}> to <{2}>",ce.Component.ToString(),ce.OldValue,ce.NewValue);
LoggingService.InfoFormatted(str); LoggingService.InfoFormatted(str);
var section = ce.Component as BaseSection; var section = ce.Component as BaseSection;
if (section != null) { if (section != null) {
foreach (BaseSection s in sections) foreach (BaseSection s in sections){
{
if (s.Name == section.Name) { if (s.Name == section.Name) {
s.Size = section.Size; 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"); System.Console.WriteLine("RootDesigner:OnComponentChanging");
// Host.CreateTransaction(); // Host.CreateTransaction();
} }
void OnSelectionChanged(object sender, EventArgs e) void OnSelectionChanged(object sender, EventArgs e){
{
currentSelection = ((ISelectionService)sender).GetSelectedComponents(); currentSelection = ((ISelectionService)sender).GetSelectedComponents();
} }
#endregion #endregion
public IDesignerHost Host { public IDesignerHost Host {
get { get {
if (this.host == null) { if (this.host == null) {
@ -281,8 +264,7 @@ namespace ICSharpCode.Reporting.Addin.Designer
} }
public IToolboxService ToolboxService public IToolboxService ToolboxService{
{
get get
{ {
if (toolboxService == null) if (toolboxService == null)
@ -327,8 +309,7 @@ namespace ICSharpCode.Reporting.Addin.Designer
#region Dispose #region Dispose
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing){
{
if (disposing) if (disposing)
{ {
var componentService = (IComponentChangeService)GetService(typeof(IComponentChangeService)); var componentService = (IComponentChangeService)GetService(typeof(IComponentChangeService));

23
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/DesignerBinding/ReportDefinitionDeserializer.cs

@ -24,8 +24,8 @@ using System.Xml;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.Reporting.Factories; using ICSharpCode.Reporting.Factories;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.Xml;
using ICSharpCode.Reporting.Addin.XML; using ICSharpCode.Reporting.Addin.XML;
namespace ICSharpCode.Reporting.Addin.DesignerBinding namespace ICSharpCode.Reporting.Addin.DesignerBinding
@ -33,8 +33,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding
class ReportDefinitionDeserializer : ReportDefinitionParser class ReportDefinitionDeserializer : ReportDefinitionParser
{ {
public static XmlDocument LoadXmlFromStream(Stream stream) public static XmlDocument LoadXmlFromStream(Stream stream){
{
if (stream == null) if (stream == null)
throw new ArgumentNullException("stream"); throw new ArgumentNullException("stream");
var xmlDocument = new XmlDocument(); var xmlDocument = new XmlDocument();
@ -47,8 +46,7 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding
} }
public ReportModel CreateModelFromXml(XmlElement elem,IDesignerHost host) public ReportModel CreateModelFromXml(XmlElement elem,IDesignerHost host){
{
var reportSettings = CreateReportSettings(elem); var reportSettings = CreateReportSettings(elem);
var reportModel = ReportModelFactory.Create(); var reportModel = ReportModelFactory.Create();
reportModel.ReportSettings = reportSettings; reportModel.ReportSettings = reportSettings;
@ -71,20 +69,17 @@ namespace ICSharpCode.Reporting.Addin.DesignerBinding
} }
static ReportSettings CreateReportSettings(XmlElement elem) IReportSettings CreateReportSettings(XmlElement elem){
{
XmlNodeList nodes = elem.FirstChild.ChildNodes; XmlNodeList nodes = elem.FirstChild.ChildNodes;
var reportSettingsNode = (XmlElement)nodes[0]; var reportSettingsNode = (XmlElement)nodes[0];
var modelLoader = new ModelLoader(); return Load(reportSettingsNode,null) as IReportSettings;
return modelLoader.Load(reportSettingsNode) as ReportSettings;
} }
protected override Type GetTypeByName(string ns, string name) protected override Type GetTypeByName(string ns, string name){
{ var assembly = Assembly.GetExecutingAssembly();
var a = Assembly.GetExecutingAssembly(); Type type = assembly.GetType("ICSharpCode.Reporting.Addin.DesignableItems" + "." + name);
Type t = a.GetType("ICSharpCode.Reporting.Addin.DesignableItems" + "." + name); return type;
return t;
} }
} }
} }

47
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
{
/// <summary>
/// Description of GroupingCollectionEditor.
/// </summary>
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;
}
}
}

25
src/AddIns/Misc/Reporting/ICSharpCode.Reporting.Addin/src/ReportWizard/Dialog/PushDataReport.xaml

@ -1,4 +1,4 @@
<xctk:WizardPage x:Class="ICSharpCode.Reporting.Addin.ReportWizard.Dialog.PushDataReport" <xctk:WizardPage x:Class="ICSharpCode.Reporting.Addin.ReportWizard.Dialog.PushDataReport"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
@ -12,7 +12,7 @@
CanSelectPreviousPage="true" CanSelectPreviousPage="true"
CanSelectNextPage="false"> CanSelectNextPage="false">
<Grid ShowGridLines="True"> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition>
@ -20,21 +20,30 @@
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="30"></RowDefinition> <RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition> <RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="200"></RowDefinition> <RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="30"></RowDefinition>
<RowDefinition Height="150"></RowDefinition>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<TextBlock Name="_projTxt" Text="{core:Localize SharpReport.Wizard.PushModel.SelectProject}" <!-- Seelct project in Solution -->
<TextBlock Text="Select Project" FontSize="15" ></TextBlock>
<ComboBox Name="_projectsCbo" Grid.Row="1" SelectionChanged="_pro_SelectionChanged"></ComboBox>
<!-- Select Type from Solution -->
<TextBlock Name="_projTxt" Grid.Row="3" Visibility="Hidden" Text="{core:Localize SharpReport.Wizard.PushModel.SelectProject}"
FontSize="15" ></TextBlock> FontSize="15" ></TextBlock>
<ComboBox Name="_cboTypes" Grid.Row="4" Visibility="Hidden" SelectionChanged="_cboTypes_SelectionChanged" MinWidth="150" ></ComboBox>
<ComboBox Name="_cboTypes" Visibility="Hidden" Grid.Row="1" SelectionChanged="_cboTypes_SelectionChanged" MinWidth="150" ></ComboBox> <TextBlock Name="_availTxt" Visibility="Hidden" Text="{core:Localize SharpReport.Wizard.PushModel.AvailableFields}" FontSize="15" Grid.Column ="1" Margin="15,0,0,0"></TextBlock>
<TextBlock Name="_availTxt" Visibility="Hidden " Text="{core:Localize SharpReport.Wizard.PushModel.AvailableFields}" FontSize="15" Grid.Column ="1" Margin="15,0,0,0"></TextBlock>
<DataGrid Name="_DataGrid" <DataGrid Name="_DataGrid"
ItemsSource="{Binding}" ItemsSource="{Binding}"
CanUserAddRows="True" CanUserAddRows="True"
CanUserDeleteRows="True" CanUserDeleteRows="True"
AutoGenerateColumns="False" Grid.Row="2" Grid.RowSpan="2" Margin="5,10,30,5" Width="400" Grid.Column="1"> AutoGenerateColumns="False" Grid.Row="1" Grid.RowSpan="5" Margin="5,10,30,5" Width="400" Grid.Column="1">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="ColumnName" Binding="{Binding ColumnName}" Width="200"></DataGridTextColumn> <DataGridTextColumn Header="ColumnName" Binding="{Binding ColumnName}" Width="200"></DataGridTextColumn>
<DataGridComboBoxColumn Header="DataType" x:Name="cboType" SelectedItemBinding="{Binding DataTypeName}" Width="*"></DataGridComboBoxColumn> <DataGridComboBoxColumn Header="DataType" x:Name="cboType" SelectedItemBinding="{Binding DataTypeName}" Width="*"></DataGridComboBoxColumn>

63
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.Core;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.Reporting.BaseClasses; using ICSharpCode.Reporting.BaseClasses;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using Xceed.Wpf.Toolkit; using Xceed.Wpf.Toolkit;
using ICSharpCode.Reporting.Addin.Globals; using ICSharpCode.Reporting.Addin.Globals;
using ICSharpCode.Reporting.Addin.ReportWizard.ViewModels; using ICSharpCode.Reporting.Addin.ReportWizard.ViewModels;
@ -26,47 +28,71 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog
List<AbstractColumn> items; List<AbstractColumn> items;
PushModelContext context; PushModelContext context;
public PushDataReport() public PushDataReport(){
{
InitializeComponent(); InitializeComponent();
items = new List<AbstractColumn>(); items = new List<AbstractColumn>();
_DataGrid.ItemsSource = items; _DataGrid.ItemsSource = items;
this.context = new PushModelContext(); this.context = new PushModelContext();
cboType.ItemsSource = GlobalLists.DataTypeList(); cboType.ItemsSource = GlobalLists.DataTypeList();
Projects = GetProjects();
_projectsCbo.ItemsSource = Projects;
}
IProject SelectedProject {get;set;}
IModelCollection<IProject> GetProjects(){
var solution = SharpDevelop.SD.ProjectService.CurrentSolution;
return solution == null ? null : solution.Projects;
}
public IModelCollection<IProject> Projects {get; private set;}
IEnumerable<ITypeDefinition> GetTypeDefinitions(){
if (SelectedProject != null) {
var compilation = SharpDevelop.SD.ParserService.GetCompilation(SelectedProject);
var definitions = compilation.MainAssembly.TopLevelTypeDefinitions.Where(x => x.Properties.Any());
return definitions;
}
return null;
}
#region SolutionCombo
void _pro_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){
SelectedProject = (IProject)e.AddedItems[0];
var definitions = GetTypeDefinitions(); var definitions = GetTypeDefinitions();
if (definitions.Any()) { if (definitions.Any()) {
_cboTypes.Visibility = System.Windows.Visibility.Visible; _cboTypes.Visibility = System.Windows.Visibility.Visible;
_availTxt.Visibility = System.Windows.Visibility.Visible; _availTxt.Visibility = System.Windows.Visibility.Visible;
_projTxt.Visibility = System.Windows.Visibility.Visible;
_cboTypes.ItemsSource = definitions; _cboTypes.ItemsSource = definitions;
_cboTypes.SelectedIndex = 0; _cboTypes.SelectedIndex = 0;
} else { } else {
var data = new AbstractColumn("MyColumn", typeof(string)); var data = new AbstractColumn("MyColumn", typeof(string));
items.Add(data); items.Add(data);
_projTxt.Text = ResourceService.GetString("SharpReport.Wizard.PushModel.NoProject"); _projTxt.Text = ResourceService.GetString("SharpReport.Wizard.PushModel.NoProject");
} }
} }
static IEnumerable<ITypeDefinition> 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;
}
#endregion
#region Combo #region Classes Combo
void _cboTypes_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){ void _cboTypes_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e){
if (e.AddedItems.Count > 0) {
var typeDefinition = (ITypeDefinition)e.AddedItems[0]; var typeDefinition = (ITypeDefinition)e.AddedItems[0];
var itemsList = CreateItemsSource(typeDefinition); var itemsList = CreateItemsSource(typeDefinition);
if (itemsList.Count > 0) { if (itemsList.Count > 0) {
_DataGrid.ItemsSource = itemsList; _DataGrid.ItemsSource = itemsList;
}
} }
} }
#endregion
static List<AbstractColumn> CreateItemsSource(ITypeDefinition typeDefinitions){ static List<AbstractColumn> CreateItemsSource(ITypeDefinition typeDefinitions){
return typeDefinitions.Properties.Select(p => new AbstractColumn(){ return typeDefinitions.Properties.Select(p => new AbstractColumn(){
@ -74,7 +100,7 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog
DataTypeName = p.ReturnType.ReflectionName DataTypeName = p.ReturnType.ReflectionName
}).ToList(); }).ToList();
} }
#endregion
void UpdateContext(){ void UpdateContext(){
context.Items = (List<AbstractColumn>)_DataGrid.ItemsSource; context.Items = (List<AbstractColumn>)_DataGrid.ItemsSource;
@ -93,6 +119,7 @@ namespace ICSharpCode.Reporting.Addin.ReportWizard.Dialog
public WizardPageType ReportPageType { public WizardPageType ReportPageType {
get {return WizardPageType.PushModelPage;} get {return WizardPageType.PushModelPage;}
} }
#endregion #endregion
} }

2
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 pageOneContext = (PageOneContext)context.PageOneContext;
var reportSettings = ReportModel.ReportSettings; var reportSettings = ReportModel.ReportSettings;
reportSettings.DataModel = pageOneContext.DataModel; reportSettings.DataModel = pageOneContext.DataModel;

1
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/ICSharpCode.Reporting.csproj

@ -138,6 +138,7 @@
<Compile Include="Src\Interfaces\IPrintableObject.cs" /> <Compile Include="Src\Interfaces\IPrintableObject.cs" />
<Compile Include="Src\Interfaces\IReportContainer.cs" /> <Compile Include="Src\Interfaces\IReportContainer.cs" />
<Compile Include="Src\Interfaces\IReportCreator.cs" /> <Compile Include="Src\Interfaces\IReportCreator.cs" />
<Compile Include="Src\Interfaces\IReportSettings.cs" />
<Compile Include="Src\Items\BaseDataItem.cs" /> <Compile Include="Src\Items\BaseDataItem.cs" />
<Compile Include="Src\Items\BaseGroupHeader.cs" /> <Compile Include="Src\Items\BaseGroupHeader.cs" />
<Compile Include="Src\Items\BaseRowItem.cs" /> <Compile Include="Src\Items\BaseRowItem.cs" />

22
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Arrange/ArrangeStrategy.cs

@ -39,18 +39,32 @@ namespace ICSharpCode.Reporting.Arrange
if (exportColumn == null) if (exportColumn == null)
throw new ArgumentNullException("exportColumn"); throw new ArgumentNullException("exportColumn");
var container = exportColumn as IExportContainer; var container = exportColumn as IExportContainer;
if ((container != null) && (container.ExportedItems.Count > 0)) { if ((container != null) && (container.ExportedItems.Any())) {
List<IExportColumn> canGrowItems = CreateCanGrowList(container); List<IExportColumn> canGrowItems = CreateCanGrowList(container);
if (canGrowItems.Count > 0) { if (canGrowItems.Any()) {
var containerSize = ArrangeInternal(container); var containerSize = ArrangeInternal(container);
if (containerSize.Height > container.DesiredSize.Height) { if (containerSize.Height > container.DesiredSize.Height) {
container.DesiredSize = new Size(containerSize.Width,containerSize.Height); container.DesiredSize = new Size(containerSize.Width,containerSize.Height + 15);
} }
} }
} }
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);
}
}
}
} }
static Size ArrangeInternal(IExportContainer container){ static Size ArrangeInternal(IExportContainer container){
var containerRectangle = container.DisplayRectangle; var containerRectangle = container.DisplayRectangle;

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/BaseClasses/ExtensionMethods.cs

@ -20,6 +20,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows; using System.Windows;
using System.Windows.Media; using System.Windows.Media;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
namespace ICSharpCode.Reporting.BaseClasses namespace ICSharpCode.Reporting.BaseClasses
@ -121,7 +122,7 @@ namespace ICSharpCode.Reporting.BaseClasses
#region ReportSettings #region ReportSettings
public static int PrintableWidth (this ReportSettings reportSettings) { public static int PrintableWidth (this IReportSettings reportSettings) {
return reportSettings.PageSize.Width - reportSettings.LeftMargin - reportSettings.RightMargin; return reportSettings.PageSize.Width - reportSettings.LeftMargin - reportSettings.RightMargin;
} }
#endregion #endregion

7
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/DataManager/Listhandling/CollectionDataSource.cs

@ -43,11 +43,11 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
public class CollectionDataSource:IDataSource public class CollectionDataSource:IDataSource
{ {
readonly DataCollection<object> baseList; readonly DataCollection<object> baseList;
readonly ReportSettings reportSettings; readonly IReportSettings reportSettings;
readonly PropertyDescriptorCollection listProperties; readonly PropertyDescriptorCollection listProperties;
public CollectionDataSource(IEnumerable list, ReportSettings reportSettings) public CollectionDataSource(IEnumerable list, IReportSettings reportSettings)
{ {
if (list == null) if (list == null)
throw new ArgumentNullException("list"); throw new ArgumentNullException("list");
@ -190,6 +190,9 @@ namespace ICSharpCode.Reporting.DataManager.Listhandling
string ReadValueFromProperty (string columnName) { string ReadValueFromProperty (string columnName) {
if (String.IsNullOrEmpty(columnName)) {
return "Missing ColumnName";
}
var propertyPath = Current.ParsePropertyPath(columnName); var propertyPath = Current.ParsePropertyPath(columnName);
try { try {
var val = propertyPath.Evaluate(Current); var val = propertyPath.Evaluate(Current);

3
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;
using ICSharpCode.Reporting.Expressions.Irony; using ICSharpCode.Reporting.Expressions.Irony;
using ICSharpCode.Reporting.Expressions.Irony.Ast; using ICSharpCode.Reporting.Expressions.Irony.Ast;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -35,7 +36,7 @@ namespace ICSharpCode.Reporting.Exporter.Visitors
readonly ReportingLanguageGrammer grammar; readonly ReportingLanguageGrammer grammar;
readonly ReportingExpressionEvaluator evaluator; readonly ReportingExpressionEvaluator evaluator;
public ExpressionVisitor(ReportSettings reportSettings) { public ExpressionVisitor(IReportSettings reportSettings) {
grammar = new ReportingLanguageGrammer(); grammar = new ReportingLanguageGrammer();
evaluator = new ReportingExpressionEvaluator(grammar); evaluator = new ReportingExpressionEvaluator(grammar);
evaluator.AddReportSettings(reportSettings); evaluator.AddReportSettings(reportSettings);

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/ExpressionRunner.cs

@ -19,6 +19,7 @@
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using ICSharpCode.Reporting.DataManager.Listhandling; using ICSharpCode.Reporting.DataManager.Listhandling;
using ICSharpCode.Reporting.Exporter.Visitors; using ICSharpCode.Reporting.Exporter.Visitors;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
@ -36,7 +37,7 @@ namespace ICSharpCode.Reporting.Expressions
readonly Collection<ExportPage> pages; readonly Collection<ExportPage> pages;
readonly CollectionDataSource dataSource; readonly CollectionDataSource dataSource;
public ExpressionRunner(Collection<ExportPage> pages,ReportSettings reportSettings,CollectionDataSource dataSource){ public ExpressionRunner(Collection<ExportPage> pages,IReportSettings reportSettings,CollectionDataSource dataSource){
this.pages = pages; this.pages = pages;
this.dataSource = dataSource; this.dataSource = dataSource;
Visitor = new ExpressionVisitor(reportSettings); Visitor = new ExpressionVisitor(reportSettings);

3
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Expressions/Irony/Ast/AstExtensions.cs

@ -19,6 +19,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Reporting.DataManager.Listhandling; using ICSharpCode.Reporting.DataManager.Listhandling;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; 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) if (reportSettings == null)
throw new ArgumentNullException("reportSettings"); throw new ArgumentNullException("reportSettings");
app.Globals.Add("ReportSettings",reportSettings); app.Globals.Add("ReportSettings",reportSettings);

60
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<object> GetDataSource (this ScriptThread thread){ public static IEnumerable<object> GetDataSource (this ScriptThread thread){
return (IEnumerable<object>)thread.App.Globals["DataSource"]; return (IEnumerable<object>)thread.App.Globals["DataSource"];
} }
} }
static class ImportAggregateHelper { static class ImportAggregateHelper {
@ -62,35 +60,63 @@ namespace ICSharpCode.Reporting.Expressions.Irony.Imports
{ {
public static object Sum(ScriptThread thread, AstNode[] childNodes) { public static object Sum(ScriptThread thread, AstNode[] childNodes) {
double sum = 0; 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 dataSource = thread.GetDataSource();
var grouped = ImportAggregateHelper.IsGrouped(dataSource); var grouped = ImportAggregateHelper.IsGrouped(dataSource);
if (grouped != null) { if (grouped != null) {
var firstGroupElement = dataSource.FirstOrDefault() as IGrouping<object, object>;
firstItem = firstGroupElement.FirstOrDefault();
isTimeSpan = HandleTimeSpan(firstItem,fieldName);
double groupSum = 0;
foreach (var element in grouped) { foreach (var element in grouped) {
var s = element.Sum(o => { if (isTimeSpan) {
var v = ReadValueFromObject(fieldName, o); groupSum = element.Sum(o => {return TimeSpanSum(fieldName,o);});
return TypeNormalizer.EnsureType<double>(v); } else {
}); groupSum = element.Sum(o => {return SimpleSum(fieldName,o);});
sum = sum + s; }
sum = sum + groupSum;
} }
} else { } else {
firstItem = dataSource.FirstOrDefault();
isTimeSpan = HandleTimeSpan(firstItem,fieldName);
if (ImportAggregateHelper.FieldExist(dataSource.FirstOrDefault(),fieldName)) { if (ImportAggregateHelper.FieldExist(dataSource.FirstOrDefault(),fieldName)) {
sum = dataSource.Sum(o => { if (isTimeSpan) {
var v = ReadValueFromObject(fieldName, o); sum = dataSource.Sum(o => {return TimeSpanSum(fieldName,o); });
return TypeNormalizer.EnsureType<double>(v); } else {
}); sum = dataSource.Sum(o => {return SimpleSum(fieldName,o); });
}
} }
} }
return sum.ToString(); 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<double>(value);
}
static double TimeSpanSum(string fromField,object current){
var value = ReadValueFromObject(fromField, current);
var timeSpan = (TimeSpan)value;
return TypeNormalizer.EnsureType<double>(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 propertyPath = currentObject.ParsePropertyPath(fieldName);
var evaluated = propertyPath.Evaluate(currentObject); var evaluated = propertyPath.Evaluate(currentObject);
return evaluated; return evaluated;

36
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/StandardFormatter.cs

@ -25,19 +25,49 @@ namespace ICSharpCode.Reporting.Globals
/// <summary> /// <summary>
/// Description of StandardFormatter. /// Description of StandardFormatter.
/// </summary> /// </summary>
static class StandardFormatter public static class StandardFormatter
{ {
public static void FormatOutput (IExportText textColumn) { public static void FormatOutput (IExportText textColumn) {
if (String.IsNullOrWhiteSpace(textColumn.Text)) { if (String.IsNullOrWhiteSpace(textColumn.Text)) {
return; return;
} }
if (!String.IsNullOrEmpty(textColumn.FormatString)) { if (!String.IsNullOrEmpty(textColumn.FormatString)) {
TypeCode typeCode = TypeHelper.TypeCodeFromString(textColumn.DataType); if (textColumn.DataType.ToLower().Contains("timespan")) {
textColumn.Text = FormatItem(textColumn.Text,textColumn.FormatString,typeCode); 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) { static string FormatItem (string valueToFormat,string format,TypeCode typeCode) {
string retValue = String.Empty; string retValue = String.Empty;

4
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Globals/TypeHelper.cs

@ -76,9 +76,7 @@ namespace ICSharpCode.Reporting.Globals
public static TypeCode TypeCodeFromString (string type) { public static TypeCode TypeCodeFromString (string type) {
if (type == null) if (type == null)
type = "System.String"; type = "System.String";
var x = Type.GetTypeCode( Type.GetType(type)); return Type.GetTypeCode( Type.GetType(type));
return x;
} }
} }
} }

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Interfaces/IReportModel.cs

@ -28,7 +28,7 @@ namespace ICSharpCode.Reporting.Interfaces
/// </summary> /// </summary>
public interface IReportModel public interface IReportModel
{ {
ReportSettings ReportSettings {get;set;} IReportSettings ReportSettings {get;set;}
Collection<BaseSection> SectionCollection {get;} Collection<BaseSection> SectionCollection {get;}
IReportContainer ReportHeader {get;} IReportContainer ReportHeader {get;}
IReportContainer PageHeader {get;} IReportContainer PageHeader {get;}

36
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
{
/// <summary>
/// Description of IReportSettings.
/// </summary>
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;}
}
}

2
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportModel.cs

@ -62,7 +62,7 @@ namespace ICSharpCode.Reporting.Items
#endregion #endregion
public ReportSettings ReportSettings{get;set;} public IReportSettings ReportSettings{get;set;}
public Collection<BaseSection> SectionCollection {get; private set;} public Collection<BaseSection> SectionCollection {get; private set;}
} }

40
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Items/ReportSettings.cs

@ -18,48 +18,31 @@
using System; using System;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.Design;
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Xml.Serialization; using System.Xml.Serialization;
using ICSharpCode.Reporting.Globals; using ICSharpCode.Reporting.Globals;
using ICSharpCode.Reporting.Interfaces;
namespace ICSharpCode.Reporting.Items namespace ICSharpCode.Reporting.Items
{ {
/// <summary> /// <summary>
/// Description of ReportSettings. /// Description of ReportSettings.
/// </summary> /// </summary>
public class ReportSettingsDesigner:ComponentDesigner
{
const string settingsName = "ReportSettings";
public ReportSettingsDesigner()
{
}
public override void Initialize(IComponent component)
{
base.Initialize(component);
component.Site.Name = ReportSettingsDesigner.settingsName;
}
}
public class ReportSettings:Component,IReportSettings
[Designer(typeof(ReportSettingsDesigner))]
public class ReportSettings:Component
{ {
public ReportSettings() public ReportSettings(){
{
this.pageSize = GlobalValues.DefaultPageSize; this.pageSize = GlobalValues.DefaultPageSize;
BaseValues(); BaseValues();
var x = PdfSharp.PageSizeConverter.ToSize(PdfSharp.PageSize.A4); var x = PdfSharp.PageSizeConverter.ToSize(PdfSharp.PageSize.A4);
//http://www.sizepaper.com/a-series/a4 //http://www.sizepaper.com/a-series/a4
// http://www.sizepaper.com/american-loose //http://www.sizepaper.com/american-loose
System.Drawing.Printing.PageSettings paperProp = new System.Drawing.Printing.PageSettings();
var p = paperProp.PaperSize.PaperName.ToString(); var paperProp = new System.Drawing.Printing.PageSettings();
var p = paperProp.PaperSize.PaperName.ToString();
} }
@ -165,10 +148,7 @@ namespace ICSharpCode.Reporting.Items
[Category("Page Settings")] [Category("Page Settings")]
public Size PageSize { public Size PageSize {
get { get {
if (!Landscape) { return !Landscape ? pageSize : new Size(pageSize.Height, pageSize.Width);
return pageSize;
}
return new Size(pageSize.Height, pageSize.Width);
} }
// set { pageSize = value; } // set { pageSize = value; }
} }

22
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/BasePageBuilder.cs

@ -90,15 +90,8 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
void AddSectionToPage(IExportContainer header){
header.Parent = CurrentPage;
CurrentPage.ExportedItems.Add(header);
}
protected void BuildReportFooter(){ protected void BuildReportFooter(){
var lastSection = CurrentPage.ExportedItems.Last(); var lastSection = CurrentPage.ExportedItems.Last();
CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin, CurrentLocation = new Point(ReportModel.ReportSettings.LeftMargin,
lastSection.Location.Y - ReportModel.ReportFooter.Size.Height - 2); lastSection.Location.Y - ReportModel.ReportFooter.Size.Height - 2);
@ -115,6 +108,11 @@ namespace ICSharpCode.Reporting.PageBuilder
BuildPageFooter(); BuildPageFooter();
} }
void AddSectionToPage(IExportContainer header){
header.Parent = CurrentPage;
CurrentPage.ExportedItems.Add(header);
}
protected bool PageFull(IExportContainer container) { protected bool PageFull(IExportContainer container) {
return container.DisplayRectangle.Bottom > DetailEnds.Y; return container.DisplayRectangle.Bottom > DetailEnds.Y;
@ -134,9 +132,7 @@ namespace ICSharpCode.Reporting.PageBuilder
convertedContainer.ExportedItems.AddRange(list); convertedContainer.ExportedItems.AddRange(list);
//Run ExpressionEvaluator for every section, otherwise measure don't work //Run ExpressionEvaluator for every section, otherwise measure don't work
ExpressionRunner.Visitor.Visit(convertedContainer as ExportContainer); ExpressionRunner.Visitor.Visit(convertedContainer as ExportContainer);
Console.WriteLine("{0} - {1}",convertedContainer.DesiredSize,convertedContainer.DisplayRectangle);
convertedContainer.DesiredSize = MeasureElement(convertedContainer); convertedContainer.DesiredSize = MeasureElement(convertedContainer);
Console.WriteLine("{0} - {1}",convertedContainer.DesiredSize,convertedContainer.DisplayRectangle);
ArrangeContainer(convertedContainer); ArrangeContainer(convertedContainer);
return convertedContainer; return convertedContainer;
} }
@ -193,7 +189,9 @@ namespace ICSharpCode.Reporting.PageBuilder
CurrentLocation = DetailStart; CurrentLocation = DetailStart;
} }
protected void SortIstByLocationY () {
}
protected void UpdatePageInfo() { protected void UpdatePageInfo() {
foreach (var page in Pages) { foreach (var page in Pages) {
page.PageInfo.TotalPages = Pages.Count; page.PageInfo.TotalPages = Pages.Count;
@ -204,7 +202,7 @@ namespace ICSharpCode.Reporting.PageBuilder
#region Visitors #region Visitors
protected void SetupExpressionRunner (ReportSettings reportsettings,CollectionDataSource dataSource){ protected void SetupExpressionRunner (IReportSettings reportsettings,CollectionDataSource dataSource){
ExpressionRunner = new ExpressionRunner(Pages,reportsettings,dataSource); ExpressionRunner = new ExpressionRunner(Pages,reportsettings,dataSource);
} }

7
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/Converter/ContainerConverter.cs

@ -19,7 +19,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq;
using ICSharpCode.Reporting.Factories; using ICSharpCode.Reporting.Factories;
using ICSharpCode.Reporting.Interfaces; using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Interfaces.Export; using ICSharpCode.Reporting.Interfaces.Export;
@ -48,6 +48,11 @@ namespace ICSharpCode.Reporting.PageBuilder.Converter
public List<IExportColumn> CreateConvertedList(List<IPrintableObject> items){ public List<IExportColumn> CreateConvertedList(List<IPrintableObject> items){
var itemsList = new List<IExportColumn>(); var itemsList = new List<IExportColumn>();
// 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) { foreach (var element in items) {
var exportColumn = ExportColumnFactory.CreateItem(element); var exportColumn = ExportColumnFactory.CreateItem(element);
var ec = element as IReportContainer; var ec = element as IReportContainer;

22
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/PageBuilder/DataPageBuilder.cs

@ -48,6 +48,7 @@ namespace ICSharpCode.Reporting.PageBuilder
SetupExpressionRunner(ReportModel.ReportSettings,DataSource); SetupExpressionRunner(ReportModel.ReportSettings,DataSource);
base.BuildExportList(); base.BuildExportList();
BuildDetail(); BuildDetail();
ExpressionRunner.Visitor.SetCurrentDataSource(DataSource.CurrentList);
BuildReportFooter(); BuildReportFooter();
AddPage(CurrentPage); AddPage(CurrentPage);
UpdatePageInfo(); UpdatePageInfo();
@ -80,6 +81,7 @@ namespace ICSharpCode.Reporting.PageBuilder
foreach (IGrouping<object, object> grouping in DataSource.GroupedList) { foreach (IGrouping<object, object> grouping in DataSource.GroupedList) {
var groupHeader = (BaseRowItem)CurrentSection.Items.Where(p => p.GetType() == typeof(GroupHeader)).FirstOrDefault(); var groupHeader = (BaseRowItem)CurrentSection.Items.Where(p => p.GetType() == typeof(GroupHeader)).FirstOrDefault();
var sectionContainer = CreateContainerForSection(CurrentPage, pagePosition); var sectionContainer = CreateContainerForSection(CurrentPage, pagePosition);
DataSource.Fill(groupHeader.Items,grouping.FirstOrDefault()); DataSource.Fill(groupHeader.Items,grouping.FirstOrDefault());
@ -105,7 +107,8 @@ namespace ICSharpCode.Reporting.PageBuilder
//Childs //Childs
foreach (var child in grouping) { 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<IExportColumn> convertedItems = FillAndConvert(sectionContainer, child, dataItems, converter); List<IExportColumn> convertedItems = FillAndConvert(sectionContainer, child, dataItems, converter);
AdjustLocationInSection(sectionPosition, convertedItems); AdjustLocationInSection(sectionPosition, convertedItems);
@ -130,6 +133,23 @@ namespace ICSharpCode.Reporting.PageBuilder
} }
List<IPrintableObject> ExtractDataItems (List<IPrintableObject> list) {
List<IPrintableObject> 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<object, object> grouping){ void EvaluateExpressionsInGroups(ExportContainer sectionContainer, IGrouping<object, object> grouping){
ExpressionRunner.Visitor.SetCurrentDataSource(grouping); ExpressionRunner.Visitor.SetCurrentDataSource(grouping);
ExpressionRunner.Visitor.Visit(sectionContainer); ExpressionRunner.Visitor.Visit(sectionContainer);

5
src/AddIns/Misc/Reporting/ICSharpCode.Reporting/Src/Wpf/PreviewViewModel.cs

@ -21,6 +21,7 @@ using System.Collections.ObjectModel;
using System.ComponentModel; using System.ComponentModel;
using System.Windows.Documents; using System.Windows.Documents;
using ICSharpCode.Reporting.Interfaces;
using ICSharpCode.Reporting.Items; using ICSharpCode.Reporting.Items;
using ICSharpCode.Reporting.PageBuilder.ExportColumns; using ICSharpCode.Reporting.PageBuilder.ExportColumns;
using ICSharpCode.Reporting.WpfReportViewer.Visitor; using ICSharpCode.Reporting.WpfReportViewer.Visitor;
@ -35,7 +36,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer
FixedDocument document ; FixedDocument document ;
public PreviewViewModel(ReportSettings reportSettings, Collection<ExportPage> pages) public PreviewViewModel(IReportSettings reportSettings, Collection<ExportPage> pages)
{ {
if (pages == null) if (pages == null)
throw new ArgumentNullException("pages"); throw new ArgumentNullException("pages");
@ -49,7 +50,7 @@ namespace ICSharpCode.Reporting.WpfReportViewer
this.Document = wpfExporter.Document; this.Document = wpfExporter.Document;
} }
static FixedDocument CreateFixedDocument(ReportSettings reportSettings) static FixedDocument CreateFixedDocument(IReportSettings reportSettings)
{ {
var document = new FixedDocument(); var document = new FixedDocument();
document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width, document.DocumentPaginator.PageSize = new System.Windows.Size(reportSettings.PageSize.Width,

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

@ -110,7 +110,6 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
if (circle != null) { if (circle != null) {
Visit(circle); Visit(circle);
} }
graphCanvas.Children.Add(UIElement); graphCanvas.Children.Add(UIElement);
} }
return graphCanvas; return graphCanvas;
@ -126,23 +125,20 @@ namespace ICSharpCode.Reporting.WpfReportViewer.Visitor
var visual = new DrawingVisual(); var visual = new DrawingVisual();
using (var drawingContext = visual.RenderOpen()){ using (var drawingContext = visual.RenderOpen()){
var bachgroundRect = new Rect(location,new Size(exportColumn.DesiredSize.Width,formattedText.MaxTextHeight));
var desiredRect = new Rect(location,new Size(exportColumn.DesiredSize.Width,exportColumn.DesiredSize.Height));
if (ShouldSetBackcolor(exportColumn)) { if (ShouldSetBackcolor(exportColumn)) {
drawingContext.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), drawingContext.DrawRectangle(FixedDocumentCreator.ConvertBrush(exportColumn.BackColor), null,bachgroundRect);
null,
desiredRect);
} }
drawingContext.DrawText(formattedText,location); drawingContext.DrawText(formattedText,location);
if (HasFrame(exportColumn)) { if (HasFrame(exportColumn)) {
desiredRect.Inflate(2,2); var frameRect = new Rect(location,new Size(exportColumn.DesiredSize.Width,formattedText.Height));
var pen = FixedDocumentCreator.CreateWpfPen(exportColumn); var pen = FixedDocumentCreator.CreateWpfPen(exportColumn);
pen.Thickness = 2; pen.Thickness = 1;
drawingContext.DrawRectangle(null, pen,desiredRect); drawingContext.DrawRectangle(null, pen,
frameRect);
} }
} }
var drawingElement = new DrawingElement(visual); var drawingElement = new DrawingElement(visual);

57
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; int i = 0;
foreach (var element in collectionSource.SortedList) { foreach (var element in collectionSource.SortedList) {
collectionSource.Fill(ric,element); 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)); Assert.That(((BaseDataItem)ric[0]).DBValue,Is.GreaterThanOrEqualTo(compare));
@ -158,8 +158,7 @@ namespace ICSharpCode.Reporting.Test.DataSource
var dataItemsCollection = CreateDataItems(); var dataItemsCollection = CreateDataItems();
var reportsettings = new ReportSettings(); var reportsettings = new ReportSettings();
reportsettings.GroupColumnsCollection.Add( new GroupColumn("GroupItem",1,ListSortDirection.Ascending)); reportsettings.GroupColumnsCollection.Add( new GroupColumn("GroupItem",1,ListSortDirection.Ascending));
//repiortsettings.GroupColumnsCollection.Add( new GroupColumn("RandomInt",1,ListSortDirection.Ascending));
var collectionSource = new CollectionDataSource (list,reportsettings); var collectionSource = new CollectionDataSource (list,reportsettings);
collectionSource.Bind(); collectionSource.Bind();
int i = 0; int i = 0;
@ -168,10 +167,10 @@ namespace ICSharpCode.Reporting.Test.DataSource
Console.WriteLine("Key {0} ",element.Key); Console.WriteLine("Key {0} ",element.Key);
foreach (var l in element) { foreach (var l in element) {
collectionSource.Fill(dataItemsCollection,l); collectionSource.Fill(dataItemsCollection,l);
Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue, // Console.WriteLine("first : <{0}> Last <{1}> Group <{2}> Randomint <{3}>",((BaseDataItem)dataItemsCollection[0]).DBValue,
((BaseDataItem)dataItemsCollection[1]).DBValue, // ((BaseDataItem)dataItemsCollection[1]).DBValue,
((BaseDataItem)dataItemsCollection[2]).DBValue, // ((BaseDataItem)dataItemsCollection[2]).DBValue,
((BaseDataItem)dataItemsCollection[3]).DBValue); // ((BaseDataItem)dataItemsCollection[3]).DBValue);
i++; i++;
} }
} }
@ -188,7 +187,30 @@ namespace ICSharpCode.Reporting.Test.DataSource
Assert.That(i,Is.EqualTo(collectionSource.Count)); 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<IPrintableObject>();
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] [Test]
public void FillDataIncludedInRow() { public void FillDataIncludedInRow() {
@ -210,16 +232,6 @@ namespace ICSharpCode.Reporting.Test.DataSource
} }
i ++; 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)); Assert.That(i,Is.EqualTo(collectionSource.Count));
} }
@ -255,15 +267,6 @@ namespace ICSharpCode.Reporting.Test.DataSource
Assert.That(res.DBValue,Is.Not.Empty); Assert.That(res.DBValue,Is.Not.Empty);
i ++; 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)); Assert.That(i,Is.EqualTo(collectionSource.Count));
} }

24
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] [TestFixture]
public class AggregatesGroupesFixture public class AggregatesGroupesFixture
{ {
Collection<ExportText> collection; Collection<ExportText> reportItemCollection;
CollectionDataSource dataSource; CollectionDataSource dataSource;
ContributorCollection list; ContributorCollection list;
ReportSettings reportSettings; ReportSettings reportSettings;
@ -44,10 +44,10 @@ namespace ICSharpCode.Reporting.Test.Expressions.IntegrationTests
var visitor = new ExpressionVisitor (reportSettings); var visitor = new ExpressionVisitor (reportSettings);
visitor.SetCurrentDataSource(dataSource.GroupedList); visitor.SetCurrentDataSource(dataSource.GroupedList);
var script = "= sum('randomint')"; var script = "= sum('randomint')";
collection[0].Text = script; reportItemCollection[0].Text = script;
visitor.Visit(collection[0]); visitor.Visit(reportItemCollection[0]);
var result = list.Sum(x => x.RandomInt); 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 container = new ExportContainer();
var script = "= sum('randomint')"; var script = "= sum('randomint')";
collection[0].Text = script; reportItemCollection[0].Text = script;
container.ExportedItems.AddRange(collection); container.ExportedItems.AddRange(reportItemCollection);
var visitor = new ExpressionVisitor (reportSettings); var visitor = new ExpressionVisitor (reportSettings);
visitor.SetCurrentDataSource(dataSource.GroupedList); visitor.SetCurrentDataSource(dataSource.GroupedList);
@ -68,33 +68,33 @@ namespace ICSharpCode.Reporting.Test.Expressions.IntegrationTests
visitor.Visit(container); visitor.Visit(container);
var result = list.Where(k => k.GroupItem == group.Key.ToString()).Sum(x => x.RandomInt); 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] [Test]
public void SumAllGroups () { public void SumAllGroups () {
var container = new ExportContainer(); var container = new ExportContainer();
container.ExportedItems.AddRange(collection); container.ExportedItems.AddRange(reportItemCollection);
var visitor = new ExpressionVisitor (reportSettings); var visitor = new ExpressionVisitor (reportSettings);
visitor.SetCurrentDataSource(dataSource.GroupedList); visitor.SetCurrentDataSource(dataSource.GroupedList);
foreach (var group in dataSource.GroupedList) { foreach (var group in dataSource.GroupedList) {
var script = "= sum('randomint')"; var script = "= sum('randomint')";
collection[0].Text = script; reportItemCollection[0].Text = script;
visitor.SetCurrentDataSource(group); visitor.SetCurrentDataSource(group);
visitor.Visit(container); visitor.Visit(container);
var result = list.Where(k => k.GroupItem == group.Key.ToString()).Sum(x => x.RandomInt); 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] [SetUp]
public void CreateExportlist() { public void CreateExportlist() {
collection = new Collection<ExportText>(); reportItemCollection = new Collection<ExportText>();
collection.Add(new ExportText() reportItemCollection.Add(new ExportText()
{ {
Text = String.Empty Text = String.Empty
}); });

10
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 () { public void ContainerResizeIfItemCanGrow () {
var container = CreateContainer(); var container = CreateContainer();
MakeCangGrow(container); SetCanGrowToTrue(container);
Measure(container); Measure(container);
strategy.Arrange(container); strategy.Arrange(container);
@ -85,9 +85,9 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
[Test] [Test]
public void ResizedContainerExeed5Points() { public void ResizedContainerExeed20Points() {
var container = CreateContainer(); var container = CreateContainer();
MakeCangGrow(container); SetCanGrowToTrue(container);
Measure(container); Measure(container);
strategy.Arrange(container); strategy.Arrange(container);
var containerRect = new Rectangle(container.Location,container.DesiredSize); var containerRect = new Rectangle(container.Location,container.DesiredSize);
@ -95,7 +95,7 @@ namespace ICSharpCode.Reporting.Test.MeasureArrange
var arrangedRect = CreateItemRectangle(container); 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].Location = new Point(80, 10);
container.ExportedItems[0].Size = new Size(20, 70); container.ExportedItems[0].Size = new Size(20, 70);

32
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.Size,Is.EqualTo(ti.Size));
Assert.That(exportText.Font , Is.EqualTo(GlobalValues.DefaultFont)); 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);
}
*/
}
} }

Loading…
Cancel
Save