Browse Source

Merged Corsavy r1251:1300 to trunk.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1301 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
78bf5a97eb
  1. 10
      AddIns/ICSharpCode.SharpDevelop.addin
  2. BIN
      data/resources/StringResources.cz.resources
  3. BIN
      data/resources/StringResources.it.resources
  4. BIN
      data/resources/StringResources.kr.resources
  5. BIN
      data/resources/StringResources.nl.resources
  6. BIN
      data/resources/StringResources.se.resources
  7. 100
      data/templates/file/CSharp/CSharp.Web.WebControl.xft
  8. 194
      data/templates/file/CSharp/CSharp.Web.WebForm.xft
  9. 82
      data/templates/file/CSharp/CSharp.Web.WebService.xft
  10. 512
      data/templates/project/CSharp/WebpageProject.xpt
  11. 3
      src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj
  12. 12
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Resources/BuildOptions.xfrm
  13. 6
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BuildOptions.cs
  14. 216
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs
  15. 26
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/DefaultAssemblyInfo.boo
  16. 30
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt
  17. 30
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt
  18. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  19. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/NRefactoryDesignerLoader.cs
  20. 6
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs
  21. 5
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj
  22. 100
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs
  23. 132
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs
  24. 60
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/DebuggerPad.cs
  25. 69
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs
  26. 43
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs
  27. 47
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs
  28. 76
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.Menu.cs
  29. 134
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs
  30. 11
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs
  31. 90
      src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs
  32. 3
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj
  33. 72
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs
  34. 64
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs
  35. 12
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs
  36. 137
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs
  37. 41
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs
  38. 194
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs
  39. 58
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs
  40. 9
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs
  41. 2
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/NDebugger-Evals.cs
  42. 115
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs
  43. 6
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PrimitiveValue.cs
  44. 17
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs
  45. 44
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs
  46. 40
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorDebug/ICorDebugChainEnum.cs
  47. 40
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorDebug/ICorDebugFrameEnum.cs
  48. 22
      src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorDebug/ICorDebugStepper.cs
  49. 38
      src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs
  50. 16
      src/AddIns/Misc/SharpReport/SharpReport/Designer/Factories.cs
  51. 1
      src/AddIns/Misc/SharpReport/SharpReport/Designer/Report.cs
  52. 23
      src/AddIns/Misc/SharpReport/SharpReport/Designer/SectionControls/BaseDesignerControl.cs
  53. 12
      src/AddIns/Misc/SharpReport/SharpReport/Designer/SectionControls/ReportSection.cs
  54. 10
      src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/AbstractGraphicControl.cs
  55. 2
      src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/ReportObjectControlBase.cs
  56. 1
      src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/ReportRectangleControl.cs
  57. 4
      src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/ReportTextControl.cs
  58. 40
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportCircleItem.cs
  59. 93
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportImageItem.cs
  60. 14
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportLineItem.cs
  61. 44
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportRectangleItem.cs
  62. 19
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ItemsHelper.cs
  63. 23
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ReportDataItem.cs
  64. 74
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ReportRowItem.cs
  65. 48
      src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ReportTextItem.cs
  66. 27
      src/AddIns/Misc/SharpReport/SharpReport/Visitors/LoadReportVisitor.cs
  67. 6
      src/AddIns/Misc/SharpReport/SharpReportAddin/FieldsExplorer/FieldsExplorer.cs
  68. 3
      src/AddIns/Misc/SharpReport/SharpReportAddin/SharpReportDisplayBinding.cs
  69. 74
      src/AddIns/Misc/SharpReport/SharpReportAddin/SharpReportView.cs
  70. 20
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs
  71. 22
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseReportItem.cs
  72. 20
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseReportObject.cs
  73. 26
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseSection.cs
  74. 8
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs
  75. 6
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/Graphics/BaseImageItem.cs
  76. 8
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs
  77. 43
      src/AddIns/Misc/SharpReport/SharpReportCore/BaseSettings.cs
  78. 16
      src/AddIns/Misc/SharpReport/SharpReportCore/Events/PrintEventArgs.cs
  79. 3
      src/AddIns/Misc/SharpReport/SharpReportCore/Factories/BaseItemFactory.cs
  80. 5
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractDataRenderer.cs
  81. 92
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs
  82. 150
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderDataReport.cs
  83. 164
      src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderFormSheetReport.cs
  84. 22
      src/AddIns/Misc/SharpReport/SharpReportCore/ReportSettings.cs
  85. 5
      src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/LoadModelVisitor.cs
  86. 5
      src/AddIns/Misc/SharpReport/SharpReportCore/Xml/XmlHelper.cs
  87. 54
      src/Libraries/ICSharpCode.TextEditor/Project/Resources/ASPX.xshd
  88. 4
      src/Libraries/ICSharpCode.TextEditor/Project/Resources/Mode.xsd
  89. 4
      src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml
  90. 13
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs
  91. 24
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightRuleSet.cs
  92. 16
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightingDefinitionParser.cs
  93. 28
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightingManager.cs
  94. 10
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/FileSyntaxModeProvider.cs
  95. 4
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/ISyntaxModeFileProvider.cs
  96. 8
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/ResourceSyntaxModeProvider.cs
  97. 6
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/SyntaxMode.cs
  98. 2
      src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/TextWord.cs
  99. 17
      src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs
  100. 2
      src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs
  101. Some files were not shown because too many files have changed in this diff Show More

10
AddIns/ICSharpCode.SharpDevelop.addin

@ -1404,7 +1404,7 @@ @@ -1404,7 +1404,7 @@
<Condition name="DebuggerSupports" debuggersupports = "Stepping">
<Condition name="IsProcessRunning" isprocessrunning = "False" isdebugging = "True" action = "Disable">
<MenuItem id = "BeforeSteppingSeparator" type = "Separator" />
<MenuItem id = "Step"
<MenuItem id = "Step over"
label = "${res:XML.MainMenu.DebugMenu.Step}"
icon = "Icons.16x16.Debug.StepOver"
shortcut = "F10"
@ -1421,6 +1421,12 @@ @@ -1421,6 +1421,12 @@
class = "ICSharpCode.SharpDevelop.Project.Commands.StepOutDebuggingCommand"/>
</Condition>
</Condition>
<MenuItem id = "ToggleBreakpointSeparator" type = "Separator" />
<MenuItem id = "Toggle Breakpoint"
label = "Toggle Breakpoint"
shortcut = "F7"
class = "ICSharpCode.SharpDevelop.Project.Commands.ToggleBreakpointCommand"/>
</ComplexCondition>
</MenuItem> <!-- end DEBUG menu -->
@ -1739,7 +1745,7 @@ @@ -1739,7 +1745,7 @@
<MenuItem id = "ClearBookmarks"
label = "${res:XML.MainMenu.SearchMenu.ClrBookmark}"
icon = "Bookmarks.ClearAll"
class = "ICSharpCode.SharpDevelop.Bookmarks.EnableDisableAll"/>
class = "ICSharpCode.SharpDevelop.Bookmarks.ClearBookmarks"/>
<MenuItem id = "Separator2" type = "Separator" />
<MenuItem id = "GotoLineNr"
label = "${res:XML.MainMenu.SearchMenu.GotoLineNr}"

BIN
data/resources/StringResources.cz.resources

Binary file not shown.

BIN
data/resources/StringResources.it.resources

Binary file not shown.

BIN
data/resources/StringResources.kr.resources

Binary file not shown.

BIN
data/resources/StringResources.nl.resources

Binary file not shown.

BIN
data/resources/StringResources.se.resources

Binary file not shown.

100
data/templates/file/CSharp/CSharp.Web.WebControl.xft

@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
<?xml version="1.0"?>
<Template author="Tom Schroeter" version="1.0">
<Config
name = "ASP.NET Web Control"
icon = "C#.File.NewClass"
category = "C#"
subcategory = "ASP.NET"
defaultname = "WebControl"
language = "C#"
/>
<Description>Custom Web Control. Enter the name of a new control.</Description>
<!--
Special new file templates:
${StandardNamespace} -> Standardnamespace of the current project or FileNameWithoutExtension
${FullName} -> Full generated path name
${FileName} -> File name with extension
${FileNameWithoutExtension} -> File name without extension
${Extension} -> Extension in the form ".cs"
${Path} -> Full path of the file
-->
<Files>
<File name="${Path}\Source\${FileNameWithoutExtension}.cs" language="C#"><![CDATA[${StandardHeader.C#}
using System;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ${StandardNamespace}
{
//**************************************************************************
#region Class ${ClassName}
/// <summary>
/// Description of ${ClassName}
/// </summary>
public class ${ClassName} : Control
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Data
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Constructor
public ${ClassName}()
{
Init += new EventHandler( OnInit );
Load += new EventHandler( OnLoad );
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region OnInit
private void OnInit(object sender, EventArgs e)
{
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region OnLoad
private void OnLoad(object sender, EventArgs e)
{
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Properties
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Render
override
protected void Render(HtmlTextWriter Writer)
{
Writer.Write( "${ClassName} Control" );
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region More...
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region More...
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
#endregion
//**************************************************************************
}
]]></File>
</Files>
<AdditionalOptions/>
</Template>

194
data/templates/file/CSharp/CSharp.Web.WebForm.xft

@ -0,0 +1,194 @@ @@ -0,0 +1,194 @@
<?xml version="1.0"?>
<Template author="Tom Schroeter" version="1.0">
<Config
name = "ASP.NET Web Form"
icon = "C#.File.NewClass"
category = "C#"
subcategory = "ASP.NET"
defaultname = "WebForm${Number}.aspx"
language = "C#"
/>
<Description>Component Frame for ASPX Code Behind. Enter the name of a new page.</Description>
<!--
Special new file templates:
${StandardNamespace} -> Standardnamespace of the current project or FileNameWithoutExtension
${FullName} -> Full generated path name
${FileName} -> File name with extension
${FileNameWithoutExtension} -> File name without extension
${Extension} -> Extension in the form ".cs"
${Path} -> Full path of the file
-->
<Files>
<File name="${Path}\Source\${FileNameWithoutExtension}.cs" language="C#"><![CDATA[${StandardHeader.C#}
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ${StandardNamespace}
{
/// <summary>
/// Description of ${ClassName}
/// </summary>
public class ${ClassName} : Page
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Data
protected HtmlInputButton _Button_Ok;
protected HtmlInputText _Input_Name;
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Page Init & Exit (Open/Close DB connections here...)
protected void PageInit(object sender, System.EventArgs e)
{
}
//----------------------------------------------------------------------
protected void PageExit(object sender, System.EventArgs e)
{
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Page Load
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write(@"Hello #Develop<br>");
//------------------------------------------------------------------
if(IsPostBack)
{
}
//------------------------------------------------------------------
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Click_Button_OK
//----------------------------------------------------------------------
protected void Click_Button_Ok(object sender, System.EventArgs e)
{
Response.Write( _Button_Ok.Value + " was cklicked!<br>");
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Change_Input_Name
//----------------------------------------------------------------------
protected void Changed_Input_Name(object sender, System.EventArgs e)
{
Response.Write( _Input_Name.Value + " has changed!<br>");
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Add more events here...
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Initialize Component
protected override void OnInit(EventArgs e)
{ InitializeComponent();
base.OnInit(e);
}
//----------------------------------------------------------------------
private void InitializeComponent()
{ //------------------------------------------------------------------
this.Load += new System.EventHandler(Page_Load);
this.Init += new System.EventHandler(PageInit);
this.Unload += new System.EventHandler(PageExit);
//------------------------------------------------------------------
_Button_Ok.ServerClick += new EventHandler(Click_Button_Ok);
_Input_Name.ServerChange += new EventHandler(Changed_Input_Name);
//------------------------------------------------------------------
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
]]></File>
<File name="${FullName}" language="HTML"><![CDATA[<%@ Page
language="c#"
Codebehind="${FileNameWithoutExtension}.cs"
AutoEventWireup="false"
Inherits="${StandardNamespace}.${ClassName}"
validateRequest="false"
EnableSessionState="false"
debug="true"
trace="false"
%>
<!--
<--%@ Register TagPrefix="???" Namespace="${StandardNamespace}" Assembly="${StandardNamespace}" %>
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmls="http://www.w3.org/1999/xhtml">
<Html>
<Head>
<Title>${ClassName}</Title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<LINK href="${StandardNamespace}.css" type="text/css" rel="stylesheet">
</Head>
<Body>
<form id="Form_${ClassName}" method="post" runat="server">
<table>
<tr>
<td colspan="2">
Table
</td>
</tr>
<tr>
<td>
Name:
</td>
<td>
<input id="_Input_Name" runat="server">
</td>
</tr>
<tr>
<td colspan="2">
<input id="_Button_No" type="submit" value="Oh No!" runat="server">
<input id="_Button_Ok" type="submit" value="Ok" runat="server">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="?" >Click Here</a>
</td>
</tr>
</table>
</form>
</Body>
</Html>
]]> </File>
</Files>
<AdditionalOptions/>
</Template>

82
data/templates/file/CSharp/CSharp.Web.WebService.xft

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
<?xml version="1.0"?>
<Template author="Tom Schroeter" version="1.0">
<Config
name = "ASP.NET Web Service"
icon = "C#.File.NewClass"
category = "C#"
subcategory = "ASP.NET"
defaultname = "WebService.asmx"
language = "C#"
/>
<Description>Component Frame for ASMX Web Service. Enter the name of a new service.</Description>
<!--
Special new file templates:
${StandardNamespace} -> Standardnamespace of the current project or FileNameWithoutExtension
${FullName} -> Full generated path name
${FileName} -> File name with extension
${FileNameWithoutExtension} -> File name without extension
${Extension} -> Extension in the form ".cs"
${Path} -> Full path of the file
-->
<Files>
<File name="${Path}\Source\${FileNameWithoutExtension}.cs" language="C#"><![CDATA[${StandardHeader.C#}
using System;
using System.Web.Services;
namespace ${StandardNamespace}
{
/// <summary>
/// Description of ${ClassName}
/// </summary>
[WebService
( Name = "${ClassName}",
Description = "${ClassName}",
Namespace = "http://www.${ClassName}.example"
)
]
public class ${ClassName} : WebService
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Data
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Constructor
public ${ClassName}()
{
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Status
[WebMethod]
public string Status()
{
string s = string.Format("Time: {0}", DateTime.Now);
return s;
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region More...
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region More...
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}
]]></File>
<File name="${FullName}"><![CDATA[
<%@ WebService Class="${StandardNamespace}.${ClassName}" Language="C#" Debug="true" %>
]]> </File>
</Files>
<AdditionalOptions/>
</Template>

512
data/templates/project/CSharp/WebpageProject.xpt

@ -0,0 +1,512 @@ @@ -0,0 +1,512 @@
<?xml version="1.0"?>
<Template originator = "Tom Schroeter"
created = "24/03/2006"
lastModified = "24/03/2006">
<!-- Template Header -->
<TemplateConfiguration>
<Name>ASP.net webpage project</Name>
<Category>C#</Category>
<Subcategory>ASP.NET</Subcategory>
<Icon>C#.Project.Form</Icon>
<LanguageName>C#</LanguageName>
<Description>ASP.net web application</Description>
</TemplateConfiguration>
<!-- Actions -->
<Actions>
<Open filename = ".\Source\Main.cs"/>
</Actions>
<Combine name = "${ProjectName}" directory = ".">
<Options>
<StartupProject>${ProjectName}</StartupProject>
</Options>
<Project name = "${ProjectName}" directory = ".">
<Options OutputType = "Library" />
<ProjectItems>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Web" />
<Reference Include="System.Drawing" />
<Reference Include="System.Web.Services" />
</ProjectItems>
<PropertyGroup>
<OutputPath>bin\</OutputPath>
</PropertyGroup>
<Files>
<!--*************************************************************************-->
<File name=".\Source\Main.cs"><![CDATA[${StandardHeader.C#}
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace ${StandardNamespace}
{
/// <summary>
/// Description of MainForm.
/// </summary>
public class Main : Page
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Data
protected HtmlInputButton _Button_Ok;
protected HtmlInputText _Input_Name;
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Page Init & Exit (Open/Close DB connections here...)
protected void PageInit(object sender, EventArgs e)
{
}
//----------------------------------------------------------------------
protected void PageExit(object sender, EventArgs e)
{
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Page Load
private void Page_Load(object sender, EventArgs e)
{
Response.Write(@"Hello #Develop<br>");
//------------------------------------------------------------------
if(IsPostBack)
{
}
//------------------------------------------------------------------
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Click_Button_OK
//----------------------------------------------------------------------
protected void Click_Button_Ok(object sender, EventArgs e)
{
Response.Write( _Button_Ok.Value + " was cklicked!<br>");
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Changed_Input_Name
//----------------------------------------------------------------------
protected void Changed_Input_Name(object sender, EventArgs e)
{
Response.Write( _Input_Name.Value + " has changed!<br>");
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region More...
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region Initialize Component
protected override void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
//----------------------------------------------------------------------
private void InitializeComponent()
{
this.Load += new System.EventHandler(Page_Load);
this.Init += new System.EventHandler(PageInit);
this.Unload += new System.EventHandler(PageExit);
_Button_Ok.ServerClick += new EventHandler(Click_Button_Ok);
_Input_Name.ServerChange += new EventHandler(Changed_Input_Name);
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}
}]]></File>
<!--*************************************************************************-->
<File name=".\Source\AssemblyInfo.cs">
<![CDATA[using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("1.0.0.0")]
]]></File>
<!--*************************************************************************-->
<File name="Global.asax" language="HTML">
<![CDATA[<%@ Application Codebehind="Global.cs"
Inherits="${ProjectName}.Global"
%>
]]></File>
<!--*************************************************************************-->
<File name=".\Source\Global.cs">
<![CDATA[
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
namespace ${StandardNamespace}
{
/// <summary>
/// Summary description for Global.
/// </summary>
public class Global : HttpApplication
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
#region global
/// <summary>
/// Required designer variable.
/// </summary>
//private System.ComponentModel.IContainer components = null;
public Global()
{
InitializeComponent();
}
#endregion
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
protected void Application_Start(Object sender, EventArgs e)
{
}
protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
}
protected void Application_Error(Object sender, EventArgs e)
{
}
protected void Session_End(Object sender, EventArgs e)
{
}
protected void Application_End(Object sender, EventArgs e)
{
}
#region Web Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
}
#endregion
}
}
]]></File>
<!--*************************************************************************-->
<File name="Main.aspx" language="HTML"><![CDATA[<%@ Page
language="c#"
Codebehind="Main.cs"
AutoEventWireup="false"
Inherits="${ProjectName}.Main"
validateRequest="false"
EnableSessionState="false"
debug="true"
trace="false"
%>
<!--
<--%@ Register TagPrefix="???" Namespace="${StandardNamespace}" Assembly="${StandardNamespace}" %>
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmls="http://www.w3.org/1999/xhtml">
<Html>
<Head>
<title>Main</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
<LINK href="${ProjectName}.css" type="text/css" rel="stylesheet">
</Head>
<Body>
<form id="Form1" method="post" runat="server">
<!-- Site Code goes here! -->
<table>
<tr>
<td colspan="2">
Table
</td>
</tr>
<tr>
<td>
Name:
</td>
<td>
<input id="_Input_Name" runat="server">
</td>
</tr>
<tr>
<td colspan="2">
<input id="_Button_No" type="submit" value="Oh No!" runat="server">
<input id="_Button_Ok" type="submit" value="Ok" runat="server">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<a href="?" >Click Here</a>
</td>
</tr>
</table>
</form>
</Body>
</Html>
]]></File>
<!--*************************************************************************-->
<File name="${ProjectName}.css" language="HTML">
<![CDATA[/*----------------------------------------------*/
BODY
{ font-family: Verdana, Arial;
font-weight: normal;
font-size: 11px;
color: Black;
background-color: #F0F0F0;
}
/*----------------------------------------------*/
TABLE
{ font-size: 11px;
background-color: #000000;
border-width: 1px;
border-color: #000000;
border-collapse: collapse;
margin: 0;
}
/*----------------------------------------------*/
TD
{ background-color: #FFFFFF;
border-color: #FF0000;
border-width: 0px;
padding: 4;
margin: 0;
}
/*----------------------------------------------*/
DIV
{ width:120px;
height:120px;
border:solid 1px black;
padding:8px;
background-color:#F0F0FF;
}
/*----------------------------------------------*/
SELECT
{ font-family: Verdana;
font-weight: normal;
font-size: 11px;
color: #000000;
background-color: #FFFFFF;
}
/*----------------------------------------------*/
INPUT
{ font-family: Verdana;
font-weight: normal;
font-size: 11px;
color: #000000;
}
/*----------------------------------------------*/
TEXTAREA
{ font-family: Verdana;
font-weight: normal;
font-size: 11px;
color: #000000;
background-color: #FFFFFF;
}
/*----------------------------------------------*/
A
{ FONT-WEIGHT: normal;
COLOR: #004080;
font-style: normal;
text-decoration: none;
}
A:hover
{ FONT-WEIGHT: bold;
COLOR: #FF5357;
}
/*----------------------------------------------*/
]]></File>
<!--*************************************************************************-->
<File name="Web.config" language="XML"><![CDATA[<configuration>
<system.web>
<!-- DYNAMIC DEBUG COMPILATION
Set compilation debug="true" to enable ASPX debugging. Otherwise, setting this value to
false will improve runtime performance of this application.
Set compilation debug="true" to insert debugging symbols (.pdb information)
into the compiled page. Because this creates a larger file that executes
more slowly, you should set this value to true only when debugging and to
false at all other times. For more information, refer to the documentation about
debugging ASP.NET files.
-->
<compilation
defaultLanguage="c#"
debug="true"
/>
<!-- CUSTOM ERROR MESSAGES
Set customErrors mode="On" or "RemoteOnly" to enable custom error messages, "Off" to disable.
Add <error> tags for each of the errors you want to handle.
"On" Always display custom (friendly) messages.
"Off" Always display detailed ASP.NET error information.
"RemoteOnly" Display custom (friendly) messages only to users not running
on the local Web server. This setting is recommended for security purposes, so
that you do not display application detail information to remote clients.
-->
<customErrors mode="RemoteOnly" />
<!-- AUTHENTICATION
This section sets the authentication policies of the application. Possible modes are "Windows",
"Forms", "Passport" and "None"
"None" No authentication is performed.
"Windows" IIS performs authentication (Basic, Digest, or Integrated Windows) according to
its settings for the application. Anonymous access must be disabled in IIS.
"Forms" You provide a custom form (Web page) for users to enter their credentials, and then
you authenticate them in your application. A user credential token is stored in a cookie.
"Passport" Authentication is performed via a centralized authentication service provided
by Microsoft that offers a single logon and core profile services for member sites.
-->
<authentication mode="None" />
<!-- AUTHORIZATION
This section sets the authorization policies of the application. You can allow or deny access
to application resources by user or role. Wildcards: "*" mean everyone, "?" means anonymous
(unauthenticated) users.
-->
<authorization>
<allow users="*" /> <!-- Allow all users -->
<!-- <allow users="[comma separated list of users]"
roles="[comma separated list of roles]"/>
<deny users="[comma separated list of users]"
roles="[comma separated list of roles]"/>
-->
</authorization>
<!-- APPLICATION-LEVEL TRACE LOGGING
Application-level tracing enables trace log output for every page within an application.
Set trace enabled="true" to enable application trace logging. If pageOutput="true", the
trace information will be displayed at the bottom of each page. Otherwise, you can view the
application trace log by browsing the "trace.axd" page from your web application
root.
-->
<trace
enabled="false"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/>
<!-- SESSION STATE SETTINGS
By default ASP.NET uses cookies to identify which requests belong to a particular session.
If cookies are not available, a session can be tracked by adding a session identifier to the URL.
To disable cookies, set sessionState cookieless="true".
-->
<sessionState
mode="InProc"
cookieless="true"
timeout="20"
/>
<!-- GLOBALIZATION
This section sets the globalization settings of the application.
-->
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
</system.web>
<appSettings>
<add key="SqlConnectionString"
value="Server=localhost; Database=; Uid=root; Pwd=;"
/>
</appSettings>
</configuration>
]]></File>
<!--*************************************************************************-->
</Files>
</Project>
</Combine>
</Template>

3
src/AddIns/BackendBindings/Boo/BooBinding/Project/BooBinding.csproj

@ -86,6 +86,9 @@ @@ -86,6 +86,9 @@
</Compile>
<EmbeddedResource Include="Resources\BuildOptions.xfrm" />
<Compile Include="Src\BuildOptions.cs" />
<None Include="Templates\DefaultAssemblyInfo.boo">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Content Include="BooBinding.addin">

12
src/AddIns/BackendBindings/Boo/BooBinding/Project/Resources/BuildOptions.xfrm

@ -12,16 +12,24 @@ @@ -12,16 +12,24 @@
<Size value="{Width=504, Height=146}" />
<TabIndex value="0" />
<Controls>
<System.Windows.Forms.CheckBox>
<Name value="duckyCheckBox" />
<Location value="{X=6,Y=86}" />
<Text value="Use duck typing by default" />
<TabIndex value="8" />
<Size value="{Width=492, Height=24}" />
<UseVisualStyleBackColor value="True" />
</System.Windows.Forms.CheckBox>
<System.Windows.Forms.TextBox>
<Name value="pipelineTextBox" />
<TabIndex value="7" />
<Size value="{Width=386, Height=21}" />
<Location value="{X=112,Y=87}" />
<Location value="{X=112,Y=116}" />
<Anchor value="Top, Left, Right" />
</System.Windows.Forms.TextBox>
<System.Windows.Forms.Label>
<Name value="pipelineLabel" />
<Location value="{X=6,Y=87}" />
<Location value="{X=6,Y=116}" />
<Text value="Pipeline:" />
<TextAlign value="MiddleRight" />
<Size value="{Width=100, Height=23}" />

6
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/BuildOptions.cs

@ -31,14 +31,14 @@ namespace Grunwald.BooBinding @@ -31,14 +31,14 @@ namespace Grunwald.BooBinding
//InitXmlDoc();
InitDebugInfo();
ConfigurationGuiBinding b;
//ConfigurationGuiBinding b;
//b = helper.BindString("conditionalSymbolsTextBox", "DefineConstants");
//b.DefaultLocation = PropertyStorageLocations.ConfigurationSpecific;
//b.CreateLocationButton("conditionalSymbolsTextBox");
b = helper.BindBoolean("noCorlibCheckBox", "NoStdLib", false);
b.CreateLocationButton("noCorlibCheckBox");
helper.BindBoolean("noCorlibCheckBox", "NoStdLib", false).CreateLocationButton("noCorlibCheckBox");
helper.BindBoolean("duckyCheckBox", "Ducky", false).CreateLocationButton("duckyCheckBox");
helper.BindString("pipelineTextBox", "Pipeline").CreateLocationButton("pipelineLabel");

216
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/VariableLookupVisitor.cs

@ -13,64 +13,17 @@ using Boo.Lang.Compiler.Ast; @@ -13,64 +13,17 @@ using Boo.Lang.Compiler.Ast;
namespace Grunwald.BooBinding.CodeCompletion
{
/// <summary>
/// Finds an variable declaration in the boo AST.
/// </summary>
public class VariableLookupVisitor : DepthFirstVisitor
public abstract class VariableLookupVisitorBase : DepthFirstVisitor
{
BooResolver resolver;
string lookFor;
bool acceptImplicit;
public VariableLookupVisitor(BooResolver resolver, string lookFor, bool acceptImplicit)
{
this.resolver = resolver;
this.lookFor = lookFor;
this.acceptImplicit = acceptImplicit;
}
protected BooResolver resolver;
protected bool acceptImplicit = true;
IField result;
public IField Result {
get {
return result;
}
}
private void InferResult(Expression expr, string name, LexicalInfo lexicalInfo, bool useElementType)
{
if (expr == null)
return;
if (result != null)
return;
IReturnType returnType = new InferredReturnType(expr, resolver.CallingClass);
if (useElementType)
returnType = new ElementReturnType(returnType);
result = new DefaultField.LocalVariableField(returnType, name,
new DomRegion(lexicalInfo.Line, lexicalInfo.Column),
resolver.CallingClass);
}
public override void OnDeclaration(Declaration node)
{
if (result != null)
return;
if (node.Name == lookFor) {
if (node.Type != null) {
result = new DefaultField.LocalVariableField(resolver.ConvertType(node.Type),
node.Name,
new DomRegion(node.LexicalInfo.Line, node.LexicalInfo.Column),
resolver.CallingClass);
}
}
}
protected abstract void DeclarationFound(string declarationName, TypeReference declarationType, Expression initializer, LexicalInfo lexicalInfo);
protected abstract void IterationDeclarationFound(string declarationName, TypeReference declarationType, Expression initializer, LexicalInfo lexicalInfo);
public override void OnDeclarationStatement(DeclarationStatement node)
{
if (node.Declaration.Name == lookFor) {
Visit(node.Declaration);
InferResult(node.Initializer, node.Declaration.Name, node.LexicalInfo, false);
}
DeclarationFound(node.Declaration.Name, node.Declaration.Type, node.Initializer, node.LexicalInfo);
}
protected override void OnError(Node node, Exception error)
@ -84,9 +37,7 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -84,9 +37,7 @@ namespace Grunwald.BooBinding.CodeCompletion
ReferenceExpression reference = node.Left as ReferenceExpression;
if (node.Operator == BinaryOperatorType.Assign && reference != null) {
if (!(reference is MemberReferenceExpression)) {
if (reference.Name == lookFor) {
InferResult(node.Right, reference.Name, reference.LexicalInfo, false);
}
DeclarationFound(reference.Name, null, node.Right, node.LexicalInfo);
}
}
}
@ -95,18 +46,12 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -95,18 +46,12 @@ namespace Grunwald.BooBinding.CodeCompletion
public override void OnForStatement(ForStatement node)
{
if (node.LexicalInfo.Line > resolver.CaretLine || node.Block.EndSourceLocation.Line < resolver.CaretLine)
return;
if (node.Declarations.Count != 1) {
// TODO: support unpacking
base.OnForStatement(node);
return;
}
if (node.Declarations[0].Name == lookFor) {
Visit(node.Declarations[0]);
InferResult(node.Iterator, node.Declarations[0].Name, node.LexicalInfo, true);
if (node.LexicalInfo.Line <= resolver.CaretLine && node.Block.EndSourceLocation.Line >= resolver.CaretLine - 1) {
foreach (Declaration decl in node.Declarations) {
IterationDeclarationFound(decl.Name, decl.Type, node.Iterator, node.LexicalInfo);
}
}
base.OnForStatement(node);
}
public override void OnGeneratorExpression(GeneratorExpression node)
@ -114,16 +59,90 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -114,16 +59,90 @@ namespace Grunwald.BooBinding.CodeCompletion
if (node.LexicalInfo.Line != resolver.CaretLine)
return;
LoggingService.Warn("GeneratorExpression: " + node.EndSourceLocation.Line);
if (node.Declarations.Count != 1) {
// TODO: support unpacking
base.OnGeneratorExpression(node);
foreach (Declaration decl in node.Declarations) {
IterationDeclarationFound(decl.Name, decl.Type, node.Iterator, node.LexicalInfo);
}
base.OnGeneratorExpression(node);
}
public override void OnUnpackStatement(UnpackStatement node)
{
ArrayLiteralExpression ale = node.Expression as ArrayLiteralExpression;
for (int i = 0; i < node.Declarations.Count; i++) {
Declaration decl = node.Declarations[i];
if (acceptImplicit && ale != null && ale.Items.Count > i) {
DeclarationFound(decl.Name, decl.Type, ale.Items[i], decl.LexicalInfo);
} else if (decl.Type != null) {
DeclarationFound(decl.Name, decl.Type, null, decl.LexicalInfo);
}
}
}
}
/// <summary>
/// Finds an variable declaration in the boo AST.
/// </summary>
public class VariableLookupVisitor : VariableLookupVisitorBase
{
string lookFor;
public VariableLookupVisitor(BooResolver resolver, string lookFor, bool acceptImplicit)
{
this.resolver = resolver;
this.lookFor = lookFor;
this.acceptImplicit = acceptImplicit;
}
IField result;
public IField Result {
get {
return result;
}
}
protected override void IterationDeclarationFound(string declarationName, TypeReference declarationType, Expression iterator, LexicalInfo lexicalInfo)
{
if (result != null)
return;
if (declarationName == lookFor) {
if (declarationType != null) {
result = new DefaultField.LocalVariableField(resolver.ConvertType(declarationType),
declarationName,
new DomRegion(lexicalInfo.Line, lexicalInfo.Column),
resolver.CallingClass);
} else if (iterator != null) {
InferResult(iterator, declarationName, lexicalInfo, true);
}
}
if (node.Declarations[0].Name == lookFor) {
Visit(node.Declarations[0]);
InferResult(node.Iterator, node.Declarations[0].Name, node.LexicalInfo, true);
}
protected override void DeclarationFound(string declarationName, TypeReference declarationType, Expression initializer, LexicalInfo lexicalInfo)
{
if (result != null)
return;
if (declarationName == lookFor) {
if (declarationType != null) {
result = new DefaultField.LocalVariableField(resolver.ConvertType(declarationType),
declarationName,
new DomRegion(lexicalInfo.Line, lexicalInfo.Column),
resolver.CallingClass);
} else if (initializer != null) {
InferResult(initializer, declarationName, lexicalInfo, false);
}
}
base.OnGeneratorExpression(node);
}
private void InferResult(Expression expr, string name, LexicalInfo lexicalInfo, bool useElementType)
{
if (expr == null)
return;
IReturnType returnType = new InferredReturnType(expr, resolver.CallingClass);
if (useElementType)
returnType = new ElementReturnType(returnType);
result = new DefaultField.LocalVariableField(returnType, name,
new DomRegion(lexicalInfo.Line, lexicalInfo.Column),
resolver.CallingClass);
}
}
@ -131,10 +150,9 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -131,10 +150,9 @@ namespace Grunwald.BooBinding.CodeCompletion
/// Creates a hashtable name => (Expression or TypeReference) for the local
/// variables in the block that is visited.
/// </summary>
public class VariableListLookupVisitor : DepthFirstVisitor
public class VariableListLookupVisitor : VariableLookupVisitorBase
{
List<string> knownVariableNames;
BooResolver resolver;
public VariableListLookupVisitor(List<string> knownVariableNames, BooResolver resolver)
{
@ -171,48 +189,22 @@ namespace Grunwald.BooBinding.CodeCompletion @@ -171,48 +189,22 @@ namespace Grunwald.BooBinding.CodeCompletion
results.Add(name, resolver.ConvertType(reference));
}
public override void OnDeclaration(Declaration node)
{
Add(node.Name, node.Type);
}
public override void OnDeclarationStatement(DeclarationStatement node)
{
Visit(node.Declaration);
Add(node.Declaration.Name, node.Initializer, false);
}
protected override void OnError(Node node, Exception error)
{
MessageService.ShowError(error, "VariableListLookupVisitor: error processing " + node);
}
public override void OnBinaryExpression(BinaryExpression node)
protected override void DeclarationFound(string declarationName, TypeReference declarationType, Expression initializer, LexicalInfo lexicalInfo)
{
if (node.Operator == BinaryOperatorType.Assign && node.Left is ReferenceExpression) {
ReferenceExpression reference = node.Left as ReferenceExpression;
if (node.Operator == BinaryOperatorType.Assign && reference != null) {
if (!(reference is MemberReferenceExpression)) {
if (!knownVariableNames.Contains(reference.Name)) {
Add(reference.Name, node.Right, false);
}
}
}
if (declarationType != null) {
Add(declarationName, declarationType);
} else if (initializer != null) {
Add(declarationName, initializer, false);
}
base.OnBinaryExpression(node);
}
public override void OnForStatement(ForStatement node)
protected override void IterationDeclarationFound(string declarationName, TypeReference declarationType, Expression initializer, LexicalInfo lexicalInfo)
{
if (node.LexicalInfo.Line > resolver.CaretLine || node.Block.EndSourceLocation.Line < resolver.CaretLine)
return;
if (node.Declarations.Count != 1) {
// TODO: support unpacking
base.OnForStatement(node);
return;
if (declarationType != null) {
Add(declarationName, declarationType);
} else if (initializer != null) {
Add(declarationName, initializer, true);
}
Add(node.Declarations[0].Name, node.Iterator, true);
}
}
}

26
src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/DefaultAssemblyInfo.boo

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
import System.Reflection
import System.Runtime.CompilerServices
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle('')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("1.0.0.0")]

30
src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/FormsProject.xpt

@ -70,35 +70,7 @@ partial class MainForm(System.Windows.Forms.Form): @@ -70,35 +70,7 @@ partial class MainForm(System.Windows.Forms.Form):
self.Name = 'MainForm'
]]></File>
<File name="AssemblyInfo.boo">
<![CDATA[import System.Reflection
import System.Runtime.CompilerServices
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle('')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("1.0.0.0")]
]]></File>
<File name="AssemblyInfo.boo" src="DefaultAssemblyInfo.boo"/>
</Files>
</Project>
</Combine>

30
src/AddIns/BackendBindings/Boo/BooBinding/Project/Templates/Library.xpt

@ -38,35 +38,7 @@ class MyClass: @@ -38,35 +38,7 @@ class MyClass:
pass
]]></File>
<File name="AssemblyInfo.boo">
<![CDATA[import System.Reflection
import System.Runtime.CompilerServices
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle('')]
[assembly: AssemblyDescription('')]
[assembly: AssemblyConfiguration('')]
[assembly: AssemblyCompany('')]
[assembly: AssemblyProduct('')]
[assembly: AssemblyCopyright('')]
[assembly: AssemblyTrademark('')]
[assembly: AssemblyCulture('')]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("1.0.0.0")]
]]></File>
<File name="AssemblyInfo.boo" src="DefaultAssemblyInfo.boo"/>
</Files>
</Project>
</Combine>

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs

@ -333,7 +333,7 @@ namespace ICSharpCode.FormsDesigner @@ -333,7 +333,7 @@ namespace ICSharpCode.FormsDesigner
tabs = line.Substring(0, line.Length - line.TrimStart().Length);
}
this.c = c;
this.completeClass = c.DefaultReturnType.GetUnderlyingClass();
this.completeClass = c.GetCompoundClass();
this.formClass = initializeComponents.DeclaringType;
break;
}

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/NRefactoryDesignerLoader.cs

@ -150,7 +150,7 @@ namespace ICSharpCode.FormsDesigner @@ -150,7 +150,7 @@ namespace ICSharpCode.FormsDesigner
throw new FormsDesignerLoadException("No class derived from Form or UserControl was found.");
// Initialize designer for formClass
formClass = formClass.DefaultReturnType.GetUnderlyingClass();
formClass = formClass.GetCompoundClass();
List<IClass> parts;
if (formClass is CompoundClass) {
parts = (formClass as CompoundClass).Parts;

6
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/SecondaryDisplayBinding.cs

@ -37,9 +37,7 @@ namespace ICSharpCode.FormsDesigner @@ -37,9 +37,7 @@ namespace ICSharpCode.FormsDesigner
public static IMethod GetInitializeComponents(IClass c)
{
c = c.DefaultReturnType.GetUnderlyingClass();
if (c == null)
return null;
c = c.GetCompoundClass();
foreach (IMethod method in c.Methods) {
if (IsInitializeComponentsMethodName(method.Name) && method.Parameters.Count == 0) {
return method;
@ -51,7 +49,7 @@ namespace ICSharpCode.FormsDesigner @@ -51,7 +49,7 @@ namespace ICSharpCode.FormsDesigner
public static bool BaseClassIsFormOrControl(IClass c)
{
// Simple test for fully qualified name
c = c.DefaultReturnType.GetUnderlyingClass();
c = c.GetCompoundClass();
foreach (IReturnType baseType in c.BaseTypes) {
if (baseType.FullyQualifiedName == "System.Windows.Forms.Form"
|| baseType.FullyQualifiedName == "System.Windows.Forms.UserControl"

5
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Debugger.AddIn.csproj

@ -62,6 +62,9 @@ @@ -62,6 +62,9 @@
<Compile Include="..\..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Configuration\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Src\Pads\DebuggerPad.cs" />
<Compile Include="Src\Pads\CallStackPad.Menu.cs" />
<Compile Include="Src\Pads\RunningThreadsPad.Menu.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\Libraries\ICSharpCode.TextEditor\Project\ICSharpCode.TextEditor.csproj">
@ -91,4 +94,4 @@ @@ -91,4 +94,4 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>
</Project>

100
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.Menu.cs

@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1253 $</version>
// </file>
using System;
using System.Windows.Forms;
using System.Drawing;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public partial class CallStackPad
{
public bool ShowArgumentNames {
get {
return debugger.Properties.Get("ShowArgumentNames", true);
}
set {
debugger.Properties.Set("ShowArgumentNames", value);
}
}
public bool ShowArgumentValues {
get {
return debugger.Properties.Get("ShowArgumentValues", true);
}
set {
debugger.Properties.Set("ShowArgumentValues", value);
}
}
public bool ShowExternalMethods {
get {
return debugger.Properties.Get("ShowExternalMethods", false);
}
set {
debugger.Properties.Set("ShowExternalMethods", value);
}
}
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
{
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem argNamesItem;
argNamesItem = new ToolStripMenuItem();
argNamesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentNames");
argNamesItem.Checked = ShowArgumentNames;
argNamesItem.Click += delegate {
ShowArgumentNames = !ShowArgumentNames;
RefreshPad();
};
ToolStripMenuItem argValuesItem;
argValuesItem = new ToolStripMenuItem();
argValuesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentValues");
argValuesItem.Checked = ShowArgumentValues;
argValuesItem.Click += delegate {
ShowArgumentValues = !ShowArgumentValues;
RefreshPad();
};
ToolStripMenuItem extMethodsItem;
extMethodsItem = new ToolStripMenuItem();
extMethodsItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowExternalMethods");
extMethodsItem.Checked = ShowExternalMethods;
extMethodsItem.Click += delegate {
ShowExternalMethods = !ShowExternalMethods;
RefreshPad();
};
menu.Items.AddRange(new ToolStripItem[] {
argNamesItem,
argValuesItem,
extMethodsItem
});
e.Cancel = false;
}
}
}

132
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/CallStackPad.cs

@ -20,11 +20,8 @@ using Debugger; @@ -20,11 +20,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class CallStackPad : AbstractPadContent
public partial class CallStackPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView callStackList;
ColumnHeader name = new ColumnHeader();
@ -36,15 +33,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -36,15 +33,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
public CallStackPad()// : base("${res:MainWindow.Windows.Debug.CallStack}", null)
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
callStackList = new ListView();
callStackList.FullRowSelect = true;
callStackList.AutoArrange = true;
@ -60,24 +50,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -60,24 +50,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
language.Width = 50;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += DebuggeeStateChanged;
debuggerCore.DebuggingResumed += DebuggingResumed;
RefreshList();
}
public override void RedrawContent()
@ -86,82 +58,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -86,82 +58,11 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
language.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.Language");
}
public bool ShowArgumentNames {
get {
return debugger.Properties.Get("ShowArgumentNames", true);
}
set {
debugger.Properties.Set("ShowArgumentNames", value);
}
}
public bool ShowArgumentValues {
get {
return debugger.Properties.Get("ShowArgumentValues", true);
}
set {
debugger.Properties.Set("ShowArgumentValues", value);
}
}
public bool ShowExternalMethods {
get {
return debugger.Properties.Get("ShowExternalMethods", false);
}
set {
debugger.Properties.Set("ShowExternalMethods", value);
}
}
ContextMenuStrip CreateContextMenuStrip()
protected override void RegisterDebuggerEvents()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
{
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem argNamesItem;
argNamesItem = new ToolStripMenuItem();
argNamesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentNames");
argNamesItem.Checked = ShowArgumentNames;
argNamesItem.Click +=
delegate {
ShowArgumentNames = !ShowArgumentNames;
RefreshList();
};
ToolStripMenuItem argValuesItem;
argValuesItem = new ToolStripMenuItem();
argValuesItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowArgumentValues");
argValuesItem.Checked = ShowArgumentValues;
argValuesItem.Click +=
delegate {
ShowArgumentValues = !ShowArgumentValues;
RefreshList();
};
ToolStripMenuItem extMethodsItem;
extMethodsItem = new ToolStripMenuItem();
extMethodsItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.CallStack.ShowExternalMethods");
extMethodsItem.Checked = ShowExternalMethods;
extMethodsItem.Click +=
delegate {
ShowExternalMethods = !ShowExternalMethods;
RefreshList();
};
menu.Items.AddRange(new ToolStripItem[] {
argNamesItem,
argValuesItem,
extMethodsItem
});
e.Cancel = false;
debuggerCore.DebuggeeStateChanged += delegate { RefreshPad(); };
debuggerCore.ProcessExited += delegate { callStackList.Items.Clear(); };
}
void CallStackListItemActivate(object sender, EventArgs e)
@ -169,8 +70,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -169,8 +70,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
if (debuggerCore.IsPaused) {
Function f = (Function)(callStackList.SelectedItems[0].Tag);
if (f.HasSymbols) {
if (debuggerCore.CurrentThread != null) {
debuggerCore.CurrentThread.SetCurrentFunction(f);
if (debuggerCore.SelectedThread != null) {
debuggerCore.SelectedThread.SelectedFunction = f;
debuggerCore.OnDebuggeeStateChanged(); // Force refresh of pads
}
} else {
MessageBox.Show("You can not switch to function without symbols", "Function switch");
@ -179,18 +81,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -179,18 +81,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
MessageBox.Show("You can not switch functions while the debugger is running.", "Function switch");
}
}
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
RefreshList();
}
void DebuggingResumed(object sender, DebuggerEventArgs e)
{
RefreshList();
}
public void RefreshList()
public override void RefreshPad()
{
bool showArgumentNames = ShowArgumentNames;
bool showArgumentValues = ShowArgumentValues;
@ -200,8 +92,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -200,8 +92,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
callStackList.BeginUpdate();
callStackList.Items.Clear();
if (debuggerCore != null && debuggerCore.CurrentThread != null) {
foreach (Function f in debuggerCore.CurrentThread.Callstack) {
if (debuggerCore != null && debuggerCore.SelectedThread != null && debuggerCore.IsPaused) {
foreach (Function f in debuggerCore.SelectedThread.Callstack) {
ListViewItem item;
if (f.HasSymbols || showExternalMethods) {
// Show the method in the list

60
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/DebuggerPad.cs

@ -0,0 +1,60 @@ @@ -0,0 +1,60 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1064 $</version>
// </file>
using System;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public abstract class DebuggerPad: AbstractPadContent
{
protected WindowsDebugger debugger;
protected NDebugger debuggerCore;
public DebuggerPad()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
InitializeComponents();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
protected virtual void InitializeComponents()
{
}
void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
RegisterDebuggerEvents();
RefreshPad();
}
protected virtual void RegisterDebuggerEvents()
{
}
public virtual void RefreshPad()
{
}
}
}

69
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/ExceptionHistoryPad.cs

@ -10,6 +10,7 @@ using System.Windows.Forms; @@ -10,6 +10,7 @@ using System.Windows.Forms;
using System.Drawing;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core;
@ -19,13 +20,12 @@ using Debugger; @@ -19,13 +20,12 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class ExceptionHistoryPad : AbstractPadContent
public class ExceptionHistoryPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView exceptionHistoryList;
List<Debugger.Exception> exceptions = new List<Debugger.Exception>();
ColumnHeader time = new ColumnHeader();
ColumnHeader exception = new ColumnHeader();
ColumnHeader location = new ColumnHeader();
@ -36,15 +36,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -36,15 +36,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
public ExceptionHistoryPad()
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
exceptionHistoryList = new ListView();
exceptionHistoryList.FullRowSelect = true;
exceptionHistoryList.AutoArrange = true;
@ -60,25 +53,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -60,25 +53,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
time.Width = 80;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debugger.ExceptionHistoryModified += new EventHandler(ExceptionHistoryModified);
RefreshList();
}
public override void RedrawContent()
{
time.Text = ResourceService.GetString("MainWindow.Windows.Debug.ExceptionHistory.Time");
@ -86,6 +62,21 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -86,6 +62,21 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
location.Text = ResourceService.GetString("AddIns.HtmlHelp2.Location");
}
protected override void RegisterDebuggerEvents()
{
debuggerCore.ProcessExited += delegate {
exceptions.Clear();
RefreshPad();
};
debuggerCore.DebuggingPaused += delegate (object sender, DebuggingPausedEventArgs e) {
if (e.Reason == PausedReason.Exception) {
exceptions.Add(debuggerCore.SelectedThread.CurrentException);
RefreshPad();
}
};
}
void ExceptionHistoryListItemActivate(object sender, EventArgs e)
{
SourcecodeSegment nextStatement = ((Debugger.Exception)(exceptionHistoryList.SelectedItems[0].Tag)).Location;
@ -102,31 +93,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -102,31 +93,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
if (content is IPositionable) {
((IPositionable)content).JumpTo((int)nextStatement.StartLine - 1, (int)nextStatement.StartColumn - 1);
}
/*if (content.Control is TextEditorControl) {
IDocument document = ((TextEditorControl)content.Control).Document;
LineSegment line = document.GetLineSegment((int)nextStatement.StartLine - 1);
int offset = line.Offset + (int)nextStatement.StartColumn;
currentLineMarker = new TextMarker(offset, (int)nextStatement.EndColumn - (int)nextStatement.StartColumn, TextMarkerType.SolidBlock, Color.Yellow);
currentLineMarkerParent = document;
currentLineMarkerParent.MarkerStrategy.TextMarker.Add(currentLineMarker);
document.RequestUpdate(new TextAreaUpdate(TextAreaUpdateType.WholeTextArea));
document.CommitUpdate();
}*/
}
}
void ExceptionHistoryModified(object sender, EventArgs e)
{
RefreshList();
}
public void RefreshList()
public override void RefreshPad()
{
exceptionHistoryList.BeginUpdate();
exceptionHistoryList.Items.Clear();
foreach(Debugger.Exception exception in debugger.ExceptionHistory) {
foreach(Debugger.Exception exception in exceptions) {
string location;
if (exception.Location != null) {
location = exception.Location.SourceFilename + ":" + exception.Location.StartLine;

43
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LoadedModulesPad.cs

@ -19,11 +19,8 @@ using Debugger; @@ -19,11 +19,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class LoadedModulesPad : AbstractPadContent
public class LoadedModulesPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView loadedModulesList;
ColumnHeader name = new ColumnHeader();
@ -41,16 +38,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -41,16 +38,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
return loadedModulesList;
}
}
public LoadedModulesPad() //: base("${res:MainWindow.Windows.Debug.Modules}", null)
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
loadedModulesList = new ListView();
loadedModulesList.FullRowSelect = true;
loadedModulesList.AutoArrange = true;
@ -70,24 +60,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -70,24 +60,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
information.Width = 130;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.ModuleLoaded += new EventHandler<ModuleEventArgs>(AddModule);
debuggerCore.ModuleUnloaded += new EventHandler<ModuleEventArgs>(RemoveModule);
RefreshList();
}
public override void RedrawContent()
@ -101,8 +73,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -101,8 +73,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
timestamp.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.TimestampColumn}");
information.Text = StringParser.Parse("${res:MainWindow.Windows.Debug.InformationColumn}");
}
protected override void RegisterDebuggerEvents()
{
debuggerCore.ModuleLoaded += AddModule;
debuggerCore.ModuleUnloaded += RemoveModule;
}
void RefreshList()
public override void RefreshPad()
{
loadedModulesList.Items.Clear();
foreach(Module m in debuggerCore.Modules) {

47
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/LocalVarPad.cs

@ -20,11 +20,8 @@ using System.Collections.Generic; @@ -20,11 +20,8 @@ using System.Collections.Generic;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class LocalVarPad : AbstractPadContent
public class LocalVarPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
TreeListView localVarList;
ColumnHeader name = new ColumnHeader();
@ -37,15 +34,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -37,15 +34,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
}
}
public LocalVarPad() //: base("${res:MainWindow.Windows.Debug.Local}", null)
{
InitializeComponents();
}
void InitializeComponents()
protected override void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
//iconsService = (ClassBrowserIconsService)ServiceManager.Services.GetService(typeof(ClassBrowserIconsService));
localVarList = new TreeListView();
localVarList.SmallImageList = DebuggerIcons.ImageList;
@ -65,14 +55,13 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -65,14 +55,13 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public override void RedrawContent()
{
name.Text = ResourceService.GetString("Global.Name");
val.Text = ResourceService.GetString("Dialog.HighlightingEditor.Properties.Value");
type.Text = ResourceService.GetString("ResourceEditor.ResourceEdit.TypeColumn");
}
// This is a walkarond for a visual issue
@ -81,13 +70,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -81,13 +70,16 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
localVarList.Visible = true;
}
public void InitializeDebugger()
protected override void RegisterDebuggerEvents()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += delegate { debuggerCore.LocalVariables.Update(); };
}
public override void RefreshPad()
{
localVarList.BeginUpdate();
localVarList.Items.Clear();
AddVariableCollectionToTree(debuggerCore.LocalVariables, localVarList.Items);
localVarList.EndUpdate();
}
@ -109,13 +101,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -109,13 +101,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
tree.Add(newItem);
}
public override void RedrawContent()
{
name.Text = ResourceService.GetString("Global.Name");
val.Text = ResourceService.GetString("Dialog.HighlightingEditor.Properties.Value");
type.Text = ResourceService.GetString("ResourceEditor.ResourceEdit.TypeColumn");
}
private void localVarList_BeforeExpand(object sender, TreeListViewCancelEventArgs e)
{

76
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.Menu.cs

@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision: 1253 $</version>
// </file>
using System;
using System.Windows.Forms;
using System.Drawing;
using System.CodeDom.Compiler;
using System.Collections;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Services;
using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public partial class RunningThreadsPad
{
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
{
ListView.SelectedListViewItemCollection items = runningThreadsList.SelectedItems;
if (items.Count == 0) {
e.Cancel = true;
return;
}
ListViewItem item = items[0];
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem freezeItem;
freezeItem = new ToolStripMenuItem();
freezeItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Freeze");
freezeItem.Checked = (item.Tag as Thread).Suspended;
freezeItem.Click +=
delegate {
ListView.SelectedListViewItemCollection selItems = runningThreadsList.SelectedItems;
if (selItems.Count == 0) {
return;
}
bool suspended = (selItems[0].Tag as Thread).Suspended;
if (!debuggerCore.IsPaused) {
MessageBox.Show("You can not freeze or thaw thread while the debugger is running.", "Thread freeze");
return;
}
foreach(ListViewItem i in selItems) {
(i.Tag as Thread).Suspended = !suspended;
}
RefreshPad();
};
menu.Items.AddRange(new ToolStripItem[] {
freezeItem,
});
e.Cancel = false;
}
}
}

134
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Pads/RunningThreadsPad.cs

@ -20,11 +20,8 @@ using Debugger; @@ -20,11 +20,8 @@ using Debugger;
namespace ICSharpCode.SharpDevelop.Gui.Pads
{
public class RunningThreadsPad : AbstractPadContent
public partial class RunningThreadsPad : DebuggerPad
{
WindowsDebugger debugger;
NDebugger debuggerCore;
ListView runningThreadsList;
ColumnHeader id = new ColumnHeader();
@ -38,16 +35,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -38,16 +35,9 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
return runningThreadsList;
}
}
public RunningThreadsPad() //: base("${res:MainWindow.Windows.Debug.Threads}", null)
{
InitializeComponents();
}
void InitializeComponents()
{
debugger = (WindowsDebugger)DebuggerService.CurrentDebugger;
protected override void InitializeComponents()
{
runningThreadsList = new ListView();
runningThreadsList.FullRowSelect = true;
runningThreadsList.AutoArrange = true;
@ -66,26 +56,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -66,26 +56,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breaked.Width = 80;
RedrawContent();
if (debugger.ServiceInitialized) {
InitializeDebugger();
} else {
debugger.Initialize += delegate {
InitializeDebugger();
};
}
}
public void InitializeDebugger()
{
debuggerCore = debugger.DebuggerCore;
debuggerCore.DebuggeeStateChanged += DebuggeeStateChanged;
debuggerCore.ThreadStarted += ThreadStarted;
debuggerCore.ThreadStateChanged += ThreadStateChanged;
debuggerCore.ThreadExited += ThreadExited;
RefreshList();
}
public override void RedrawContent()
@ -97,58 +67,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -97,58 +67,22 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
breaked.Text = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Frozen");
}
ContextMenuStrip CreateContextMenuStrip()
{
ContextMenuStrip menu = new ContextMenuStrip();
menu.Opening += FillContextMenuStrip;
return menu;
}
void FillContextMenuStrip(object sender, CancelEventArgs e)
protected override void RegisterDebuggerEvents()
{
ListView.SelectedListViewItemCollection items = runningThreadsList.SelectedItems;
if (items.Count == 0) {
e.Cancel = true;
return;
}
ListViewItem item = items[0];
ContextMenuStrip menu = sender as ContextMenuStrip;
menu.Items.Clear();
ToolStripMenuItem freezeItem;
freezeItem = new ToolStripMenuItem();
freezeItem.Text = ResourceService.GetString("MainWindow.Windows.Debug.Threads.Freeze");
freezeItem.Checked = (item.Tag as Thread).Suspended;
freezeItem.Click +=
delegate {
ListView.SelectedListViewItemCollection selItems = runningThreadsList.SelectedItems;
if (selItems.Count == 0) {
return;
}
bool suspended = (selItems[0].Tag as Thread).Suspended;
if (!debuggerCore.IsPaused) {
MessageBox.Show("You can not freeze or thaw thread while the debugger is running.", "Thread freeze");
return;
}
foreach(ListViewItem i in selItems) {
(i.Tag as Thread).Suspended = !suspended;
}
RefreshList();
debuggerCore.DebuggeeStateChanged += delegate { RefreshPad(); };
debuggerCore.ThreadStarted += delegate(object sender, ThreadEventArgs e) {
AddThread(e.Thread);
};
debuggerCore.ThreadStateChanged += delegate(object sender, ThreadEventArgs e) {
RefreshThread(e.Thread);
};
debuggerCore.ThreadExited += delegate(object sender, ThreadEventArgs e) {
RemoveThread(e.Thread);
};
menu.Items.AddRange(new ToolStripItem[] {
freezeItem,
});
e.Cancel = false;
}
void RefreshList()
public override void RefreshPad()
{
foreach (Thread t in debuggerCore.Threads) {
RefreshThread(t);
@ -158,34 +92,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -158,34 +92,14 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
void RunningThreadsListItemActivate(object sender, EventArgs e)
{
if (debuggerCore.IsPaused) {
if (debuggerCore.CurrentProcess != null) {
debuggerCore.CurrentProcess.SetCurrentThread((Thread)(runningThreadsList.SelectedItems[0].Tag));
if (debuggerCore.SelectedProcess != null) {
debuggerCore.SelectedProcess.SelectedThread = (Thread)(runningThreadsList.SelectedItems[0].Tag);
debuggerCore.OnDebuggeeStateChanged(); // Force refresh of pads
}
} else {
MessageBox.Show("You can not switch threads while the debugger is running.", "Thread switch");
}
}
void DebuggeeStateChanged(object sender, DebuggerEventArgs e)
{
RefreshList();
}
void ThreadStarted(object sender, ThreadEventArgs e)
{
AddThread(e.Thread);
}
void ThreadStateChanged(object sender, ThreadEventArgs e)
{
RefreshThread(e.Thread);
}
void ThreadExited(object sender, ThreadEventArgs e)
{
RemoveThread(e.Thread);
}
}
void AddThread(Thread thread)
{
@ -201,10 +115,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -201,10 +115,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
item.Text = thread.ID.ToString();
item.Tag = thread;
item.SubItems.Add(thread.Name);
Function location;
location = thread.LastFunctionWithLoadedSymbols;
if (location == null) {
location = thread.LastFunction;
Function location = null;
if (thread.Process.IsPaused) {
location = thread.LastFunctionWithLoadedSymbols;
if (location == null) {
location = thread.LastFunction;
}
}
if (location != null) {
item.SubItems.Add(location.Name);

11
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/DynamicTreeDebuggerRow.cs

@ -146,7 +146,16 @@ namespace ICSharpCode.SharpDevelop.Services @@ -146,7 +146,16 @@ namespace ICSharpCode.SharpDevelop.Services
protected override void OnExpanding(DynamicListEventArgs e)
{
if (!populated) {
Populate();
if (Variable.Debugger.IsPaused) {
Populate();
} else {
EventHandler<DebuggingPausedEventArgs> populate = null;
populate = delegate {
Populate();
Variable.Debugger.DebuggingPaused -= populate;
};
Variable.Debugger.DebuggingPaused += populate;
}
}
}

90
src/AddIns/Misc/Debugger/Debugger.AddIn/Project/Src/Service/WindowsDebugger.cs

@ -39,21 +39,8 @@ namespace ICSharpCode.SharpDevelop.Services @@ -39,21 +39,8 @@ namespace ICSharpCode.SharpDevelop.Services
Properties properties;
bool isDebuggingCache = false;
bool isProcessRunningCache = false;
bool serviceInitialized = false;
List<Debugger.Exception> exceptionHistory = new List<Debugger.Exception>();
public event EventHandler ExceptionHistoryModified;
protected virtual void OnExceptionHistoryModified()
{
if (ExceptionHistoryModified != null) {
ExceptionHistoryModified(this, EventArgs.Empty);
}
}
public NDebugger DebuggerCore {
get {
return debugger;
@ -71,12 +58,6 @@ namespace ICSharpCode.SharpDevelop.Services @@ -71,12 +58,6 @@ namespace ICSharpCode.SharpDevelop.Services
return serviceInitialized;
}
}
public IList<Debugger.Exception> ExceptionHistory {
get {
return exceptionHistory.AsReadOnly();
}
}
public WindowsDebugger()
{
@ -87,13 +68,13 @@ namespace ICSharpCode.SharpDevelop.Services @@ -87,13 +68,13 @@ namespace ICSharpCode.SharpDevelop.Services
public bool IsDebugging {
get {
return isDebuggingCache;
return serviceInitialized && (debugger.Processes.Count > 0);
}
}
public bool IsProcessRunning {
get {
return isProcessRunningCache;
return IsDebugging && debugger.IsRunning;
}
}
@ -138,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -138,7 +119,7 @@ namespace ICSharpCode.SharpDevelop.Services
public void StepInto()
{
if (debugger.CurrentFunction == null) {
if (debugger.SelectedFunction == null || debugger.IsRunning) {
MessageBox.Show("You can not step because there is no function selected to be stepped","Step into");
} else {
debugger.StepInto();
@ -147,7 +128,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -147,7 +128,7 @@ namespace ICSharpCode.SharpDevelop.Services
public void StepOver()
{
if (debugger.CurrentFunction == null) {
if (debugger.SelectedFunction == null || debugger.IsRunning) {
MessageBox.Show("You can not step because there is no function selected to be stepped","Step over");
} else {
debugger.StepOver();
@ -156,7 +137,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -156,7 +137,7 @@ namespace ICSharpCode.SharpDevelop.Services
public void StepOut()
{
if (debugger.CurrentFunction == null) {
if (debugger.SelectedFunction == null || debugger.IsRunning) {
MessageBox.Show("You can not step because there is no function selected to be stepped","Step out");
} else {
debugger.StepOut();
@ -164,15 +145,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -164,15 +145,7 @@ namespace ICSharpCode.SharpDevelop.Services
}
public event EventHandler DebugStarted;
protected virtual void OnDebugStarted(EventArgs e)
{
if (DebugStarted != null) {
DebugStarted(this, e);
}
}
public event EventHandler DebugStopped;
public event EventHandler IsProcessRunningChanged;
protected virtual void OnIsProcessRunningChanged(EventArgs e)
@ -181,16 +154,6 @@ namespace ICSharpCode.SharpDevelop.Services @@ -181,16 +154,6 @@ namespace ICSharpCode.SharpDevelop.Services
IsProcessRunningChanged(this, e);
}
}
public event EventHandler DebugStopped;
protected virtual void OnDebugStopped(EventArgs e)
{
if (DebugStopped != null) {
DebugStopped(this, e);
}
}
/// <summary>
/// Gets variable of given name.
@ -233,7 +196,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -233,7 +196,7 @@ namespace ICSharpCode.SharpDevelop.Services
/// </summary>
public DebuggerGridControl GetTooltipControl(string variableName)
{
Variable variable = GetVariableFromName(variableName);
Variable variable = GetVariableFromName(variableName.Trim());
if (variable == null) {
return null;
@ -244,8 +207,8 @@ namespace ICSharpCode.SharpDevelop.Services @@ -244,8 +207,8 @@ namespace ICSharpCode.SharpDevelop.Services
public bool CanSetInstructionPointer(string filename, int line, int column)
{
if (debugger != null && debugger.IsPaused && debugger.CurrentFunction != null) {
SourcecodeSegment seg = debugger.CurrentFunction.CanSetIP(filename, line, column);
if (debugger != null && debugger.IsPaused && debugger.SelectedFunction != null) {
SourcecodeSegment seg = debugger.SelectedFunction.CanSetIP(filename, line, column);
return seg != null;
} else {
return false;
@ -255,7 +218,7 @@ namespace ICSharpCode.SharpDevelop.Services @@ -255,7 +218,7 @@ namespace ICSharpCode.SharpDevelop.Services
public bool SetInstructionPointer(string filename, int line, int column)
{
if (CanSetInstructionPointer(filename, line, column)) {
SourcecodeSegment seg = debugger.CurrentFunction.SetIP(filename, line, column);
SourcecodeSegment seg = debugger.SelectedFunction.SetIP(filename, line, column);
return seg != null;
} else {
return false;
@ -296,9 +259,6 @@ namespace ICSharpCode.SharpDevelop.Services @@ -296,9 +259,6 @@ namespace ICSharpCode.SharpDevelop.Services
foreach (BreakpointBookmark b in DebuggerService.Breakpoints) {
AddBreakpoint(b);
}
isDebuggingCache = false;
isProcessRunningCache = true;
if (Initialize != null) {
Initialize(this, null);
@ -346,31 +306,27 @@ namespace ICSharpCode.SharpDevelop.Services @@ -346,31 +306,27 @@ namespace ICSharpCode.SharpDevelop.Services
void ProcessStarted(object sender, ProcessEventArgs e)
{
if (debugger.Processes.Count == 1) {
OnDebugStarted(EventArgs.Empty);
isDebuggingCache = true;
isProcessRunningCache = true;
if (DebugStarted != null) {
DebugStarted(this, EventArgs.Empty);
}
}
}
void ProcessExited(object sender, ProcessEventArgs e)
{
if (debugger.Processes.Count == 0) {
exceptionHistory.Clear();
OnDebugStopped(EventArgs.Empty);
isDebuggingCache = false;
isProcessRunningCache = false;
if (DebugStopped != null) {
DebugStopped(this, e);
}
}
}
void DebuggingPaused(object sender, DebuggingPausedEventArgs e)
{
isProcessRunningCache = false;
OnIsProcessRunningChanged(EventArgs.Empty);
if (e.Reason == PausedReason.Exception) {
exceptionHistory.Add(debugger.CurrentThread.CurrentException);
OnExceptionHistoryModified();
if (debugger.CurrentThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED) {
if (debugger.SelectedThread.CurrentException.ExceptionType != ExceptionType.DEBUG_EXCEPTION_UNHANDLED) {
// Ignore the exception
e.ResumeDebuggingAfterEvent();
return;
@ -378,14 +334,15 @@ namespace ICSharpCode.SharpDevelop.Services @@ -378,14 +334,15 @@ namespace ICSharpCode.SharpDevelop.Services
JumpToCurrentLine();
switch (ExceptionForm.Show(debugger.CurrentThread.CurrentException)) {
switch (ExceptionForm.Show(debugger.SelectedThread.CurrentException)) {
case ExceptionForm.Result.Break:
break;
case ExceptionForm.Result.Continue:
e.ResumeDebuggingAfterEvent();
return;
case ExceptionForm.Result.Ignore:
debugger.CurrentThread.InterceptCurrentException();
debugger.SelectedThread.InterceptCurrentException();
e.ResumeDebuggingAfterEvent(); // HACK: Start interception
break;
}
}
@ -398,7 +355,6 @@ namespace ICSharpCode.SharpDevelop.Services @@ -398,7 +355,6 @@ namespace ICSharpCode.SharpDevelop.Services
void DebuggingResumed(object sender, DebuggerEventArgs e)
{
isProcessRunningCache = true;
if (!debugger.Evaluating) {
DebuggerService.RemoveCurrentLineMarker();
}
@ -410,9 +366,9 @@ namespace ICSharpCode.SharpDevelop.Services @@ -410,9 +366,9 @@ namespace ICSharpCode.SharpDevelop.Services
SourcecodeSegment nextStatement = debugger.NextStatement;
if (nextStatement == null) {
DebuggerService.RemoveCurrentLineMarker();
return;
} else {
DebuggerService.JumpToCurrentLine(nextStatement.SourceFullFilename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn);
}
DebuggerService.JumpToCurrentLine(nextStatement.SourceFullFilename, nextStatement.StartLine, nextStatement.StartColumn, nextStatement.EndLine, nextStatement.EndColumn);
}
}
}

3
src/AddIns/Misc/Debugger/Debugger.Core/Project/Debugger.Core.csproj

@ -373,6 +373,9 @@ @@ -373,6 +373,9 @@
<Compile Include="Src\Wrappers\CorSym\Autogenerated\ISymUnmanagedDispose.cs" />
<Compile Include="Src\Debugger\DebugeeState.cs" />
<Compile Include="Src\Debugger\PauseSession.cs" />
<Compile Include="Src\Wrappers\CorDebug\ICorDebugStepper.cs" />
<Compile Include="Src\Wrappers\CorDebug\ICorDebugChainEnum.cs" />
<Compile Include="Src\Wrappers\CorDebug\ICorDebugFrameEnum.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="README.TXT" />

72
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/Internal/ManagedCallback.cs

@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
// \1\2\n\1{\n\1\tEnterCallback(PausedReason.Other, "\3");\n\1\t\n\1\tExitCallback_Continue();\n\1}
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Debugger.Wrappers.CorDebug;
@ -37,10 +38,11 @@ namespace Debugger @@ -37,10 +38,11 @@ namespace Debugger
void EnterCallback(PausedReason pausedReason, string name, ICorDebugProcess pProcess)
{
debugger.TraceMessage("Callback: " + name);
debugger.AssertRunning();
// ExitProcess may be called at any time when debuggee is killed
if (name != "ExitProcess") debugger.AssertRunning();
debugger.PauseSession = new PauseSession(pausedReason);
debugger.CurrentProcess = debugger.GetProcess(pProcess);
debugger.CurrentProcess.IsRunning = false;
debugger.SelectedProcess = debugger.GetProcess(pProcess);
debugger.SelectedProcess.IsRunning = false;
}
void EnterCallback(PausedReason pausedReason, string name, ICorDebugAppDomain pAppDomain)
@ -55,22 +57,32 @@ namespace Debugger @@ -55,22 +57,32 @@ namespace Debugger
if (name != "ExitProcess") debugger.AssertRunning();
Thread thread = debugger.GetThread(pThread);
debugger.PauseSession = new PauseSession(pausedReason);
debugger.CurrentProcess = thread.Process;
debugger.CurrentProcess.IsRunning = false;
debugger.CurrentProcess.CurrentThread = thread;
debugger.SelectedProcess = thread.Process;
debugger.SelectedProcess.IsRunning = false;
debugger.SelectedProcess.SelectedThread = thread;
}
void ExitCallback_Continue()
{
debugger.CurrentProcess.Continue();
debugger.SelectedProcess.Continue();
}
void ExitCallback_Paused()
{
if (debugger.CurrentThread != null) {
debugger.CurrentThread.DeactivateAllSteppers();
if (debugger.Evaluating) {
// Ignore events during property evaluation
ExitCallback_Continue();
} else {
if (debugger.SelectedThread != null) {
// Disable all steppers - do not Deactivate since function tracking still needs them
foreach(Stepper s in debugger.SelectedThread.Steppers) {
s.PauseWhenComplete = false;
}
debugger.SelectedThread.SelectedFunction = debugger.SelectedThread.LastFunctionWithLoadedSymbols;
}
debugger.Pause();
}
debugger.Pause();
}
@ -80,23 +92,22 @@ namespace Debugger @@ -80,23 +92,22 @@ namespace Debugger
{
EnterCallback(PausedReason.StepComplete, "StepComplete (" + reason.ToString() + ")", pThread);
Stepper stepper = debugger.GetThread(pThread).GetStepper(pStepper);
if (stepper != null) {
stepper.OnStepComplete();
if (!stepper.PauseWhenComplete) {
Thread thread = debugger.GetThread(pThread);
Stepper stepper = thread.GetStepper(pStepper);
thread.Steppers.Remove(stepper);
stepper.OnStepComplete();
if (stepper.PauseWhenComplete) {
if (debugger.SelectedThread.LastFunction.HasSymbols) {
ExitCallback_Paused();
} else {
// This should not happen with JMC enabled
debugger.TraceMessage(" - leaving code without symbols");
ExitCallback_Continue();
return;
}
}
if (!debugger.CurrentThread.LastFunction.HasSymbols) {
// This should not happen with JMC enabled
debugger.TraceMessage(" - leaving code without symbols");
ExitCallback_Continue();
} else {
ExitCallback_Paused();
ExitCallback_Continue();
}
}
@ -339,11 +350,16 @@ namespace Debugger @@ -339,11 +350,16 @@ namespace Debugger
debugger.RemoveThread(thread);
if (thread.Process.CurrentThread == thread) {
thread.Process.CurrentThread = null;
if (thread.Process.SelectedThread == thread) {
thread.Process.SelectedThread = null;
}
ExitCallback_Continue();
try {
ExitCallback_Continue();
} catch (COMException e) {
// For some reason this sometimes happens in .NET 1.1
debugger.TraceMessage("Continue failed in ExitThread callback: " + e.Message);
}
}
public void ExitAppDomain(ICorDebugProcess pProcess, ICorDebugAppDomain pAppDomain)
@ -400,7 +416,7 @@ namespace Debugger @@ -400,7 +416,7 @@ namespace Debugger
// Whatch out for the zeros and null!
// Exception -> Exception2(pAppDomain, pThread, null, 0, exceptionType, 0);
debugger.CurrentThread.CurrentExceptionType = (ExceptionType)exceptionType;
debugger.SelectedThread.CurrentExceptionType = (ExceptionType)exceptionType;
if (ExceptionType.DEBUG_EXCEPTION_UNHANDLED != (ExceptionType)exceptionType) {
// Handled exception

64
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger-StateControl.cs

@ -24,7 +24,7 @@ namespace Debugger @@ -24,7 +24,7 @@ namespace Debugger
PauseSession pauseSession;
DebugeeState debugeeState;
Process currentProcess;
Process selectedProcess;
public event EventHandler<DebuggerEventArgs> DebuggingResumed;
public event EventHandler<DebuggingPausedEventArgs> DebuggingPaused;
@ -59,7 +59,8 @@ namespace Debugger @@ -59,7 +59,8 @@ namespace Debugger
}
}
protected virtual void OnDebuggeeStateChanged()
// HACK: should not be public
public virtual void OnDebuggeeStateChanged()
{
TraceMessage ("Debugger event: OnDebuggeeStateChanged (" + PausedReason.ToString() + ")");
if (DebuggeeStateChanged != null) {
@ -67,35 +68,31 @@ namespace Debugger @@ -67,35 +68,31 @@ namespace Debugger
}
}
public Process CurrentProcess {
public Process SelectedProcess {
get {
if (IsRunning) return null;
if (currentProcess == null) {
return null;
} else {
return currentProcess;
}
return selectedProcess;
}
set {
currentProcess = value;
selectedProcess = value;
}
}
public Thread CurrentThread {
public Thread SelectedThread {
get {
if (IsRunning) return null;
if (CurrentProcess == null) return null;
return CurrentProcess.CurrentThread;
if (SelectedProcess == null) {
return null;
} else {
return SelectedProcess.SelectedThread;
}
}
}
public Function CurrentFunction {
public Function SelectedFunction {
get {
if (IsRunning) return null;
if (CurrentThread == null) {
if (SelectedThread == null) {
return null;
} else {
return CurrentThread.CurrentFunction;
return SelectedThread.SelectedFunction;
}
}
}
@ -119,6 +116,10 @@ namespace Debugger @@ -119,6 +116,10 @@ namespace Debugger
get {
return debugeeState;
}
private set {
debugeeState = value;
OnDebuggeeStateChanged();
}
}
public void AssertPaused()
@ -160,17 +161,14 @@ namespace Debugger @@ -160,17 +161,14 @@ namespace Debugger
internal void Pause()
{
if (PausedReason != PausedReason.EvalComplete) {
DebugeeState = new DebugeeState();
}
OnDebuggingPaused();
// Debugger state is unknown after calling OnDebuggingPaused (it may be resumed)
if (IsPaused) {
if (PausedReason != PausedReason.EvalComplete) {
debugeeState = new DebugeeState();
OnDebuggeeStateChanged();
}
}
if (IsPaused) {
pausedHandle.Set();
}
@ -181,14 +179,10 @@ namespace Debugger @@ -181,14 +179,10 @@ namespace Debugger
if (IsRunning) {
throw new DebuggerException("Already resumed");
}
pauseSession = null;
OnDebuggingResumed();
pausedHandle.Reset();
pauseSession = null;
currentProcess = null;
}
/// <summary>
@ -230,22 +224,22 @@ namespace Debugger @@ -230,22 +224,22 @@ namespace Debugger
public void StepInto()
{
CurrentFunction.StepInto();
SelectedFunction.StepInto();
}
public void StepOver()
{
CurrentFunction.StepOver();
SelectedFunction.StepOver();
}
public void StepOut()
{
CurrentFunction.StepOut();
SelectedFunction.StepOut();
}
public void Continue()
{
CurrentProcess.Continue();
SelectedProcess.Continue();
}
public void Terminate()

12
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Debugger/NDebugger.cs

@ -130,7 +130,7 @@ namespace Debugger @@ -130,7 +130,7 @@ namespace Debugger
ClearThreads();
currentProcess = null;
selectedProcess = null;
pausedHandle.Reset();
pauseSession = null;
@ -201,10 +201,10 @@ namespace Debugger @@ -201,10 +201,10 @@ namespace Debugger
public SourcecodeSegment NextStatement {
get {
if (CurrentFunction == null) {
if (SelectedFunction == null || IsRunning) {
return null;
} else {
return CurrentFunction.NextStatement;
return SelectedFunction.NextStatement;
}
}
}
@ -218,11 +218,11 @@ namespace Debugger @@ -218,11 +218,11 @@ namespace Debugger
void OnUpdatingLocalVariables(object sender, VariableCollectionEventArgs e)
{
if (CurrentFunction == null) {
if (SelectedFunction == null || IsRunning) {
e.VariableCollection.UpdateTo(new Variable[] {}); // Make it empty
} else {
e.VariableCollection.UpdateTo(CurrentFunction.Variables);
CurrentFunction.Expired += delegate {
e.VariableCollection.UpdateTo(SelectedFunction.Variables);
SelectedFunction.Expired += delegate {
e.VariableCollection.UpdateTo(new Variable[] {});
};
}

137
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Function.cs

@ -25,6 +25,8 @@ namespace Debugger @@ -25,6 +25,8 @@ namespace Debugger
ICorDebugILFrame corILFrame;
object corILFramePauseSession;
Stepper stepOutStepper;
bool steppedOut;
Thread thread;
uint chainIndex;
@ -109,18 +111,17 @@ namespace Debugger @@ -109,18 +111,17 @@ namespace Debugger
this.thread = thread;
this.chainIndex = chainIndex;
this.frameIndex = frameIndex;
this.corILFrame = corILFrame;
this.corILFramePauseSession = debugger.PauseSession;
this.CorILFrame = corILFrame;
corFunction = corILFrame.Function;
module = debugger.GetModule(corFunction.Module);
methodProps = module.MetaData.GetMethodProps(corFunction.Token);
// Expiry the function when it is finished
Stepper tracingStepper = thread.CreateStepper();
tracingStepper.CorStepper.StepOut();
tracingStepper.PauseWhenComplete = false;
tracingStepper.StepComplete += delegate {
stepOutStepper = CreateStepper();
stepOutStepper.CorStepper.StepOut();
stepOutStepper.PauseWhenComplete = false;
stepOutStepper.StepComplete += delegate {
steppedOut = true;
OnExpired(EventArgs.Empty);
};
@ -130,11 +131,15 @@ namespace Debugger @@ -130,11 +131,15 @@ namespace Debugger
get {
if (HasExpired) throw new DebuggerException("Function has expired");
if (corILFramePauseSession != debugger.PauseSession) {
corILFrame = thread.GetFunctionAt(chainIndex, frameIndex).CorILFrame;
corILFramePauseSession = debugger.PauseSession;
CorILFrame = thread.GetFrameAt(chainIndex, frameIndex).As<ICorDebugILFrame>();
}
return corILFrame;
}
set {
if (value == null) throw new DebuggerException("Can not set frame to null");
corILFrame = value;
corILFramePauseSession = debugger.PauseSession;
}
}
internal uint corInstructionPtr {
@ -167,6 +172,17 @@ namespace Debugger @@ -167,6 +172,17 @@ namespace Debugger
}
}
internal Stepper CreateStepper()
{
Stepper stepper = new Stepper(debugger, corILFrame.CreateStepper());
if (stepper.CorStepper.Is<ICorDebugStepper2>()) { // Is the debuggee .NET 2.0?
stepper.CorStepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
(stepper.CorStepper.CastTo<ICorDebugStepper2>()).SetJMC(1 /* true */);
}
thread.Steppers.Add(stepper);
return stepper;
}
public void StepInto()
{
Step(true);
@ -179,11 +195,7 @@ namespace Debugger @@ -179,11 +195,7 @@ namespace Debugger
public void StepOut()
{
ICorDebugStepper stepper = CorILFrame.CreateStepper();
stepper.StepOut();
debugger.CurrentThread.AddActiveStepper(stepper);
stepOutStepper.PauseWhenComplete = true;
debugger.Continue();
}
@ -200,38 +212,18 @@ namespace Debugger @@ -200,38 +212,18 @@ namespace Debugger
throw new DebuggerException("Unable to step. Next statement not aviable");
}
ICorDebugStepper stepper;
Stepper stepper;
if (stepIn) {
stepper = CorILFrame.CreateStepper();
if (stepper.Is<ICorDebugStepper2>()) { // Is the debuggee .NET 2.0?
stepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
(stepper.CastTo<ICorDebugStepper2>()).SetJMC(1 /* true */);
}
fixed (int* ranges = nextSt.StepRanges) {
stepper.StepRange(1 /* true - step in*/ , (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2);
}
debugger.CurrentThread.AddActiveStepper(stepper);
stepper = CreateStepper();
stepper.CorStepper.StepRange(true /* step in */, nextSt.StepRanges);
}
// Mind that step in which ends in code without symblols is cotinued
// so the next step over ensures that we atleast do step over
// Without JMC step in which ends in code without symblols is cotinued.
// The next step over ensures that we at least do step over.
stepper = CorILFrame.CreateStepper();
if (stepper.Is<ICorDebugStepper2>()) { // Is the debuggee .NET 2.0?
stepper.SetUnmappedStopMask(CorDebugUnmappedStop.STOP_NONE);
(stepper.CastTo<ICorDebugStepper2>()).SetJMC(1 /* true */);
}
fixed (int* ranges = nextSt.StepRanges) {
stepper.StepRange(0 /* false - step over*/ , (IntPtr)ranges, (uint)nextSt.StepRanges.Length / 2);
}
debugger.CurrentThread.AddActiveStepper(stepper);
stepper = CreateStepper();
stepper.CorStepper.StepRange(false /* step over */ , nextSt.StepRanges);
debugger.Continue();
}
@ -420,28 +412,26 @@ namespace Debugger @@ -420,28 +412,26 @@ namespace Debugger
}
}
internal ICorDebugValue GetArgumentValue(int index)
{
// Non-static functions include 'this' as first argument
return CorILFrame.GetArgument((uint)(IsStatic? index : (index + 1)));
}
public Variable GetArgumentVariable(int index)
{
return new Variable(debugger,
GetParameterName(index),
delegate {
if (this.HasExpired) {
return new UnavailableValue(debugger, "Function has expired");
} else {
try {
return Value.CreateValue(debugger, GetArgumentValue(index));
} catch (COMException e) {
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code");
throw;
}
}
});
delegate { return GetArgumentValue(index); });
}
Value GetArgumentValue(int index)
{
if (this.HasExpired) {
return new UnavailableValue(debugger, "Function has expired");
} else {
try {
// Non-static functions include 'this' as first argument
return Value.CreateValue(debugger, CorILFrame.GetArgument((uint)(IsStatic? index : (index + 1))));
} catch (COMException e) {
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code");
throw;
}
}
}
public IEnumerable<Variable> ArgumentVariables {
@ -481,20 +471,23 @@ namespace Debugger @@ -481,20 +471,23 @@ namespace Debugger
{
return new Variable(debugger,
symVar.Name,
delegate {
if (this.HasExpired) {
return new UnavailableValue(debugger, "Function has expired");
} else {
ICorDebugValue corValue;
try {
corValue = CorILFrame.GetLocalVariable((uint)symVar.AddressField1);
} catch (COMException e) {
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code");
throw;
}
return Value.CreateValue(debugger, corValue);
}
});
delegate { return GetValueOfLocalVariable(symVar); });
}
Value GetValueOfLocalVariable(ISymUnmanagedVariable symVar)
{
if (this.HasExpired) {
return new UnavailableValue(debugger, "Function has expired");
} else {
ICorDebugValue corValue;
try {
corValue = CorILFrame.GetLocalVariable((uint)symVar.AddressField1);
} catch (COMException e) {
if ((uint)e.ErrorCode == 0x80131304) return new UnavailableValue(debugger, "Unavailable in optimized code");
throw;
}
return Value.CreateValue(debugger, corValue);
}
}
}
}

41
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Process.cs

@ -20,7 +20,7 @@ namespace Debugger @@ -20,7 +20,7 @@ namespace Debugger
ICorDebugProcess corProcess;
Thread currentThread;
Thread selectedThread;
bool isProcessRunning = true;
public NDebugger Debugger {
@ -41,27 +41,14 @@ namespace Debugger @@ -41,27 +41,14 @@ namespace Debugger
}
}
public Thread CurrentThread {
public Thread SelectedThread {
get {
if (currentThread == null) {
IList<Thread> threads = Threads;
if (threads.Count > 0) {
currentThread = threads[0];
}
}
return currentThread;
return selectedThread;
}
internal set {
currentThread = value;
set {
selectedThread = value;
}
}
public void SetCurrentThread(Thread thread)
{
CurrentThread = thread;
debugger.Pause();
}
public IList<Thread> Threads {
get {
@ -127,7 +114,21 @@ namespace Debugger @@ -127,7 +114,21 @@ namespace Debugger
isProcessRunning = false;
debugger.PauseSession = new PauseSession(PausedReason.Break);
debugger.CurrentProcess = this;
debugger.SelectedProcess = this;
if (this.SelectedThread == null && this.Threads.Count > 0) {
this.SelectedThread = this.Threads[0];
}
if (debugger.SelectedThread != null) {
// Disable all steppers - do not Deactivate since function tracking still needs them
foreach(Stepper s in debugger.SelectedThread.Steppers) {
s.PauseWhenComplete = false;
}
debugger.SelectedThread.SelectedFunction = debugger.SelectedThread.LastFunctionWithLoadedSymbols;
}
debugger.Pause();
}
@ -146,7 +147,7 @@ namespace Debugger @@ -146,7 +147,7 @@ namespace Debugger
{
// Resume stoped tread
if (corProcess.IsRunning == 0) {
Continue(); // TODO: Remove this...
corProcess.Continue(0); // TODO: Remove this...
}
// Stop&terminate - both must be called
corProcess.Stop(5000); // TODO: ...and this

194
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Threads/Thread.cs

@ -23,7 +23,6 @@ namespace Debugger @@ -23,7 +23,6 @@ namespace Debugger
internal ExceptionType currentExceptionType;
Process process;
List<ICorDebugStepper> activeSteppers = new List<ICorDebugStepper>();
List<Stepper> steppers = new List<Stepper>();
uint id;
@ -32,7 +31,7 @@ namespace Debugger @@ -32,7 +31,7 @@ namespace Debugger
string lastName = string.Empty;
bool hasBeenLoaded = false;
Function currentFunction;
Function selectedFunction;
public NDebugger Debugger {
get {
@ -137,19 +136,6 @@ namespace Debugger @@ -137,19 +136,6 @@ namespace Debugger
if (corThread.Is<ICorDebugThread2>()) { // Is the debuggee .NET 2.0?
corThread.CastTo<ICorDebugThread2>().InterceptCurrentException(LastFunction.CorILFrame.CastTo<ICorDebugFrame>());
}
process.Continue();
}
internal Stepper CreateStepper()
{
Stepper stepper = new Stepper(debugger, corThread.CreateStepper());
stepper.StepComplete += delegate {
steppers.Remove(stepper);
};
steppers.Add(stepper);
return stepper;
}
internal Stepper GetStepper(ICorDebugStepper corStepper)
@ -159,35 +145,13 @@ namespace Debugger @@ -159,35 +145,13 @@ namespace Debugger
return stepper;
}
}
return null;
}
internal IList<Stepper> Steppers {
get {
return steppers.AsReadOnly();
}
throw new DebuggerException("Stepper is not in collection");
}
internal IList<ICorDebugStepper> ActiveSteppers {
internal List<Stepper> Steppers {
get {
return activeSteppers.AsReadOnly();
}
}
internal void AddActiveStepper(ICorDebugStepper stepper)
{
activeSteppers.Add(stepper);
}
internal void DeactivateAllSteppers()
{
foreach(ICorDebugStepper stepper in activeSteppers) {
if (stepper.IsActive != 0) {
stepper.Deactivate();
debugger.TraceMessage("Stepper deactivated");
}
return steppers;
}
activeSteppers.Clear();
}
public event EventHandler<ThreadEventArgs> ThreadStateChanged;
@ -203,123 +167,101 @@ namespace Debugger @@ -203,123 +167,101 @@ namespace Debugger
{
return String.Format("ID = {0,-10} Name = {1,-20} Suspended = {2,-8}", ID, Name, Suspended);
}
public Exception CurrentException {
get {
return new Exception(this);
}
}
public IEnumerable<Function> Callstack {
get {
return GetCallstackAt(uint.MaxValue, uint.MaxValue);
process.AssertPaused();
ICorDebugChainEnum corChainEnum = corThread.EnumerateChains();
uint chainIndex = corChainEnum.Count;
foreach(ICorDebugChain corChain in corChainEnum.Enumerator) {
chainIndex--;
if (corChain.IsManaged == 0) continue; // Only managed ones
ICorDebugFrameEnum corFrameEnum = corChain.EnumerateFrames();
uint frameIndex = corFrameEnum.Count;
foreach(ICorDebugFrame corFrame in corFrameEnum.Enumerator) {
frameIndex--;
if (corFrame.Is<ICorDebugILFrame>()) {
Function function = GetFunctionFromCache(chainIndex, frameIndex, corFrame.As<ICorDebugILFrame>());
if (function != null) {
yield return function;
}
}
}
}
}
}
internal Function GetFunctionAt(uint firstChainIndex, uint firstFrameIndex)
Dictionary<uint, Chain> chainCache = new Dictionary<uint, Chain>();
class Chain {
public Dictionary<uint, Function> Frames = new Dictionary<uint, Function>();
}
Function GetFunctionFromCache(uint chainIndex, uint frameIndex, ICorDebugILFrame corFrame)
{
foreach(Function f in GetCallstackAt(firstChainIndex, firstFrameIndex)) {
return f;
}
throw new DebuggerException("Function not found");
try {
if (chainCache.ContainsKey(chainIndex) &&
chainCache[chainIndex].Frames.ContainsKey(frameIndex) &&
!chainCache[chainIndex].Frames[frameIndex].HasExpired) {
Function function = chainCache[chainIndex].Frames[frameIndex];
function.CorILFrame = corFrame;
return function;
} else {
Function function = new Function(this, chainIndex, frameIndex, corFrame.CastTo<ICorDebugILFrame>());
if (!chainCache.ContainsKey(chainIndex)) chainCache[chainIndex] = new Chain();
chainCache[chainIndex].Frames[frameIndex] = function;
function.Expired += delegate { chainCache[chainIndex].Frames.Remove(frameIndex); };
return function;
}
} catch (COMException) { // TODO
return null;
};
}
internal IEnumerable<Function> GetCallstackAt(uint firstChainIndex, uint firstFrameIndex)
internal ICorDebugFrame GetFrameAt(uint chainIndex, uint frameIndex)
{
process.AssertPaused();
ICorDebugChainEnum corChainEnum = corThread.EnumerateChains();
if (chainIndex >= corChainEnum.Count) throw new ArgumentException("Chain index too big", "chainIndex");
corChainEnum.Skip(corChainEnum.Count - chainIndex - 1);
uint chainCount = corChainEnum.Count;
ICorDebugChain corChain = corChainEnum.Next();
uint chainIndex = chainCount;
if (corChain.IsManaged == 0) throw new ArgumentException("Chain is not managed", "chainIndex");
if (firstChainIndex != uint.MaxValue) {
int skipCount = (int)chainCount - (int)firstChainIndex - 1;
if (skipCount < 0) throw new ArgumentException("Chain index too big", "firstChainIndex");
corChainEnum.Skip((uint)skipCount);
chainIndex -= (uint)skipCount;
firstChainIndex = chainIndex - 1;
}
ICorDebugFrameEnum corFrameEnum = corChain.EnumerateFrames();
if (frameIndex >= corFrameEnum.Count) throw new ArgumentException("Frame index too big", "frameIndex");
corFrameEnum.Skip(corFrameEnum.Count - frameIndex - 1);
while (true) {
ICorDebugChain[] corChains = new ICorDebugChain[1]; // One at time
uint chainsFetched = corChainEnum.Next(1, corChains);
if (chainsFetched == 0) break; // We are done
chainIndex--;
CorDebugChainReason reason = corChains[0].Reason;
if (corChains[0].IsManaged == 0) continue; // Only managed ones
ICorDebugFrameEnum corFrameEnum = corChains[0].EnumerateFrames();
uint frameCount = corFrameEnum.Count;
uint frameIndex = frameCount;
if (firstFrameIndex != uint.MaxValue && chainIndex == firstChainIndex) {
int skipCount = (int)frameCount - (int)firstFrameIndex - 1;
if (skipCount < 0) throw new ArgumentException("Frame index too big", "firstFrameIndex");
corFrameEnum.Skip((uint)skipCount);
frameIndex -= (uint)skipCount;
}
while (true) {
ICorDebugFrame[] corFrames = new ICorDebugFrame[1]; // Only one at time
uint framesFetched = corFrameEnum.Next(1, corFrames);
if (framesFetched == 0) break; // We are done
frameIndex--;
Function function = null;
try {
if (corFrames[0].Is<ICorDebugILFrame>()) {
function = new Function(this, chainIndex, frameIndex, corFrames[0].CastTo<ICorDebugILFrame>());
}
} catch (COMException) {
// TODO
};
if (function != null) {
yield return function;
}
}
}
return corFrameEnum.Next();
}
public Function CurrentFunction {
public Function SelectedFunction {
get {
process.AssertPaused();
if (currentFunction == null) {
currentFunction = LastFunctionWithLoadedSymbols;
}
if (currentFunction != null && currentFunction.HasSymbols) {
return currentFunction;
} else {
return null;
}
return selectedFunction;
}
internal set {
set {
if (value != null && !value.HasSymbols) {
throw new DebuggerException("CurrentFunction must have symbols");
throw new DebuggerException("SelectedFunction must have symbols");
}
currentFunction = value;
selectedFunction = value;
}
}
public void SetCurrentFunction(Function function)
{
CurrentFunction = function;
debugger.Pause();
}
public Function LastFunctionWithLoadedSymbols {
get {
foreach (Function function in Callstack) {

58
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ArrayValue.cs

@ -18,32 +18,36 @@ namespace Debugger @@ -18,32 +18,36 @@ namespace Debugger
{
public class ArrayValue: Value
{
ICorDebugArrayValue corArrayValue;
uint[] dimensions;
uint lenght;
CorElementType corElementType;
readonly uint rank;
protected ICorDebugArrayValue CorArrayValue {
get {
return this.CorValue.CastTo<ICorDebugArrayValue>();
}
}
public uint Lenght {
get {
return lenght;
}
}
public string ElementsType {
get {
return CorTypeToString(corElementType);
}
}
public uint Rank {
get {
return rank;
}
}
public override string AsString {
get {
string txt = "{" + ElementsType + "[";
@ -57,15 +61,14 @@ namespace Debugger @@ -57,15 +61,14 @@ namespace Debugger
internal unsafe ArrayValue(NDebugger debugger, ICorDebugValue corValue):base(debugger, corValue)
{
corArrayValue = this.corValue.CastTo<ICorDebugArrayValue>();
corElementType = (CorElementType)corArrayValue.ElementType;
corElementType = (CorElementType)CorArrayValue.ElementType;
rank = corArrayValue.Rank;
lenght = corArrayValue.Count;
rank = CorArrayValue.Rank;
lenght = CorArrayValue.Count;
dimensions = new uint[rank];
fixed (void* pDimensions = dimensions)
corArrayValue.GetDimensions(rank, new IntPtr(pDimensions));
CorArrayValue.GetDimensions(rank, new IntPtr(pDimensions));
}
@ -106,20 +109,23 @@ namespace Debugger @@ -106,20 +109,23 @@ namespace Debugger
return new Variable(debugger,
elementName,
delegate {
ArrayValue updatedVal = getter() as ArrayValue;
if (this.IsEquivalentValue(updatedVal)) {
ICorDebugValue element;
unsafe {
fixed (void* pIndices = indices) {
element = updatedVal.corArrayValue.GetElement(rank, new IntPtr(pIndices));
}
}
return Value.CreateValue(debugger, element);
} else {
return new UnavailableValue(debugger, "Value is not array");
}
});
delegate { return GetValueOfItem(indices, getter); });
}
Value GetValueOfItem(uint[] indices, ValueGetter getter)
{
ArrayValue updatedVal = getter() as ArrayValue;
if (this.IsEquivalentValue(updatedVal)) {
ICorDebugValue element;
unsafe {
fixed (void* pIndices = indices) {
element = updatedVal.CorArrayValue.GetElement(rank, new IntPtr(pIndices));
}
}
return Value.CreateValue(debugger, element);
} else {
return new UnavailableValue(debugger, "Value is not array");
}
}
public override bool MayHaveSubVariables {

9
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/Eval.cs

@ -32,6 +32,8 @@ namespace Debugger @@ -32,6 +32,8 @@ namespace Debugger
Value result;
string error;
DebugeeState debugeeStateWhenEvaluated;
public event EventHandler<EvalEventArgs> EvalStarted;
public event EventHandler<EvalEventArgs> EvalComplete;
@ -43,7 +45,7 @@ namespace Debugger @@ -43,7 +45,7 @@ namespace Debugger
public EvalState EvalState {
get {
if (result != null && result.IsExpired) {
if (result != null && (debugeeStateWhenEvaluated != debugger.DebugeeState || result.IsExpired)) {
return EvalState.Expired;
} else {
return evalState;
@ -117,7 +119,7 @@ namespace Debugger @@ -117,7 +119,7 @@ namespace Debugger
ICorDebugValue[] args = getArgs();
if (args == null) {
error = "Can not evaluate property of property";
error = "Can not get args for eval";
evalState = EvalState.Error;
if (EvalComplete != null) {
EvalComplete(this, new EvalEventArgs(this));
@ -156,8 +158,11 @@ namespace Debugger @@ -156,8 +158,11 @@ namespace Debugger
protected internal virtual void OnEvalComplete(bool successful)
{
// Eval result should be ICorDebugHandleValue so it should survive Continue()
result = Value.CreateValue(debugger, corEval.Result);
debugeeStateWhenEvaluated = debugger.DebugeeState;
if (result == null) {
evalState = EvalState.EvaluatedNoResult;
} else {

2
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Evals/NDebugger-Evals.cs

@ -110,7 +110,7 @@ namespace Debugger @@ -110,7 +110,7 @@ namespace Debugger
this.AssertPaused();
// TODO: Investigate other threads, are they alowed to run?
if (SetupNextEvaluation(CurrentThread)) {
if (SetupNextEvaluation(SelectedThread)) {
evaluating = true;
this.Continue();
return true;

115
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/ObjectValue.cs

@ -67,16 +67,6 @@ namespace Debugger @@ -67,16 +67,6 @@ namespace Debugger
}
*/
internal ICorDebugHandleValue SoftReference {
get {
ICorDebugHeapValue2 heapValue = this.CorValue.As<ICorDebugHeapValue2>();
if (heapValue == null) { // TODO: Investigate
return null;
}
return heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION);
}
}
public override string Type {
get{
return classProps.Name;
@ -97,7 +87,7 @@ namespace Debugger @@ -97,7 +87,7 @@ namespace Debugger
internal unsafe ObjectValue(NDebugger debugger, ICorDebugValue corValue):base(debugger, corValue)
{
corClass = this.corValue.CastTo<ICorDebugObjectValue>().Class;
corClass = this.CorValue.CastTo<ICorDebugObjectValue>().Class;
InitObjectVariable();
}
@ -141,20 +131,23 @@ namespace Debugger @@ -141,20 +131,23 @@ namespace Debugger
foreach(FieldProps f in metaData.EnumFields(ClassToken)) {
FieldProps field = f; // One per scope/delegate
if (field.IsStatic && field.IsLiteral) continue; // Skip field
if (!field.IsStatic && corValue == null) continue; // Skip field
if (!field.IsStatic && CorValue == null) continue; // Skip field
yield return new ClassVariable(debugger,
field.Name,
field.IsStatic,
field.IsPublic,
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return GetValue(updatedVal, field);
} else {
return new UnavailableValue(debugger, "Object type changed");
}
});
delegate { return GetValueOfField(field, getter); });
}
}
Value GetValueOfField(FieldProps field, ValueGetter getter)
{
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return GetValue(updatedVal, field);
} else {
return new UnavailableValue(debugger, "Object type changed");
}
}
@ -167,35 +160,38 @@ namespace Debugger @@ -167,35 +160,38 @@ namespace Debugger
method.Name.Remove(0, 4),
method.IsStatic,
method.IsPublic,
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return null;
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
return CreatePropertyEval(method, getter);
} else {
return null;
}
});
delegate { return CreatePropertyEval(method, getter); });
}
}
}
Eval CreatePropertyEval(MethodProps method, ValueGetter getter)
{
ICorDebugFunction evalCorFunction = Module.CorModule.GetFunctionFromToken(method.Token);
return new Eval(debugger, evalCorFunction, delegate {
Value updatedVal = getter();
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
if (method.IsStatic) {
return new ICorDebugValue[] {};
} else {
return new ICorDebugValue[] {((ObjectValue)updatedVal).SoftReference.CastTo<ICorDebugValue>()};
}
} else {
return null;
}
});
Value updatedVal = getter();
if (updatedVal is UnavailableValue) {
return null;
}
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
ICorDebugFunction evalCorFunction = Module.CorModule.GetFunctionFromToken(method.Token);
return new Eval(debugger, evalCorFunction, delegate { return GetArgsForEval(method, getter); });
} else {
return null;
}
}
ICorDebugValue[] GetArgsForEval(MethodProps method, ValueGetter getter)
{
Value updatedVal = getter();
if (this.IsEquivalentValue(updatedVal) && ((ObjectValue)updatedVal).SoftReference != null) {
if (method.IsStatic) {
return new ICorDebugValue[] {};
} else {
return new ICorDebugValue[] {((ObjectValue)updatedVal).SoftReference.CastTo<ICorDebugValue>()};
}
} else {
return null;
}
}
public override bool IsEquivalentValue(Value val)
@ -209,8 +205,8 @@ namespace Debugger @@ -209,8 +205,8 @@ namespace Debugger
{
// Current frame is used to resolve context specific static values (eg. ThreadStatic)
ICorDebugFrame curFrame = null;
if (debugger.CurrentThread != null && debugger.CurrentThread.LastFunction != null && debugger.CurrentThread.LastFunction.CorILFrame != null) {
curFrame = debugger.CurrentThread.LastFunction.CorILFrame.CastTo<ICorDebugFrame>();
if (debugger.IsPaused && debugger.SelectedThread != null && debugger.SelectedThread.LastFunction != null && debugger.SelectedThread.LastFunction.CorILFrame != null) {
curFrame = debugger.SelectedThread.LastFunction.CorILFrame.CastTo<ICorDebugFrame>();
}
try {
@ -231,20 +227,23 @@ namespace Debugger @@ -231,20 +227,23 @@ namespace Debugger
if (HasBaseClass) {
return new Variable(debugger,
"<Base class>",
delegate {
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return ((ObjectValue)updatedVal).BaseClass;
} else {
return new UnavailableValue(debugger, "Object type changed");
}
});
delegate { return GetBaseClassValue(getter); });
} else {
return null;
}
}
Value GetBaseClassValue(ValueGetter getter)
{
Value updatedVal = getter();
if (updatedVal is UnavailableValue) return updatedVal;
if (this.IsEquivalentValue(updatedVal)) {
return ((ObjectValue)updatedVal).BaseClass;
} else {
return new UnavailableValue(debugger, "Object type changed");
}
}
public unsafe ObjectValue BaseClass {
get {
if (baseClass == null) baseClass = GetBaseClass();
@ -296,7 +295,11 @@ namespace Debugger @@ -296,7 +295,11 @@ namespace Debugger
throw new DebuggerException("Unable to get base class: " + fullTypeName);
} else {
ICorDebugClass superClass = corModuleSuperclass.GetClassFromToken(classProps.SuperClassToken);
return new ObjectValue(debugger, corValue, superClass);
if (corHandleValue != null) {
return new ObjectValue(debugger, corHandleValue.As<ICorDebugValue>(), superClass);
} else {
return new ObjectValue(debugger, CorValue, superClass);
}
}
}
}

6
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PrimitiveValue.cs

@ -28,9 +28,9 @@ namespace Debugger @@ -28,9 +28,9 @@ namespace Debugger
public object Primitive {
get {
if (CorType == CorElementType.STRING) {
return (corValue.CastTo<ICorDebugStringValue>()).String;
return (CorValue.CastTo<ICorDebugStringValue>()).String;
} else {
return (corValue.CastTo<ICorDebugGenericValue>()).Value;
return (CorValue.CastTo<ICorDebugGenericValue>()).Value;
}
}
set {
@ -45,7 +45,7 @@ namespace Debugger @@ -45,7 +45,7 @@ namespace Debugger
if (CorType == CorElementType.STRING) {
throw new NotSupportedException();
} else {
(corValue.CastTo<ICorDebugGenericValue>()).Value = newValue;
(CorValue.CastTo<ICorDebugGenericValue>()).Value = newValue;
}
OnValueChanged();
}

17
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/PropertyVariable.cs

@ -24,13 +24,16 @@ namespace Debugger @@ -24,13 +24,16 @@ namespace Debugger
internal PropertyVariable(NDebugger debugger, string name, bool isStatic, bool isPublic, EvalCreator evalCreator):base(debugger, name, isStatic, isPublic, null)
{
this.evalCreator = evalCreator;
this.valueGetter = delegate {
if (Eval != null) {
return Eval.Result;
} else {
return new UnavailableValue(debugger, "Property has expired");
}
};
this.valueGetter = delegate { return GetValueOfResult(); };
}
Value GetValueOfResult()
{
if (Eval != null) {
return Eval.Result;
} else {
return new UnavailableValue(debugger, "Property unavailable");
}
}
public bool IsEvaluated {

44
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Variables/Value.cs

@ -16,7 +16,9 @@ namespace Debugger @@ -16,7 +16,9 @@ namespace Debugger
public abstract class Value: RemotingObjectBase
{
protected NDebugger debugger;
protected ICorDebugValue corValue;
ICorDebugValue corValue;
// ICorDebugHandleValue can be used to get corValue back after Continue()
protected ICorDebugHandleValue corHandleValue;
object pauseSessionAtCreation;
public event EventHandler<ValueEventArgs> ValueChanged;
@ -29,7 +31,30 @@ namespace Debugger @@ -29,7 +31,30 @@ namespace Debugger
internal ICorDebugValue CorValue {
get {
return corValue;
if (pauseSessionAtCreation == debugger.PauseSession) {
return corValue;
} else {
if (corHandleValue == null) {
throw new DebuggerException("CorValue has expired");
} else {
corValue = DereferenceUnbox(corHandleValue.As<ICorDebugValue>());
pauseSessionAtCreation = debugger.PauseSession;
return corValue;
}
}
}
}
protected ICorDebugHandleValue SoftReference {
get {
if (corHandleValue != null) return corHandleValue;
ICorDebugHeapValue2 heapValue = this.CorValue.As<ICorDebugHeapValue2>();
if (heapValue == null) { // TODO: Investigate - hmmm, value types are not at heap?
return null;
} else {
return heapValue.CreateHandle(CorDebugHandleType.HANDLE_WEAK_TRACK_RESURRECTION);
}
}
}
@ -38,13 +63,17 @@ namespace Debugger @@ -38,13 +63,17 @@ namespace Debugger
/// </summary>
public bool IsExpired {
get {
return pauseSessionAtCreation != debugger.PauseSession;
if (corHandleValue == null) {
return pauseSessionAtCreation != debugger.PauseSession;
} else {
return false;
}
}
}
internal CorElementType CorType {
get {
return GetCorType(corValue);
return GetCorType(CorValue);
}
}
@ -104,6 +133,9 @@ namespace Debugger @@ -104,6 +133,9 @@ namespace Debugger
{
this.debugger = debugger;
if (corValue != null) {
if (corValue.Is<ICorDebugHandleValue>()) {
corHandleValue = corValue.As<ICorDebugHandleValue>();
}
this.corValue = DereferenceUnbox(corValue);
}
this.pauseSessionAtCreation = debugger.PauseSession;
@ -203,12 +235,12 @@ namespace Debugger @@ -203,12 +235,12 @@ namespace Debugger
internal static Value CreateValue(NDebugger debugger, ICorDebugValue corValue)
{
CorElementType type = Value.GetCorType(corValue);
if (Value.DereferenceUnbox(corValue) == null)
{
return new NullValue(debugger, corValue);
}
switch(type)
{
case CorElementType.BOOLEAN:

40
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorDebug/ICorDebugChainEnum.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
namespace Debugger.Wrappers.CorDebug
{
using System;
using System.Collections.Generic;
public partial class ICorDebugChainEnum
{
public IEnumerable<ICorDebugChain> Enumerator {
get {
while (true) {
ICorDebugChain corChain = Next();
if (corChain != null) {
yield return corChain;
} else {
break;
}
}
}
}
public ICorDebugChain Next()
{
ICorDebugChain[] corChains = new ICorDebugChain[1];
uint chainsFetched = this.Next(1, corChains);
if (chainsFetched == 0) {
return null;
} else {
return corChains[0];
}
}
}
}

40
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorDebug/ICorDebugFrameEnum.cs

@ -0,0 +1,40 @@ @@ -0,0 +1,40 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
namespace Debugger.Wrappers.CorDebug
{
using System;
using System.Collections.Generic;
public partial class ICorDebugFrameEnum
{
public IEnumerable<ICorDebugFrame> Enumerator {
get {
while (true) {
ICorDebugFrame corFrame = Next();
if (corFrame != null) {
yield return corFrame;
} else {
break;
}
}
}
}
public ICorDebugFrame Next()
{
ICorDebugFrame[] corFrames = new ICorDebugFrame[1];
uint framesFetched = this.Next(1, corFrames);
if (framesFetched == 0) {
return null;
} else {
return corFrames[0];
}
}
}
}

22
src/AddIns/Misc/Debugger/Debugger.Core/Project/Src/Wrappers/CorDebug/ICorDebugStepper.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="David Srbecký" email="dsrbecky@gmail.com"/>
// <version>$Revision$</version>
// </file>
namespace Debugger.Wrappers.CorDebug
{
using System;
public partial class ICorDebugStepper
{
public unsafe void StepRange(bool bStepIn, int[] ranges)
{
fixed (int* pRanges = ranges) {
this.StepRange(bStepIn?1:0, (IntPtr)pRanges, (uint)ranges.Length / 2);
}
}
}
}

38
src/AddIns/Misc/Debugger/Debugger.Tests/Project/Src/DebuggerTests.cs

@ -227,20 +227,20 @@ namespace Debugger.Tests @@ -227,20 +227,20 @@ namespace Debugger.Tests
StartProgram("Callstack");
WaitForPause(PausedReason.Break, null);
callstack = new List<Function>(debugger.CurrentThread.Callstack);
callstack = new List<Function>(debugger.SelectedThread.Callstack);
Assert.AreEqual("Sub2", callstack[0].Name);
Assert.AreEqual("Sub1", callstack[1].Name);
Assert.AreEqual("Main", callstack[2].Name);
debugger.StepOut();
WaitForPause(PausedReason.StepComplete, null);
callstack = new List<Function>(debugger.CurrentThread.Callstack);
callstack = new List<Function>(debugger.SelectedThread.Callstack);
Assert.AreEqual("Sub1", callstack[0].Name);
Assert.AreEqual("Main", callstack[1].Name);
debugger.StepOut();
WaitForPause(PausedReason.StepComplete, null);
callstack = new List<Function>(debugger.CurrentThread.Callstack);
callstack = new List<Function>(debugger.SelectedThread.Callstack);
Assert.AreEqual("Main", callstack[0].Name);
debugger.Continue();
@ -258,7 +258,7 @@ namespace Debugger.Tests @@ -258,7 +258,7 @@ namespace Debugger.Tests
for(int i = 0; i < 2; i++) {
debugger.Continue();
WaitForPause(PausedReason.Break, null);
args = new List<Variable>(debugger.CurrentFunction.ArgumentVariables);
args = new List<Variable>(debugger.SelectedFunction.ArgumentVariables);
// names
Assert.AreEqual("i", args[0].Name);
Assert.AreEqual("s", args[1].Name);
@ -274,7 +274,7 @@ namespace Debugger.Tests @@ -274,7 +274,7 @@ namespace Debugger.Tests
debugger.Continue();
WaitForPause(PausedReason.Break, null);
args = new List<Variable>(debugger.CurrentFunction.ArgumentVariables);
args = new List<Variable>(debugger.SelectedFunction.ArgumentVariables);
// types
Assert.AreEqual(typeof(PrimitiveValue), args[0].Value.GetType());
Assert.AreEqual(typeof(PrimitiveValue), args[1].Value.GetType());
@ -286,7 +286,7 @@ namespace Debugger.Tests @@ -286,7 +286,7 @@ namespace Debugger.Tests
debugger.Continue();
WaitForPause(PausedReason.Break, null);
args = new List<Variable>(debugger.CurrentFunction.ArgumentVariables);
args = new List<Variable>(debugger.SelectedFunction.ArgumentVariables);
// types
Assert.AreEqual(typeof(PrimitiveValue), args[0].Value.GetType());
Assert.AreEqual(typeof(NullValue), args[1].Value.GetType());
@ -308,7 +308,7 @@ namespace Debugger.Tests @@ -308,7 +308,7 @@ namespace Debugger.Tests
StartProgram("FunctionLocalVariables");
WaitForPause(PausedReason.Break, null);
args = new List<Variable>(debugger.CurrentFunction.LocalVariables);
args = new List<Variable>(debugger.SelectedFunction.LocalVariables);
// names
Assert.AreEqual("i", args[0].Name);
Assert.AreEqual("s", args[1].Name);
@ -339,7 +339,7 @@ namespace Debugger.Tests @@ -339,7 +339,7 @@ namespace Debugger.Tests
StartProgram("FunctionLifetime");
WaitForPause(PausedReason.Break, null);
function = debugger.CurrentFunction;
function = debugger.SelectedFunction;
Assert.IsNotNull(function);
Assert.AreEqual("Function", function.Name);
Assert.AreEqual(false, function.HasExpired);
@ -347,19 +347,19 @@ namespace Debugger.Tests @@ -347,19 +347,19 @@ namespace Debugger.Tests
debugger.Continue(); // Go to the SubFunction
WaitForPause(PausedReason.Break, null);
Assert.AreEqual("SubFunction", debugger.CurrentFunction.Name);
Assert.AreEqual("SubFunction", debugger.SelectedFunction.Name);
Assert.AreEqual(false, function.HasExpired);
Assert.AreEqual("1", function.GetArgumentVariable(0).Value.AsString);
debugger.Continue(); // Go back to Function
WaitForPause(PausedReason.Break, null);
Assert.AreEqual("Function", debugger.CurrentFunction.Name);
Assert.AreEqual("Function", debugger.SelectedFunction.Name);
Assert.AreEqual(false, function.HasExpired);
Assert.AreEqual("1", function.GetArgumentVariable(0).Value.AsString);
debugger.Continue(); // Setp out of function
WaitForPause(PausedReason.Break, null);
Assert.AreEqual("Main", debugger.CurrentFunction.Name);
Assert.AreEqual("Main", debugger.SelectedFunction.Name);
Assert.AreEqual(true, function.HasExpired);
debugger.Continue();
@ -377,7 +377,7 @@ namespace Debugger.Tests @@ -377,7 +377,7 @@ namespace Debugger.Tests
StartProgram("FunctionVariablesLifetime"); // 1 - Enter program
WaitForPause(PausedReason.Break, null);
function = debugger.CurrentFunction;
function = debugger.SelectedFunction;
Assert.IsNotNull(function);
Assert.AreEqual("Function", function.Name);
argument = function.GetArgumentVariable(0);
@ -443,7 +443,7 @@ namespace Debugger.Tests @@ -443,7 +443,7 @@ namespace Debugger.Tests
StartProgram("ArrayValue");
WaitForPause(PausedReason.Break, null);
foreach(Variable var in debugger.CurrentFunction.LocalVariables) {
foreach(Variable var in debugger.SelectedFunction.LocalVariables) {
local = var; break;
}
Assert.AreEqual("array", local.Name);
@ -471,7 +471,7 @@ namespace Debugger.Tests @@ -471,7 +471,7 @@ namespace Debugger.Tests
StartProgram("ObjectValue");
WaitForPause(PausedReason.Break, null);
foreach(Variable var in debugger.CurrentFunction.LocalVariables) {
foreach(Variable var in debugger.SelectedFunction.LocalVariables) {
local = var;
}
Assert.AreEqual("val", local.Name);
@ -514,7 +514,7 @@ namespace Debugger.Tests @@ -514,7 +514,7 @@ namespace Debugger.Tests
StartProgram("PropertyVariable");
WaitForPause(PausedReason.Break, null);
foreach(Variable var in debugger.CurrentFunction.LocalVariables) {
foreach(Variable var in debugger.SelectedFunction.LocalVariables) {
local = var;
}
foreach(Variable var in local.SubVariables) {
@ -559,7 +559,7 @@ namespace Debugger.Tests @@ -559,7 +559,7 @@ namespace Debugger.Tests
StartProgram("PropertyVariableForm");
WaitForPause(PausedReason.Break, null);
foreach(Variable var in debugger.CurrentFunction.LocalVariables) {
foreach(Variable var in debugger.SelectedFunction.LocalVariables) {
local = var;
}
Assert.AreEqual("form", local.Name);
@ -596,9 +596,9 @@ namespace Debugger.Tests @@ -596,9 +596,9 @@ namespace Debugger.Tests
StartProgram("SetIP");
WaitForPause(PausedReason.Break, "1");
Assert.IsNotNull(debugger.CurrentFunction.CanSetIP("SetIP.cs", 16, 0));
Assert.IsNull(debugger.CurrentFunction.CanSetIP("SetIP.cs", 100, 0));
debugger.CurrentFunction.SetIP("SetIP.cs", 16, 0);
Assert.IsNotNull(debugger.SelectedFunction.CanSetIP("SetIP.cs", 16, 0));
Assert.IsNull(debugger.SelectedFunction.CanSetIP("SetIP.cs", 100, 0));
debugger.SelectedFunction.SetIP("SetIP.cs", 16, 0);
debugger.Continue();
WaitForPause(PausedReason.Break, "1");
Assert.AreEqual("1\r\n1\r\n", log);

16
src/AddIns/Misc/SharpReport/SharpReport/Designer/Factories.cs

@ -36,19 +36,21 @@ namespace SharpReport.Designer { @@ -36,19 +36,21 @@ namespace SharpReport.Designer {
}
}
public class IDesignableFactory : SharpReportCore.GenericFactory {
public class IDesignableFactory : SharpReportCore.GenericFactory {
public IDesignableFactory() :base(Assembly.GetExecutingAssembly(),typeof(IDesignable)){
}
public IDesignableFactory() :base(Assembly.GetExecutingAssembly(),typeof(IDesignable)){
}
public new BaseReportItem Create(string name) {
if (name.LastIndexOf('.') > 0) {
public new BaseReportItem Create(string name) {
if (String.IsNullOrEmpty(name)) {
throw new ArgumentNullException("name");
}
if (name.LastIndexOf('.') > 0) {
StringBuilder b = new StringBuilder (name);
b.Remove (0,name.LastIndexOf('.') +1);
name = b.ToString();
}
return (BaseReportItem) base.Create (name);
}
}
}
}

1
src/AddIns/Misc/SharpReport/SharpReport/Designer/Report.cs

@ -195,6 +195,7 @@ namespace SharpReport.Designer{ @@ -195,6 +195,7 @@ namespace SharpReport.Designer{
BaseReportItem br = (BaseReportItem)this.FindParent(iddea);
baseReportItem.Location = new Point(iddea.ItemAtPoint.X - br.Location.X,10);
}
baseReportItem.ResumeLayout();
}

23
src/AddIns/Misc/SharpReport/SharpReport/Designer/SectionControls/BaseDesignerControl.cs

@ -51,12 +51,17 @@ namespace SharpReport.Designer @@ -51,12 +51,17 @@ namespace SharpReport.Designer
this.ReportControl.ReportSettings = reportModel.ReportSettings;
}
#region public'c
//if languages change, we need a way to chage the headlines here as well
public void Localise() {
reportControl.Localise();
}
public void RegisterEvents () {
this.reportControl.SectionChanged += new EventHandler<SectionChangedEventArgs> (this.ReportControlSectionChanged);
this.reportControl.SizeChanged += new System.EventHandler(this.ReportControlSizeChanged);
this.reportControl.DesignViewChanged += new SharpReport.Designer.ItemDragDropEventHandler(this.ReportControlDesignViewChanged);
}
public void RemoveSelectedItem () {
if (this.SelectedObject == null) {
return;
@ -96,23 +101,23 @@ namespace SharpReport.Designer @@ -96,23 +101,23 @@ namespace SharpReport.Designer
void ReportControlSizeChanged(object sender, System.EventArgs e){
this.ctrlRuler1.Width = reportControl.Width;
this.ctrlRuler1.Invalidate();
FireSaveNeeded();
NotifyPropertyChanged(this.Name + "ReportControlSizeChanged");
}
void ReportControlSectionChanged (object sender,SectionChangedEventArgs e) {
FireSaveNeeded();
NotifyPropertyChanged(this.Name + "ReportControlSectionChanged");
}
void ReportControlDesignViewChanged(object sender, SharpReport.Designer.ItemDragDropEventArgs e){
FireSaveNeeded();
NotifyPropertyChanged(this.Name + "ReportControlDesignViewChanged");
}
#endregion
#region privates
void FireSaveNeeded() {
void NotifyPropertyChanged(string info) {
if (DesignerDirty != null) {
DesignerDirty (this,new PropertyChangedEventArgs("Designer"));
DesignerDirty (this,new PropertyChangedEventArgs(info));
}
}
#endregion
@ -216,9 +221,9 @@ namespace SharpReport.Designer @@ -216,9 +221,9 @@ namespace SharpReport.Designer
this.reportControl.Name = "reportControl";
this.reportControl.Size = new System.Drawing.Size(592, 400);
this.reportControl.TabIndex = 1;
this.reportControl.SectionChanged += new EventHandler<SectionChangedEventArgs> (this.ReportControlSectionChanged);
this.reportControl.SizeChanged += new System.EventHandler(this.ReportControlSizeChanged);
this.reportControl.DesignViewChanged += new SharpReport.Designer.ItemDragDropEventHandler(this.ReportControlDesignViewChanged);
// this.reportControl.SectionChanged += new EventHandler<SectionChangedEventArgs> (this.ReportControlSectionChanged);
// this.reportControl.SizeChanged += new System.EventHandler(this.ReportControlSizeChanged);
// this.reportControl.DesignViewChanged += new SharpReport.Designer.ItemDragDropEventHandler(this.ReportControlDesignViewChanged);
//
// BaseDesignerControl
//

12
src/AddIns/Misc/SharpReport/SharpReport/Designer/SectionControls/ReportSection.cs

@ -211,24 +211,24 @@ namespace SharpReport{ @@ -211,24 +211,24 @@ namespace SharpReport{
public void OnItemSelect(object sender, EventArgs e){
if (!base.Suspend) {
// if (!base.Suspend) {
if (ItemSelected != null)
ItemSelected(sender, e);
}
// }
}
public void VisualControlClick(object sender, EventArgs e){
if (!base.Suspend) {
// if (!base.Suspend) {
this.OnSelect();
}
// }
}
public void ReportItemSelected(object sender, EventArgs e){
if (!base.Suspend) {
// if (!base.Suspend) {
this.OnSelect ();
this.OnItemSelect(sender, e);
}
// }
}

10
src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/AbstractGraphicControl.cs

@ -22,16 +22,12 @@ namespace SharpReport.Designer @@ -22,16 +22,12 @@ namespace SharpReport.Designer
int thickness = 1;
DashStyle dashStyle = DashStyle.Solid;
public AbstractGraphicControl()
{
public AbstractGraphicControl(){
InitializeComponent();
base.DragEnter += new DragEventHandler (OnOver);
}
void OnOver (object sender, DragEventArgs e) {
System.Console.WriteLine("AbstractGraphicControl:On Over");
}
#region property's
/// <summary>

2
src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/ReportObjectControlBase.cs

@ -21,7 +21,7 @@ namespace SharpReport.Designer @@ -21,7 +21,7 @@ namespace SharpReport.Designer
/// and can have some common members managed easier.
/// </summary>
public abstract class ReportObjectControlBase : System.Windows.Forms.UserControl
public abstract class ReportObjectControlBase : UserControl
{
private StringAlignment stringAlignment = StringAlignment.Near;
private StringFormat stringFormat;

1
src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/ReportRectangleControl.cs

@ -37,7 +37,6 @@ namespace SharpReport.Designer { @@ -37,7 +37,6 @@ namespace SharpReport.Designer {
true);
this.UpdateStyles();
}
#region overrides
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) {

4
src/AddIns/Misc/SharpReport/SharpReport/Designer/VisualControls/ReportTextControl.cs

@ -21,7 +21,7 @@ namespace SharpReport.Designer{ @@ -21,7 +21,7 @@ namespace SharpReport.Designer{
private TextDrawer textDrawer = new TextDrawer();
public ReportTextControl(){
public ReportTextControl():base(){
InitializeComponent();
this.SetStyle(ControlStyles.DoubleBuffer |
@ -79,7 +79,7 @@ namespace SharpReport.Designer{ @@ -79,7 +79,7 @@ namespace SharpReport.Designer{
//
this.BackColor = System.Drawing.Color.White;
this.Name = "ReportTextItem";
this.Size = new System.Drawing.Size(120, 60);
this.Size = new System.Drawing.Size(120, 20);
}
#endregion

40
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportCircleItem.cs

@ -8,8 +8,8 @@ @@ -8,8 +8,8 @@
*/
using System;
using System.ComponentModel;
using System.Drawing;
using System.ComponentModel;
using SharpReportCore;
using SharpReport.Designer;
@ -30,11 +30,12 @@ namespace SharpReport.ReportItems{ @@ -30,11 +30,12 @@ namespace SharpReport.ReportItems{
private ReportCircleControl visualControl;
private bool initDone;
public ReportCircleItem() : base(){
public ReportCircleItem() : base(){
visualControl = new ReportCircleControl();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
this.visualControl.BackColorChanged += new EventHandler (OnControlChanged);
@ -42,20 +43,20 @@ namespace SharpReport.ReportItems{ @@ -42,20 +43,20 @@ namespace SharpReport.ReportItems{
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
base.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (BasePropertyChange);
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.initDone = true;
}
}
#region EventHandling
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
ItemsHelper.UpdateControlFromGraphicBase (this.visualControl,this);
}
ItemsHelper.UpdateControlFromGraphicBase (this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
base.SuspendLayout();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
base.ResumeLayout();
this.HandlePropertyChanged("OnControlChanged");
}
@ -75,8 +76,8 @@ namespace SharpReport.ReportItems{ @@ -75,8 +76,8 @@ namespace SharpReport.ReportItems{
PropertyChanged (this,new PropertyChangedEventArgs(info));
}
}
}
#endregion
#region overrides
@ -120,7 +121,20 @@ namespace SharpReport.ReportItems{ @@ -120,7 +121,20 @@ namespace SharpReport.ReportItems{
this.HandlePropertyChanged("Location");
}
}
public override Color BackColor {
get {
return base.BackColor;
}
set {
base.BackColor = value;
if (this.visualControl != null) {
this.visualControl.BackColor = value;
}
this.HandlePropertyChanged("Backcolor");
}
}
#endregion
#region SharpReport.Designer.IDesignable interface implementation

93
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportImageItem.cs

@ -26,52 +26,46 @@ namespace SharpReport.ReportItems { @@ -26,52 +26,46 @@ namespace SharpReport.ReportItems {
public class ReportImageItem : BaseImageItem,SharpReport.Designer.IDesignable {
private ReportImageControl visualControl;
private bool initDone;
public ReportImageItem() :base(){
visualControl = new ReportImageControl();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
Setup();
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
this.visualControl.BackColorChanged += new EventHandler (OnControlChanged);
this.visualControl.FontChanged += new EventHandler (OnControlChanged);
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
base.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (BasePropertyChange);
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.initDone = true;
}
#region overrides
public override void Dispose() {
base.Dispose();
this.visualControl.Dispose();
}
public override string ToString(){
return this.Name;
private void Setup() {
this.visualControl.Location = base.Location;
this.visualControl.Size = base.Size;
if (base.Image != null) {
this.visualControl.Image = base.Image;
this.visualControl.ScaleImageToSize = base.ScaleImageToSize;
this.visualControl.Invalidate();
}
}
#endregion
#region EventHandling
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
this.visualControl.Location = base.Location;
this.visualControl.Size = base.Size;
if (base.Image != null) {
this.visualControl.Image = base.Image;
this.visualControl.ScaleImageToSize = base.ScaleImageToSize;
this.visualControl.Invalidate();
}
}
Setup();
ItemsHelper.UpdateControlFromGraphicBase(this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
Setup();
base.SuspendLayout();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
base.ResumeLayout();
this.HandlePropertyChanged("OnControlChanged");
}
@ -110,5 +104,50 @@ namespace SharpReport.ReportItems { @@ -110,5 +104,50 @@ namespace SharpReport.ReportItems {
#endregion
#region overrides
public override Size Size {
get {
return base.Size;
}
set {
base.Size = value;
if (this.visualControl != null) {
this.visualControl.Size = value;
}
this.HandlePropertyChanged("Size");
}
}
public override Point Location {
get {
return base.Location;
}
set {
base.Location = value;
if (this.visualControl != null) {
this.visualControl.Location = value;
}
this.HandlePropertyChanged("Location");
}
}
// public override Image Image {
// get {
// return base.Image;
// }
// }
//
public override void Dispose() {
base.Dispose();
this.visualControl.Dispose();
}
public override string ToString(){
return this.Name;
}
#endregion
}
}

14
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportLineItem.cs

@ -8,8 +8,8 @@ @@ -8,8 +8,8 @@
// </autogenerated>
//------------------------------------------------------------------------------
using System;
using System.ComponentModel;
using System.Drawing;
using System.ComponentModel;
using SharpReportCore;
using SharpReport.Designer;
@ -26,14 +26,15 @@ namespace SharpReport.ReportItems{ @@ -26,14 +26,15 @@ namespace SharpReport.ReportItems{
public class ReportLineItem : BaseLineItem,SharpReport.Designer.IDesignable {
private ReportLineControl visualControl;
private bool initDone;
/// <summary>
/// Default constructor - initializes all fields to default values
/// </summary>
public ReportLineItem():base() {
visualControl = new ReportLineControl();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
this.visualControl.BackColorChanged += new EventHandler (OnControlChanged);
@ -41,20 +42,19 @@ namespace SharpReport.ReportItems{ @@ -41,20 +42,19 @@ namespace SharpReport.ReportItems{
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
base.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (BasePropertyChange);
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.initDone = true;
}
#region EventHandling
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
ItemsHelper.UpdateControlFromGraphicBase (this.visualControl,this);
}
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
base.SuspendLayout();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
base.ResumeLayout();
this.HandlePropertyChanged("OnControlChanged");
}

44
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/GraphicBased/ReportRectangleItem.cs

@ -10,9 +10,8 @@ @@ -10,9 +10,8 @@
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using SharpReportCore;
using SharpReport.Designer;
@ -32,41 +31,33 @@ namespace SharpReport.ReportItems{ @@ -32,41 +31,33 @@ namespace SharpReport.ReportItems{
public class ReportRectangleItem : BaseRectangleItem,SharpReport.Designer.IDesignable {
private ReportRectangleControl visualControl;
private bool initDone;
public ReportRectangleItem():base() {
visualControl = new ReportRectangleControl();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
this.visualControl.BackColorChanged += new EventHandler (OnControlChanged);
this.visualControl.FontChanged += new EventHandler (OnControlChanged);
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
this.visualControl.DragOver += new DragEventHandler (OnDragOver);
this.VisualControl.DragEnter += new DragEventHandler (OnDragEnter);
base.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (BasePropertyChange);
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
this.initDone = true;
}
void OnDragEnter(object sender,DragEventArgs e) {
// System.Console.WriteLine("DragEnter");
}
void OnDragOver(object sender,DragEventArgs e) {
// System.Console.WriteLine("DragOver");
}
#region EventHandling
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
ItemsHelper.UpdateControlFromGraphicBase (this.visualControl,this);
}
ItemsHelper.UpdateControlFromGraphicBase (this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
base.SuspendLayout();
ItemsHelper.UpdateBaseFromGraphicControl (this.visualControl,this);
base.ResumeLayout();
this.HandlePropertyChanged("OnControlChanged");
}
@ -86,7 +77,6 @@ namespace SharpReport.ReportItems{ @@ -86,7 +77,6 @@ namespace SharpReport.ReportItems{
PropertyChanged (this,new PropertyChangedEventArgs(info));
}
}
}
#endregion
@ -133,6 +123,18 @@ namespace SharpReport.ReportItems{ @@ -133,6 +123,18 @@ namespace SharpReport.ReportItems{
}
}
public override Color BackColor {
get {
return base.BackColor;
}
set {
base.BackColor = value;
if (this.visualControl != null) {
this.visualControl.BackColor = value;
}
this.HandlePropertyChanged("Backcolor");
}
}
#endregion

19
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ItemsHelper.cs

@ -24,52 +24,43 @@ namespace SharpReport { @@ -24,52 +24,43 @@ namespace SharpReport {
public static void UpdateBaseFromTextControl (ReportObjectControlBase control,
BaseReportItem item) {
BaseReportItem item) {
item.SuspendLayout();
item.Size = control.Size;
item.Location = control.Location;
item.Name = control.Name;
item.BackColor = control.BackColor;
item.ForeColor = control.ForeColor;
item.Font = control.Font;
item.ResumeLayout();
}
public static void UpdateBaseFromGraphicControl (AbstractGraphicControl control,
BaseGraphicItem item) {
BaseGraphicItem item) {
ItemsHelper.UpdateBaseFromTextControl (control,item);
item.SuspendLayout();
item.Thickness = control.Thickness;
item.DashStyle = control.DashStyle;
item.ResumeLayout();
}
public static void UpdateControlFromTextBase (ReportObjectControlBase control,
BaseReportItem item) {
BaseReportItem item) {
control.SuspendLayout();
item.SuspendLayout();
control.BackColor = item.BackColor;
control.ForeColor = item.ForeColor;
control.Location = item.Location;
control.Size = item.Size;
control.Font = item.Font;
control.Font = item.Font;
control.Name = item.Name;
BaseTextItem b = item as BaseTextItem;
if (b != null) {
control.StringAlignment = b.StringAlignment;
}
item.ResumeLayout();
control.ResumeLayout();
}
public static void UpdateControlFromGraphicBase (AbstractGraphicControl control,
BaseGraphicItem item) {
BaseGraphicItem item) {
ItemsHelper.UpdateControlFromTextBase(control,item);
control.Location = item.Location;
control.DashStyle = item.DashStyle;

23
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ReportDataItem.cs

@ -23,7 +23,7 @@ namespace SharpReport.ReportItems{ @@ -23,7 +23,7 @@ namespace SharpReport.ReportItems{
private ReportDbTextControl visualControl;
bool initDone;
// bool initDone;
#region Constructors
@ -40,6 +40,10 @@ namespace SharpReport.ReportItems{ @@ -40,6 +40,10 @@ namespace SharpReport.ReportItems{
visualControl = new ReportDbTextControl();
this.visualControl.Text = base.ColumnName;
visualControl.StringFormat = base.StandartStringFormat;
this.Text = base.ColumnName;
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
@ -48,16 +52,6 @@ namespace SharpReport.ReportItems{ @@ -48,16 +52,6 @@ namespace SharpReport.ReportItems{
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
base.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (BasePropertyChange);
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
this.Text = base.ColumnName;
GrapFromBase();
this.initDone = true;
}
private void GrapFromBase() {
this.visualControl.SuspendLayout();
visualControl.StringFormat = base.StandartStringFormat;
this.visualControl.ResumeLayout();
}
#endregion
@ -71,14 +65,15 @@ namespace SharpReport.ReportItems{ @@ -71,14 +65,15 @@ namespace SharpReport.ReportItems{
#region events's
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
ItemsHelper.UpdateControlFromTextBase(this.visualControl,this);
}
ItemsHelper.UpdateControlFromTextBase(this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
base.SuspendLayout();
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
base.ResumeLayout();
this.HandlePropertyChanged("OnControlChanged");
}

74
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ReportRowItem.cs

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
/*
* Created by SharpDevelop.
* User: Forstmeier Helmut
* User: Forstmeier Peter
* Date: 01.03.2006
* Time: 14:35
*
@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
*/
using System;
using System.Drawing;
using System.ComponentModel;
using SharpReport.Designer;
@ -21,7 +22,7 @@ namespace SharpReport.ReportItems @@ -21,7 +22,7 @@ namespace SharpReport.ReportItems
/// </summary>
public class ReportRowItem : RowItem ,IDesignable{
private ReportRowControl visualControl;
private bool initDone;
#region Constructor
public ReportRowItem():this (GlobalValues.UnboundName){
@ -37,21 +38,19 @@ namespace SharpReport.ReportItems @@ -37,21 +38,19 @@ namespace SharpReport.ReportItems
private void Setup(){
visualControl = new ReportRowControl();
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
this.visualControl.FontChanged += new EventHandler (OnControlChanged);
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
this.visualControl.BackColorChanged += new EventHandler (OnAppereanceChanged);
base.PropertyChanged += new PropertyChangedEventHandler (BasePropertyChange);
base.Items.Added += OnAdd;
base.Items.Removed += OnRemove;
ItemsHelper.UpdateControlFromTextBase (this.visualControl,this);
this.initDone = true;
}
}
#endregion
@ -67,8 +66,9 @@ namespace SharpReport.ReportItems @@ -67,8 +66,9 @@ namespace SharpReport.ReportItems
}
private void ChildPropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
if (! base.Suspend) {
ItemsHelper.UpdateControlFromTextBase (this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
}
@ -77,6 +77,10 @@ namespace SharpReport.ReportItems @@ -77,6 +77,10 @@ namespace SharpReport.ReportItems
private void UpdateChilds () {
foreach (BaseReportItem br in this.Items) {
br.BackColor = this.BackColor;
IDesignable des = br as IDesignable;
if (des != null) {
des.VisualControl.BackColor = this.BackColor;
}
}
}
@ -103,22 +107,28 @@ namespace SharpReport.ReportItems @@ -103,22 +107,28 @@ namespace SharpReport.ReportItems
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
if (initDone == true) {
ItemsHelper.UpdateControlFromTextBase (this.visualControl,this);
}
ItemsHelper.UpdateControlFromTextBase (this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
this.SuspendLayout();
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
this.ResumeLayout();
this.HandlePropertyChanged("OnControlChanged");
}
private void OnAppereanceChanged (object sender, EventArgs e) {
this.SuspendLayout();
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
this.ResumeLayout();
UpdateChilds();
this.HandlePropertyChanged("OnControlChanged");
}
private void OnControlSelect(object sender, EventArgs e){
if (Selected != null)
Selected(this,e);
@ -153,7 +163,47 @@ namespace SharpReport.ReportItems @@ -153,7 +163,47 @@ namespace SharpReport.ReportItems
public event EventHandler <EventArgs> Selected;
#endregion
#region overrides
public override Size Size {
get {
return base.Size;
}
set {
base.Size = value;
if (this.visualControl != null) {
this.visualControl.Size = value;
}
this.HandlePropertyChanged("Size");
}
}
public override Point Location {
get {
return base.Location;
}
set {
base.Location = value;
if (this.visualControl != null) {
this.visualControl.Location = value;
}
this.HandlePropertyChanged("Location");
}
}
public override Font Font {
get {
return base.Font;
}
set {
base.Font = value;
if (this.visualControl != null) {
this.visualControl.Font = value;
}
this.HandlePropertyChanged("Font");
}
}
public override string ToString(){
return this.Name;

48
src/AddIns/Misc/SharpReport/SharpReport/ReportItems/TextBased/ReportTextItem.cs

@ -8,9 +8,8 @@ @@ -8,9 +8,8 @@
*/
using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Printing;
using System.ComponentModel;
using SharpReportCore;
using SharpReport.Designer;
@ -26,14 +25,17 @@ namespace SharpReport.ReportItems { @@ -26,14 +25,17 @@ namespace SharpReport.ReportItems {
public class ReportTextItem : BaseTextItem,IDesignable {
private ReportTextControl visualControl;
bool initDone;
#region Constructor
public ReportTextItem() : base(){
visualControl = new ReportTextControl();
this.Text = visualControl.Name;
visualControl.StringFormat = base.StandartStringFormat;
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
this.visualControl.Click += new EventHandler(OnControlSelect);
this.visualControl.VisualControlChanged += new EventHandler (OnControlChanged);
this.visualControl.BackColorChanged += new EventHandler (OnControlChanged);
@ -41,45 +43,32 @@ namespace SharpReport.ReportItems { @@ -41,45 +43,32 @@ namespace SharpReport.ReportItems {
this.visualControl.ForeColorChanged += new EventHandler (OnControlChanged);
base.PropertyChanged += new PropertyChangedEventHandler (BasePropertyChange);
// ItemsHelper.UpdateTextControl (this.visualControl,this);
this.Text = visualControl.Name;
visualControl.StringFormat = base.StandartStringFormat;
ItemsHelper.UpdateControlFromTextBase (this.visualControl,this);
this.initDone = true;
}
#endregion
#region overrides
public override string ToString(){
return this.Name;
}
#endregion
#region events
private void BasePropertyChange (object sender, PropertyChangedEventArgs e){
System.Console.WriteLine("Text:BasePropertyChanged");
if (initDone == true) {
ItemsHelper.UpdateControlFromTextBase(this.visualControl,this);
}
ItemsHelper.UpdateControlFromTextBase(this.visualControl,this);
this.HandlePropertyChanged(e.PropertyName);
}
private void OnControlChanged (object sender, EventArgs e) {
System.Console.WriteLine("Text:OnControlChanged");
base.SuspendLayout();
ItemsHelper.UpdateBaseFromTextControl (this.visualControl,this);
base.ResumeLayout();
this.HandlePropertyChanged("OnControlSelected");
}
private void OnControlSelect(object sender, EventArgs e){
System.Console.WriteLine("Text:OnControlSelect");
if (Selected != null)
if (Selected != null){
Selected(this,e);
}
}
/// <summary>
@ -88,15 +77,15 @@ namespace SharpReport.ReportItems { @@ -88,15 +77,15 @@ namespace SharpReport.ReportItems {
/// </summary>
protected void HandlePropertyChanged(string info) {
System.Console.WriteLine("Text:HandlePropertyChanged");
if ( !base.Suspend) {
if (PropertyChanged != null) {
PropertyChanged (this,new PropertyChangedEventArgs(info));
}
}
}
#endregion
public override Size Size {
get {
return base.Size;
@ -168,6 +157,13 @@ namespace SharpReport.ReportItems { @@ -168,6 +157,13 @@ namespace SharpReport.ReportItems {
#endregion
#region overrides
public override string ToString(){
return this.Name;
}
#endregion
/*
#region IDisposable
public override void Dispose(){

27
src/AddIns/Misc/SharpReport/SharpReport/Visitors/LoadReportVisitor.cs

@ -89,21 +89,16 @@ namespace SharpReport.Visitors { @@ -89,21 +89,16 @@ namespace SharpReport.Visitors {
if (sectionElem != null) {
baseSection = (BaseSection)designer.ReportModel.SectionCollection.Find(sectionElem.GetAttribute("name"));
if (baseSection != null) {
baseSection.SuspendLayout();
XmlHelper.SetSectionValues (base.XmlFormReader,sectionElem,baseSection);
XmlNodeList ctrlList = sectionElem.SelectNodes (base.NodesQuery);
SetReportItems(baseSection,null,ctrlList);
baseSection.ResumeLayout();
} else {
throw new MissingSectionException();
}
} else {
throw new MissingSectionException();
}
baseSection.ResumeLayout();
}
baseSection.ResumeLayout();
}
@ -120,26 +115,28 @@ namespace SharpReport.Visitors { @@ -120,26 +115,28 @@ namespace SharpReport.Visitors {
itemRenderer = designableFactory.Create(ctrlElem.GetAttribute("type"));
baseReportItem = (BaseReportItem)itemRenderer;
if (parentContainer == null) {
// System.Console.WriteLine("\tParent of {0} is Section",baseReportItem.Name);
baseReportItem.Parent = baseSection;
baseSection.Items.Add (baseReportItem);
} else {
// System.Console.WriteLine("\tParent of <{0}> is Container",baseReportItem.Name);
baseReportItem.Parent = parentContainer;
parentContainer.Items.Add(baseReportItem);
}
XmlHelper.BuildControl (base.XmlFormReader,ctrlElem,baseReportItem);
IContainerItem iContainer = baseReportItem as IContainerItem;
XmlHelper.SetReportItemValues (base.XmlFormReader,ctrlElem,baseReportItem);
XmlNodeList newList = ctrlNode.SelectNodes (base.NodesQuery);
if (newList.Count > 0) {
// System.Console.WriteLine("\t recusiv call for <{0}> with {1} childs ",
// baseReportItem,newList.Count);
SetReportItems (baseSection,iContainer,newList);
IContainerItem iContainer = baseReportItem as IContainerItem;
if (iContainer != null) {
XmlNodeList newList = ctrlNode.SelectNodes (base.NodesQuery);
if (newList.Count > 0) {
System.Console.WriteLine("\tLoadReportVisitor recursive call for <{0}> with {1} elements",
baseReportItem.Name,
newList.Count);
SetReportItems (baseSection,iContainer,newList);
}
}
}
catch (Exception ) {

6
src/AddIns/Misc/SharpReport/SharpReportAddin/FieldsExplorer/FieldsExplorer.cs

@ -221,7 +221,7 @@ namespace SharpReportAddin { @@ -221,7 +221,7 @@ namespace SharpReportAddin {
}
#region PadEvents
private void OnWindowChange (object sender,EventArgs e) {
private void old_OnWindowChange (object sender,EventArgs e) {
try {
if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ViewContent is SharpReportView) {
if (WorkbenchSingleton.Workbench.ActiveWorkbenchWindow == null || WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ViewContent == null) {
@ -248,13 +248,13 @@ namespace SharpReportAddin { @@ -248,13 +248,13 @@ namespace SharpReportAddin {
}
} else {
System.Console.WriteLine(" NO view"); }
System.Console.WriteLine("FieldsExplorer: NO view"); }
} catch (Exception) {
}
}
private void old_OnWindowChange (object sender,EventArgs e) {
private void OnWindowChange (object sender,EventArgs e) {
// System.Console.WriteLine("FieldsExplorer:OnWindowChange");
// System.Console.WriteLine("active control {0}",WorkbenchSingleton.ActiveControl.ToString());
// ICSharpCode.SharpDevelop.Gui.DefaultWorkbench dw = (ICSharpCode.SharpDevelop.Gui.DefaultWorkbench)sender;

3
src/AddIns/Misc/SharpReport/SharpReportAddin/SharpReportDisplayBinding.cs

@ -44,7 +44,7 @@ namespace SharpReportAddin { @@ -44,7 +44,7 @@ namespace SharpReportAddin {
view.FileName = view.DesignerControl.ReportModel.ReportSettings.FileName;
view.UpdateView(true);
view.Selected();
view.ShowReportSettings();
view.ShowReportSettings();
return view;
} catch (SharpReportException) {
if (view != null) {
@ -79,6 +79,7 @@ namespace SharpReportAddin { @@ -79,6 +79,7 @@ namespace SharpReportAddin {
view.Load (fileName);
view.UpdateView (false);
view.Selected();
view.DesignerControl.ReportModel.ReportSettings.InitDone = true;
return view;
} catch (Exception) {
return new SharpReportView();

74
src/AddIns/Misc/SharpReport/SharpReportAddin/SharpReportView.cs

@ -35,7 +35,7 @@ namespace SharpReportAddin{ @@ -35,7 +35,7 @@ namespace SharpReportAddin{
public class SharpReportView : AbstractViewContent,IPrintable,IDisposable
{
private SharpReportManager reportManager = null;
private SharpReportManager reportManager;
private BaseDesignerControl designerControl;
private TabControl tabControl;
@ -45,13 +45,15 @@ namespace SharpReportAddin{ @@ -45,13 +45,15 @@ namespace SharpReportAddin{
// SideBar
private AxSideTab sideTabItem = null;
private AxSideTab sideTabFunctions = null;
private Panel panel = new Panel();
private Panel panel;
private bool designerInitialised;
#region privates
void InitView() {
try {
reportManager = new SharpReportManager();
panel = new Panel();
panel.AutoScroll = true;
CreateTabControl();
BuildToolBarItems();
@ -77,7 +79,8 @@ namespace SharpReportAddin{ @@ -77,7 +79,8 @@ namespace SharpReportAddin{
private void SetOnPropertyChangedEvents () {
try {
ReportModel model = designerControl.ReportModel;
model.ReportSettings.PropertyChanged += new EventHandler (OnSettingsChanged);
model.ReportSettings.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
model.ReportHeader.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
model.PageHeader.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
model.DetailSection.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler (OnPropertyChanged);
@ -134,6 +137,7 @@ namespace SharpReportAddin{ @@ -134,6 +137,7 @@ namespace SharpReportAddin{
SharpDevelopSideBar sideBar = GetSideBar();
sideBar.Tabs.Remove (sideTabItem);
}
if (this.sideTabFunctions != null) {
SharpDevelopSideBar sideBar = GetSideBar();
sideBar.Tabs.Remove(this.sideTabFunctions);
@ -187,14 +191,16 @@ namespace SharpReportAddin{ @@ -187,14 +191,16 @@ namespace SharpReportAddin{
previewPage.Text = ResourceService.GetString("SharpReport.Preview");
this.OnTabPageChanged (this,EventArgs.Empty);
this.designerControl.Localise();
}
private BaseDesignerControl CreateDesignerControl() {
BaseDesignerControl ctrl = reportManager.BaseDesignControl;
ctrl.SuspendLayout();
ctrl.ReportControl.Width = ctrl.ReportModel.ReportSettings.PageSettings.Bounds.Width;
ctrl.ReportControl.AutoScroll = true;
ctrl.Dock = DockStyle.Fill;
ctrl.ResumeLayout();
ctrl.ReportControl.ObjectSelected +=new EventHandler <EventArgs>(OnObjectSelected);
@ -309,6 +315,9 @@ namespace SharpReportAddin{ @@ -309,6 +315,9 @@ namespace SharpReportAddin{
}
}
void SetTabTitel (string name) {
base.TitleName = String.Format("{0} [{1}]",name,this.tabControl.SelectedTab.Text);
}
private void OnTabPageChanged (object sender, EventArgs e) {
@ -321,7 +330,7 @@ namespace SharpReportAddin{ @@ -321,7 +330,7 @@ namespace SharpReportAddin{
} else {
name = Path.GetFileName (base.FileName);
}
base.TitleName = String.Format("{0} [{1}]",name,this.tabControl.SelectedTab.Text);
SetTabTitel (name);
switch (tabControl.SelectedIndex) {
case 0 :
break;
@ -344,23 +353,39 @@ namespace SharpReportAddin{ @@ -344,23 +353,39 @@ namespace SharpReportAddin{
base.IsDirty = true;
}
public void OnPropertyChanged (object sender,
System.ComponentModel.PropertyChangedEventArgs e) {
base.IsDirty = true;
}
private void OnSettingsChanged (object sender,EventArgs e) {
base.IsDirty = true;
private void OnPropertyChanged (object sender,
System.ComponentModel.PropertyChangedEventArgs e) {
if (this.designerInitialised) {
base.IsDirty = true;
OnObjectSelected (this,EventArgs.Empty);
}
this.designerInitialised = true;
}
private void OnModelFileNameChanged (object sender,EventArgs e) {
base.FileName = designerControl.ReportModel.ReportSettings.FileName;
base.IsDirty = true;
this.OnFileNameChanged(e);
if (designerControl.ReportModel.ReportSettings.InitDone) {
base.IsDirty = true;
this.OnFileNameChanged(e);
this.SetTabTitel(Path.GetFileName (base.FileName));
}
}
private void OnObjectSelected (object sender,EventArgs e) {
if (designerControl.ReportControl.SelectedObject != null) {
BaseReportObject oldobj = PropertyPad.Grid.SelectedObject as BaseReportObject;
// if (oldobj != null) {
// System.Console.WriteLine("");
// System.Console.WriteLine("leaving {0} <{1}> ",oldobj.Name,oldobj.Suspend);
// }
BaseReportObject newobj = designerControl.ReportControl.SelectedObject;
newobj.ResumeLayout();
// System.Console.WriteLine("View:OnObjectSelected {0} <{1}>",newobj.Name,newobj.Suspend);
if (PropertyPad.Grid != null) {
PropertyPad.Grid.SelectedObject = designerControl.ReportControl.SelectedObject;
}
@ -368,10 +393,16 @@ namespace SharpReportAddin{ @@ -368,10 +393,16 @@ namespace SharpReportAddin{
}
}
protected override void OnFileNameChanged(System.EventArgs e) {
base.OnFileNameChanged(e);
private void old_OnObjectSelected (object sender,EventArgs e) {
if (designerControl.ReportControl.SelectedObject != null) {
if (PropertyPad.Grid != null) {
PropertyPad.Grid.SelectedObject = designerControl.ReportControl.SelectedObject;
}
}
}
#endregion
#region Calls from outside commands
@ -406,6 +437,7 @@ namespace SharpReportAddin{ @@ -406,6 +437,7 @@ namespace SharpReportAddin{
/// Change Sorting or Grouping etc. to update the View and set the DirtyFlag
/// </summary>
/// <param name="setViewDirty">If true, set the DirtyFlag and Fire the PropertyChanged Event</param>
public void UpdateView(bool setViewDirty) {
this.tabControl.SelectedIndex = 0;
this.OnTabPageChanged(this,EventArgs.Empty);
@ -513,6 +545,8 @@ namespace SharpReportAddin{ @@ -513,6 +545,8 @@ namespace SharpReportAddin{
PropertyPad.Grid.Refresh();
}
this.designerControl.ReportModel.ReportSettings.AvailableFieldsCollection = reportManager.AvailableFieldsCollection;
this.designerControl.RegisterEvents();
} catch (Exception e) {
MessageService.ShowError(e,"SharpReportView:Load");
throw ;
@ -522,9 +556,8 @@ namespace SharpReportAddin{ @@ -522,9 +556,8 @@ namespace SharpReportAddin{
#endregion
#region ICSharpCode.SharpDevelop.Gui.IPrintable interface implementation
public System.Drawing.Printing.PrintDocument PrintDocument {
get {
AbstractRenderer renderer;
@ -541,8 +574,8 @@ namespace SharpReportAddin{ @@ -541,8 +574,8 @@ namespace SharpReportAddin{
#endregion
#region IDisposable
#region IDisposable
public override void Dispose(){
if (PropertyPad.Grid != null) {
@ -575,6 +608,7 @@ namespace SharpReportAddin{ @@ -575,6 +608,7 @@ namespace SharpReportAddin{
// Call Dispose on your base class.
base.Dispose();
}
#endregion
}

20
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseDataItem.cs

@ -32,15 +32,18 @@ namespace SharpReportCore { @@ -32,15 +32,18 @@ namespace SharpReportCore {
private string dbValue;
private string dataType;
private string nullValue;
/// <summary>
/// Default constructor - initializes all fields to default values
/// </summary>
public BaseDataItem() {
#region Constructor
public BaseDataItem():base() {
}
public BaseDataItem(string columnName){
public BaseDataItem(string columnName):base(){
this.columnName = columnName;
}
#endregion
#region privates
//TODO Need a much better handling for 'null' values
@ -64,7 +67,7 @@ namespace SharpReportCore { @@ -64,7 +67,7 @@ namespace SharpReportCore {
string toPrint = CheckForNullValue();
string formattedString = base.FireFormatOutput(toPrint,this.FormatString,"");
// System.Console.WriteLine("\t\tBaseDataItem:Render {0} ",formattedString);
RectangleF rect = base.PrepareRectangle (rpea,formattedString);
base.PrintTheStuff (rpea,formattedString,rect);
base.NotiyfyAfterPrint (rpea.LocationAfterDraw);
@ -74,6 +77,8 @@ namespace SharpReportCore { @@ -74,6 +77,8 @@ namespace SharpReportCore {
return "BaseDataItem";
}
#region Properies
[XmlIgnoreAttribute]
[Browsable(false)]
public virtual string DbValue {
@ -152,5 +157,8 @@ namespace SharpReportCore { @@ -152,5 +157,8 @@ namespace SharpReportCore {
nullValue = value;
}
}
#endregion
}
}

22
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseReportItem.cs

@ -28,7 +28,10 @@ namespace SharpReportCore { @@ -28,7 +28,10 @@ namespace SharpReportCore {
private Color foreColor;
private Font font;
public event EventHandler<BeforePrintEventArgs> ItemPrinting;
public event EventHandler<AfterPrintEventArgs> ItemPrinted;
public event EventHandler <FormatOutputEventArgs> FormatOutput;
public event EventHandler Disposed;
@ -57,6 +60,22 @@ namespace SharpReportCore { @@ -57,6 +60,22 @@ namespace SharpReportCore {
#endregion
#region EventHandling
protected void NotiyfyAfterPrint (PointF afterPrintLocation) {
if (this.ItemPrinted != null) {
AfterPrintEventArgs rea = new AfterPrintEventArgs (afterPrintLocation);
ItemPrinted(this, rea);
}
}
protected void NotifyBeforePrint () {
if (this.ItemPrinting != null) {
BeforePrintEventArgs ea = new BeforePrintEventArgs ();
ItemPrinting (this,ea);
}
}
#endregion
#region virtual method's
protected RectangleF DrawingRectangle (ReportPageEventArgs e,SizeF measureSize) {
@ -102,6 +121,7 @@ namespace SharpReportCore { @@ -102,6 +121,7 @@ namespace SharpReportCore {
}
set {
drawBorder = value;
base.NotifyPropertyChanged ("DrawBorder");
}
}

20
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseReportObject.cs

@ -41,9 +41,6 @@ namespace SharpReportCore { @@ -41,9 +41,6 @@ namespace SharpReportCore {
private Color backColor;
private int sectionOffset;
public event EventHandler<BeforePrintEventArgs> BeforePrinting;
public event EventHandler<AfterPrintEventArgs> AfterPrinting;
#region SharpReportCore.IPropertyChange interface implementation
@ -51,7 +48,7 @@ namespace SharpReportCore { @@ -51,7 +48,7 @@ namespace SharpReportCore {
#endregion
public BaseReportObject() {
this.suspend = true;
}
@ -196,22 +193,7 @@ namespace SharpReportCore { @@ -196,22 +193,7 @@ namespace SharpReportCore {
}
#endregion
#region EventHandling
public void NotiyfyAfterPrint (PointF afterPrintLocation) {
if (this.AfterPrinting != null) {
AfterPrintEventArgs rea = new AfterPrintEventArgs (afterPrintLocation);
AfterPrinting(this, rea);
}
}
public void NotifyBeforePrint () {
if (this.BeforePrinting != null) {
BeforePrintEventArgs ea = new BeforePrintEventArgs ();
BeforePrinting (this,ea);
}
}
#endregion
#region SharpReportCore.IBaseRenderer interface implementation
public virtual void Render(ReportPageEventArgs rpea) {

26
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseSection.cs

@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
//------------------------------------------------------------------------------
using System;
using System.ComponentModel;
//using System.Windows.Forms;
using System.Xml.Serialization;
/// <summary>
@ -24,7 +24,12 @@ namespace SharpReportCore { @@ -24,7 +24,12 @@ namespace SharpReportCore {
private ReportItemCollection items;
public event EventHandler<SectionPrintingEventArgs> SectionPrinting;
public event EventHandler<SectionPrintingEventArgs> SectionPrinted;
#region Constructors
public BaseSection(): base() {
this.Name = String.Empty;
}
@ -35,11 +40,28 @@ namespace SharpReportCore { @@ -35,11 +40,28 @@ namespace SharpReportCore {
#endregion
public override void Render(ReportPageEventArgs rpea){
this.NotifyPrinting();
base.Render(rpea);
this.NotifyPrinted();
}
#region properties
public void NotifyPrinting () {
if (this.SectionPrinting != null) {
SectionPrintingEventArgs ea = new SectionPrintingEventArgs (this);
SectionPrinting (this,ea);
}
}
public void NotifyPrinted () {
if (this.SectionPrinted != null) {
SectionPrintingEventArgs ea = new SectionPrintingEventArgs (this);
SectionPrinted (this,ea);
}
}
public int SectionMargin {
get {
return this.sectionMargin;

8
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/BaseTextItem.cs

@ -20,6 +20,7 @@ using SharpReportCore; @@ -20,6 +20,7 @@ using SharpReportCore;
namespace SharpReportCore {
public class BaseTextItem : SharpReportCore.BaseReportItem,IItemRenderer {
private string text;
@ -28,11 +29,14 @@ namespace SharpReportCore { @@ -28,11 +29,14 @@ namespace SharpReportCore {
private StringFormat standartStringFormat;
private TextDrawer textDrawer = new TextDrawer();
public BaseTextItem() {
#region Constructor
public BaseTextItem():base() {
this.standartStringFormat = GlobalValues.StandartStringFormat();
}
#endregion
public override void Render(ReportPageEventArgs rpea) {
if (rpea == null) {
throw new ArgumentNullException("rpea");

6
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/Graphics/BaseImageItem.cs

@ -88,9 +88,7 @@ namespace SharpReportCore { @@ -88,9 +88,7 @@ namespace SharpReportCore {
#region properties
// [EditorAttribute(typeof(System.Windows.Forms.Design.f.Design.FileNameEditor), typeof(System.Drawing.Design.UITypeEditor))]
public virtual string FileName {
get {
return fileName;
@ -106,7 +104,7 @@ namespace SharpReportCore { @@ -106,7 +104,7 @@ namespace SharpReportCore {
/// <summary>
/// The Image loaded from a File
/// </summary>
public Image Image {
public virtual Image Image {
get {
return image;
}

8
src/AddIns/Misc/SharpReport/SharpReportCore/BaseItems/RowItem.cs

@ -59,7 +59,7 @@ namespace SharpReportCore{ @@ -59,7 +59,7 @@ namespace SharpReportCore{
public override void Render(ReportPageEventArgs rpea){
System.Console.WriteLine("Render RowItem");
if (rpea == null) {
throw new ArgumentNullException("rpea");
}
@ -71,11 +71,9 @@ namespace SharpReportCore{ @@ -71,11 +71,9 @@ namespace SharpReportCore{
foreach (BaseReportItem childItem in this.items) {
Point loc = new Point (childItem.Location.X,childItem.Location.Y);
childItem.Location = new Point(this.Location.X + childItem.Location.X,
this.SectionOffset + this.Location.Y);
childItem.Location = new Point(this.Location.X + childItem.Location.X,
this.SectionOffset + childItem.Location.Y);
childItem.Render (rpea);
childItem.Location = new Point(loc.X,loc.Y);

43
src/AddIns/Misc/SharpReport/SharpReportCore/BaseSettings.cs

@ -34,7 +34,7 @@ using System.Xml.Serialization; @@ -34,7 +34,7 @@ using System.Xml.Serialization;
/// created on - 07.10.2005 22:50:43
/// </remarks>
namespace SharpReportCore {
public class BaseSettings : object {
public class BaseSettings : INotifyPropertyChanged{
private const string defaultReportName = "SharpReport1";
@ -51,13 +51,16 @@ namespace SharpReportCore { @@ -51,13 +51,16 @@ namespace SharpReportCore {
private Margins defaultMargins = new Margins (50,50,50,50);
private Size gridSize;
private Padding padding;
public event EventHandler PropertyChanged;
public event EventHandler FileNameChanged;
#region SharpReportCore.IPropertyChange interface implementation
public event PropertyChangedEventHandler PropertyChanged;
#endregion
#region Constructor
public BaseSettings():this(new PageSettings(),"","") {
BaseValues();
this.initDone = true;
}
public BaseSettings(PageSettings pageSettings , string reportName,string fileName){
@ -77,12 +80,10 @@ namespace SharpReportCore { @@ -77,12 +80,10 @@ namespace SharpReportCore {
this.fileName = MakePoperFilename(fileName);
}
this.pageSettings = pageSettings;
BaseValues();
}
void BaseValues() {
this.useStandartPrinter = true;
this.graphicsUnit = GraphicsUnit.Millimeter;
@ -106,9 +107,12 @@ namespace SharpReportCore { @@ -106,9 +107,12 @@ namespace SharpReportCore {
}
#endregion
protected void NotifyPropertyChanged() {
if (PropertyChanged != null) {
PropertyChanged (this,new EventArgs());
protected void NotifyPropertyChanged(string info) {
if (this.initDone) {
if (PropertyChanged != null) {
System.Console.WriteLine("BaseSettings : PropertyChanged {0}",info);
PropertyChanged (this,new PropertyChangedEventArgs (info));
}
}
}
@ -125,8 +129,9 @@ namespace SharpReportCore { @@ -125,8 +129,9 @@ namespace SharpReportCore {
}
}
protected bool InitDone {
[Browsable(false)]
[XmlIgnoreAttribute]
public bool InitDone {
get {
return initDone;
}
@ -147,7 +152,7 @@ namespace SharpReportCore { @@ -147,7 +152,7 @@ namespace SharpReportCore {
set {
if (reportName != value) {
reportName = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("ReportName");
}
}
}
@ -165,7 +170,7 @@ namespace SharpReportCore { @@ -165,7 +170,7 @@ namespace SharpReportCore {
set {
if (fileName != value) {
fileName = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("FileName");
if (FileNameChanged != null ){
FileNameChanged (this,EventArgs.Empty);
}
@ -182,7 +187,7 @@ namespace SharpReportCore { @@ -182,7 +187,7 @@ namespace SharpReportCore {
set {
if (useStandartPrinter != value) {
useStandartPrinter = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("UseStandrtPrinter");
}
}
}
@ -196,7 +201,7 @@ namespace SharpReportCore { @@ -196,7 +201,7 @@ namespace SharpReportCore {
}
set {
this.pageSettings = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("PageSettings");
}
}
@ -210,7 +215,7 @@ namespace SharpReportCore { @@ -210,7 +215,7 @@ namespace SharpReportCore {
if (defaultMargins != value) {
defaultMargins = value;
PageSettings.Margins = defaultMargins;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("DefaultMargins");
}
}
@ -228,7 +233,7 @@ namespace SharpReportCore { @@ -228,7 +233,7 @@ namespace SharpReportCore {
set {
if (graphicsUnit != value) {
graphicsUnit = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("GraphicsUnit");
}
}
}
@ -240,7 +245,7 @@ namespace SharpReportCore { @@ -240,7 +245,7 @@ namespace SharpReportCore {
set {
if (this.gridSize != value) {
this.gridSize = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("GridSize");
}
}
}
@ -253,7 +258,7 @@ namespace SharpReportCore { @@ -253,7 +258,7 @@ namespace SharpReportCore {
set {
if (this.padding != value) {
this.padding = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("Padding");
}
}

16
src/AddIns/Misc/SharpReport/SharpReportCore/Events/PrintEventArgs.cs

@ -23,6 +23,22 @@ using System.Drawing; @@ -23,6 +23,22 @@ using System.Drawing;
namespace SharpReportCore {
public class SectionPrintingEventArgs : System.EventArgs {
BaseSection section;
public SectionPrintingEventArgs(BaseSection section){
this.section = section;
}
public BaseSection Section {
get {
return section;
}
}
}
///<summary>
/// This event is fired just bevore an Item is printed
/// Use this event for formatting etc.

3
src/AddIns/Misc/SharpReport/SharpReportCore/Factories/BaseItemFactory.cs

@ -33,8 +33,7 @@ namespace SharpReportCore { @@ -33,8 +33,7 @@ namespace SharpReportCore {
}
public new BaseReportItem Create (string name){
if (String.IsNullOrEmpty(name)) {
String str = String.Format("<{0}>",name);
throw new UnkownItemException(str);
throw new ArgumentNullException("name");
}
if (name.LastIndexOf('.') > 0) {
StringBuilder b = new StringBuilder (name);

5
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractDataRenderer.cs

@ -17,6 +17,8 @@ namespace SharpReportCore{ @@ -17,6 +17,8 @@ namespace SharpReportCore{
public class AbstractDataRenderer : AbstractRenderer{
DataManager dataManager;
DataNavigator navigator;
public AbstractDataRenderer(ReportModel model,DataManager dataManager):base(model){
if (dataManager == null) {
throw new ArgumentNullException("dataManager");
@ -24,8 +26,7 @@ namespace SharpReportCore{ @@ -24,8 +26,7 @@ namespace SharpReportCore{
this.dataManager = dataManager;
}
protected override void ReportBegin(object sender, ReportPageEventArgs e)
{
protected override void ReportBegin(object sender, ReportPageEventArgs e){
base.ReportBegin(sender, e);
}

92
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/AbstractRenderer.cs

@ -113,7 +113,7 @@ namespace SharpReportCore { @@ -113,7 +113,7 @@ namespace SharpReportCore {
throw new ArgumentNullException("rpea");
}
System.Console.WriteLine("Debug Rectangle {0}",rectangle);
// System.Console.WriteLine("Debug Rectangle {0}",rectangle);
rpea.PrintPageEventArgs.Graphics.DrawRectangle (Pens.Black,rectangle);
}
@ -132,54 +132,65 @@ namespace SharpReportCore { @@ -132,54 +132,65 @@ namespace SharpReportCore {
return rect;
}
///<summary>
/// Prints the ReportHader printjob is the same in all Types of reportz
///</summary>
/// <param name="e">ReportpageEventArgs</param>
///
protected PointF DrawReportHeader (ReportPageEventArgs e) {
float offset = 0;
BaseSection section = null;
protected PointF MeasureReportHeader (ReportPageEventArgs e) {
PointF endAt = new PointF();
if (e.PageNumber == 1) {
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportHeader,CultureInfo.InvariantCulture);
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportHeader,
CultureInfo.InvariantCulture);
if (this.CurrentSection.Items.Count > 0) {
this.CurrentSection.SectionOffset = reportSettings.DefaultMargins.Top;
FitSectionToItems (this.CurrentSection,e);
endAt = new PointF (0,
reportSettings.DefaultMargins.Top + this.CurrentSection.Size.Height + Gap);
} else {
endAt = new PointF(0,reportSettings.DefaultMargins.Top);
}
section = CurrentSection;
section.SectionOffset = reportSettings.DefaultMargins.Top;
FitSectionToItems (section,e);
offset = RenderSection (section,e);
}
return new PointF (0,offset + reportSettings.DefaultMargins.Top + Gap);
return endAt;
}
///<summary>
/// Prints the PageHeader printjob is the same in all Types of reportz
///</summary>
/// <param name="startAt">Section start at this PointF</param>
/// <param name="e">ReportPageEventArgs</param>
protected PointF DrawPageHeader (PointF startat,ReportPageEventArgs e) {
float offset = 0F;
BaseSection section = null;
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageHeader,CultureInfo.InvariantCulture);
section = CurrentSection;
protected PointF MeasurePageHeader (PointF startat,ReportPageEventArgs e) {
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageHeader,
CultureInfo.InvariantCulture);
if (e.PageNumber == 1) {
section.SectionOffset = (int)startat.Y + Gap;
this.CurrentSection.SectionOffset = (int)startat.Y + Gap;
} else {
section.SectionOffset = reportSettings.DefaultMargins.Top;
this.CurrentSection.SectionOffset = reportSettings.DefaultMargins.Top;
}
FitSectionToItems (section,e);
offset = RenderSection (section,e);
return new PointF (0,section.SectionOffset + offset + Gap);
FitSectionToItems (this.CurrentSection,e);
return new PointF (0,
this.CurrentSection.SectionOffset + this.CurrentSection.Size.Height + Gap);
}
protected PointF MeasurePageEnd (ReportPageEventArgs e) {
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageFooter,
CultureInfo.InvariantCulture);
this.CurrentSection.SectionOffset = reportSettings.PageSettings.Bounds.Height - reportSettings.DefaultMargins.Top - reportSettings.DefaultMargins.Bottom;
FitSectionToItems (this.CurrentSection,e);
this.DetailEnds = new Point (0,this.CurrentSection.SectionOffset);
return new PointF(0,this.CurrentSection.SectionOffset);
}
protected PointF MeasureReportFooter (ReportPageEventArgs e) {
sectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportFooter,
CultureInfo.InvariantCulture);
FitSectionToItems (this.CurrentSection,e);
return new PointF(0,this.CurrentSection.SectionOffset + this.CurrentSection.Size.Height);
}
protected virtual int RenderSection (BaseSection section,ReportPageEventArgs rpea) {
Point drawPoint = new Point(0,0);
if (section.Visible){
section.Render (rpea);
@ -204,7 +215,7 @@ namespace SharpReportCore { @@ -204,7 +215,7 @@ namespace SharpReportCore {
}
return drawPoint.Y;
}
protected void DrawSingleItem (ReportPageEventArgs rpea,BaseReportItem item){
item.SuspendLayout();
@ -216,12 +227,12 @@ namespace SharpReportCore { @@ -216,12 +227,12 @@ namespace SharpReportCore {
// Called by FormatOutPutEvent of the BaseReportItem
void FormatBaseReportItem (object sender, FormatOutputEventArgs rpea) {
System.Console.WriteLine("FormatBaseReportItem");
// System.Console.WriteLine("FormatBaseReportItem");
BaseDataItem baseDataItem = sender as BaseDataItem;
if (baseDataItem != null) {
if (!String.IsNullOrEmpty(baseDataItem.FormatString)) {
rpea.FormatedValue = defaultFormatter.FormatItem (baseDataItem);
System.Console.WriteLine("\tFormated Value = {0}",rpea.FormatedValue);
// System.Console.WriteLine("\tFormated Value = {0}",rpea.FormatedValue);
} else {
rpea.FormatedValue = rpea.ValueToFormat;
}
@ -333,7 +344,8 @@ namespace SharpReportCore { @@ -333,7 +344,8 @@ namespace SharpReportCore {
}
protected virtual void PrintBodyStart (object sender,ReportPageEventArgs e) {
this.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,
CultureInfo.InvariantCulture);
}
@ -341,12 +353,12 @@ namespace SharpReportCore { @@ -341,12 +353,12 @@ namespace SharpReportCore {
}
protected virtual void PrintPageEnd (object sender,ReportPageEventArgs e) {
BaseSection section = null;
section = CurrentSection;
section.SectionOffset = reportSettings.PageSettings.Bounds.Height - reportSettings.DefaultMargins.Top - reportSettings.DefaultMargins.Bottom;
FitSectionToItems (section,e);
RenderSection (section,e);
protected virtual void PrintPageEnd (object sender,ReportPageEventArgs e) {
// BaseSection section = null;
// section = CurrentSection;
// section.SectionOffset = reportSettings.PageSettings.Bounds.Height - reportSettings.DefaultMargins.Top - reportSettings.DefaultMargins.Bottom;
// FitSectionToItems (section,e);
// RenderSection (section,e);
}
#endregion

150
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderDataReport.cs

@ -40,12 +40,12 @@ using SharpReportCore; @@ -40,12 +40,12 @@ using SharpReportCore;
///
namespace SharpReportCore {
// public class RenderDataReport : AbstractRenderer {
public class RenderDataReport : AbstractDataRenderer {
public class RenderDataReport : AbstractDataRenderer {
private PointF currentPoint;
private DataNavigator dataNavigator;
public RenderDataReport(ReportModel model,DataManager dataManager):base (model,dataManager){
base.DataManager.GroupChanged += new EventHandler<GroupChangedEventArgs>(OnGroupChanged);
base.DataManager.GroupChanging += new EventHandler <EventArgs> (OnGroupChanging);
@ -63,20 +63,89 @@ namespace SharpReportCore { @@ -63,20 +63,89 @@ namespace SharpReportCore {
}
private void OnListChanged (object sender,System.ComponentModel.ListChangedEventArgs e) {
System.Console.WriteLine("List Changed sender <{0}> reason <{1}>",
sender.ToString(),
e.ListChangedType);
// System.Console.WriteLine("List Changed sender <{0}> reason <{1}>",
// sender.ToString(),
// e.ListChangedType);
}
private void OnSectionPrinting (object sender,SectionPrintingEventArgs e) {
System.Console.WriteLine("");
System.Console.WriteLine("Begin Print <{0}> with <{1}> Items ",e.Section.Name,
e.Section.Items.Count);
}
private void OnSectionPrinted (object sender,SectionPrintingEventArgs e) {
System.Console.WriteLine("Section Printed <{0}> ",e.Section.Name);
}
private void AddSectionEvents () {
base.CurrentSection.SectionPrinting += new EventHandler<SectionPrintingEventArgs>(OnSectionPrinting);
base.CurrentSection.SectionPrinted += new EventHandler<SectionPrintingEventArgs>(OnSectionPrinted);
}
private void RemoveSectionEvents () {
base.CurrentSection.SectionPrinting -= new EventHandler<SectionPrintingEventArgs>(OnSectionPrinting);
base.CurrentSection.SectionPrinted -= new EventHandler<SectionPrintingEventArgs>(OnSectionPrinted);
}
#region overrides
#region Draw the different report Sections
private PointF DoReportHeader (ReportPageEventArgs rpea){
PointF endAt = base.MeasureReportHeader (rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,base.CurrentSection);
base.CurrentSection.PageBreakAfter = false;
return new PointF();
}
return endAt;
}
private PointF DoPageHeader (PointF startAt,ReportPageEventArgs rpea){
PointF endAt = base.MeasurePageHeader (startAt,rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
return endAt;
}
private void DoPageEnd (ReportPageEventArgs rpea){
System.Console.WriteLine("\tDoPageEnd");
base.PrintPageEnd(this,rpea);
base.MeasurePageEnd (rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
}
//TODO how should we handle ReportFooter, print it on an seperate page ????
private void DoReportFooter (PointF startAt,ReportPageEventArgs rpea){
base.MeasureReportFooter(rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
}
#endregion
protected override void ReportQueryPage(object sender, QueryPageSettingsEventArgs e) {
base.ReportQueryPage (sender,e);
protected override void ReportQueryPage(object sender, QueryPageSettingsEventArgs qpea) {
base.ReportQueryPage (sender,qpea);
}
protected override void ReportBegin(object sender, ReportPageEventArgs e) {
base.ReportBegin (sender,e);
protected override void ReportBegin(object sender, ReportPageEventArgs rpea) {
base.ReportBegin (sender,rpea);
base.DataManager.ListChanged += new EventHandler<ListChangedEventArgs> (OnListChanged);
dataNavigator = base.DataManager.GetNavigator;
@ -90,88 +159,91 @@ namespace SharpReportCore { @@ -90,88 +159,91 @@ namespace SharpReportCore {
if (rpea == null) {
throw new ArgumentNullException("rpea");
}
base.BeginPrintPage (sender,rpea);
//Draw ReportHeader
currentPoint = base.DrawReportHeader (rpea);
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,base.CurrentSection);
base.CurrentSection.PageBreakAfter = false;
return;
if (rpea.PageNumber == 1) {
//Draw ReportHeader
this.currentPoint = DoReportHeader (rpea);
}
//Draw Pageheader
currentPoint = base.DrawPageHeader (currentPoint,rpea);
this.currentPoint = DoPageHeader (this.currentPoint,rpea);
base.DetailStart = new Point ((int)currentPoint.X,(int)currentPoint.Y);
}
protected override void PrintBodyStart(object sender, ReportPageEventArgs e) {
protected override void PrintBodyStart(object sender, ReportPageEventArgs rpea) {
Rectangle sectionRect;
Rectangle detailRect;
base.PrintBodyStart (sender,e);
base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,CultureInfo.InvariantCulture);
base.PrintBodyStart (sender,rpea);
BaseSection section = base.CurrentSection;
section.SectionOffset = (int)this.currentPoint.Y + base.Gap;
detailRect = base.DetailRectangle (e);
detailRect = base.DetailRectangle (rpea);
//this is only for the first record, zhe other details will be calculated
sectionRect = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
sectionRect = new Rectangle (rpea.PrintPageEventArgs.MarginBounds.Left,
section.SectionOffset,
e.PrintPageEventArgs.MarginBounds.Width,
rpea.PrintPageEventArgs.MarginBounds.Width,
section.Size.Height);
// DebugRectangle (e,detailRect);
// no loop if there is no data
if (! this.dataNavigator.HasMoreData ) {
e.PrintPageEventArgs.HasMorePages = false;
rpea.PrintPageEventArgs.HasMorePages = false;
return;
}
while (this.dataNavigator.MoveNext()) {
this.dataNavigator.Fill (base.CurrentSection.Items);
base.RenderSection (section,e);
base.RenderSection (section,rpea);
section.SectionOffset = section.SectionOffset + section.Size.Height + 2 * base.Gap;
base.FitSectionToItems (base.CurrentSection,e);
base.FitSectionToItems (base.CurrentSection,rpea);
sectionRect = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
sectionRect = new Rectangle (rpea.PrintPageEventArgs.MarginBounds.Left,
section.SectionOffset,
e.PrintPageEventArgs.MarginBounds.Width,
rpea.PrintPageEventArgs.MarginBounds.Width,
section.Size.Height);
if (!detailRect.Contains(sectionRect)) {
base.PageBreak(e,section);
base.PageBreak(rpea,section);
return;
}
}
e.PrintPageEventArgs.HasMorePages = false;
DoReportFooter (new PointF(0,section.SectionOffset + section.Size.Height),
rpea);
rpea.PrintPageEventArgs.HasMorePages = false;
//Did we have a pagebreak
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(e,section);
base.PageBreak(rpea,section);
base.CurrentSection.PageBreakAfter = false;
return;
}
}
protected override void PrintBodyEnd(object sender, ReportPageEventArgs e) {
base.PrintBodyEnd (sender,e);
protected override void PrintBodyEnd(object sender, ReportPageEventArgs rpea) {
// System.Console.WriteLine("PrintBodyEnd");
base.PrintBodyEnd (sender,rpea);
}
protected override void PrintPageEnd(object sender, ReportPageEventArgs e) {
base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageFooter,
CultureInfo.InvariantCulture);
base.PrintPageEnd (sender,e);
base.DetailEnds = new Point (0,base.CurrentSection.SectionOffset);
protected override void PrintPageEnd(object sender, ReportPageEventArgs rpea) {
this.DoPageEnd (rpea);
}
public override string ToString() {

164
src/AddIns/Misc/SharpReport/SharpReportCore/Printing/RenderFormSheetReport.cs

@ -46,15 +46,84 @@ namespace SharpReportCore { @@ -46,15 +46,84 @@ namespace SharpReportCore {
}
private void OnSectionPrinting (object sender,SectionPrintingEventArgs e) {
System.Console.WriteLine("");
System.Console.WriteLine("Begin Print <{0}> with <{1}> Items ",e.Section.Name,
e.Section.Items.Count);
}
private void OnSectionPrinted (object sender,SectionPrintingEventArgs e) {
System.Console.WriteLine("Section Printed {0} ",e.Section.Name);
}
private void AddSectionEvents () {
base.CurrentSection.SectionPrinting += new EventHandler<SectionPrintingEventArgs>(OnSectionPrinting);
base.CurrentSection.SectionPrinted += new EventHandler<SectionPrintingEventArgs>(OnSectionPrinted);
}
private void RemoveSectionEvents () {
base.CurrentSection.SectionPrinting -= new EventHandler<SectionPrintingEventArgs>(OnSectionPrinting);
base.CurrentSection.SectionPrinted -= new EventHandler<SectionPrintingEventArgs>(OnSectionPrinted);
}
#region Draw the different report Sections
private PointF DoReportHeader (ReportPageEventArgs rpea){
PointF endAt = base.MeasureReportHeader (rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(rpea,base.CurrentSection);
base.CurrentSection.PageBreakAfter = false;
return new PointF();
}
return endAt;
}
private PointF DoPageHeader (PointF startAt,ReportPageEventArgs rpea){
PointF endAt = base.MeasurePageHeader (startAt,rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
return endAt;
}
private void DoPageEnd (ReportPageEventArgs rpea){
base.PrintPageEnd(this,rpea);
base.MeasurePageEnd (rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
}
//TODO how should we handle ReportFooter, print it on an seperate page ????
private void DoReportFooter (PointF startAt,ReportPageEventArgs rpea){
base.MeasureReportFooter(rpea);
this.AddSectionEvents();
base.RenderSection (base.CurrentSection,rpea);
this.RemoveSectionEvents();
}
#endregion
#region event's
protected override void ReportQueryPage (object sender,QueryPageSettingsEventArgs e) {
base.ReportQueryPage (sender,e);
protected override void ReportQueryPage (object sender,QueryPageSettingsEventArgs qpea) {
base.ReportQueryPage (sender,qpea);
}
protected override void ReportBegin (object sender,ReportPageEventArgs e) {
base.ReportBegin (sender,e);
protected override void ReportBegin (object sender,ReportPageEventArgs rpea) {
base.ReportBegin (sender,rpea);
}
/// <summary>
@ -63,19 +132,31 @@ namespace SharpReportCore { @@ -63,19 +132,31 @@ namespace SharpReportCore {
/// <param name="sender"></param>
/// <param name="e"></param>
///
protected override void BeginPrintPage (object sender,ReportPageEventArgs e) {
base.BeginPrintPage (sender,e);
protected override void BeginPrintPage (object sender,ReportPageEventArgs rpea) {
if (rpea == null) {
throw new ArgumentNullException("rpea");
}
base.BeginPrintPage (sender,rpea);
//Draw ReportHeader
currentPoint = base.DrawReportHeader (e);
if (rpea.PageNumber == 1) {
//Draw ReportHeader
this.currentPoint = DoReportHeader (rpea);
}
if (base.CurrentSection.PageBreakAfter) {
base.PageBreak(e,base.CurrentSection);
base.PageBreak(rpea,base.CurrentSection);
base.CurrentSection.PageBreakAfter = false;
return;
}
//Draw Pageheader
currentPoint = base.DrawPageHeader (currentPoint,e);
this.currentPoint = DoPageHeader (this.currentPoint,rpea);
base.DetailStart = new Point ((int)currentPoint.X,(int)currentPoint.Y);
}
@ -85,61 +166,38 @@ namespace SharpReportCore { @@ -85,61 +166,38 @@ namespace SharpReportCore {
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected override void PrintBodyStart (object sender,ReportPageEventArgs e) {
base.PrintBodyStart (sender,e);
protected override void PrintBodyStart (object sender,ReportPageEventArgs rpea) {
base.PrintBodyStart (sender,rpea);
base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportDetail,
CultureInfo.InvariantCulture);
BaseSection section = base.CurrentSection;
section.SectionOffset = (int)this.currentPoint.Y + base.Gap;
Rectangle detailRect = base.DetailRectangle (e);
FitSectionToItems (section,e);
base.RenderSection (section,e);
// DebugRectangle (e,detailRect);
}
protected override void PrintBodyEnd (object sender,ReportPageEventArgs e) {
base.PrintBodyEnd (sender,e);
Rectangle detailRect = base.DetailRectangle (rpea);
FitSectionToItems (section,rpea);
this.AddSectionEvents();
base.RenderSection (section,rpea);
this.RemoveSectionEvents();
}
/// <summary>
/// PageFooter and, if LastPage ReportFooter
/// Print the PageFooter
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected override void PrintPageEnd (object sender,ReportPageEventArgs e) {
protected override void PrintPageEnd(object sender, ReportPageEventArgs rpea) {
this.DoPageEnd (rpea);
}
//PageFooter
base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportPageFooter,
CultureInfo.InvariantCulture);
base.PrintPageEnd (sender,e);
Rectangle r = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
base.CurrentSection.SectionOffset ,
e.PrintPageEventArgs.MarginBounds.Width,
base.CurrentSection.Size.Height);
// DebugRectangle (e,r);
int off = base.CurrentSection.SectionOffset + base.CurrentSection.Size.Height + base.Gap;
//ReportFooter
base.SectionInUse = Convert.ToInt16(GlobalEnums.enmSection.ReportFooter,
CultureInfo.InvariantCulture);
BaseSection section = base.CurrentSection;
section.SectionOffset = off;
FitSectionToItems (section,e);
Rectangle rr = new Rectangle (e.PrintPageEventArgs.MarginBounds.Left,
base.CurrentSection.SectionOffset ,
e.PrintPageEventArgs.MarginBounds.Width,
base.CurrentSection.Size.Height);
base.RenderSection (section,e);
// DebugRectangle (e,rr);
protected override void PrintBodyEnd (object sender,ReportPageEventArgs rpea) {
base.PrintBodyEnd (sender,rpea);
this.DoReportFooter (new PointF(0,base.CurrentSection.SectionOffset + base.CurrentSection.Size.Height),
rpea);
}
#endregion
}

22
src/AddIns/Misc/SharpReport/SharpReportCore/ReportSettings.cs

@ -40,7 +40,8 @@ namespace SharpReportCore{ @@ -40,7 +40,8 @@ namespace SharpReportCore{
///
public class ReportSettings : BaseSettings,SharpReportCore.IStoreable,
IBaseRenderer,IDisposable{
IBaseRenderer,IDisposable{
private string connectionString;
private string commandText;
@ -60,7 +61,8 @@ namespace SharpReportCore{ @@ -60,7 +61,8 @@ namespace SharpReportCore{
private ColumnCollection groupingsCollection;
private ColumnCollection sortingCollection;
#region Constructor's
public ReportSettings(System.Drawing.Printing.PageSettings defaultPageSettings)
@ -228,7 +230,7 @@ namespace SharpReportCore{ @@ -228,7 +230,7 @@ namespace SharpReportCore{
}
}
}
base.InitDone = true;
// base.InitDone = true;
}
#endregion
@ -492,7 +494,7 @@ namespace SharpReportCore{ @@ -492,7 +494,7 @@ namespace SharpReportCore{
set {
if (reportType != value) {
reportType = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("ReportType");
}
}
}
@ -560,7 +562,7 @@ namespace SharpReportCore{ @@ -560,7 +562,7 @@ namespace SharpReportCore{
}
if (reportParametersCollection != value) {
reportParametersCollection = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("SqlParametersCollection");
}
}
}
@ -577,7 +579,7 @@ namespace SharpReportCore{ @@ -577,7 +579,7 @@ namespace SharpReportCore{
set {
if (connectionString != value) {
connectionString = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("ConnectionString");
}
}
}
@ -592,7 +594,7 @@ namespace SharpReportCore{ @@ -592,7 +594,7 @@ namespace SharpReportCore{
set {
if (commandText != value) {
commandText = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("CommandText");
}
}
}
@ -606,7 +608,7 @@ namespace SharpReportCore{ @@ -606,7 +608,7 @@ namespace SharpReportCore{
set {
if (commandType != value) {
commandType = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("CommandType");
}
}
}
@ -620,7 +622,7 @@ namespace SharpReportCore{ @@ -620,7 +622,7 @@ namespace SharpReportCore{
set {
if (dataModel != value) {
dataModel = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("DataModel");
}
}
}
@ -640,7 +642,7 @@ namespace SharpReportCore{ @@ -640,7 +642,7 @@ namespace SharpReportCore{
set {
if (defaultFont != value) {
defaultFont = value;
this.NotifyPropertyChanged();
this.NotifyPropertyChanged("DefaultFont");
}
}
}

5
src/AddIns/Misc/SharpReport/SharpReportCore/Visitors/LoadModelVisitor.cs

@ -68,6 +68,7 @@ namespace SharpReportCore { @@ -68,6 +68,7 @@ namespace SharpReportCore {
if (node is XmlElement) {
XmlElement sectionElem = (XmlElement)node;
baseSection = (BaseSection)model.SectionCollection.Find(sectionElem.GetAttribute("name"));
baseSection.SuspendLayout();
if (baseSection != null) {
XmlHelper.SetSectionValues (xmlFormReader,sectionElem,baseSection);
XmlNodeList ctrlList = sectionElem.SelectNodes ("controls/control");
@ -80,10 +81,10 @@ namespace SharpReportCore { @@ -80,10 +81,10 @@ namespace SharpReportCore {
//Read the <BaseClassName> Element
rpt = (BaseReportItem)baseItemFactory.Create(ctrlElem.GetAttribute("basetype"));
if (rpt != null) {
rpt.SuspendLayout();
// rpt.SuspendLayout();
rpt.Parent = baseSection;
baseSection.Items.Add (rpt);
XmlHelper.BuildControl (xmlFormReader,ctrlElem,rpt);
XmlHelper.SetReportItemValues (xmlFormReader,ctrlElem,rpt);
rpt.Visible = true;
rpt.ResumeLayout();
} else {

5
src/AddIns/Misc/SharpReport/SharpReportCore/Xml/XmlHelper.cs

@ -117,7 +117,7 @@ namespace SharpReportCore { @@ -117,7 +117,7 @@ namespace SharpReportCore {
/// <param name="reader">See XMLFormReader</param>
/// <param name="item">The Control for wich the values are</param>
/// <param name="ctrlElem">Element witch contains the values</param>
public static void BuildControl (XmlFormReader reader,
public static void SetReportItemValues (XmlFormReader reader,
XmlElement ctrlElem,
BaseReportItem item) {
@ -131,7 +131,8 @@ namespace SharpReportCore { @@ -131,7 +131,8 @@ namespace SharpReportCore {
item.Font = XmlFormReader.MakeFont (elem.GetAttribute("value"));
}
reader.SetValue (item,elem.Name,elem.GetAttribute("value"));
reader.SetValue (item,
elem.Name,elem.GetAttribute("value"));
}
}
}

54
src/Libraries/ICSharpCode.TextEditor/Project/Resources/ASPX.xshd

@ -1,49 +1,17 @@ @@ -1,49 +1,17 @@
<?xml version="1.0"?>
<SyntaxDefinition name = "ASP3/XHTML" extensions = ".asp">
<Environment>
<Default color = "SystemColors.WindowText" bgcolor = "SystemColors.Window"/>
<Selection color = "SystemColors.HighlightText" bgcolor = "SystemColors.Highlight"/>
<!-- <Selection bgcolor = "LightBlue"/> -->
<VRuler color = "SystemColors.ControlLight"/>
<InvalidLines color = "Red"/>
<CaretMarker color = "Yellow"/>
<LineNumbers color = "SystemColors.ControlDark" bgcolor = "SystemColors.Window"/>
<FoldLine color = "#808080" bgcolor="Black"/>
<FoldMarker color = "#808080" bgcolor="White"/>
<SelectedFoldLine color = "Black" bgcolor="Black"/>
<EOLMarkers color = "#E0E0E5"/>
<SpaceMarkers color = "#E0E0E5"/>
<TabMarkers color = "#E0E0E5"/>
</Environment>
<Digits name = "Digits" bold = "false" italic = "false" color = "Black"/>
<SyntaxDefinition name = "ASP/XHTML" extensions = ".asp;.aspx;.asax;.asmx" extends = "HTML">
<RuleSets>
<RuleSet ignorecase = "false">
<Delimiters>&lt;&gt; </Delimiters>
<Span name = "ASPCode" rule = "ASP" bold = "false" italic = "false" color = "Green" bgcolor = "#E7E2D3" stopateol = "false">
<Begin>&lt;%</Begin>
<End>%&gt;</End>
</Span>
<Span name= "HTMLCode" rule = "HTML" bold = "false" italic = "false" color = "Blue" stopateol = "false">
<Begin>&lt;</Begin>
<End>&gt;</End>
</Span>
</RuleSet>
<RuleSet name="ASP" ignorecase = "false">
<Span name = "COMMENT" bold = "false" italic = "true" color = "SlateGray" stopateol = "true">
<Begin>'</Begin>
</Span>
</RuleSet>
<RuleSet ignorecase = "true" noescapesequences="true">
<Span name = "ASPCode" rule = "ASP" bold = "false" italic = "false" color = "Black" bgcolor = "#F7F2E3" stopateol = "false">
<Begin color="Black" bgcolor="Yellow">&lt;%</Begin>
<End color="Black" bgcolor="Yellow">%&gt;</End>
</Span>
</RuleSet>
<RuleSet name="HTML" ignorecase = "false" reference="HTML">
<RuleSet name="ASP" ignorecase = "false">
<Span name = "COMMENT" bold = "false" italic = "false" color = "Green" bgcolor = "#F7F2E3" stopateol = "true">
<Begin>//</Begin>
</Span>
</RuleSet>
</RuleSets>
</SyntaxDefinition>

4
src/Libraries/ICSharpCode.TextEditor/Project/Resources/Mode.xsd

@ -320,7 +320,7 @@ @@ -320,7 +320,7 @@
<xsd:element name="Properties" type="Properties" minOccurs="0" maxOccurs="1" />
<!-- The Digits tag defines the color for rendering Digits-->
<xsd:element name="Digits" type="Digits" />
<xsd:element name="Digits" type="Digits" minOccurs="0" maxOccurs="1"/>
<!-- The RuleSets tag defines the rule sets that are used in the mode. Note that all modes are defined in
a flat structture even if they are used recursively. For an example of a mode that uses
@ -335,6 +335,8 @@ @@ -335,6 +335,8 @@
<!-- The file extensions that the mode is applicable for. Extensions must be written with lower case and
should include the ., as in .txt. If several extensions are applicable they should be separeated with | -->
<xsd:attribute name="extensions" type="xsd:string" />
<!-- Name of a syntax mode where rulesets, spans, keywords and other settings are imported from -->
<xsd:attribute name="extends" type="xsd:string" />
</xsd:complexType>
</xsd:element>

4
src/Libraries/ICSharpCode.TextEditor/Project/Resources/SyntaxModes.xml

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<SyntaxModes version="1.0">
<Mode file = "ASPX.xshd"
name = "ASP3/XHTML"
extensions = ".asp"/>
name = "ASP/XHTML"
extensions = ".asp;.aspx;.asax;.asmx"/>
<Mode file = "BAT-Mode.xshd"
name = "BAT"

13
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/DefaultHighlightingStrategy.cs

@ -109,7 +109,12 @@ namespace ICSharpCode.TextEditor.Document @@ -109,7 +109,12 @@ namespace ICSharpCode.TextEditor.Document
public void AddRuleSet(HighlightRuleSet aRuleSet)
{
rules.Add(aRuleSet);
HighlightRuleSet existing = FindHighlightRuleSet(aRuleSet.Name);
if (existing != null) {
existing.MergeFrom(aRuleSet);
} else {
rules.Add(aRuleSet);
}
}
public void ResolveReferences()
@ -593,19 +598,19 @@ namespace ICSharpCode.TextEditor.Document @@ -593,19 +598,19 @@ namespace ICSharpCode.TextEditor.Document
if (currentLine.MatchExpr(span.Begin, i, document)) {
PushCurWord(document, ref markNext, words);
string regex = currentLine.GetRegString(span.Begin, i, document);
if (!OverrideSpan(regex, document, words, span, ref i)) {
currentLength += regex.Length;
words.Add(new TextWord(document, currentLine, currentOffset, currentLength, span.BeginColor, false));
currentOffset += currentLength;
currentLength = 0;
i += regex.Length - 1;
if (currentSpanStack == null) {
currentSpanStack = new Stack<Span>();
}
currentSpanStack.Push(span);
UpdateSpanStateVariables();
}

24
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightRuleSet.cs

@ -107,7 +107,7 @@ namespace ICSharpCode.TextEditor.Document @@ -107,7 +107,7 @@ namespace ICSharpCode.TextEditor.Document
public HighlightRuleSet(XmlElement el)
{
XmlNodeList nodes = el.GetElementsByTagName("KeyWords");
XmlNodeList nodes;
if (el.Attributes["name"] != null) {
Name = el.Attributes["name"].InnerText;
@ -126,13 +126,13 @@ namespace ICSharpCode.TextEditor.Document @@ -126,13 +126,13 @@ namespace ICSharpCode.TextEditor.Document
}
for (int i = 0; i < Delimiters.Length; ++i) {
Delimiters[i] = false;
delimiters[i] = false;
}
if (el["Delimiters"] != null) {
string delimiterString = el["Delimiters"].InnerText;
foreach (char ch in delimiterString) {
Delimiters[(int)ch] = true;
delimiters[(int)ch] = true;
}
}
@ -142,6 +142,7 @@ namespace ICSharpCode.TextEditor.Document @@ -142,6 +142,7 @@ namespace ICSharpCode.TextEditor.Document
prevMarkers = new LookupTable(!IgnoreCase);
nextMarkers = new LookupTable(!IgnoreCase);
nodes = el.GetElementsByTagName("KeyWords");
foreach (XmlElement el2 in nodes) {
HighlightColor color = new HighlightColor(el2);
@ -171,5 +172,22 @@ namespace ICSharpCode.TextEditor.Document @@ -171,5 +172,22 @@ namespace ICSharpCode.TextEditor.Document
nextMarkers[next.What] = next;
}
}
/// <summary>
/// Merges spans etc. from the other rule set into this rule set.
/// </summary>
public void MergeFrom(HighlightRuleSet ruleSet)
{
for (int i = 0; i < delimiters.Length; i++) {
delimiters[i] |= ruleSet.delimiters[i];
}
// insert merged spans in front of old spans
ArrayList oldSpans = spans;
spans = (ArrayList)ruleSet.spans.Clone();
spans.AddRange(oldSpans);
//keyWords.MergeFrom(ruleSet.keyWords);
//prevMarkers.MergeFrom(ruleSet.prevMarkers);
//nextMarkers.MergeFrom(ruleSet.nextMarkers);
}
}
}

16
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightingDefinitionParser.cs

@ -11,6 +11,7 @@ using System.Xml; @@ -11,6 +11,7 @@ using System.Xml;
using System.Xml.Schema;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Reflection;
@ -51,8 +52,17 @@ namespace ICSharpCode.TextEditor.Document @@ -51,8 +52,17 @@ namespace ICSharpCode.TextEditor.Document
if (highlighter == null)
highlighter = new DefaultHighlightingStrategy(doc.DocumentElement.Attributes["name"].InnerText);
if (doc.DocumentElement.Attributes["extensions"]!= null) {
highlighter.Extensions = doc.DocumentElement.Attributes["extensions"].InnerText.Split(new char[] { ';', '|' });
if (doc.DocumentElement.HasAttribute("extends")) {
KeyValuePair<SyntaxMode, ISyntaxModeFileProvider> entry = HighlightingManager.Manager.FindHighlighterEntry(doc.DocumentElement.GetAttribute("extends"));
if (entry.Key == null) {
MessageBox.Show("Cannot find referenced highlighting source " + doc.DocumentElement.GetAttribute("extends"));
} else {
highlighter = Parse(highlighter, entry.Key, entry.Value.GetSyntaxModeFile(entry.Key));
if (highlighter == null) return null;
}
}
if (doc.DocumentElement.HasAttribute("extensions")) {
highlighter.Extensions = doc.DocumentElement.GetAttribute("extensions").Split(new char[] { ';', '|' });
}
XmlElement environment = doc.DocumentElement["Environment"];
@ -91,7 +101,7 @@ namespace ICSharpCode.TextEditor.Document @@ -91,7 +101,7 @@ namespace ICSharpCode.TextEditor.Document
return highlighter;
}
} catch (Exception e) {
MessageBox.Show("Could not load mode definition file.\n" + e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
MessageBox.Show("Could not load mode definition file '" + syntaxMode.FileName + "'.\n" + e.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
return null;
}
}

28
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/HighlightingManager.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
@ -93,19 +94,40 @@ namespace ICSharpCode.TextEditor.Document @@ -93,19 +94,40 @@ namespace ICSharpCode.TextEditor.Document
ISyntaxModeFileProvider syntaxModeFileProvider = (ISyntaxModeFileProvider)entry.Value;
DefaultHighlightingStrategy highlightingStrategy = HighlightingDefinitionParser.Parse(syntaxMode, syntaxModeFileProvider.GetSyntaxModeFile(syntaxMode));
if (highlightingStrategy == null) {
highlightingStrategy = DefaultHighlighting;
}
highlightingDefs[syntaxMode.Name] = highlightingStrategy;
highlightingStrategy.ResolveReferences();
return highlightingStrategy;
}
public DefaultHighlightingStrategy DefaultHighlighting {
get {
return (DefaultHighlightingStrategy)highlightingDefs["Default"];
}
}
internal KeyValuePair<SyntaxMode, ISyntaxModeFileProvider> FindHighlighterEntry(string name)
{
foreach (ISyntaxModeFileProvider provider in syntaxModeFileProviders) {
foreach (SyntaxMode mode in provider.SyntaxModes) {
if (mode.Name == name) {
return new KeyValuePair<SyntaxMode, ISyntaxModeFileProvider>(mode, provider);
}
}
}
return new KeyValuePair<SyntaxMode, ISyntaxModeFileProvider>(null, null);
}
public IHighlightingStrategy FindHighlighter(string name)
{
object def = highlightingDefs[name];
if (def is DictionaryEntry) {
return LoadDefinition((DictionaryEntry)def);
}
return (IHighlightingStrategy)(def == null ? highlightingDefs["Default"] : def);
return def == null ? DefaultHighlighting : (IHighlightingStrategy)def;
}
public IHighlightingStrategy FindHighlighterForFile(string fileName)
@ -116,9 +138,9 @@ namespace ICSharpCode.TextEditor.Document @@ -116,9 +138,9 @@ namespace ICSharpCode.TextEditor.Document
if (def is DictionaryEntry) {
return LoadDefinition((DictionaryEntry)def);
}
return (IHighlightingStrategy)(def == null ? highlightingDefs["Default"] : def);
return def == null ? DefaultHighlighting : (IHighlightingStrategy)def;
} else {
return (IHighlightingStrategy)highlightingDefs["Default"];
return DefaultHighlighting;
}
}

10
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/FileSyntaxModeProvider.cs

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Windows.Forms;
using System.Xml;
@ -17,9 +17,9 @@ namespace ICSharpCode.TextEditor.Document @@ -17,9 +17,9 @@ namespace ICSharpCode.TextEditor.Document
public class FileSyntaxModeProvider : ISyntaxModeFileProvider
{
string directory;
ArrayList syntaxModes = null;
List<SyntaxMode> syntaxModes = null;
public ArrayList SyntaxModes {
public ICollection<SyntaxMode> SyntaxModes {
get {
return syntaxModes;
}
@ -53,10 +53,10 @@ namespace ICSharpCode.TextEditor.Document @@ -53,10 +53,10 @@ namespace ICSharpCode.TextEditor.Document
return new XmlTextReader(File.OpenRead(syntaxModeFile));
}
ArrayList ScanDirectory(string directory)
List<SyntaxMode> ScanDirectory(string directory)
{
string[] files = Directory.GetFiles(directory);
ArrayList modes = new ArrayList();
List<SyntaxMode> modes = new List<SyntaxMode>();
foreach (string file in files) {
if (Path.GetExtension(file).Equals(".XSHD", StringComparison.OrdinalIgnoreCase)) {
XmlTextReader reader = new XmlTextReader(file);

4
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/ISyntaxModeFileProvider.cs

@ -6,14 +6,14 @@ @@ -6,14 +6,14 @@
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
namespace ICSharpCode.TextEditor.Document
{
public interface ISyntaxModeFileProvider
{
ArrayList SyntaxModes {
ICollection<SyntaxMode> SyntaxModes {
get;
}

8
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/ResourceSyntaxModeProvider.cs

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Xml;
using System.IO;
@ -15,9 +15,9 @@ namespace ICSharpCode.TextEditor.Document @@ -15,9 +15,9 @@ namespace ICSharpCode.TextEditor.Document
{
public class ResourceSyntaxModeProvider : ISyntaxModeFileProvider
{
ArrayList syntaxModes = null;
List<SyntaxMode> syntaxModes = null;
public ArrayList SyntaxModes {
public ICollection<SyntaxMode> SyntaxModes {
get {
return syntaxModes;
}
@ -30,7 +30,7 @@ namespace ICSharpCode.TextEditor.Document @@ -30,7 +30,7 @@ namespace ICSharpCode.TextEditor.Document
if (syntaxModeStream != null) {
syntaxModes = SyntaxMode.GetSyntaxModes(syntaxModeStream);
} else {
syntaxModes = new ArrayList();
syntaxModes = new List<SyntaxMode>();
}
}

6
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/SyntaxModes/SyntaxMode.cs

@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml;
@ -60,10 +60,10 @@ namespace ICSharpCode.TextEditor.Document @@ -60,10 +60,10 @@ namespace ICSharpCode.TextEditor.Document
this.extensions = extensions;
}
public static ArrayList GetSyntaxModes(Stream xmlSyntaxModeStream)
public static List<SyntaxMode> GetSyntaxModes(Stream xmlSyntaxModeStream)
{
XmlTextReader reader = new XmlTextReader(xmlSyntaxModeStream);
ArrayList syntaxModes = new ArrayList();
List<SyntaxMode> syntaxModes = new List<SyntaxMode>();
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:

2
src/Libraries/ICSharpCode.TextEditor/Project/Src/Document/HighlightingStrategy/TextWord.cs

@ -158,7 +158,7 @@ namespace ICSharpCode.TextEditor.Document @@ -158,7 +158,7 @@ namespace ICSharpCode.TextEditor.Document
return color;
}
set {
Debug.Assert(color != null);
Debug.Assert(value != null);
color = value;
}
}

17
src/Libraries/NRefactory/Project/Src/Output/CSharp/CSharpOutputVisitor.cs

@ -320,14 +320,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -320,14 +320,9 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
void OutputEnumMembers(TypeDeclaration typeDeclaration, object data)
{
bool first = true;
foreach (FieldDeclaration fieldDeclaration in typeDeclaration.Children) {
if (first) {
first = false;
} else {
outputFormatter.PrintToken(Tokens.Comma);
outputFormatter.NewLine();
}
for (int i = 0; i < typeDeclaration.Children.Count; i++) {
FieldDeclaration fieldDeclaration = (FieldDeclaration)typeDeclaration.Children[i];
nodeTracker.BeginNode(fieldDeclaration);
VariableDeclaration f = (VariableDeclaration)fieldDeclaration.Fields[0];
VisitAttributes(fieldDeclaration.Attributes, data);
outputFormatter.Indent();
@ -338,8 +333,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -338,8 +333,12 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
outputFormatter.Space();
nodeTracker.TrackedVisit(f.Initializer, data);
}
if (i < typeDeclaration.Children.Count - 1) {
outputFormatter.PrintToken(Tokens.Comma);
}
outputFormatter.NewLine();
nodeTracker.EndNode(fieldDeclaration);
}
outputFormatter.NewLine();
}
TypeDeclaration currentType = null;

2
src/Libraries/NRefactory/Project/Src/Output/VBNet/VBNetOutputVisitor.cs

@ -374,6 +374,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -374,6 +374,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
void OutputEnumMembers(TypeDeclaration typeDeclaration, object data)
{
foreach (FieldDeclaration fieldDeclaration in typeDeclaration.Children) {
nodeTracker.BeginNode(fieldDeclaration);
VariableDeclaration f = (VariableDeclaration)fieldDeclaration.Fields[0];
VisitAttributes(fieldDeclaration.Attributes, data);
outputFormatter.Indent();
@ -385,6 +386,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter @@ -385,6 +386,7 @@ namespace ICSharpCode.NRefactory.PrettyPrinter
nodeTracker.TrackedVisit(f.Initializer, data);
}
outputFormatter.NewLine();
nodeTracker.EndNode(fieldDeclaration);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save